--- name: packaging-mockup description: Wrap flat label or box art onto a photoreal package, such as a carton, bottle, pouch, can, tube or jar, in a studio or lifestyle scene. The art stays legible and undistorted except for natural curvature. metadata: type: image version: 1.0.0 category: Product photos tagline: Use this Skill to see your flat packaging art as a real, photographed product. made-for: Brand designers, Founders, Packaging designers, Agencies generates-with: Still image, 3:2, 2:3 or 1:1 requires: Node.js 18 or newer, only to run scripts/build-input.mjs; your own FAL_KEY or any compatible image editor outside-costs: The image-edit model charges per image (about $0.07 at the default settings, billed to your own fal account). updated: 2026-10-16 title: Packaging mockup availability: live summary: Wrap flat label or box art onto a photoreal carton, bottle, pouch or can with the text kept exact. command: /packaging-mockup my label art on a tall tea carton, stone surface, window light output: One photoreal package image, 3:2, 2:3 or 1:1 required-input: Flat label or box art (front panel) and the package type creator: meleon --- # Packaging mockup Use this Skill when someone has flat packaging art (a label, a box dieline front, a pouch front) and wants to see it on a real-looking package before anything is printed. It makes pitch images, listing images and design reviews. It is not a print-ready proof: colours and fit are indicative. ## What you need - The flat art as a clean image of the front panel only, as a public https URL or a data:image/ URI. Crop away any grey surround, bleed or dieline first: the model should see only the art. - The package type (see `references/package-guide.md`) and its material or finish. - The exact text on the art, so you can check the result letter by letter. - Optional: the setting (default is a stone surface in daylight) and the shape of the image. - No real brands or logos you do not own. Use the person's own art. ## What you make One photoreal image, 3:2 by default (1536 x 1024), or 2:3 (1024 x 1536) for tall packages such as bottles, cans and tubes, or 1:1 (1280 x 1280). The art is wrapped on the front of the package and reads exactly as in the flat file. ## How to run it 1. Read `references/package-guide.md` (package types, materials, settings) and `references/output-spec.md`. 2. Crop the art to the front panel only and host it at a public https URL, or encode it as a data:image/ URI. 3. Run `node scripts/build-input.mjs --art --package "" --art-description "" --texts ""`. Describe the package body colour, any liquid and the cap or lid too, because the model invents whatever you leave out. Add `--material`, `--side`, `--setting`, and `--shape portrait` for tall packages. It prints JSON `{ model, input }`. 4. Send it: POST the printed `input` to fal model `openai/gpt-image-2/edit` with the user's own FAL_KEY (this Skill never stores keys), or paste the `prompt` and the art into any GPT-Image-class or Nano-Banana-class image editor. Save the result. 5. Check it against `references/output-spec.md`: read every string on the package letter by letter against the flat art, compare layout and colours side by side, and look at edges and corners for warping. 6. Max 3 attempts. Change one thing per attempt (say what: tighter art description, simpler setting, different shape), view each output beside the flat art, then return the best and say what still differs (for example "leaf vein detail is redrawn, not identical"). 7. Delete the hosted art URL if you uploaded it for this job. 8. Return the image, the prompt, and the list of differences you saw. ## Files - `references/package-guide.md`: package types, label materials, settings, art preparation, failure modes. - `references/output-spec.md`: sizes, format and the pass/fail checklist. - `assets/prompt-template.md`: the prompt to fill in. - `assets/generation-input.json`: model, settings and cost that produced the preview. - `assets/preview.webp`, `assets/example-input.webp`: the finished sample and the flat art it came from. - `scripts/build-input.mjs`: prints the model request. It calls no API.