Agent skill

Carousels

by TheCraigHewitt in TheCraigHewitt/skills

Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides.

MITAuto-check passedMedia & Creative

Install Carousels

skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install TheCraigHewitt/skills carousels --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/TheCraigHewitt/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cowork/carousels .claude/skills/carousels && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
carousels
GitHub stars
159
Token cost
~2.3k tokens
SKILL.md length
1,107 words
Files
5 (incl. scripts, references, assets)
Skills in repo
65
Repo updated
First seen
Licence
MIT

At a glance

Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides.

  • Works in 9 steps: Preflight → Intake → Editorial pass → …
  • Tasks that involve Slides and decks
  • SKILL.md covers Phase 0 — Preflight, Phase 1 — Intake, Phase 2 — Editorial pass and Phase 3 — Slide copy, plus 5 more sections
  • Runs JavaScript scripts from its folder; calls node; needs OPENAI_API_KEY

What it does

Carousels is an agent skill from TheCraigHewitt/skills. Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides. Distills the source into 5-8 one-idea-per-slide beats, generates hand-drawn infographic illustrations with GPT Image (OpenAI), renders pixel-perfect on-brand slides via headless browser, assembles a LinkedIn PDF, and writes a caption. Triggers: 'make a carousel,' 'carousel from this email/script,' 'turn this into…

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts, reference files and assets (for example `references/slide-layouts.md`).

It sits in Media & Creative, covering Slides and decks, Infographics and Image generation. It works with LinkedIn, Instagram and OpenAI. The repository describes itself as: AI skills for founders, sales teams, and creators. 47 skills across CEO, Sales, YouTube, and General categories. Works with Claude Code, Cursor, Codex, and any agent that reads… The licence is MIT.

When your agent uses it

  • Tasks that involve Slides and decks
  • Tasks that involve Infographics
  • Tasks that involve Image generation

Example prompts

  • “make a carousel,”
  • “carousel from this email/script,”
  • “turn this into LinkedIn slides,”
  • “/carousels”

Requirements

  • Node.js
  • A credential in OPENAI_API_KEY

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Preflight
  2. Intake
  3. Editorial pass
  4. Slide copy
  5. Image generation
  6. Build slides.html + sample approval
  7. Render
  8. Caption
  9. Review + delivery

What it can do on your machine

Read from SKILL.md and the folder at commit fdbf39b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Carousels loads about 2.3k tokens when it runs, and up to ~3.6k if it reads all its reference files. Until then it costs about 166 tokens; SKILL.md has 1,107 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~166
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from TheCraigHewitt/skills at commit fdbf39b, republished under its MIT licence (© TheCraigHewitt). 1,107 words, ~2,255 tokens.

Download SKILL.mdSave it as .claude/skills/carousels/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
carousels
description
Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides. Distills the source into 5-8 one-idea-per-slide beats, generates hand-drawn infographic illustrations with GPT Image (OpenAI), renders pixel-perfect on-brand slides via headless browser, assembles a LinkedIn PDF, and writes a caption. Triggers: 'make a carousel,' 'carousel from this email/script,' 'turn this into LinkedIn slides,' 'Instagram carousel from X.' Brand is locked to context/brand/03-visual-identity.md — output is identical styling every run.

Turn one strong piece of source content into a swipeable image carousel. One set of 4:5 slides serves both platforms — PNGs for Instagram, an assembled PDF for LinkedIn.

The brand is locked, not configurable: off-white #F5F1E8, ink #0F0F0F, muted teal #2A6F6A, Inter type, hand-drawn infographic illustrations. Every run comes out visually identical. Don't ask the user about themes, colors, or fonts.

Skill files (paths relative to repo root /Users/craighewitt/Coding/second-brain):

  • output/cowork-context/skills/carousels/assets/carousel.css — brand stylesheet
  • output/cowork-context/skills/carousels/references/slide-layouts.md — HTML patterns
  • output/cowork-context/skills/carousels/scripts/generate-image.mjs — GPT Image (OpenAI)
  • output/cowork-context/skills/carousels/scripts/render.mjs — slides → PNG + PDF

Phase 0 — Preflight

