---
title: "Carousel story set — Meleon Skill"
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."
url: https://meleon.ai/skills/carousel-story-set/
author: "Meleon AI"
---

# Carousel story set

> Turn one product photo into a five-slide Instagram carousel.

- Type: Image Skill
- Category: Social posts & covers
- Version: 1.0.0 (updated 2026-10-16)
- Made by: Meleon AI (official)
- Price: Free to download. 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.
- Runs in: Claude Code, Codex and Cursor
- Page: https://meleon.ai/skills/carousel-story-set/
- Download: https://meleon.ai/downloads/carousel-story-set.zip
- Manifest: https://meleon.ai/skills/carousel-story-set.json

## What it does

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.

## Made for

- Brands
- E-commerce sellers
- Social teams
- Agencies

## Before you start

- You give it: Product photo + slide copy
- You need: 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).
- Cost per run: 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.
- Makes: Five PNG slides, 4:5 (9:16 stories on request)

## Install

Run the command for your agent in a terminal. It downloads https://meleon.ai/downloads/carousel-story-set.zip and unzips it into the agent's personal Skills folder.

### Claude Code

```sh
mkdir -p ~/.claude/skills && curl -fsSL https://meleon.ai/downloads/carousel-story-set.zip -o /tmp/carousel-story-set.zip && unzip -o /tmp/carousel-story-set.zip -d ~/.claude/skills
```

Then ask Claude Code to use it: `/carousel-story-set`.

### Codex

```sh
mkdir -p ~/.agents/skills && curl -fsSL https://meleon.ai/downloads/carousel-story-set.zip -o /tmp/carousel-story-set.zip && unzip -o /tmp/carousel-story-set.zip -d ~/.agents/skills
```

Then ask Codex to use it: `$carousel-story-set`.

### Cursor

```sh
mkdir -p ~/.cursor/skills && curl -fsSL https://meleon.ai/downloads/carousel-story-set.zip -o /tmp/carousel-story-set.zip && unzip -o /tmp/carousel-story-set.zip -d ~/.cursor/skills
```

Then ask Cursor to use it: `/carousel-story-set`.

## Example request

```text
/carousel-story-set my coffee pouch, hook "Mornings, sorted." and three benefits
```

In Codex, start with `$carousel-story-set` instead of `/carousel-story-set`.

## Files

Every file in the package, readable before you install:

- [SKILL.md](https://meleon.ai/skills/carousel-story-set/files/SKILL.md) (5.5 KB)
- [references/carousel-patterns.md](https://meleon.ai/skills/carousel-story-set/files/references/carousel-patterns.md) (4.1 KB)
- [references/output-spec.md](https://meleon.ai/skills/carousel-story-set/files/references/output-spec.md) (1.5 KB)
- [assets/example-input.webp](https://meleon.ai/skills/carousel-story-set/files/assets/example-input.webp) (73.0 KB)
- [assets/generation-input.json](https://meleon.ai/skills/carousel-story-set/files/assets/generation-input.json) (3.6 KB)
- [assets/plan.example.json](https://meleon.ai/skills/carousel-story-set/files/assets/plan.example.json) (890 bytes)
- [assets/preview.webp](https://meleon.ai/skills/carousel-story-set/files/assets/preview.webp) (76.7 KB)
- [assets/prompt-template.md](https://meleon.ai/skills/carousel-story-set/files/assets/prompt-template.md) (518 bytes)
- [scripts/build-input.mjs](https://meleon.ai/skills/carousel-story-set/files/scripts/build-input.mjs) (3.5 KB)
- [scripts/compose-slides.mjs](https://meleon.ai/skills/carousel-story-set/files/scripts/compose-slides.mjs) (10.0 KB)
- [scripts/slides-strip.mjs](https://meleon.ai/skills/carousel-story-set/files/scripts/slides-strip.mjs) (2.2 KB)

## Versions

- 1.0.0 (2026-10-16)

## Instructions (SKILL.md)

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 <url> --product "<description with label text>" (--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 <your .ttf>` (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).

## Related

- [Viral video thumbnail](https://meleon.ai/skills/viral-video-thumbnail.md): Turn a portrait into a bold video thumbnail.
- [Film look grade](https://meleon.ai/skills/film-look-grade.md): Give any photo a real film look, graded locally in seconds.
- [Product ad headline](https://meleon.ai/skills/product-ad-headline.md): Turn a product photo into a finished ad with exact headline text.
- [All Meleon Skills](https://meleon.ai/skills/) (index as JSON: https://meleon.ai/skills.json; site guide: https://meleon.ai/llms.txt)
