# Kit: Instagram carousels with AI

Full guide: https://darwinalejandro.com/blog/ai-instagram-carousels-claude-code/

Darwin Alejandro · Cabarete, DR

Open Carrusel: https://github.com/Hainrixz/open-carrusel (MIT)


## Step 1 · Write the brief


### Template · BRIEF.md

```
# Brand brief for carousels

## Who I am
- Name / brand:
- What I do (one sentence):
- Where I am:
- Instagram account:

## Who I'm talking to
- Main audience:
- What they want or worry about:
- Slide language:

## What this carousel should achieve
- Goal (saves, shares, website visits, messages):
- Call to action on the last slide:

## Style
- Colors (hex): background / text / accent
- Font:
- Logo (yes/no, where):
- Photos: my own. No AI-generated images of real people or places.
- What I DON'T want:

## Facts
- Where the facts come from (link):
- What needs checking before posting:

## Format
- 4:5 (1080 × 1350), 6 to 9 slides
- Slide 1: hook of 8 words max
- One idea per slide, 10 to 20 words
- All text inside the central 80%
```


## Step 2 · Pull photos from your videos


### Terminal

```bash
ffmpeg -i video.mov -vf "fps=1/2,scale=360:-1,tile=4x6" -frames:v 1 -q:v 3 sheet.jpg
```


### Terminal

```bash
ffmpeg -ss 14 -t 2 -i video.mov -vf fps=4 -q:v 2 cand_%02d.jpg
```


### Terminal · optional

```bash
for f in cand_*.jpg; do echo "$f $(magick "$f" -resize 540x -colorspace Gray -morphology Convolve Laplacian:0 -format '%[fx:standard_deviation*10000]' info:)"; done
```


### Terminal

```bash
ffmpeg -i cand_05.jpg -vf "crop=iw:iw*5/4,scale=1620:2025" -q:v 2 chosen_4x5.jpg
```


### Prompt for Claude Code

```
I have videos in the "videos/" folder. For each video, make a contact sheet with ffmpeg (one frame every 1 or 2 seconds, 4×6 grid) and save them in "_work/contact-sheets/".

Then I'll tell you which moments I want (video + second). For each one: extract frames at 4 per second for 2 seconds, keep the 3 sharpest, crop them to 4:5 (1620×2025) and save them in "_work/frames/<slide-name>/".

Don't delete or move my original videos.
```


## Step 3 · Install Open Carrusel


### Terminal

```bash
git clone https://github.com/Hainrixz/open-carrusel.git
cd open-carrusel
claude
```


### Claude Code

```
/start
```


### src/app/api/chat/route.ts

```
"--allowedTools", "Bash(curl *)",
```


## Step 4 · Set up your brand


## Step 5 · Generate the slides


### Prompt for Open Carrusel's chat

```
Use my brand (it's already set up). Create a 7-slide 4:5 carousel about [TOPIC] for [AUDIENCE].

Facts (use them as written, don't invent anything):
[PASTE THE FACTS HERE]

Structure:
1. Hook of 8 words max that opens a question
2. Context in one sentence
3–5. One idea per slide
6. One practical tip
7. Call to action: [save / send to a friend / comment WORD]

Photos: use [/uploads/photo1.png, /uploads/photo2.png...] on slides 1, 3, 4, 5 and 7, with a dark gradient at the bottom so the text is readable.

Rules: 20 words max per slide, all text inside the central 80%, a 01/07 counter top right, logo top left.

At the end, write the caption (150 words max) and 5 to 8 specific hashtags.
```


### Prompt for Claude Code

```
Open Carrusel is running at http://localhost:3000. Write a Python script (standard library only) that builds my carousel through its API:

1. POST /api/carousels with {"name": "...", "aspectRatio": "4:5"}
2. POST /api/carousels/{id}/slides with {"html": ..., "notes": ...} for each slide
3. PUT /api/carousels/{id}/caption with the caption and hashtags

Each slide is body HTML (no <html> or <body>) with inline styles, 1080×1350.
Use BRIEF.md for colors, font and logo, and COPY.md for the exact text on each slide.
Write reusable functions: a slide with a background photo and text at the bottom, and a numbered-list slide.
If I pass the id of a previous version as an argument, delete it before creating the new one.
Don't invent facts: if something isn't in COPY.md, ask me.
```


## Step 6 · Revise it like it's your designer


### Revisions I used

```
Remove everything about Friday: that party is on a break. The hook is now "2 nights. Zero cover."

Use Helvetica everywhere, the same font as my videos.

Top left, add the co-branding: my logo × Ninafrika × OJO, in one row.

Slide 4's photo is too dark: try the other two candidates in that folder.

On the team slide, put the Ninafrika logo large, above the title.

Check that no text falls outside the central 80%.
```


## Step 7 · Export and post


### Caption

```
Cabarete has a dance floor two nights a week — and it's free. Tuesday at OJO, Thursday on the OJO rooftop. Salsa and bachata, led by the @ninafrikadance team. No partner needed. Save this and send it to the friend who "doesn't dance" 😉 Full guide: link in bio. 📍 Cabarete, DR
```
