Agent skill
carousel-creator
Generate LinkedIn carousel slides as structured HTML files with brand styling
Filed under LinkedIn and social.
From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11
What it does when it runs
Generate LinkedIn carousel slides as structured HTML files with brand styling
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- fonts.googleapis.com
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/capabilities/carousel-creator" mkdir -p ~/.claude/skills/carousel-creator cp -R "/tmp/b2b-gtm-skills/skills/capabilities/carousel-creator/." ~/.claude/skills/carousel-creator/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/capabilities/carousel-creator/SKILL.md, which is licensed MIT (repository). 1,364 words, 10 headings.
Carousel Creator
Generates LinkedIn carousel content structured as 8-12 slides with a hook, value slides, and CTA. Outputs each slide as a standalone HTML file with inline brand-color styling, sized for LinkedIn carousel dimensions (1080x1350px). The HTML files can be screenshot'd to PNG for upload.
Prerequisites
agency.config.jsonat repo root withagency,outreach,services, andcase_studiessections- Topic, raw content, or a brief describing what the carousel covers
- Optional: brand colors override (defaults to config or neutral palette)
- Optional: output directory for HTML files
Phase 0: Intake
- Read
agency.config.jsonfrom the project root. - Extract:
agency.name-- for branding on final slideagency.founder-- for attributionagency.domain-- for CTA slide linkoutreach.tone-- voice and style for copyoutreach.banned_phrases-- phrases to avoidservices[]-- for contextual relevancecase_studies[]-- for data-backed slides
- Accept parameters:
topic-- (required) the carousel topic or headlinesource_content-- (optional) raw text, blog post, or notes to structure into slidesslide_count-- number of slides. Default: 10. Range: 8-12brand_colors-- (optional) object withprimary,secondary,background,texthex values. Default: dark background (#1a1a2e), white text (#ffffff), accent (#e94560)font_family-- (optional) Google Font name. Default: "Inter"output_dir-- directory to write HTML files. Default:./carousel-output/style-- visual style:dark|light|gradient|minimal. Default:darkcta-- call-to-action for final slide. Default: "Follow for more" + agency domain
Phase 1: Content Structuring
Transform the topic or source content into a slide-by-slide structure. Each slide must carry exactly one idea.
Slide architecture:
| Slide | Purpose | Content Rules |
|---|---|---|
| 1 | Hook | Bold statement, question, or surprising stat. Must stop the scroll. Max 10 words. |
| 2 | Context | Set up the problem or frame the topic. 15-25 words. |
| 3-8 | Value | One point per slide. Title (3-6 words) + body (15-30 words). |
| 9-10 | Proof | Data point, case study result, or before/after. Numbers prominent. |
| 11 | Summary | Key takeaway in one sentence. Optional: numbered recap. |
| 12 | CTA | Clear action: follow, visit, DM, book a call. Brand name + handle. |
Content rules (non-negotiable):
- No slide exceeds 40 words total (title + body combined)
- Hook slide (slide 1) must work without any context
- Every value slide has a clear title that summarizes the point
- Data slides lead with the number in large format
- CTA slide includes agency name, domain, and specific next step
- No filler slides -- every slide must deliver standalone value
- If source content is provided, extract and restructure; do not summarize
Copy quality checks:
- Each slide must pass the "screenshot test" -- readable in a 2-second glance
- Titles should be parallel in structure (all imperatives, all questions, or all statements -- pick one)
- Remove all unnecessary words: no "that", "very", "really", "just", "basically"
- Prefer concrete specifics over abstract generalities
Compile the content plan:
CAROUSEL PLAN:
---
Topic: [headline]
Style: [dark/light/gradient/minimal]
Slide count: [N]
Title structure: [imperative/question/statement]
---
Slide 1 (Hook): [text]
Slide 2 (Context): [title] | [body]
Slide 3 (Value): [title] | [body]
...
Slide N (CTA): [text]
Phase 2: Visual Design System
Define the design tokens for the carousel before generating HTML:
Color palette by style:
| Style | Background | Text | Accent | Secondary BG |
|---|---|---|---|---|
| dark | #1a1a2e | #ffffff | #e94560 | #16213e |
| light | #ffffff | #1a1a2e | #e94560 | #f5f5f5 |
| gradient | #0f0c29 to #302b63 | #ffffff | #24d2b5 | #24243e |
| minimal | #fafafa | #2d2d2d | #0066ff | #eeeeee |
Override with brand_colors if provided.
Typography scale:
- Hook slide title: 64px, font-weight 800
- Slide title: 42px, font-weight 700
- Slide body: 24px, font-weight 400, line-height 1.5
- Slide number: 18px, font-weight 600, accent color
- CTA text: 36px, font-weight 700
- Attribution: 20px, font-weight 400
Layout rules:
- Canvas size: 1080px x 1350px (4:5 LinkedIn ratio)
- Padding: 80px on all sides
- Content vertically centered
- Slide number in top-right corner (except hook and CTA slides)
- Agency logo/name in bottom-left corner (all slides except hook)
- Accent bar (4px) at bottom of each slide
Phase 3: HTML Generation
Generate one HTML file per slide. Each file is self-contained with inline CSS.
HTML template structure per slide:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
@import url('https://fonts.googleapis.com/css2?family={{font_family}}:wght@400;600;700;800&display=swap');
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
width: 1080px;
height: 1350px;
font-family: '{{font_family}}', sans-serif;
background: {{background_color}};
color: {{text_color}};
display: flex;
flex-direction: column;
justify-content: center;
padding: 80px;
position: relative;
}
.slide-number {
position: absolute;
top: 40px;
right: 60px;
font-size: 18px;
font-weight: 600;
color: {{accent_color}};
}
.title {
font-size: 42px;
font-weight: 700;
margin-bottom: 24px;
line-height: 1.2;
}
.body-text {
font-size: 24px;
font-weight: 400;
line-height: 1.5;
opacity: 0.9;
}
.accent-bar {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 4px;
background: {{accent_color}};
}
.branding {
position: absolute;
bottom: 40px;
left: 80px;
font-size: 16px;
opacity: 0.6;
}
</style>
</head>
<body>
<div class="slide-number">{{number}}/{{total}}</div>
<div class="title">{{slide_title}}</div>
<div class="body-text">{{slide_body}}</div>
<div class="branding">{{agency_name}}</div>
<div class="accent-bar"></div>
</body>
</html>
Slide-type variations:
- Hook slide: No slide number, no branding. Title at 64px, centered. Optional subtitle at 24px below.
- Value slides: Slide number visible. Title + body layout. Optional icon placeholder.
- Data slides: Large number (80px, accent color) centered, with context line below (24px).
- CTA slide: Agency name at 36px, domain below, CTA text prominent, optional "Follow for more" or "DM me" text. No slide number.
File naming: slide-01.html, slide-02.html, ..., slide-12.html
Write all files to output_dir.
Phase 4: Slide Variants
Generate two variant options for the hook slide (slide 1), since the hook determines carousel performance:
Hook variant types:
- Question hook: Pose a provocative question the audience wants answered
- Stat hook: Lead with a surprising number or data point
- Contrarian hook: Challenge a common belief in the audience's space
- List hook: "X things that..." or "X mistakes that..."
Generate the top 2 most compelling variants. Output both as separate HTML files: slide-01-a.html and slide-01-b.html.
Phase 5: Output
Return structured JSON and write HTML files:
{
"carousel_metadata": {
"topic": "The carousel headline",
"slide_count": 10,
"style": "dark",
"brand_colors": {
"background": "#1a1a2e",
"text": "#ffffff",
"accent": "#e94560"
},
"font": "Inter",
"output_dir": "./carousel-output/"
},
"slides": [
{
"slide_number": 1,
"type": "hook",
"title": "Hook text here",
"body": null,
"word_count": 8,
"file": "slide-01.html"
},
{
"slide_number": 2,
"type": "context",
"title": "Context Title",
"body": "Context body text here",
"word_count": 22,
"file": "slide-02.html"
},
{
"slide_number": 3,
"type": "value",
"title": "Point Title",
"body": "Supporting detail for this point",
"word_count": 18,
"file": "slide-03.html"
}
],
"hook_variants": [
{"variant": "A", "type": "question", "text": "Are you making these CRO mistakes?", "file": "slide-01-a.html"},
{"variant": "B", "type": "stat", "text": "73% of Shopify stores lose revenue here", "file": "slide-01-b.html"}
],
"files_written": [
"slide-01.html",
"slide-01-a.html",
"slide-01-b.html",
"slide-02.html",
"slide-03.html",
"slide-04.html",
"slide-05.html",
"slide-06.html",
"slide-07.html",
"slide-08.html",
"slide-09.html",
"slide-10.html"
],
"content_quality": {
"max_words_per_slide": 35,
"parallel_titles": true,
"screenshot_test_passed": true,
"banned_phrases_clear": true
}
}
Phase 6: Review
Present the slide plan to the user before writing HTML files:
- Show the full slide-by-slide content plan
- Show both hook variants
- Ask if any slides need adjustment
- After approval, write the HTML files
- Suggest next step: screenshot the HTML files to PNG, or hand off to
content-repurposerfor multi-channel distribution
Example Usage
Trigger phrases:
- "Create a LinkedIn carousel about [topic]"
- "Turn this blog post into carousel slides"
- "Make a 10-slide carousel on CRO tips"
- "Build carousel slides from these notes"
- "Generate a carousel for LinkedIn"
User: Create a LinkedIn carousel about 5 CRO mistakes D2C brands make on Shopify
Assistant: [reads config, structures 10 slides, generates HTML files with dark theme, presents 2 hook variants, writes files to carousel-output/]
User: Turn this blog post into a carousel [pastes content]
Assistant: [extracts key points from content, structures into 8-12 slides, generates HTML with brand colors, returns slide plan + files]
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- noise-to-linkedin-carousel by Varnan-Tech · 626
- content-creator by thatrebeccarae · 130
- battlecard-creator by composio-community · 2
- content-asset-creator by edupegoretti · 0
- create-html-carousel by edupegoretti · 0
Need help setting it up?
This page tells you what carousel-creator does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.