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

MITAuto-check passedDocuments & Office

Install Threads Carousel

skills CLI
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a claude-code

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

GitHub CLI
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent claude-code

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

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

Facts

Skill name
threads-carousel
GitHub stars
107
Token cost
~3.5k tokens
SKILL.md length
1,431 words
Files
21
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

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

  • Works in 4 steps: Get the text → Clarify parameters (optional, can assume… → Plan the slide breakdown → …
  • Tasks that involve Slides and decks
  • SKILL.md covers Invocation, Format presets (choose target…, Slide types (12) and Background decorations (8 types), plus 5 more sections
  • Runs TypeScript and JavaScript scripts from its folder; calls bun and rsync

What it does

Threads Carousel is an agent skill from itchernetski/threads-carousel-claude-skill. Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube. 12 slide types (incl. image/emoji/number), 6 format presets (incl. 1920×1080 wide), 8 background styles (incl. ruled paper), 3-axis style system (font × color × purpose), highlighted keywords with optional italic-box style. Generates PNG or single-file PDF via Next.js preview + browser export. RU/EN toolbar. Triggers: threads carousel, instagram carousel, linkedin carousel, tiktok carousel, карусель…

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 25 other files (for example `README.md`, `template/next-env.d.ts` and `template/next.config.ts`).

It sits in Documents & Office, covering Slides and decks and Infographics. It works with Instagram, TikTok, LinkedIn and YouTube. The repository describes itself as: Claude Code skill: convert text posts into visual carousel images for Threads, Instagram, LinkedIn, TikTok. The licence is MIT.

When your agent uses it

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

Example prompts

  • “/threads-carousel”

Requirements

  • Node.js

Workflow steps

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

  1. Get the text
  2. Clarify parameters (optional, can assume defaults)
  3. Plan the slide breakdown
  4. Generate

What it can do on your machine

Read from SKILL.md and the folder at commit cc775b6. 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 script files (TypeScript and JavaScript, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • bun
    • rsync

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

  • Network

    No URLs in SKILL.md. Its commands use rsync, which can reach the network depending on how they are called.

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

  • Credentials

    Names no API keys, tokens, secrets or passwords.

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

Context cost

Threads Carousel loads about 3.5k tokens when it runs. Until then it costs about 149 tokens; SKILL.md has 1,431 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~149
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from itchernetski/threads-carousel-claude-skill at commit cc775b6, republished under its MIT licence (© itchernetski). 1,431 words, ~3,521 tokens.

Download SKILL.mdSave it as .claude/skills/threads-carousel/SKILL.md (or your agent's skills folder). This skill also uses 20 other files; get the full folder from GitHub.
name
threads-carousel
description
Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube. 12 slide types (incl. image/emoji/number), 6 format presets (incl. 1920×1080 wide), 8 background styles (incl. ruled paper), 3-axis style system (font × color × purpose), highlighted keywords with optional italic-box style. Generates PNG or single-file PDF via Next.js preview + browser export. RU/EN toolbar. Triggers: threads carousel, instagram carousel, linkedin carousel, tiktok carousel, карусель, slides, carousel images, presentation deck, presentation pdf.
user_invocable
true

Converts a text post into a set of visual carousel slides for Threads, Instagram, LinkedIn, TikTok, Stories, YouTube, or a standalone presentation deck. Composable design system with three independent style axes (font × color × purpose) and 12 slide types.

Invocation

/threads-carousel <post text>
/threads-carousel path/to/post.md

Format presets (choose target platform)

PresetSizePlatforms
threads-4x5 (default)1080×1350Threads, Instagram feed (portrait)
instagram-square1080×1080Instagram, Facebook, LinkedIn feed
linkedin-square1080×1080LinkedIn document post (PDF)
tiktok-9x161080×1920TikTok Photo Mode, Reels, Shorts
story-9x161080×1920Instagram Stories, Threads Stories
wide-16x91920×1080Presentations, YouTube, desktop decks

Slide types (12)

TypePurposeRequired fields
hookOpening slide — the catchiest linetext
bodyTitle + paragraphtitle, text
body (points)Pros/cons list with ✓/✗ SVG iconstitle, points[] (instead of text)
listNumbered items (ordered list)title, items[]
statsBig numbers with labelstitle, stats[]
quoteLarge pulled quotetext, author
checklistCheckmark bulletstitle, items[]
processNumbered steps with connector linetitle, steps[]
comparisonTwo-column VS / before-afterleftLabel, leftItems[], rightLabel, rightItems[]
ctaFinal call to actiontext, handle
imageTitle + screenshot/photo + optional captionimageSrc, optional title, imageCaption
emojiGiant emoji illustration + title + textemoji, optional title, text
numberHuge hero number/string + title + textbigNumber, optional title, text

points shape: Array<{ type: "plus" | "minus"; text: string }> — green ✓ for plus, muted ✗ for minus. Adaptive sizing (44–62px) based on item count and longest line.

All types also support optional:

  • badge — small outlined tag above title (e.g. "01", "TIP")
  • highlight — a word or phrase within text/title that will be colored in the preset's highlight color (yellow for dark themes)
  • highlightStyle: "italic-box" — renders the highlighted word in Playfair italic on a colored rectangle (instead of plain color)
Images in slides

image slides expect imageSrc as a path served by Next.js under /public/. Workflow when a user gives you a local file:

  1. User drops a file path like /Users/me/Desktop/screenshot.png (or passes a file via the chat).
  2. Copy it into template/public/images/ with a safe, lowercase filename — e.g. cp "$USER_PATH" template/public/images/screenshot.png.
  3. In slides.ts reference it as imageSrc: "/images/screenshot.png" (absolute from /public/).

Same-origin serving avoids CORS errors in the PNG export pipeline. Do not use external URLs — html-to-image will often blank them out.

Background decorations (8 types)

Switchable via toolbar in preview. Default: glow.

TypeWhat it is
noneSolid background
blobsOrganic colored shapes
gridDotted grid pattern
linesDiagonal line pattern
paperRuled notebook lines + left margin (use with paper/light/white colors for a literary feel)
noiseSVG grain overlay (overlay blend)
bignumberGiant slide index as watermark (01, 02…)
glow (default)Soft radial gradient in alternating corners

Style system (3 independent axes)

The final style is composed at runtime from three axes via composePreset(font, color, purpose):

Font axis (DEFAULT_FONT), 5 typefaces:

IdFontFeel
minimal (default)Unbounded (body + hook)Geometric display, bold, distinctive
editorialPlayfair DisplayClassic serif, literary
cleanInterNeutral sans-serif, most standard
monoJetBrains MonoMonospace, tech/dev feel
condensedOswaldNarrow + tall, editorial poster

Surface axis (DEFAULT_SURFACE) — bg + text neutrals, 8 options:

IdBgTextFeel
dark (default)#0A0A0Awhitedefault bold
whitepure #FFFFFFnear-blacksharp clinical, Apple-style
lightcool zinc #F4F4F5near-blackneutral cool grey, Vercel-style
papercream #ECE2C8warm brownnotebook / literary warm
gradientpurple→pink→amberwhitebright gradient
pastellilac #EDE9FEindigosoft
neondark gradientlight cyantech dark
emberblack→red radialnear-whitedramatic

Accent axis (DEFAULT_ACCENT) — pop color for highlighted words, 8 options:

IdHexMatches surfaces
yellow (default)#FACC15dark, ember
red#DC2626pure red — white, light, paper
teal#14B8A6versatile — dark, white, light, paper
coral#FB7185pink-family — paper, light, white
orange#F97316pumpkin — paper, light, dark
violet#A78BFAdark, neon, ember
lime#D9F056ember, dark
blue#3B82F6white, light, paper, dark
fuchsia#C026D3pastel, white, dark
pink#EC4899pastel, dark, light
amber#F59E0Bgradient, dark, paper

Total combinations: 8 surfaces × 8 accents × 5 fonts × 2 purposes = 640 valid styles. Pick surface for neutral base, accent for pop color — independently.

Reference combos (inspired by design refs):

  • dark + teal — noir / minimalist tech
  • paper + orange — literary warm
  • ember + lime — dramatic announcement
  • white + coral — sharp editorial
  • light + teal — calm informational

Purpose axis (DEFAULT_PURPOSE):

IdTitleBodyDivider
carousel (default)44px, weight 800, UPPERCASEweight 600, textColor, line-height 1.2visible (96×4px accent)
presentation72px, weight 700, sentence caseweight 400, textSecondary, line-height 1.45hidden

Pick purpose: "presentation" + format: "wide-16x9" for a desktop / YouTube presentation deck. Any 3 × 8 × 2 = 48 combinations are valid.


Workflow

Step 1 — Get the text
  • If passed inline — use it.
  • If a file path (.md, .txt) — read it.
  • If text is long (>500 chars) — confirm it's complete before planning.
Step 2 — Clarify parameters (optional, can assume defaults)

Ask once, combined:

  1. Number of slides (3–10, default 6)
  2. Format (see table above, default threads-4x5; use wide-16x9 for a presentation deck)
  3. Purpose (carousel or presentation, default carousel)
  4. Font (minimal / editorial / clean, default minimal)
  5. Color (8 palettes, default dark)
  6. Handle for CTA slide (e.g. @username)

Shortcut: if user says "presentation" / "презентация" / "slide deck" → default to purpose: presentation, format: wide-16x9, font: clean, color: white.

If user says "your call" — apply defaults, do not block.

Step 3 — Plan the slide breakdown

Show the user a preview list before generation:

Slide 1 (hook): "Headline..."  [highlight: "word"]
Slide 2 (body): badge 01 — "Title" / "Text..."
Slide 3 (list): badge 02 — "iOS stack" / 3 items
Slide 4 (stats): badge 03 — "Growth" / 3 stats
Slide 5 (quote): "Quote..." — Author
Slide 6 (cta): "Final message" @username
Show full SKILL.md (578 more words)Show less
Rules for splitting text into slides
  1. Hook = single most intriguing line from the post. 1–3 short lines. Works as a standalone thumbnail.
  2. Body slides = one idea each. Max 40 words. Max 5 lines. Never join two ideas with "and".
  3. Mix slide types for visual variety: prefer list for enumerations, stats for numbers, quote for direct speech, comparison for VS/before-after. Don't make every slide a body.
  4. CTA = conclusion + follow handle. Centered, short.
Step 4 — Generate
Prepare working copy
bash
WORK_DIR="/tmp/carousel-$(date +%s)"
rsync -a --exclude=node_modules ~/.claude/skills/threads-carousel/template/ "$WORK_DIR/"
ln -s ~/.claude/skills/threads-carousel/template/node_modules "$WORK_DIR/node_modules"
cd "$WORK_DIR"

Symlinking node_modules avoids the 350MB copy per run.

Inject content into src/slides.ts

All content + defaults live in src/slides.ts — never touch the engine (src/app/CarouselApp.tsx, src/lib/*). Edit the SLIDES array and the 5 default constants.

Full injection example:

ts
import type { SlideData, BgType, FormatId, FontId, ColorThemeId, PurposeId } from "./lib/types";

export const SLIDES: SlideData[] = [
  { type: "hook", text: "Line one\nline two", highlight: "two" },
  { type: "body", badge: "01", title: "Title", text: "Body text...", highlight: "key" },
  { type: "body", badge: "02", title: "Pros & Cons", points: [
    { type: "plus",  text: "One click to register" },
    { type: "plus",  text: "Works on any background" },
    { type: "minus", text: "Requires provider setup" },
  ]},
  { type: "list", badge: "03", title: "Steps", items: ["First", "Second", "Third"] },
  { type: "stats", title: "Numbers", stats: [
    { value: "10×", label: "Faster" },
    { value: "50%", label: "Smaller" },
  ]},
  { type: "quote", text: "Big idea\nin few words", author: "Someone", role: "2026" },
  { type: "checklist", title: "Pre-flight", items: ["One", "Two", "Three"] },
  { type: "cta", text: "Last word", handle: "@username" },
];

export const DEFAULT_FONT: FontId = "minimal";
export const DEFAULT_COLOR: ColorThemeId = "dark";
export const DEFAULT_PURPOSE: PurposeId = "carousel";
export const DEFAULT_BG: BgType = "glow";
export const DEFAULT_FORMAT: FormatId = "threads-4x5";
Launch preview and export
bash
bun dev --port 3333

Tell the user to open http://localhost:3333. They can:

  • Switch Format / Mode / Font / Color / Background live via toolbar rows
  • Toggle UI language RU / EN in the top-right
  • Click PDF to download all slides in one file (JPEG-compressed, ~5–8 MB for 10 slides)
  • Click PNG (a.k.a. "Export All") to download every slide as 01-hook.png, 02-body.png, …
  • Click an individual slide thumbnail to export just that one as PNG

After export, stop the dev server.

Parallel carousels

If making multiple carousels at once: create multiple work dirs and launch on ports 3333, 3334, 3335 — they run side by side without conflict.


Design system

Canonical look (font: minimal, color: dark, purpose: carousel):

  • Display typeface: Unbounded (Google Fonts), for hooks — applied only when the font axis provides hookFontFamily
  • Body typeface: Space Grotesk (minimal) / Playfair (editorial) / Inter (clean) — everything else uses preset.fontFamily
  • Palette (dark): #0A0A0A bg, #FFFFFF text, #FACC15 highlight
  • Layout: 80px padding, left-aligned, slide counter bottom-center
  • Title discipline: carousel purpose — title → a 96×4px accent divider → body, with ≥64px breathing room above body. Presentation purpose — no divider, sentence case, 72px.
  • Hook size: 104–140px, adaptive by character/line count
  • Body text size: 48–88px, adaptive
  • Text balance: textWrap: "balance" on hook + title (no orphan words)

The presentation purpose overrides titles to 72px / 700 / sentence case and body to 400 / textSecondary / line-height 1.45.

ElementSizeWeightFont source
Hook104–140px800hookFontFamily ?? fontFamily
Title44px800 uppercasefontFamily
Body48–88px600fontFamily
Points (pros/cons)44–62px600fontFamily
Badge26px800 uppercasefontFamily
Stats value140–170px900fontFamily
Stats label32px500 uppercasefontFamily
Quote62px600fontFamily
List item46px600fontFamily (numbers 48px)
Checklist item44px600fontFamily
Process step title36px700fontFamily
Handle36px500fontFamily

Common mistakes

MistakeFix
Too much text on a slideMax 40 words, max 5 lines
Two ideas on one slideSplit into two slides
All slides are body typeMix in list, stats, quote, checklist for visual variety
No hook on first slideSlide 1 must be the catchiest line
No CTA on last slideSlide N must end with a handle or call to action
Highlight word too longKeep highlight to 1–2 words, not whole phrase
Badge has too many charactersMax 2–4 characters (01, TIP, NEW)

Future work / TODOs

  • Satori server-side export — replace browser-based html-to-image with Satori + Resvg for CLI export (bun run export → out/*.png). Enables headless runs. See Slashgear/linkedin-carousel-gen for reference.
  • Per-slide background override — currently DEFAULT_BG is global; could accept a per-slide bg field to mix decorations across a deck.
  • Cyrillic-optimized adaptive sizing — current thresholds are calibrated for Latin; Russian copy tends to be 20–30% longer at the same font size.
  • Pencil MCP mode — previous skill version had a manual design mode via Pencil; not currently implemented in the template.

© itchernetski, 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 20 other files in the repository root of itchernetski/threads-carousel-claude-skill.

  • SKILL.md
  • .gitignore
  • LICENSE
  • README.md
  • preview.png
  • template/bun.lock
  • template/next-env.d.ts
  • template/next.config.ts
  • template/package.json
  • template/postcss.config.mjs
  • template/public/.gitkeep
  • template/public/images/demo.png
  • template/src/app/CarouselApp.tsx
  • template/src/app/globals.css
  • template/src/app/layout.tsx
  • template/src/app/page.tsx
  • … and 5 more

Open the folder on GitHubat commit cc775b6

Compare with similar skills

Threads Carousel 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.

Threads Carousel compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Threads Carousel this skillitchernetski/threads-carousel-claude-skill107—~3.5kAutomated safety check: PassMIT
Carousel Writer Smsblacktwist/social-media-skills557—~4.1kAutomated safety check: PassMIT
Carousel Writersocial-media-skills/skills116—~1.6kAutomated safety check: PassMIT
Social Media Carouseldanielmeppiel/agentic-sdlc-handbook1571 repos~2.2kAutomated safety check: PassCustom licence
CarouselsTheCraigHewitt/skills156—~2.3kAutomated safety check: PassMIT
43 Carousel Brief Globalminhnv0807/ai-business-skills608—~2.4kAutomated safety check: PassMIT

Similar skills

  • Carousel Writer Sms

    blacktwist/social-media-skills

    When the user wants to write content for a LinkedIn carousel, Instagram carousel, Facebook carousel, TikTok photo carousel, Pinterest Idea Pin, or any swipeable multi-slide format.

    557 GitHub stars~4.1k tokensUpdated 5 mo ago
    Documents & OfficeAuto-check passed
  • Carousel Writer

    social-media-skills/skills

    A skill your agent uses to write a carousel — a swipeable multi-slide post (Instagram carousel, LinkedIn document/PDF carousel, or TikTok photo carousel) — one of the highest-save, highest-dwell…

    116 GitHub stars~1.6k tokensUpdated 5 days 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.

    157 GitHub starsUsed in 1 repo~2.2k tokens
    Media & CreativeAuto-check passed
  • Carousels

    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.

    156 GitHub stars~2.3k tokensUpdated 4 mo ago
    Media & CreativeAuto-check passed
  • 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…

    608 GitHub stars~2.4k tokensUpdated 25 days ago
    Media & CreativeAuto-check passed
  • Design

    Ohh-889/skyroc

    Comprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations…

    795 GitHub starsUsed in 9 repos~3.1k tokens
    Frontend & DesignAuto-check passed

Questions about Threads Carousel

What does Threads Carousel do?

Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube. Threads Carousel is an agent skill from itchernetski/threads-carousel-claude-skill. Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube.

When should I use Threads Carousel?

Threads Carousel fits situations like: tasks that involve Slides and decks; tasks that involve Infographics.

How do I install Threads Carousel in Claude Code?

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

How do I install Threads Carousel in Codex?

Run `npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a codex`. Or copy the skill folder (the itchernetski/threads-carousel-claude-skill repository) into .agents/skills/threads-carousel in your project. Codex loads it when a task matches its description.

Can I use Threads Carousel 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 itchernetski/threads-carousel-claude-skill --skill threads-carousel -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/threads-carousel, .gemini/skills/threads-carousel, .github/skills/threads-carousel and .opencode/skills/threads-carousel in your project.

What does Threads Carousel need to run?

Going by SKILL.md and its folder, Threads Carousel needs TypeScript and JavaScript for the scripts in its folder and the command-line tools its instructions call (bun and rsync). Our summary lists: Node.js.

Does Threads Carousel 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 Threads Carousel 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. Review the folder before installing.

What licence does Threads Carousel use?

Threads Carousel is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Threads Carousel use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Threads Carousel?

Skills that share tags, products or a category with Threads Carousel: Carousel Writer Sms (blacktwist/social-media-skills, 557 stars), Carousel Writer (social-media-skills/skills, 116 stars), Social Media Carousel (danielmeppiel/agentic-sdlc-handbook, 157 stars) and Carousels (TheCraigHewitt/skills, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Threads Carousel?

itchernetski (a GitHub user) maintains it in itchernetski/threads-carousel-claude-skill, which has 107 GitHub stars. The repository was last updated on April 19, 2026.

Source: itchernetski/threads-carousel-claude-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.