--- name: carousel-story-set description: Turn one product photo into a five-slide Instagram carousel with one consistent art direction. It has a hook slide, three benefit slides and a call-to-action slide, with exact text added locally, plus 9:16 story versions on request. metadata: type: image version: 1.0.0 category: Social posts & covers tagline: Use this Skill to turn one product photo into a five-slide Instagram carousel. made-for: Brands, E-commerce sellers, Social teams, Agencies generates-with: Five PNG slides, 4:5 (9:16 stories on request) requires: Node.js 20.9 or newer and the sharp package (run `npm install sharp` in the Skill folder) for the text step; an image-edit model (the fal model named below with your own FAL_KEY, or any GPT-Image-class editor) outside-costs: The image-edit model charges per image, about $0.07 each and about $0.35 for the five slides (about $0.15 per image with the nano-banana-pro alternative). The text and strip steps run locally and are free. updated: 2026-10-16 title: Carousel story set availability: live summary: Turn one product photo into a five-slide Instagram carousel with consistent art direction and exact text. command: /carousel-story-set my coffee pouch, hook "Mornings, sorted." and three benefits output: PNG ยท 5 slides 4:5 (9:16 stories on request) required-input: Product photo + slide copy creator: meleon --- # Carousel story set Use this skill when someone has one product photo and wants a swipeable Instagram carousel: a hook, three benefits and a call to action, all in the same art direction. The words are drawn locally, so they are spelled exactly. ## What you need - One product photo, as a public https URL or image data. Whole product, label readable. - The product described in a sentence, with exact label text. - The approved copy: a hook headline, three benefits (headline plus one line each) and a call to action with a button label. Draft it from facts the person gives, and get approval. Never invent claims, prices or reviews. - Brand colours and fonts, optional (`ink` and `accent` in the plan; a `.ttf` for `--font-file`). - The art direction: a preset for the product type (`coffee`, `skincare`, `fashion`, `tech`, `food`, `supplements`) or your own `--look` (backdrop, light, surface) and `--props` (three scenes, one per benefit slide). One of the two is required; there is no default look, so your set does not copy the sample. - Pattern, optional (see `references/carousel-patterns.md`). If the photo or the facts are missing, ask for them. ## What you make Five PNG slides at 1080 x 1350 in one consistent style (art is generated at 1088 x 1360 and composed down, so nothing is upscaled), each with exact text, a counter and (slides 1 to 4) a swipe arrow. On request, a 9:16 story version and a preview strip. ## How to run it 1. Read `references/carousel-patterns.md`. Choose the pattern and write the copy for the five slides. 2. Run `node scripts/build-input.mjs --image --product "" (--preset coffee | --look "..." --props "a|b|c") [--format 4:5]`. It prints five requests. 3. Send each printed `input` as a POST to fal model `openai/gpt-image-2/edit` using your own FAL_KEY (the Skill never stores keys), or paste each `prompt` with the product photo into any GPT-Image-class editor. The alternative is `fal-ai/nano-banana-pro/edit` (`image_urls`, `prompt`, `aspect_ratio`, `resolution: "1K"`), about $0.15 per image, twice the default. Save the five images as `art/slide-1.png` ... `art/slide-5.png`. Delete the product photo's public URL afterwards if you made one. 4. View all five art images together and beside the input: the same product, the same look. Regenerate only the slides that drift. 5. In the Skill folder run `npm install sharp` once (Node 20.9 or newer). Copy `assets/plan.example.json` next to the art, put in the approved copy, colours and alignment, then run `node scripts/compose-slides.mjs --plan plan.json --out-dir slides/`. Fonts: the default is Georgia (headline) and Helvetica (body) on Mac and Windows, DejaVu on Linux; the script prints the font it asked for. Pass `--font-file ` (bold cut) and `--body-font-file` for exact brand type. For stories add `--format 9:16` with art generated at 9:16 (1088 x 1936). 6. Optional: `node scripts/slides-strip.mjs --slides slides/slide-1.png ... slides/slide-5.png --output strip.webp`. 7. Check every slide, and every format you made, against `references/output-spec.md`, reading the text letter by letter and comparing product scale across slides. 8. Fail path: at most 3 attempts per slide. Change one thing per attempt and say what (the nano-banana-pro alternative costs about twice as much). View each output beside the input. Return the best and say what still differs. 9. Return the five slides in order, the copy used, and the prompts. ## Files - `references/carousel-patterns.md`: slide plan, patterns, consistency rules, stories, product types. - `references/output-spec.md`: sizes and the pass/fail checklist. - `assets/prompt-template.md`: art prompt with an empty text area. - `assets/generation-input.json`: model, art sizes, look presets, slide layouts; the settings that produced the preview. - `assets/plan.example.json`: the text plan used for the preview. - `scripts/build-input.mjs`: prints the five image-edit requests; calls no API. - `scripts/compose-slides.mjs`: adds the exact text, counter and swipe arrow locally. - `scripts/slides-strip.mjs`: joins the slides into one preview strip (at most 2048 px wide).