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.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .claude/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .agents/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .cursor/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .gemini/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .github/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add TheCraigHewitt/skills --skill carousels -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "carousels" agent skill from https://github.com/TheCraigHewitt/skills/tree/main/cowork/carousels into .opencode/skills/carousels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "carousels", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
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.
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.
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.
LinkedIn + Instagram Carousel Generator
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/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.
Node — node -v (need v18+; repo has v22).
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.
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.
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:
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.
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:
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/:
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.
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…
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.
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.
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.