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.
Convert text posts into visual carousel images or presentations for Threads, Instagram, LinkedIn, TikTok, YouTube.
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent claude-codeProject 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/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .claude/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .agents/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .cursor/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .gemini/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carouselInstalls 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).
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .github/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
$ npx skills add itchernetski/threads-carousel-claude-skill --skill threads-carousel -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install itchernetski/threads-carousel-claude-skill threads-carousel --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "threads-carousel" agent skill from https://github.com/itchernetski/threads-carousel-claude-skill/tree/main into .opencode/skills/threads-carousel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "threads-carousel", 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.
threads-carouselConvert 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. 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.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cc775b6. It shows what the files ask for, not the result of running them.
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.
Ships script files (TypeScript and JavaScript, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
bunrsyncFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from itchernetski/threads-carousel-claude-skill at commit cc775b6, republished under its MIT licence (© itchernetski). 1,431 words, ~3,521 tokens.
.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.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.
/threads-carousel <post text>
/threads-carousel path/to/post.md| Preset | Size | Platforms |
|---|---|---|
threads-4x5 (default) | 1080×1350 | Threads, Instagram feed (portrait) |
instagram-square | 1080×1080 | Instagram, Facebook, LinkedIn feed |
linkedin-square | 1080×1080 | LinkedIn document post (PDF) |
tiktok-9x16 | 1080×1920 | TikTok Photo Mode, Reels, Shorts |
story-9x16 | 1080×1920 | Instagram Stories, Threads Stories |
wide-16x9 | 1920×1080 | Presentations, YouTube, desktop decks |
| Type | Purpose | Required fields |
|---|---|---|
hook | Opening slide — the catchiest line | text |
body | Title + paragraph | title, text |
body (points) | Pros/cons list with ✓/✗ SVG icons | title, points[] (instead of text) |
list | Numbered items (ordered list) | title, items[] |
stats | Big numbers with labels | title, stats[] |
quote | Large pulled quote | text, author |
checklist | Checkmark bullets | title, items[] |
process | Numbered steps with connector line | title, steps[] |
comparison | Two-column VS / before-after | leftLabel, leftItems[], rightLabel, rightItems[] |
cta | Final call to action | text, handle |
image | Title + screenshot/photo + optional caption | imageSrc, optional title, imageCaption |
emoji | Giant emoji illustration + title + text | emoji, optional title, text |
number | Huge hero number/string + title + text | bigNumber, 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)image slides expect imageSrc as a path served by Next.js under /public/. Workflow when a user gives you a local file:
/Users/me/Desktop/screenshot.png (or passes a file via the chat).template/public/images/ with a safe, lowercase filename — e.g. cp "$USER_PATH" template/public/images/screenshot.png.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.
Switchable via toolbar in preview. Default: glow.
| Type | What it is |
|---|---|
none | Solid background |
blobs | Organic colored shapes |
grid | Dotted grid pattern |
lines | Diagonal line pattern |
paper | Ruled notebook lines + left margin (use with paper/light/white colors for a literary feel) |
noise | SVG grain overlay (overlay blend) |
bignumber | Giant slide index as watermark (01, 02…) |
glow (default) | Soft radial gradient in alternating corners |
The final style is composed at runtime from three axes via composePreset(font, color, purpose):
Font axis (DEFAULT_FONT), 5 typefaces:
| Id | Font | Feel |
|---|---|---|
minimal (default) | Unbounded (body + hook) | Geometric display, bold, distinctive |
editorial | Playfair Display | Classic serif, literary |
clean | Inter | Neutral sans-serif, most standard |
mono | JetBrains Mono | Monospace, tech/dev feel |
condensed | Oswald | Narrow + tall, editorial poster |
Surface axis (DEFAULT_SURFACE) — bg + text neutrals, 8 options:
| Id | Bg | Text | Feel |
|---|---|---|---|
dark (default) | #0A0A0A | white | default bold |
white | pure #FFFFFF | near-black | sharp clinical, Apple-style |
light | cool zinc #F4F4F5 | near-black | neutral cool grey, Vercel-style |
paper | cream #ECE2C8 | warm brown | notebook / literary warm |
gradient | purple→pink→amber | white | bright gradient |
pastel | lilac #EDE9FE | indigo | soft |
neon | dark gradient | light cyan | tech dark |
ember | black→red radial | near-white | dramatic |
Accent axis (DEFAULT_ACCENT) — pop color for highlighted words, 8 options:
| Id | Hex | Matches surfaces |
|---|---|---|
yellow (default) | #FACC15 | dark, ember |
red | #DC2626 | pure red — white, light, paper |
teal | #14B8A6 | versatile — dark, white, light, paper |
coral | #FB7185 | pink-family — paper, light, white |
orange | #F97316 | pumpkin — paper, light, dark |
violet | #A78BFA | dark, neon, ember |
lime | #D9F056 | ember, dark |
blue | #3B82F6 | white, light, paper, dark |
fuchsia | #C026D3 | pastel, white, dark |
pink | #EC4899 | pastel, dark, light |
amber | #F59E0B | gradient, 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 techpaper + orange — literary warmember + lime — dramatic announcementwhite + coral — sharp editoriallight + teal — calm informationalPurpose axis (DEFAULT_PURPOSE):
| Id | Title | Body | Divider |
|---|---|---|---|
carousel (default) | 44px, weight 800, UPPERCASE | weight 600, textColor, line-height 1.2 | visible (96×4px accent) |
presentation | 72px, weight 700, sentence case | weight 400, textSecondary, line-height 1.45 | hidden |
Pick purpose: "presentation" + format: "wide-16x9" for a desktop / YouTube presentation deck. Any 3 × 8 × 2 = 48 combinations are valid.
.md, .txt) — read it.Ask once, combined:
threads-4x5; use wide-16x9 for a presentation deck)carousel or presentation, default carousel)minimal / editorial / clean, default minimal)dark)@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.
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" @usernamelist for enumerations, stats for numbers, quote for direct speech, comparison for VS/before-after. Don't make every slide a body.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.
src/slides.tsAll 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:
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";bun dev --port 3333Tell the user to open http://localhost:3333. They can:
01-hook.png, 02-body.png, …After export, stop the dev server.
If making multiple carousels at once: create multiple work dirs and launch on ports 3333, 3334, 3335 — they run side by side without conflict.
Canonical look (font: minimal, color: dark, purpose: carousel):
hookFontFamilypreset.fontFamily#0A0A0A bg, #FFFFFF text, #FACC15 highlighttextWrap: "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.
| Element | Size | Weight | Font source |
|---|---|---|---|
| Hook | 104–140px | 800 | hookFontFamily ?? fontFamily |
| Title | 44px | 800 uppercase | fontFamily |
| Body | 48–88px | 600 | fontFamily |
| Points (pros/cons) | 44–62px | 600 | fontFamily |
| Badge | 26px | 800 uppercase | fontFamily |
| Stats value | 140–170px | 900 | fontFamily |
| Stats label | 32px | 500 uppercase | fontFamily |
| Quote | 62px | 600 | fontFamily |
| List item | 46px | 600 | fontFamily (numbers 48px) |
| Checklist item | 44px | 600 | fontFamily |
| Process step title | 36px | 700 | fontFamily |
| Handle | 36px | 500 | fontFamily |
| Mistake | Fix |
|---|---|
| Too much text on a slide | Max 40 words, max 5 lines |
| Two ideas on one slide | Split into two slides |
All slides are body type | Mix in list, stats, quote, checklist for visual variety |
| No hook on first slide | Slide 1 must be the catchiest line |
| No CTA on last slide | Slide N must end with a handle or call to action |
| Highlight word too long | Keep highlight to 1–2 words, not whole phrase |
| Badge has too many characters | Max 2–4 characters (01, TIP, NEW) |
html-to-image with Satori + Resvg for CLI export (bun run export → out/*.png). Enables headless runs. See Slashgear/linkedin-carousel-gen for reference.DEFAULT_BG is global; could accept a per-slide bg field to mix decorations across a deck.© itchernetski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 20 other files in the repository root of itchernetski/threads-carousel-claude-skill.
Open the folder on GitHubat commit cc775b6
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Threads Carousel this skillitchernetski/threads-carousel-claude-skill | 107 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Carousel Writer Smsblacktwist/social-media-skills | 557 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Carousel Writersocial-media-skills/skills | 116 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Social Media Carouseldanielmeppiel/agentic-sdlc-handbook | 157 | 1 repos | ~2.2k | Automated safety check: Pass | Custom licence | |
| CarouselsTheCraigHewitt/skills | 156 | — | ~2.3k | Automated safety check: Pass | MIT | |
| 43 Carousel Brief Globalminhnv0807/ai-business-skills | 608 | — | ~2.4k | Automated safety check: Pass | MIT |
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.
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…
danielmeppiel/agentic-sdlc-handbook
Multi-slide carousel design for Instagram, LinkedIn, and Twitter/X with layout rules and hooks.
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.
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…
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…
Categories
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.
Threads Carousel fits situations like: tasks that involve Slides and decks; tasks that involve Infographics.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.