Run these checks before anything else. If a check fails, surface the fix and stop until it's resolved — don't proceed with a broken environment.

  1. Node — node -v (need v18+; repo has v22).

  2. Headless browser — render.mjs launches puppeteer. If puppeteer or its browser is missing, the script prints the install command. Don't pre-empt it; just run the render step and act on any error.

  3. OPENAI_API_KEY — only needed if the carousel will have image slides. Check with [ -n "$OPENAI_API_KEY" ] && echo set || echo missing. If missing, tell the user:

    GPT Image (OpenAI) needs an OpenAI API key. Create one at platform.openai.com/api-keys, add billing, then run export OPENAI_API_KEY="sk-..." in your shell (never commit it).

    If the user can't set a key right now, offer to build a type-only carousel (no image slides) — the skill still works fully without the key.


Phase 1 — Intake

Get the source content. Accept either:

  • Pasted text — an email, a section of a script, notes.
  • A local file path — e.g. a script in output/, an essay draft.

Do not scrape URLs. If the user gives a URL, ask them to paste the content (per CLAUDE.md).

Then read, once:

  • context/brand/02-voice.md — for the caption voice.
  • context/brand/03-visual-identity.md — confirm brand-surface palette/type.

Ask the user only for things that genuinely change the output (one short batch):

  • Any specific angle to pull from the source? (optional)
  • A CTA word for the final slide — what should people comment? (optional; default to a relevant word from the topic)
  • A lead magnet to point to? (optional)

If the user already gave direction in their prompt, skip the questions.

Create the run folder: output/carousels/<source-slug>-<YYYY-MM-DD>/ with images/ and publish/ subfolders. Copy carousel.css into the run folder (render needs it next to slides.html).


Phase 2 — Editorial pass

This is the hard part — carousels live or die on editing, not rendering.

Distill the source into 5-8 beats, one idea per slide. Let the source decide the count: a tight 4-tip article is 7 slides; a dense essay might be 8. Never pad.

Structure:

  • Slide 1 — cover/hook. The scroll-stopper. A promise or a provocative claim.
  • Slides 2 to N-1 — content. One idea each. No slide explains two things.
  • Slide N — CTA. Save / follow / comment-the-word.

For each content slide decide: is it type-only or an image slide? Image slides are for ideas that are clearer drawn than written — a process, a relationship, a before/after, a system. Aim for 2-4 image slides, not every slide. Type-only slides use the big-stat, steps, quote, comparison, or statement layouts.

Write 01-slide-plan.md in the run folder: for each slide, its number, role, layout, one-line idea, and image/type-only flag.


Phase 3 — Slide copy

Write the visible copy for every slide. Rules:

  • Headline ≤ 12 words. Body ≤ 30 words. Social attention is short.
  • One idea per slide — if copy needs two sentences of setup, split into two slides.
  • Craig's voice: direct, practical, no hype, no "crushing it / game-changer."
  • The cover earns the swipe; the CTA asks for the save + comment word.

Show full SKILL.md (526 more words)Show less

Phase 4 — Image generation

For image slides only. Skip entirely if building a type-only carousel.

For each image slide, write a two-paragraph prompt:

Paragraph 1 (locked — brand illustration style, paste verbatim):

