Slide Deck Generator
Transform content into professional slide deck images.
Usage
/space-slide-deck path/to/content.md
/space-slide-deck path/to/content.md --style sketch-notes
/space-slide-deck path/to/content.md --brand-style auto
/space-slide-deck path/to/content.md --brand-style claude
/space-slide-deck path/to/content.md --audience executives
/space-slide-deck path/to/content.md --lang zh
/space-slide-deck path/to/content.md --slides 10
/space-slide-deck path/to/content.md --outline-only
/space-slide-deck # Then paste content
Script Directory
Agent Execution Instructions:
- Determine this SKILL.md file's directory path as
SKILL_DIR
- Script path =
${SKILL_DIR}/scripts/<script-name>.ts
| Script |
Purpose |
scripts/merge-to-pptx.ts |
Merge slides into PowerPoint |
scripts/merge-to-pdf.ts |
Merge slides into PDF |
scripts/recommendbrandstyles.py |
Recommend 5 matched brand styles + 1 smart match |
Options
| Option |
Description |
--style <name> |
Visual style: preset name, custom, or custom style name |
| `--brand-style <slug |
auto |
recommend>` |
Use getdesign.md brand design systems for slide style. auto selects smart match; recommend forces the 5+1 chooser |
--audience <type> |
Target: beginners, intermediate, experts, executives, general |
--lang <code> |
Output language (en, zh, ja, etc.) |
--slides <number> |
Target slide count (8-25 recommended, max 30) |
--outline-only |
Generate outline only, skip image generation |
--prompts-only |
Generate outline + prompts, skip images |
--images-only |
Generate images from existing prompts directory |
--regenerate <N> |
Regenerate specific slide(s): --regenerate 3 or --regenerate 2,5,8 |
Slide Count by Content Length:
| Content |
Slides |
| < 1000 words |
5-10 |
| 1000-3000 words |
10-18 |
| 3000-5000 words |
15-25 |
| > 5000 words |
20-30 (consider splitting) |
Style System
Brand Design Systems
Use this mode when the user asks for a "design Slide", "brand style PPT", "参考某品牌风格", or when content would benefit from stronger product/brand art direction.
- Registry:
references/brand-style-registry.json
- Workflow:
references/brand-design-system.md
- Recommender:
scripts/recommendbrandstyles.py
- Full brand specs: fetch live via
npx getdesign@latest add <slug> before generating outline.md
Brand style behavior:
| User Situation |
Action |
| User names a brand, e.g. "Notion 风格 PPT" |
Map to slug, fetch DESIGN.md, use it directly |
User passes --brand-style claude |
Fetch claude DESIGN.md and build deck style from it |
User passes --brand-style auto |
Run recommender, use smart_match without asking |
User passes --brand-style recommend |
Run recommender and ask user to choose from 5 matched options + 智能匹配 |
| User gives content with no explicit style |
Prefer brand recommendation flow when the request emphasizes design quality; otherwise use preset flow |
5+1 recommendation rule: After content analysis, show 5 content-matched brand styles and a 6th 智能匹配 option. Each of the first 5 options must include one sentence explaining why it fits. The 6th option must name the smart-match brand it will use.
Presets
| Preset |
Dimensions |
Best For |
blueprint (Default) |
grid + cool + technical + balanced |
Architecture, system design |
chalkboard |
organic + warm + handwritten + balanced |
Education, tutorials |
corporate |
clean + professional + geometric + balanced |
Investor decks, proposals |
minimal |
clean + neutral + geometric + minimal |
Executive briefings |
sketch-notes |
organic + warm + handwritten + balanced |
Educational, tutorials |
watercolor |
organic + warm + humanist + minimal |
Lifestyle, wellness |
dark-atmospheric |
clean + dark + editorial + balanced |
Entertainment, gaming |
notion |
clean + neutral + geometric + dense |
Product demos, SaaS |
bold-editorial |
clean + vibrant + editorial + balanced |
Product launches, keynotes |
editorial-infographic |
clean + cool + editorial + dense |
Tech explainers, research |
fantasy-animation |
organic + vibrant + handwritten + minimal |
Educational storytelling |
intuition-machine |
clean + cool + technical + dense |
Technical docs, academic |
pixel-art |
pixel + vibrant + technical + balanced |
Gaming, developer talks |
scientific |
clean + cool + technical + dense |
Biology, chemistry, medical |
vector-illustration |
clean + vibrant + humanist + balanced |
Creative, children's content |
vintage |
paper + warm + editorial + balanced |
Historical, heritage |
Style Dimensions
| Dimension |
Options |
Description |
| Texture |
clean, grid, organic, pixel, paper |
Visual texture and background treatment |
| Mood |
professional, warm, cool, vibrant, dark, neutral |
Color temperature and palette style |
| Typography |
geometric, humanist, handwritten, editorial, technical |
Headline and body text styling |
| Density |
minimal, balanced, dense |
Information density per slide |
Full specs: references/dimensions/*.md
Auto Style Selection
| Content Signals |
Preset |
| tutorial, learn, education, guide, beginner |
sketch-notes |
| classroom, teaching, school, chalkboard |
chalkboard |
| architecture, system, data, analysis, technical |
blueprint |
| creative, children, kids, cute |
vector-illustration |
| briefing, academic, research, bilingual |
intuition-machine |
| executive, minimal, clean, simple |
minimal |
| saas, product, dashboard, metrics |
notion |
| investor, quarterly, business, corporate |
corporate |
| launch, marketing, keynote, magazine |
bold-editorial |
| entertainment, music, gaming, atmospheric |
dark-atmospheric |
| explainer, journalism, science communication |
editorial-infographic |
| story, fantasy, animation, magical |
fantasy-animation |
| gaming, retro, pixel, developer |
pixel-art |
| biology, chemistry, medical, scientific |
scientific |
| history, heritage, vintage, expedition |
vintage |
| lifestyle, wellness, travel, artistic |
watercolor |
| Default |
blueprint |
Design Philosophy
Decks designed for reading and sharing, not live presentation:
- Each slide self-explanatory without verbal commentary
- Logical flow when scrolling
- All necessary context within each slide
- Optimized for social media sharing
See references/design-guidelines.md for:
- Audience-specific principles
- Visual hierarchy
- Content density guidelines
- Color and typography selection
- Font recommendations
See references/layouts.md for layout options.
File Management
Output Directory
slide-deck/{topic-slug}/
├── source-{slug}.{ext}
├── outline.md
├── prompts/
│ └── 01-slide-cover.md, 02-slide-{slug}.md, ...
├── 01-slide-cover.png, 02-slide-{slug}.png, ...
├── {topic-slug}.pptx
└── {topic-slug}.pdf
Slug: Extract topic (2-4 words, kebab-case). Example: "Introduction to Machine Learning" → intro-machine-learning
Conflict Handling: See Step 1.3 for existing content detection and user options.
Language Handling
Detection Priority:
--lang flag (explicit)
- EXTEND.md
language setting
- User's conversation language (input language)
- Source content language
Rule: ALL responses use user's preferred language:
- Questions and confirmations
- Progress reports
- Error messages
- Completion summaries
Technical terms (style names, file paths, code) remain in English.
Workflow
Copy this checklist and check off items as you complete them:
Slide Deck Progress:
- [ ] Step 1: Setup & Analyze
- [ ] 1.1 Load preferences
- [ ] 1.2 Analyze content
- [ ] 1.3 Check existing ⚠️ REQUIRED
- [ ] Step 2: Confirmation ⚠️ REQUIRED (Round 1, optional Round 2)
- [ ] Step 3: Generate outline
- [ ] Step 4: Review outline (conditional)
- [ ] Step 5: Generate prompts
- [ ] Step 6: Review prompts (conditional)
- [ ] Step 7: Generate images
- [ ] Step 8: Merge to PPTX/PDF
- [ ] Step 9: Output summary
Flow
Input → Preferences → Analyze → [Check Existing?] → Confirm (1-2 rounds) → Outline → [Review Outline?] → Prompts → [Review Prompts?] → Images → Merge → Complete
Step 1: Setup & Analyze
1.1 Load Preferences (EXTEND.md)
Use Bash to check EXTEND.md existence (priority order):
# Check project-level first
test -f .space-skills/space-slide-deck/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.space-skills/space-slide-deck/EXTEND.md" && echo "user"
┌──────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├──────────────────────────────────────────────────┼───────────────────┤ │ .space-skills/space-slide-deck/EXTEND.md │ Project directory │ ├──────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.space-skills/space-slide-deck/EXTEND.md │ User home │ └──────────────────────────────────────────────────┴───────────────────┘
When EXTEND.md Found → Read, parse, output summary to user:
📋 Loaded preferences from [full path]
├─ Style: [preset/custom name]
├─ Audience: [audience or "auto-detect"]
├─ Language: [language or "auto-detect"]
└─ Review: [enabled/disabled]
When EXTEND.md Not Found → First-time setup using AskUserQuestion or proceed with defaults.
EXTEND.md Supports: Preferred style | Custom dimensions | Default audience | Language preference | Review preference
Schema: references/config/preferences-schema.md
1.2 Analyze Content
- Save source content (if pasted, save as
source.md)
- Backup rule: If source.md exists, rename to source-backup-YYYYMMDD-HHMMSS.md
- Follow
references/analysis-framework.md for content analysis
- Analyze content signals for style recommendations
- Detect source language
- Determine recommended slide count
- Generate topic slug from content
- If brand style mode is active or likely useful, run:
``bash python3 ${SKILLDIR}/scripts/recommendbrandstyles.py <source-file> ` Save the output to brand-style-recommendations.md and include the smartmatch in analysis.md`.
1.3 Check Existing Content ⚠️ REQUIRED
MUST execute before proceeding to Step 2.
Use Bash to check if output directory exists:
test -d "slide-deck/{topic-slug}" && echo "exists"
If directory exists, use AskUserQuestion:
header: "Existing"
question: "Existing content found. How to proceed?"
options:
- label: "Regenerate outline"
description: "Keep images, regenerate outline only"
- label: "Regenerate images"
description: "Keep outline, regenerate images only"
- label: "Backup and regenerate"
description: "Backup to {slug}-backup-{timestamp}, then regenerate all"
- label: "Exit"
description: "Cancel, keep existing content unchanged"
Save to analysis.md with:
- Topic, audience, content signals
- Recommended style (based on Auto Style Selection)
- Brand style recommendations when applicable
- Recommended slide count
- Language detection
Step 2: Confirmation ⚠️ REQUIRED
Two-round confirmation: Round 1 always, Round 2 only if "Custom dimensions" selected.
Language: Use user's input language or saved language preference.
Display summary:
- Content type + topic identified
- Language: [from EXTEND.md or detected]
- Recommended style: [preset] (based on content signals)
- Recommended brand style: [smart_match slug] when brand mode is active
- Recommended slides: [N] (based on content length)
Round 1 (Always)
Use AskUserQuestion for all 5 questions:
Question 1: Style
If brand style mode is active, use the 5+1 brand chooser instead of the preset chooser:
header: "Style"
question: "这份 PPT 想用哪套设计系统?"
options:
- label: "{brand_1}"
description: "{one-sentence reason from recommender}"
- label: "{brand_2}"
description: "{one-sentence reason from recommender}"
- label: "{brand_3}"
description: "{one-sentence reason from recommender}"
- label: "{brand_4}"
description: "{one-sentence reason from recommender}"
- label: "{brand_5}"
description: "{one-sentence reason from recommender}"
- label: "智能匹配 (Recommended)"
description: "Use {smart_match}: {one-sentence reason}"
If regular preset mode is active, use:
header: "Style"
question: "Which visual style for this deck?"
options:
- label: "{recommended_preset} (Recommended)"
description: "Best match based on content analysis"
- label: "{alternative_preset}"
description: "[alternative style description]"
- label: "Custom dimensions"
description: "Choose texture, mood, typography, density separately"
Question 2: Audience
header: "Audience"
question: "Who is the primary reader?"
options:
- label: "General readers (Recommended)"
description: "Broad appeal, accessible content"
- label: "Beginners/learners"
description: "Educational focus, clear explanations"
- label: "Experts/professionals"
description: "Technical depth, domain knowledge"
- label: "Executives"
description: "High-level insights, minimal detail"
Question 3: Slide Count
header: "Slides"
question: "How many slides?"
options:
- label: "{N} slides (Recommended)"
description: "Based on content length"
- label: "Fewer ({N-3} slides)"
description: "More condensed, less detail"
- label: "More ({N+3} slides)"
description: "More detailed breakdown"
Question 4: Review Outline
header: "Outline"
question: "Review outline before generating prompts?"
options:
- label: "Yes, review outline (Recommended)"
description: "Review slide titles and structure"
- label: "No, skip outline review"
description: "Proceed directly to prompt generation"
Question 5: Review Prompts
header: "Prompts"
question: "Review prompts before generating images?"
options:
- label: "Yes, review prompts (Recommended)"
description: "Review image generation prompts"
- label: "No, skip prompt review"
description: "Proceed directly to image generation"
Round 2 (Only if "Custom dimensions" selected)
Use AskUserQuestion for all 4 dimensions:
Question 1: Texture
header: "Texture"
question: "Which visual texture?"
options:
- label: "clean"
description: "Pure solid color, no texture"
- label: "grid"
description: "Subtle grid overlay, technical"
- label: "organic"
description: "Soft textures, hand-drawn feel"
- label: "pixel"
description: "Chunky pixels, 8-bit aesthetic"
(Note: "paper" available via Other)
Question 2: Mood
header: "Mood"
question: "Which color mood?"
options:
- label: "professional"
description: "Cool-neutral, navy/gold"
- label: "warm"
description: "Earth tones, friendly"
- label: "cool"
description: "Blues, grays, analytical"
- label: "vibrant"
description: "High saturation, bold"
(Note: "dark", "neutral" available via Other)
Question 3: Typography
header: "Typography"
question: "Which typography style?"
options:
- label: "geometric"
description: "Modern sans-serif, clean"
- label: "humanist"
description: "Friendly, readable"
- label: "handwritten"
description: "Marker/brush, organic"
- label: "editorial"
description: "Magazine style, dramatic"
(Note: "technical" available via Other)
Question 4: Density
header: "Density"
question: "Information density?"
options:
- label: "balanced (Recommended)"
description: "2-3 key points per slide"
- label: "minimal"
description: "One focus point, maximum whitespace"
- label: "dense"
description: "Multiple data points, compact"
After Round 2: Store custom dimensions as the style configuration.
After Confirmation:
- Update
analysis.md with confirmed preferences
- Store
skipoutlinereview flag from Question 4
- Store
skippromptreview flag from Question 5
- → Step 3
Step 3: Generate Outline
Create outline using the confirmed style from Step 2.
Style Resolution:
- If preset selected → Read
references/styles/{preset}.md
- If custom dimensions → Read dimension files from
references/dimensions/ and combine
- If brand style selected → Read
references/brand-design-system.md, fetch the selected brand's DESIGN.md with npx getdesign@latest add <slug>, and convert it into the outline <STYLE_INSTRUCTIONS> block
- If mixed brand style selected → Fetch every selected brand, use the first as primary, then merge only the explicitly requested dimensions from secondary brands
Generate:
- Follow
references/outline-template.md for structure
- Build STYLE_INSTRUCTIONS from style or dimensions
- For brand styles, include
Brand Design System metadata and exact tokens from DESIGN.md where available
- Apply confirmed audience, language, slide count
- Save as
outline.md
After generation:
- If
--outline-only, stop here
- If
skipoutlinereview is true → Skip Step 4, go to Step 5
- If
skipoutlinereview is false → Continue to Step 4
Step 4: Review Outline (Conditional)
Skip this step if user selected "No, skip outline review" in Step 2.
Purpose: Review outline structure before prompt generation.
Language: Use user's input language or saved language preference.
Display:
- Total slides: N
- Style: [preset name or "custom: texture+mood+typography+density"]
- Slide-by-slide summary table:
| # | Title | Type | Layout |
|---|-------|------|--------|
| 1 | [title] | Cover | title-hero |
| 2 | [title] | Content | [layout] |
| 3 | [title] | Content | [layout] |
| ... | ... | ... | ... |
Use AskUserQuestion:
header: "Confirm"
question: "Ready to generate prompts?"
options:
- label: "Yes, proceed (Recommended)"
description: "Generate image prompts"
- label: "Edit outline first"
description: "I'll modify outline.md before continuing"
- label: "Regenerate outline"
description: "Create new outline with different approach"
After response:
- If "Edit outline first" → Inform user to edit
outline.md, ask again when ready
- If "Regenerate outline" → Back to Step 3
- If "Yes, proceed" → Continue to Step 5
Step 5: Generate Prompts
- Read
references/base-prompt.md
- For each slide in outline:
- Extract STYLE_INSTRUCTIONS from outline (not from style file again) - Add slide-specific content - If Layout: specified, include layout guidance from references/layouts.md
- Save to
prompts/ directory
- Backup rule: If prompt file exists, rename to prompts/NN-slide-{slug}-backup-YYYYMMDD-HHMMSS.md
After generation:
- If
--prompts-only, stop here and output prompt summary
- If
skippromptreview is true → Skip Step 6, go to Step 7
- If
skippromptreview is false → Continue to Step 6
Step 6: Review Prompts (Conditional)
Skip this step if user selected "No, skip prompt review" in Step 2.
Purpose: Review prompts before image generation.
Language: Use user's input language or saved language preference.
Display:
- Total prompts: N
- Style: [preset name or custom dimensions]
- Prompt list:
| # | Filename | Slide Title |
|---|----------|-------------|
| 1 | 01-slide-cover.md | [title] |
| 2 | 02-slide-xxx.md | [title] |
| ... | ... | ... |
- Path to prompts directory:
prompts/
Use AskUserQuestion:
header: "Confirm"
question: "Ready to generate slide images?"
options:
- label: "Yes, proceed (Recommended)"
description: "Generate all slide images"
- label: "Edit prompts first"
description: "I'll modify prompts before continuing"
- label: "Regenerate prompts"
description: "Create new prompts with different approach"
After response:
- If "Edit prompts first" → Inform user to edit prompts, ask again when ready
- If "Regenerate prompts" → Back to Step 5
- If "Yes, proceed" → Continue to Step 7
Step 7: Generate Images
For --images-only: Start here with existing prompts.
For --regenerate N: Only regenerate specified slide(s).
Standard flow:
- Select available image generation skill
- Generate session ID:
slides-{topic-slug}-{timestamp}
- For each slide:
- Backup rule: If image file exists, rename to NN-slide-{slug}-backup-YYYYMMDD-HHMMSS.png - Generate image sequentially with same session ID
- Report progress: "Generated X/N" (in user's language)
- Auto-retry once on failure before reporting error
Step 8: Merge to PPTX and PDF
npx -y bun ${SKILL_DIR}/scripts/merge-to-pptx.ts <slide-deck-dir>
npx -y bun ${SKILL_DIR}/scripts/merge-to-pdf.ts <slide-deck-dir>
Step 9: Output Summary
Language: Use user's input language or saved language preference.
Slide Deck Complete!
Topic: [topic]
Style: [preset name or custom dimensions]
Location: [directory path]
Slides: N total
- 01-slide-cover.png - Cover
- 02-slide-intro.png - Content
- ...
- {NN}-slide-back-cover.png - Back Cover
Outline: outline.md
PPTX: {topic-slug}.pptx
PDF: {topic-slug}.pdf
Partial Workflows
| Option |
Workflow |
--outline-only |
Steps 1-3 only (stop after outline) |
--prompts-only |
Steps 1-5 (generate prompts, skip images) |
--images-only |
Skip to Step 7 (requires existing prompts/) |
--regenerate N |
Regenerate specific slide(s) only |
Using --prompts-only
Generate outline and prompts without images:
/space-slide-deck content.md --prompts-only
Output: outline.md + prompts/*.md ready for review/editing.
Using --images-only
Generate images from existing prompts (starts at Step 7):
/space-slide-deck slide-deck/topic-slug/ --images-only
Prerequisites:
prompts/ directory with slide prompt files
outline.md with style information
Using --regenerate
Regenerate specific slides:
# Single slide
/space-slide-deck slide-deck/topic-slug/ --regenerate 3
# Multiple slides
/space-slide-deck slide-deck/topic-slug/ --regenerate 2,5,8
Flow:
- Read existing prompts for specified slides
- Regenerate images only for those slides
- Regenerate PPTX/PDF
Slide Modification
Quick Reference
| Action |
Command |
Manual Steps |
| Edit |
--regenerate N |
Update prompt file FIRST → Regenerate image → Regenerate PDF |
| Add |
Manual |
Create prompt → Generate image → Renumber subsequent → Update outline → Regenerate PDF |
| Delete |
Manual |
Remove files → Renumber subsequent → Update outline → Regenerate PDF |
Edit Single Slide
- Update prompt file FIRST in
prompts/NN-slide-{slug}.md
- Run:
/space-slide-deck <dir> --regenerate N
- Or manually regenerate image + PDF
IMPORTANT: When updating slides, ALWAYS update the prompt file (prompts/NN-slide-{slug}.md) FIRST before regenerating. This ensures changes are documented and reproducible.
Add New Slide
- Create prompt at position:
prompts/NN-slide-{new-slug}.md
- Generate image using same session ID
- Renumber: Subsequent files NN+1 (slugs unchanged)
- Update
outline.md
- Regenerate PPTX/PDF
Delete Slide
- Remove
NN-slide-{slug}.png and prompts/NN-slide-{slug}.md
- Renumber: Subsequent files NN-1 (slugs unchanged)
- Update
outline.md
- Regenerate PPTX/PDF
File Naming
Format: NN-slide-[slug].png
NN: Two-digit sequence (01, 02, ...)
slug: Kebab-case from content (2-5 words, unique)
Renumbering Rule: Only NN changes, slugs remain unchanged.
See references/modification-guide.md for complete details.
References
| File |
Content |
references/analysis-framework.md |
Content analysis for presentations |
references/outline-template.md |
Outline structure and format |
references/modification-guide.md |
Edit, add, delete slide workflows |
references/content-rules.md |
Content and style guidelines |
references/design-guidelines.md |
Audience, typography, colors, visual elements |
references/layouts.md |
Layout options and selection tips |
references/base-prompt.md |
Base prompt for image generation |
references/dimensions/*.md |
Dimension specifications (texture, mood, typography, density) |
references/dimensions/presets.md |
Preset → dimension mapping |
references/styles/<style>.md |
Full style specifications (legacy) |
references/config/preferences-schema.md |
EXTEND.md structure |
Notes
- Image generation: 10-30 seconds per slide
- Auto-retry once on generation failure
- Use stylized alternatives for sensitive public figures
- Maintain style consistency via session ID
- Step 2 confirmation required - do not skip (style, audience, slides, outline review, prompt review)
- Step 4 conditional - only if user requested outline review in Step 2
- Step 6 conditional - only if user requested prompt review in Step 2
Extension Support
Custom configurations via EXTEND.md. See Step 1.1 for paths and supported options.