← All skills
  • Social
  • v2.1.0
  • carousel
  • instagram
  • design
  • rendering

Carousel Studio

JSON slide decks to publication-ready social carousel PNGs. 5 designed themes, 25+ platform size presets, logo support, retina 2x. Self-bootstrapping — one command renders.

SKILL.md

You research and write the copy as a JSON deck; this renders it. Zero setup — the wrapper installs npm deps, Chromium, and fonts automatically on first run (and self-heals after platform updates).

Render (the only command you need)

cd /root/.openclaw/skills/carousel-generator/scripts
bash run.sh deck.json /root/.openclaw/workspace/media/carousel-ai-myths --theme neon --platform instagram-portrait
bash run.sh --list-platforms          # all 25+ size presets

First run does one-time setup (~170MB Chromium; a few minutes). Every run after renders immediately. Output: <outdir>/NN-<type>.png at 2x retina. Always render into a new folder under /root/.openclaw/workspace/media/: files outside the workspace may not be delivered to the chat.

Show the user

Put one line MEDIA:<absolute path> per slide in your reply, in slide order, each on its own line and not in a code block — for example MEDIA:/root/.openclaw/workspace/media/carousel-ai-myths/01-hook.png. The view_image (View Image) tool shows a file only to you, never to the user: use it to check a slide, never to deliver one. Get the user's OK on the slides before posting them.

The deck (what YOU write)

{
  "topic": "AI news",
  "handle": "@myclawbots.ai",
  "logo": "./assets/logo.svg",
  "slides": [
    { "type": "hook",  "kicker": "TECH REALITY CHECK", "headline": "5 AI myths that need to die", "sub": "You've heard them all." },
    { "type": "point", "headline": "One clear idea", "body": "90-140 chars of explanation." },
    { "type": "stat",  "figure": "92", "unit": "%", "body": "what the number means" },
    { "type": "list",  "headline": "What works", "items": ["Three to five items", "30-60 chars each"] },
    { "type": "quote", "quote": "Strong principle or hot take.", "source": "Attribution" },
    { "type": "cta",   "headline": "Closing push", "body": "Why follow.", "action": "follow" }
  ]
}

Slide types: hook (slide 1: kicker/headline/sub) · point (headline/body) · stat (figure/unit/body) · list (headline + 3-5 items) · quote (quote/source) · cta (headline/body/action — actions: follow, save, share, link, or custom text).

Character budgets (auto-fit shrinks overflow, but staying inside these looks best): hook.headline 30-50 · hook.sub 60-90 · point.headline 35-55 · point.body 90-140 · stat.figure 2-5 · stat.body 70-110 · list items 30-60 each · quote 60-100 · cta.headline 25-45 · cta.body 70-120.

logo is optional (svg/png/jpg/webp, path relative to the deck file; falls back to a topic wordmark). Sample decks for every theme ship in this directory (content.*.json); full docs in README.md.

Themes — each a distinct layout, not a palette swap

--theme Vibe
default clean tech editorial, left-aligned
neon tech/AI/crypto — gradient headlines, glow, dot rail
earthy coaching/wellness — warm paper, pill badges
brutalist hot takes — stark borders, massive uppercase
luxury executive — serif, gold rules, roman numerals

Platforms

--platform picks exact dimensions: instagram-portrait (default, 4:5), instagram-post, instagram-story, tiktok, linkedin-post, linkedin-landscape, x-post, facebook-post, youtube-thumbnail, pinterest, and more — bash run.sh --list-platforms for the full table.

Quick engine (fallback)

Constrained machine or no browser? Pillow via uv, flat takeaways format: uv run scripts/render_carousel.py content-quick.json ({"topic", "takeaways": ["HEADLINE: detail", ...]})

Pipeline

Hand the PNGs to cloudinary-uploader (public URLs), then social-publisher (Instagram/Facebook posting).

Scripts

15 files ship with this skill. They are installed beside the SKILL.md.

scripts/content.brutalist-hottakes.json1.1 KB
{
  "topic": "Hot takes",
  "handle": "@lemmedecode",
  "slides": [
    {
      "type": "hook",
      "kicker": "HOT TAKE #44",
      "headline": "Productivity advice is mostly a scam",
      "sub": "Controversial? Maybe. But hear me out."
    },
    {
      "type": "point",
      "headline": "Wake up at 5am is pure cope",
      "body": "Sleep deprivation doesn't make you disciplined. It makes you slow and cranky."
    },
    {
      "type": "stat",
      "figure": "91",
      "unit": "%",
      "body": "of to-do list items never get done. The list isn't the problem. Your priorities are."
    },
    {
      "type": "point",
      "headline": "Hustle culture is a pyramid scheme",
      "body": "The people selling grind are grinding to sell you courses about grinding."
    },
    {
      "type": "quote",
      "quote": "If you need an app to drink water, the problem isn't hydration.",
      "source": "The internet, probably"
    },
    {
      "type": "cta",
      "headline": "Work smarter, not louder",
      "body": "Drop your hottest take in the comments below.",
      "action": "share"
    }
  ]
}