Hand-drawn minimalist infographic, black ink linework on a solid flat warm off-white background (hex #F5F1E8), single muted teal accent color (#2A6F6A), clean whiteboard sketch style, confident pen strokes, hand-lettered text, simple geometric icons, lots of white space.

Paragraph 2: describe the specific diagram — the concept, layout, labels, and flow for that slide. Be concrete ("a 3-step horizontal flow: Draft → Review → Publish, each a labeled box connected by arrows"). No stock-photo realism, no gradients, no people. Always end paragraph 2 with: "The entire diagram, including every icon and label, sits well within the frame with generous empty margins on all four sides — nothing is cropped and nothing touches the edges." The model otherwise tends to draw edge-to-edge and clip the outer labels.

Generate each one:

node output/cowork-context/skills/carousels/scripts/generate-image.mjs \
  --prompt-file <run>/images/slide-04-prompt.txt \
  --out <run>/images/slide-04.png

Write the prompt to a .txt file first to avoid shell-escaping issues. After generating, the script normalizes the image background to exactly #F5F1E8 (the --bg-hex default) so the illustration sits seamlessly on a light slide — no visible panel edge. Default size 1024x1024, quality medium. Name each PNG slide-NN.png matching its slide number. Because the linework is black, image slides must use the light slide background, not the teal variant. (If you ever need an image slide on a different background, pass --bg-hex #RRGGBB to match.)


Phase 5 — Build slides.html + sample approval

Author <run>/slides.html using the patterns in references/slide-layouts.md. One .slide div per slide, in order. Link carousel.css (the copy in the run folder). Reference illustrations as images/slide-NN.png.

Sample-approval checkpoint: before rendering the whole set, render just the cover so the user sees the styling:

node output/cowork-context/skills/carousels/scripts/render.mjs \
  --slides <run>/slides.html --out <run>/publish

Show the user publish/slide-01.png. If they want changes (copy, layout), edit slides.html and re-render. Only continue once the cover is approved.


Phase 6 — Render

Run the full render (same command as above — it renders every .slide):

node output/cowork-context/skills/carousels/scripts/render.mjs \
  --slides <run>/slides.html --out <run>/publish

Produces publish/slide-01.png … slide-NN.png (Instagram) and publish/carousel.pdf (LinkedIn). All PNGs are exactly 1080×1350.


Phase 7 — Caption

Write publish/caption.md with a caption that works for both platforms:

  • Hook line that mirrors the cover slide.
  • 2-4 short lines of value — what the carousel teaches, why it matters.
  • CTA: save the post, follow @thecraighewitt, comment the CTA word.
  • Craig's voice. No hashtag soup — 3-5 relevant tags max at the end, optional.

If a LinkedIn vs Instagram split is worth it (different length/tone), write both under clear headings. Otherwise one shared caption is fine.


Phase 8 — Review + delivery

Open the rendered PNGs and check each against the brand:

  • Only #F5F1E8 / #0F0F0F / #2A6F6A (plus rare #C75A2C data callout).
  • Inter only. No gradients, no drop shadows, no emoji in slide chrome.
  • One teal element per slide.
  • One idea per slide; text legible at phone size.
  • Footer (handle + number) on every slide except the cover.
  • Slide numbers in footers match actual count (03 / 07).

Fix any off-spec slide in slides.html and re-render. Then report the run folder and tell the user: upload the PNGs to Instagram as a carousel, upload carousel.pdf to LinkedIn as a document post, use caption.md for both.

Final deliverables in output/carousels/<slug>-<date>/publish/:

  • slide-01.png … slide-NN.png
  • carousel.pdf
  • caption.md

© TheCraigHewitt, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, references, assets) in cowork/carousels of TheCraigHewitt/skills.

  • SKILL.md
  • assets/carousel.css
  • references/slide-layouts.md
  • scripts/generate-image.mjs
  • scripts/render.mjs

Open the folder on GitHubat commit fdbf39b

Compare with similar skills

Carousels next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Carousels compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Carousels this skillTheCraigHewitt/skills159—~2.3kAutomated safety check: PassMIT
43 Carousel Brief Globalminhnv0807/ai-business-skills609—~2.4kAutomated safety check: PassMIT
Image Generationonyx-dot-app/onyx32k1 repos~1.7kAutomated safety check: PassCustom licence
Gemini Carouselcharlie947/social-media-skills3.8k—~1.7kAutomated safety check: PassMIT
Threads Carouselitchernetski/threads-carousel-claude-skill110—~3.5kAutomated safety check: PassMIT
Social Media Carouseldanielmeppiel/agentic-sdlc-handbook1581 repos~2.2kAutomated safety check: PassCustom licence

Similar skills

  • 43 Carousel Brief Global

    minhnv0807/ai-business-skills

    A skill your agent uses when a multi-slide carousel is needed for Instagram, Facebook, or LinkedIn — a narrative arc with the hook on slide one, value through the middle, CTA on the last, headline…

    609 GitHub stars~2.4k tokensUpdated 29 days ago
    Media & CreativeAuto-check passed
  • Image Generation

    onyx-dot-app/onyx

    Generate or edit raster images (photos, illustrations, textures, sprites, mockups, logos, infographics) using the workspace's configured image-generation provider via onyx-cli image.

    32k GitHub starsUsed in 1 repo~1.7k tokens
    Media & CreativeAuto-check passed
  • Gemini Carousel

    charlie947/social-media-skills

    Generate a branded slide-by-slide LinkedIn carousel using Gemini.

    3.8k GitHub stars~1.7k tokensUpdated 26 days ago
    Media & CreativeAuto-check passed
  • Threads Carousel

    itchernetski/threads-carousel-claude-skill

    Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube.

    110 GitHub stars~3.5k tokensUpdated 5 mo ago
    Documents & OfficeAuto-check passed
  • Social Media Carousel

    danielmeppiel/agentic-sdlc-handbook

    Multi-slide carousel design for Instagram, LinkedIn, and Twitter/X with layout rules and hooks.

    158 GitHub starsUsed in 1 repo~2.2k tokens
    Documents & OfficeAuto-check passed
  • Design Master

    minhnv0807/ai-business-skills

    Handles eight kinds of marketing visual requests, from logos and campaign key visuals to infographics and quote graphics, by generating images or writing paste-ready prompts.

    609 GitHub stars~4.6k tokensUpdated 29 days ago
    Media & CreativeAuto-check passed

