Model or dataset
Hainrixz/open-carrusel avatar
Hainrixz/open-carrusel

Open Carrusel: chatting with Claude to build Instagram carousels locally

AI-powered Instagram carousel builder. Chat with Claude to design slides; export as PNGs at exact Instagram dimensions. Type /start in Claude Code to bootstrap.

453 stars75 forksTypeScriptMIT

At a glance

What is it?
Hainrixz/open-carrusel is a Next.js app where Claude Code writes slides as HTML and CSS, Puppeteer screenshots them at exact Instagram dimensions, and everything stays on your machine. It needs the Claude CLI installed to do the interesting part.
Who is it for?
Install Open Carrusel if you already run Claude Code, publish carousel content regularly, and would rather describe a slide than lay one out. Skip it if you need editable text in the exported files, or if you cannot install the Claude CLI, since without it the chat half of the product is missing.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 156 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The job it takes on

The README opens by naming three ways people make carousels today, and the cost of each: a subscription tool at 20 to 60 dollars a month that limits what you can do, Canva templates that other people are also using, or hand-built slides in Figma that eat a weekend. Open Carrusel's bet is that a conversation with Claude produces slides faster than any of those, on your own laptop, under MIT.

The output path is what makes that more than a chat window. Claude writes each slide as HTML and CSS, the app renders it in a browser, and export screenshots it to PNG at the pixel dimensions Instagram expects. So you get a real artifact rather than a suggestion.

How the agent actually writes a slide

The in-app agent is the Claude CLI, spawned as a subprocess from /api/chat with --allowedTools Bash WebFetch, and messages stream back to the browser over Server-Sent Events. That detail explains most of the system's behaviour.

When you ask for a slide, Claude reads your brand configuration and the active carousel state from its system prompt, writes the slide as a complete HTML and CSS string, then posts it to /api/carousels/[id]/slides using curl through its Bash tool. The slide shows up in the filmstrip a few seconds later. Persistence is a normal HTTP call made by the model, not an SDK integration.

Allowing Bash and WebFetch also sets the trust boundary. The model running your carousel has shell access in the environment where the dev server runs, which is worth knowing before you point it at a machine with production credentials on it.

Why the preview matches the export

Slides are stored as body-level HTML with no html, head or doctype element. A shared function named wrapSlideHtml, in src/lib/slide-html.ts, wraps that fragment into a full document, adding font loading, dimension constraints and a box-sizing reset.

The same function feeds both consumers: a sandboxed iframe for the live preview in the editor, and Puppeteer running headless Chromium for the export. Because one wrapper feeds both paths, the README's claim that what you see is what you export follows from the design rather than from testing discipline.

Getting it running

The recommended path is Claude Code driven. Install and authenticate Claude Code first, then clone, open the repository in Claude Code and run the slash command:

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

Then type /start at the prompt. Per the README, dependencies install, the dev server starts and a browser opens. The first run takes one to two minutes because Puppeteer downloads roughly 300 MB of Chromium for PNG export.

Without Claude Code there is a manual path, and the README is clear about what you lose:

bash
git clone https://github.com/Hainrixz/open-carrusel.git
cd open-carrusel
npm run setup
npm run dev

npm run setup runs scripts/setup.mjs, which installs dependencies and seeds the /data/ directory. npm run dev is next dev, serving http://localhost:3000. In this mode the editor and export work for static slides, but there is no AI chat, because the in-app agent shells out to the claude CLI. package.json sets engines to node >=20, and there is also npm run doctor, which runs scripts/doctor.mjs.

What the editor gives you

The layout is three panels: chat on the left, live preview in the centre, and a drag-reorderable filmstrip along the bottom, with reordering handled by dnd-kit. Undo works per slide through a per-slide version history, so a bad instruction can be walked back without regenerating the carousel.

Three Instagram aspect ratios ship ready: 1:1 at 1080x1080, 4:5 at 1080x1350 and 9:16 at 1080x1920. Brand configuration covers name, colour palette, fonts, logo and style keywords, and the README says Claude reads it before every generation. You can save a carousel as a template, and drop in reference images of carousels you like for the model to study.

Two review aids are worth calling out. A safe-zone overlay shows whether anything important will sit behind Instagram's own interface chrome, and a fullscreen preview covers the final pass. Export screenshots each slide, zips them with archiver and downloads the archive. There is also a captions and hashtags generator in the editor.

Storage stays local: slides, brand, uploads and exports live under /data/ and /public/uploads/, and the README states the only network call is Claude Code talking to Anthropic.

Where it is the wrong tool

The hard dependency is the Claude CLI. No Claude Code, no chat, and what remains is a static slide editor, which is not why you would install this.

The export format is the second constraint. Puppeteer screenshots produce PNGs, so the text in your slides is rasterised. If your workflow needs editable text, or print resolution above the target pixel size, you will be regenerating rather than editing.

Then there is the version. package.json reads 0.1.0 and is marked private, and the README carries a Roadmap section, so this is early. The last push was on 2026-04-15. And because slides are model-generated HTML, output quality moves with the model, not with the app.

Canva and Figma instead

The obvious alternative is the one the README names as the status quo: design the carousel by hand in Canva or Figma. The difference is not quality, it is where the work goes. Those tools give you direct control over typography and layout, editing at the object level, and vector or PDF export, and they cost either a subscription or your weekend.

Open Carrusel trades that control for speed and for keeping the files local, and hands layout decisions to a model that may need two or three corrections to get a headline right. Choose it when volume matters more than per-slide precision, and stay with a design tool when a single carousel has to be exact.

Upkeep and licence

The licence is MIT, stated in package.json and in the README badge, with a LICENSE file in the repository listing, so forking a variant is permitted. The stack is current: Next.js 16.2.3, React 19.2.4, TypeScript 5, Tailwind v4, plus puppeteer, sharp and archiver.

Upkeep has two recurring costs. Puppeteer's bundled Chromium is a large binary that moves with the puppeteer version, and the app depends on the Claude CLI's behaviour, including the tools it is willing to expose, so a CLI update can change how slide writing works.

Editorial conclusion

Install Open Carrusel if you already run Claude Code, publish carousel content regularly, and would rather describe a slide than lay one out. Skip it if you need editable text in the exported files, or if you cannot install the Claude CLI, since without it the chat half of the product is missing. Check that Node 20 or newer is on the machine before starting, and run npm run doctor if the first export fails.

Frequently asked questions

Do I need Claude Code to use open-carrusel?

Only for the AI chat. The in-app agent spawns the claude CLI from /api/chat, so without it the editor and PNG export still work for static slides but no generation happens.

Which Instagram sizes does open-carrusel export?

Three ratios are built in: 1:1 at 1080x1080, 4:5 at 1080x1350 and 9:16 at 1080x1920. Puppeteer screenshots each slide at those exact pixel dimensions and zips the set.

Where does open-carrusel store my slides and uploads?

Everything stays local under /data/ and /public/uploads/. The README says the only network call is Claude Code talking to Anthropic.

What does npm run setup do?

It runs scripts/setup.mjs, which installs dependencies and seeds the /data/ directory. After that, npm run dev starts the Next.js server on http://localhost:3000.

Official sources

  1. Hainrixz/open-carrusel on GitHub
  2. Issues
  3. License: MIT
  4. README
Community notes

Community notes