More from TheCraigHewitt/skills

All 65 skills in this repo
  • Audience Research

    TheCraigHewitt/skills

    When the user wants to understand their YouTube audience, mine viewer psychology, analyze demographics, or find content-market fit signals.

    159 GitHub stars~2.4k tokensUpdated 4 mo ago
    Auto-check passed
  • Brain Dump

    TheCraigHewitt/skills

    Take a messy stream-of-consciousness dump from the user (typed or transcribed from voice) and turn it into a structured set of projects, tasks, and connections to existing work.

    159 GitHub stars~1.3k tokensUpdated 4 mo ago
    Auto-check passed
  • Channel Audit

    TheCraigHewitt/skills

    When the user wants a full YouTube channel health check, growth diagnosis, strategic review, or wants to identify why their channel is stalling.

    159 GitHub stars~2.4k tokensUpdated 4 mo ago
    Auto-check passed
  • Channel Strategy

    TheCraigHewitt/skills

    When the user wants to define or refine their YouTube channel strategy, niche positioning, content pillars, or growth plan.

    159 GitHub stars~2.2k tokensUpdated 4 mo ago
    Auto-check passed
  • Cold Call

    TheCraigHewitt/skills

    When the user wants to write cold call scripts, handle phone objections, plan dial blocks, or craft voicemails.

    159 GitHub stars~5k tokensUpdated 4 mo ago
    Auto-check passed
  • Collab Outreach

    TheCraigHewitt/skills

    When the user wants to plan YouTube collaborations, write outreach to other creators, design cross-promotion strategies, or pitch guest appearances.

    159 GitHub stars~2.9k tokensUpdated 4 mo ago
    Auto-check passed

Questions about Carousels

What does Carousels do?

Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides. Carousels is an agent skill from TheCraigHewitt/skills. Turns a piece of Craig's content (an email, a YouTube script, an essay, or pasted text) into a polished image carousel publishable to both LinkedIn and Instagram from one set of 1080x1350 slides.

When should I use Carousels?

Carousels fits situations like: tasks that involve Slides and decks; tasks that involve Infographics; tasks that involve Image generation.

How do I install Carousels in Claude Code?

Run `npx skills add TheCraigHewitt/skills --skill carousels -a claude-code`. Or copy the skill folder (cowork/carousels in TheCraigHewitt/skills) into .claude/skills/carousels in your project. Claude Code loads it when a task matches its description.

How do I install Carousels in Codex?

Run `npx skills add TheCraigHewitt/skills --skill carousels -a codex`. Or copy the skill folder (cowork/carousels in TheCraigHewitt/skills) into .agents/skills/carousels in your project. Codex loads it when a task matches its description.

Can I use Carousels in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TheCraigHewitt/skills --skill carousels -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/carousels, .gemini/skills/carousels, .github/skills/carousels and .opencode/skills/carousels in your project.

What does Carousels need to run?

Going by SKILL.md and its folder, Carousels needs JavaScript for the scripts in its folder, the command-line tools its instructions call (node) and credentials named OPENAI_API_KEY. Our summary lists: Node.js; A credential in OPENAI_API_KEY.

Does Carousels access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Carousels safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Carousels use?

Carousels is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Carousels use?

About 2.3k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.3k tokens, read only when the agent opens those files.

What are the alternatives to Carousels?

Skills that share tags, products or a category with Carousels: 43 Carousel Brief Global (minhnv0807/ai-business-skills, 609 stars), Image Generation (onyx-dot-app/onyx, 32k stars), Gemini Carousel (charlie947/social-media-skills, 3.8k stars) and Threads Carousel (itchernetski/threads-carousel-claude-skill, 110 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Carousels?

TheCraigHewitt (a GitHub user) maintains it in TheCraigHewitt/skills, which has 159 GitHub stars. The repository holds 65 skills in this directory. The repository was last updated on May 22, 2026.

Source: TheCraigHewitt/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.