返回 Skills
jimliu/baoyu-skills· MIT 内容可用

baoyu-slide-deck

Generates professional slide deck images from content. Creates outlines with style instructions, then generates individual slide images. Use when user asks to "create slides", "make a presentation", "generate deck", "slide deck", or "PPT".

安装

与 skills.sh 相同的 Command / Prompt 安装方式


name: baoyu-slide-deck description: Generates professional slide deck images from content. Creates outlines with style instructions, then generates individual slide images. Use when user asks to "create slides", "make a presentation", "generate deck", "slide deck", or "PPT". version: 1.117.4 metadata: openclaw: homepage: https://github.com/JimLiu/baoyu-skills#baoyu-slide-deck requires: anyBins: - bun - npx

Slide Deck Generator

Transform content into professional slide deck images. The deck is designed for reading and sharing (self-explanatory slides, logical scroll flow, social-media-friendly) rather than live presentation — that assumption drives every layout and density decision below.

User Input Tools

When this skill prompts the user, follow this tool-selection rule (priority order):

  1. Prefer built-in user-input tools exposed by the current agent runtime — e.g., AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.
  2. Fallback: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
  3. Batching: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.

Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.

Image Generation Tools

When this skill needs to render an image, resolve the backend in this order:

  1. Current-request override — if the user names a specific backend in the current message, use it.
  2. Saved preference — if EXTEND.md sets preferred_image_backend to a backend available right now, use it.
  3. Auto-select (when the preference is auto, unset, or the pinned backend isn't available):
    • Codex (imagegen) — first, inspect your available-skills / tool inventory. If a skill named imagegen is listed, you are running inside Codex and MUST use it: invoke via the Skill tool with skill: "imagegen", passing the saved prompt file's content (plus output path and aspect ratio per Codex imagegen's own args). Codex imagegen is the official raster backend in that runtime and outranks any non-native skill (e.g., baoyu-image-gen) unless the user has explicitly pinned a different preferred_image_backend.
    • Codex via codex exec (codex-imagegen) — if the current runtime exposes no native imagegen skill but the codex CLI is on PATH with an active codex login, route through baoyu-image-gen --provider codex-cli (preferred), or — if baoyu-image-gen is unavailable — invoke the bundled wrapper directly. Details, parameters, and the runtime-discovery procedure live in references/codex-imagegen.md — load that file only when this branch is selected.
    • Cursor (GenerateImage) — if the runtime exposes a native GenerateImage tool, you are running inside Cursor and it outranks any non-native skill the same way Codex imagegen does. Two hard caveats: (a) it has no aspect-ratio parameter — state the target aspect ratio / dimensions explicitly in the prompt text passed as description; (b) it does not accept an output directory — it saves to a tool-managed location, so after generation copy/move the file to the skill's expected output path (e.g., outputs/.../NN-xxx.png). Reference images go in reference_image_paths.
    • Other runtime-native tools — if the runtime exposes a different native image tool (e.g., Hermes image_generate), use it the same way.
    • Otherwise, if exactly one non-native backend is installed (e.g., baoyu-image-gen), use it.
    • Otherwise (multiple non-native backends with no runtime-native tool), ask the user once — batch with any other initial questions.
  4. If none are available, tell the user and ask how to proceed.

⛔ Never substitute SVG, HTML, canvas, or other code-based rendering for raster image generation. Codex imagegen's own description says it should be used "when the output should be a bitmap asset rather than repo-native code or vector." If you cannot resolve a raster backend via step 3, fall through to step 4 and ask the user — do not silently emit SVG, write inline <svg> markup, or produce HTML/CSS art as a substitute. This applies even if the article/section seems "diagram-like": the consumer skill calling this rule has already decided that a raster image is what it needs.

⛔ Never repair rendered text by painting over a generated bitmap. Do not use ImageMagick, Pillow, Canvas, SVG, HTML/CSS, OCR scripts, or any other programmatic overlay to cover, rewrite, erase, stroke, or replace slide titles, bullets, or any other text inside an already generated slide image. If text is wrong or unclear, regenerate from a corrected prompt, simplify the slide's on-image text, or ask the user which imperfect candidate to keep.

Setting preferred_image_backend: ask forces the step-3 prompt every run regardless of available backends. Users change the pinned backend via the ## Changing Preferences section below.

Prompt file requirement (hard): write each image's full, final prompt to a standalone file under prompts/ (naming: NN-slide-[slug].md) BEFORE invoking any backend. The file is the reproducibility record and lets you switch backends without regenerating prompts.

Concrete tool names (imagegen, GenerateImage, image_generate, baoyu-image-gen) above are examples — substitute the local equivalents under the same rule.

Batch Generation Policy

After every prompt file for the current generation group has been saved and verified, generate slide images in batches by default.

Priority order:

  1. Use the chosen backend's native batch / multi-task interface if it exists. Each task must keep its own prompt file, output path, aspect ratio, session ID, and direct reference images.
  2. If no native batch interface exists but the runtime can issue parallel tool calls, dispatch up to generation_batch_size slide images at a time. Default: 4. An explicit user request in the current message, such as --batch-size 4 or "并行4张一起生成", overrides EXTEND.md.
  3. If neither native batch nor parallel tool calls are available, generate sequentially.

Rules:

  • Never start the first batch until all selected slide prompt files exist on disk.
  • Retry failed items once without regenerating successful items.
  • Do not use subagents merely to parallelize image rendering. Use subagents only for separate prompt iteration or creative exploration.
  • Merge PPTX/PDF only after all selected slide images are generated.

Confirmation Policy

Default behavior: confirm before generation.

  • Treat explicit skill invocation, a file path, matched signals/presets, and EXTEND.md defaults as recommendation inputs only. None of them authorizes skipping confirmation.
  • Do not start Step 3 or later until the user completes Step 2.
  • Skip confirmation only when the current request explicitly says to do so, for example: "直接生成", "不用确认", "跳过确认", "按默认出幻灯片", or equivalent wording.
  • If confirmation is skipped explicitly, state the assumed style / audience / slide-count / language / backend in the next user-facing update before generating.

Language

Respond in the user's language across questions, progress reports, error messages, and the completion summary. Keep technical tokens (style names, file paths, code) in English.

Script Directory

{baseDir} = this SKILL.md's directory. Resolve ${BUN_X}: prefer bun; else npx -y bun; else suggest brew install oven-sh/bun/bun.

ScriptPurpose
scripts/merge-to-pptx.tsMerge slides into PowerPoint
scripts/merge-to-pdf.tsMerge slides into PDF

Options

OptionDescription
--style <name>Preset (see Presets below), custom, or custom style name
--audience <type>beginners / intermediate / experts / executives / general
--lang <code>Output language (en, zh, ja, ...)
--slides <N>Target slide count (8-25 recommended, max 30)
--ref <files...>Reference images applied per slide (style / palette / composition / subject)
--batch-size <n>Temporary slide image generation batch size for this run. Default: generation_batch_size from EXTEND.md, otherwise 4. Clamp to 1-8.
--outline-onlyStop after outline
--prompts-onlyStop after prompts (skip image generation)
--images-onlySkip to Step 7; requires existing prompts/
--regenerate <N>Regenerate specific slide(s): 3 or 2,5,8

Style System

17 presets covering technical / educational / lifestyle / editorial use cases. Every preset is a combination of four dimensions (texture / mood / typography / density). If the user picks "Custom dimensions" in Round 1, Round 2 of the confirmation asks one question per dimension — options and verbatim copy live in references/confirmation.md.

Presets (17)

PresetDimensionsBest For
blueprint (Default)grid + cool + technical + balancedArchitecture, system design
chalkboardorganic + warm + handwritten + balancedEducation, tutorials
corporateclean + professional + geometric + balancedInvestor decks, proposals
minimalclean + neutral + geometric + minimalExecutive briefings
sketch-notesorganic + warm + handwritten + balancedEducational, tutorials
hand-drawn-eduorganic + macaron + handwritten + balancedEducational diagrams, process explainers
watercolororganic + warm + humanist + minimalLifestyle, wellness
dark-atmosphericclean + dark + editorial + balancedEntertainment, gaming
notionclean + neutral + geometric + denseProduct demos, SaaS
bold-editorialclean + vibrant + editorial + balancedProduct launches, keynotes
editorial-infographicclean + cool + editorial + denseTech explainers, research
fantasy-animationorganic + vibrant + handwritten + minimalEducational storytelling
intuition-machineclean + cool + technical + denseTechnical docs, academic
pixel-artpixel + vibrant + technical + balancedGaming, developer talks
scientificclean + cool + technical + denseBiology, chemistry, medical
vector-illustrationclean + vibrant + humanist + balancedCreative, children's content
vintagepaper + warm + editorial + balancedHistorical, heritage

Per-preset specs: references/styles/<preset>.md. Preset → dimension mapping: references/dimensions/presets.md.

Dimensions (when "Custom dimensions" picked)

DimensionOptionsPurpose
Textureclean, grid, organic, pixel, paperBackground treatment
Moodprofessional, warm, cool, vibrant, dark, neutral, macaronColor temperature
Typographygeometric, humanist, handwritten, editorial, technicalHeadline/body styling
Densityminimal, balanced, denseInformation per slide

Full per-dimension specs: references/dimensions/*.md.

Auto-Selection

Match content signals to a preset. Pick the first row whose signal keywords appear in the source; fall back to blueprint if nothing matches.

Signals in sourcePreset
tutorial, learn, education, guide, beginnersketch-notes
hand-drawn, infographic, diagram, process, onboardinghand-drawn-edu
classroom, teaching, school, chalkboardchalkboard
architecture, system, data, analysis, technicalblueprint
creative, children, kids, cutevector-illustration
briefing, academic, research, bilingualintuition-machine
executive, minimal, clean, simpleminimal
saas, product, dashboard, metricsnotion
investor, quarterly, business, corporatecorporate
launch, marketing, keynote, magazinebold-editorial
entertainment, music, gaming, atmosphericdark-atmospheric
explainer, journalism, science communicationeditorial-infographic
story, fantasy, animation, magicalfantasy-animation
gaming, retro, pixel, developerpixel-art
biology, chemistry, medical, scientificscientific
history, heritage, vintage, expeditionvintage
lifestyle, wellness, travel, artisticwatercolor

Slide Count Heuristic

Source lengthRecommended slides
< 1000 words5-10
1000-3000 words10-18
3000-5000 words15-25
> 5000 words20-30 (consider splitting)

Reference Images

Users may supply reference images to guide style, palette, layout, or subject.

Intake: Accept via --ref <files...> or when the user provides file paths / pastes images in conversation.

  • File path → copy to {slide-deck-dir}/refs/NN-ref-{slug}.{ext}
  • Pasted image with no path → ask for the path, or extract style traits verbally as a text fallback

Usage modes (per reference):

UsageEffect
directPass the file to the backend as a reference image for each slide
styleExtract style traits (line treatment, texture, mood) and append to every slide's prompt body
paletteExtract hex colors and append to every slide's prompt body

Record refs in each slide's prompt frontmatter:

references:
  - ref_id: 01
    filename: 01-ref-brand.png
    usage: direct

At generation time, verify files exist. If usage: direct and the backend accepts refs (e.g., baoyu-image-gen --ref), pass the file on every slide. Otherwise embed extracted style/palette traits in the prompt text.

File Layout

slide-deck/{topic-slug}/
├── source-{slug}.{ext}
├── outline.md
├── prompts/NN-slide-{slug}.md
├── NN-slide-{slug}.png
├── {topic-slug}.pptx
└── {topic-slug}.pdf

Slug: 2-4 words, kebab-case, extracted from topic. "Introduction to Machine Learning" → intro-machine-learning.

Backup rule (applies across steps): if a file about to be written already exists, rename it to <name>-backup-YYYYMMDD-HHMMSS.<ext> before writing the new one. This protects user edits and enables rollback.

Workflow

Copy this checklist and check off items as you complete them:

- [ ] Step 1: Setup & analyze
- [ ] Step 2: Confirmation ⚠️ REQUIRED (Round 1; Round 2 only if "Custom dimensions")
- [ ] 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

Step 1: Setup & Analyze

1.1 Load EXTEND.md — check these paths in order; first hit wins:

PathScope
.baoyu-skills/baoyu-slide-deck/EXTEND.mdProject
${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-slide-deck/EXTEND.mdXDG
$HOME/.baoyu-skills/baoyu-slide-deck/EXTEND.mdUser home

If found, read, parse, and print a summary (style / audience / language / review / generation batch size). If not, proceed with defaults — first-time setup is not blocking for this skill. Schema: references/config/preferences-schema.md.

1.2 Analyze content — follow references/analysis-framework.md: classify content, detect language, note signals for style selection, estimate slide count from length (see the Slide Count Heuristic in Style System above), generate topic slug. Save source as source.md (honor backup rule if one exists).

1.3 Check existing output ⚠️ REQUIRED before Step 2. If slide-deck/{topic-slug}/ exists, ask how to proceed — four options (regenerate outline / regenerate images / backup and regenerate / exit), verbatim copy in references/confirmation.md.

Save findings to analysis.md: topic, audience, signals, recommended style and slide count, language detection.

Step 2: Confirmation ⚠️ REQUIRED

Hard gate: this step is mandatory per the Confirmation Policy — Steps 3+ cannot start until the user confirms here (or explicitly opts out with "直接生成" / equivalent wording in the current request).

Round 1 (always) — batch five questions in one AskUserQuestion call: style, audience, slide count, review-outline?, review-prompts?. Verbatim options in references/confirmation.md.

Summary displayed before the questions:

  • Content type + topic
  • Detected language
  • Recommended style (based on signals)
  • Recommended slide count (based on length)

Round 2 (only if "Custom dimensions" in Round 1) — batch four questions: texture, mood, typography, density. Verbatim options in references/confirmation.md. The four answers replace the preset.

After confirmation: update analysis.md with final choices and store skip_outline_review / skip_prompt_review flags from Q4/Q5.

Step 3: Generate Outline

Resolve style: preset → references/styles/{preset}.md; custom dimensions → combine files in references/dimensions/. Build STYLE_INSTRUCTIONS from the resolved style, apply confirmed audience + language + slide count, follow references/outline-template.md, and save as outline.md.

Stop here if --outline-only. Skip Step 4 if skip_outline_review.

Step 4: Review Outline (Conditional)

Display a slide-by-slide table (# | Title | Type | Layout) along with total count and resolved style. Ask: proceed / edit outline first / regenerate — verbatim in references/confirmation.md.

On "Edit outline first", tell the user to edit outline.md and ask again when ready. On "Regenerate outline", return to Step 3.

Step 5: Generate Prompts

For each slide in outline:

  1. Read references/base-prompt.md
  2. Extract STYLE_INSTRUCTIONS from the outline (don't re-read the style file)
  3. Add the slide's content
  4. If a Layout: is specified, include guidance from references/layouts.md
  5. Save to prompts/NN-slide-{slug}.md (backup rule applies)

Stop here if --prompts-only. Skip Step 6 if skip_prompt_review.

Step 6: Review Prompts (Conditional)

Display the prompts index (# | Filename | Slide Title) and ask: proceed / edit prompts first / regenerate — verbatim in references/confirmation.md. Branches mirror Step 4.

Step 7: Generate Images

  1. Resolve the image backend via the Image Generation Tools rule at the top — ask once if multiple are installed.
    • codex-imagegen invocation: when the rule resolves to codex-imagegen, see references/codex-imagegen.md for the invocation contract (preferred baoyu-image-gen --provider codex-cli path, runtime wrapper discovery, parameter notes, stdout schema, batch semantics — n=1 per call so slide batches must dispatch one wrapper call per slide).
  2. Confirm every prompts/NN-slide-{slug}.md exists (hard requirement; prompt files are the reproducibility record regardless of backend).
  3. Session ID: slides-{topic-slug}-{timestamp} — pass to the backend only if it supports sessions.
  4. Build a task list for selected slides with each slide's prompt file, output PNG path, aspect ratio, session ID, and verified direct references.
  5. Dispatch slide images in batches per the ## Batch Generation Policy: backend native batch first, runtime parallel tool calls second, sequential only as fallback. Backup rule applies to PNG files before dispatch. Report progress as Generated X/N. Retry only failed items once before reporting an error.

--regenerate N jumps to this step for the named slides only. --images-only starts here with existing prompts.

Step 8: Merge

${BUN_X} {baseDir}/scripts/merge-to-pptx.ts <slide-deck-dir>
${BUN_X} {baseDir}/scripts/merge-to-pdf.ts <slide-deck-dir>

Step 9: Summary

Slide Deck Complete!
Topic: [topic]
Style: [preset or "custom: texture+mood+typography+density"]
Location: [directory]
Slides: N

- 01-slide-cover.png
- ...
- NN-slide-back-cover.png

Outline: outline.md
PPTX: {topic-slug}.pptx
PDF: {topic-slug}.pdf

Slide Modification

ActionHow
EditUpdate prompts/NN-slide-{slug}.md first, then --regenerate N
AddCreate new prompt at position, generate image, renumber subsequent NN (slugs unchanged), update outline.md, re-merge
DeleteRemove PNG + prompt, renumber subsequent, update outline.md, re-merge

Always update the prompt file before regenerating the image — this keeps the prompts directory as the source of truth and makes changes reproducible. Only NN changes on renumber; slugs stay stable so references remain valid.

Text correction policy:

  • If a slide's title, bullets, or any other rendered text is misspelled, garbled, hard to read, or visually weak, do not patch the bitmap with code.
  • For text-correction regenerations, write a new prompt file and a new output path so the flawed candidate is preserved for comparison.
  • Post-processing is limited to crop, resize, compression, or format conversion that does not alter text or the main composition.

See references/modification-guide.md for full details.

References

FileContent
references/confirmation.mdVerbatim AskUserQuestion option copy for every confirmation
references/analysis-framework.mdContent analysis framework
references/outline-template.mdOutline structure
references/base-prompt.mdBase prompt body for image generation
references/layouts.mdLayout options
references/design-guidelines.mdAudience, typography, color selection
references/content-rules.mdContent guidelines
references/modification-guide.mdEdit/add/delete workflows
references/styles/<preset>.mdPer-preset specifications
references/dimensions/*.mdPer-dimension specifications
references/config/preferences-schema.mdEXTEND.md schema

Notes

  • Image generation takes ~10-30s per slide; report progress between them.
  • For sensitive public figures, prefer stylized alternatives to avoid likeness issues.
  • Maintain visual consistency via the session ID when the backend supports it.

Changing Preferences

EXTEND.md lives at the first matching path listed in Step 1.1. Two ways to change it:

  • Edit directly — open EXTEND.md and change fields. Full schema: references/config/preferences-schema.md.
  • Common one-line edits:
    • preferred_image_backend: auto — default; runtime-native tool wins, falls back to the only installed backend, asks only if multiple non-native are present.
    • preferred_image_backend: codex-imagegen — pin to Codex's built-in.
    • preferred_image_backend: baoyu-image-gen — pin to the baoyu-image-gen skill.
    • preferred_image_backend: ask — confirm backend every run.
    • generation_batch_size: 4 — default number of slide images to render concurrently when the backend/runtime supports batch or parallel generation.
    • preferred_style: blueprint, preferred_audience: experts, language: zh.

附带文件

references/analysis-framework.md
# Presentation Analysis Framework

Deep content analysis for effective slide deck creation.

## 1. Message Hierarchy

Identify the core message structure before designing slides.

### Core Message (One Sentence)
- What is the single most important takeaway?
- If the audience remembers only one thing, what should it be?
- Can you state it in ≤15 words?

### Supporting Points (3-5 Maximum)
- What evidence supports the core message?
- What sub-topics must be covered?
- Prioritize by audience relevance, not source order

### Call-to-Action
- What should the audience DO after viewing?
- Is it clear, specific, and achievable?
- Where does it appear (slide position)?

## 2. Audience Decision Matrix

| Question | Analysis |
|----------|----------|
| Who is the primary audience? | [Role, expertise level, relationship to topic] |
| What do they currently believe? | [Existing knowledge, assumptions, biases] |
| What decision do we want them to make? | [Specific action or conclusion] |
| What barriers exist? | [Objections, concerns, missing information] |
| What evidence will convince them? | [Data types, credibility sources, emotional hooks] |

### Audience Adaptation

| Audience Type | Content Focus | Visual Treatment |
|---------------|---------------|------------------|
| Executives | Outcomes, ROI, strategic impact | High-level, clean, data highlights |
| Technical | Architecture, implementation, specs | Detailed diagrams, code, schematics |
| General | Benefits, stories, relatability | Visual metaphors, simple charts |
| Investors | Market size, traction, team | Growth charts, milestones, comparisons |
| Learners | Step-by-step, examples, practice | Progressive reveals, exercises |

## 3. Visual Opportunity Map

Identify which content benefits from visualization.

### Content-to-Visual Mapping

| Content Type | Visual Treatment | Example |
|--------------|------------------|---------|
| Comparisons | Side-by-side, before/after | Feature comparison table |
| Processes | Flow diagrams, numbered steps | Workflow illustration |
| Hierarchies | Org charts, pyramids, trees | Organizational structure |
| Timelines | Horizontal/vertical timelines | Project milestones |
| Statistics | Charts, highlighted numbers | Key metrics with context |
| Concepts | Icons, metaphors, illustrations | Abstract idea visualization |
| Relationships | Venn diagrams, networks | Ecosystem or dependencies |
| Lists | Structured grids, icon rows | Feature bullets with icons |

### Visual Priority

Rate each piece of content:
- **Must Visualize**: Complex data, key differentiators, memorable moments
- **Should Visualize**: Supporting evidence, secondary points
- **Text Only**: Simple statements, transitions, minor details

## 4. Presentation Flow

Structure for impact and retention.

### Opening (First 2-3 Slides)

| Element | Purpose |
|---------|---------|
| Hook | Capture attention (surprising stat, question, story) |
| Context | Why this matters now |
| Preview | What audience will learn/gain |

### Middle (Content Slides)

| Pattern | When to Use |
|---------|-------------|
| Problem → Solution | Introducing new products/ideas |
| Situation → Complication → Resolution | Complex business cases |
| What → Why → How | Educational content |
| Past → Present → Future | Transformation stories |
| Claim → Evidence → Implication | Data-driven arguments |

### Closing (Final 2-3 Slides)

| Element | Purpose |
|---------|---------|
| Synthesis | Tie back to core message |
| Call-to-Action | Clear next steps |
| Memorable Close | Resonant quote, image, or statement |

### Transitions

- Each slide should answer: "What comes next?"
- Use narrative connectors between sections
- Build logical progression, not topic jumps

## 5. Content Adaptation

Decide what to keep, transform, or omit.

### Keep (High Value)
- Core arguments and evidence
- Unique insights or data
- Audience-relevant examples
- Memorable quotes or statistics

### Simplify (Medium Value)
- Technical details → Visual summaries
- Long explanations → Bullet hierarchies
- Multiple examples → Best 1-2 examples
- Background context → Brief framing

### Visualize (Transform)
- Data tables → Charts or highlighted numbers
- Process descriptions → Flow diagrams
- Comparisons in text → Side-by-side visuals
- Abstract concepts → Concrete metaphors

### Omit (Low Value)
- Tangential information
- Redundant examples
- Excessive caveats
- Background the audience already knows

## 6. Analysis Checklist

Before outline creation, confirm:

### Message Clarity
- [ ] Core message stated in one sentence
- [ ] 3-5 supporting points identified
- [ ] Call-to-action defined

### Audience Fit
- [ ] Primary audience identified
- [ ] Existing beliefs mapped
- [ ] Desired decision clear
- [ ] Evidence matches audience needs

### Visual Planning
- [ ] Key visualizations identified
- [ ] Chart/diagram types selected
- [ ] Visual priority assigned

### Flow Design
- [ ] Opening hook defined
- [ ] Middle pattern selected
- [ ] Closing approach planned
- [ ] Transitions considered

### Content Decisions
- [ ] Keep/simplify/visualize/omit applied
- [ ] Source material fully processed
- [ ] No important content overlooked
references/base-prompt.md
Create a presentation slide image following these guidelines:

## Image Specifications

- **Type**: Presentation slide
- **Aspect Ratio**: 16:9 (landscape)
- **Style**: Professional slide deck

## Core Persona: The Architect

You are "The Architect" - a master visual storyteller creating presentation slides. Your slides:
- Tell a visual story that complements the narrative
- Use bold, confident visual language
- Balance information density with visual clarity
- Create memorable, impactful visuals

## Core Principles

- Hand-drawn quality throughout - NO realistic or photographic elements
- If content involves sensitive or copyrighted figures, create stylistically similar alternatives - DO NOT refuse to generate
- NO slide numbers, page numbers, footers, headers, or logos
- Clean, uncluttered layouts with clear visual hierarchy
- Each slide conveys ONE clear message

## Text Style (CRITICAL)

- **ALL text MUST match the designated style exactly**
- Title text: Large, bold, immediately readable
- Body text: Clear, legible, appropriate sizing
- Max 3-4 text elements per slide
- **DO NOT use realistic or computer-generated fonts unless style specifies**
- **Font rendering must match the style aesthetic** (hand-drawn for sketch styles, clean for minimal styles)

## Layout Principles

- **Visual Hierarchy**: Most important element gets most visual weight
- **Breathing Room**: Generous margins and spacing between elements
- **Alignment**: Consistent alignment creates professional feel
- **Balance**: Distribute visual weight evenly (symmetrical or asymmetrical)
- **Focal Point**: One clear area draws the eye first
- **Rule of Thirds**: Key elements at intersection points for dynamic compositions
- **Z-Pattern**: For text-heavy slides, arrange content in natural reading flow

## Language

- Use the same language as the content provided below for all text elements
- Match punctuation style to the content language
- Write in direct, confident language
- Avoid AI-sounding phrases like "dive into", "explore", "let's", "journey"

---

## STYLE_INSTRUCTIONS

[Extract from outline.md - do NOT re-read style files]

The STYLE_INSTRUCTIONS block from the outline contains:
- Design Aesthetic
- Background (Texture + Base Color)
- Typography (Headlines + Body descriptions)
- Color Palette (with hex codes)
- Visual Elements
- Density Guidelines
- Style Rules (Do/Don't)

Copy the entire `<STYLE_INSTRUCTIONS>...</STYLE_INSTRUCTIONS>` block from the outline here.

---

## SLIDE CONTENT

[Insert slide-specific content from outline]

Include:
- Slide number and filename
- Type (Cover/Content/Back Cover)
- Narrative Goal
- Key Content (Headline, Sub-headline, Body points)
- Visual description
- Layout guidance (if specified)

---

Please use nano banana pro to generate the slide image based on the content provided above.
references/codex-imagegen.md
# `codex-imagegen` Wrapper Invocation

Load this reference only when the [Image Generation Tools](../SKILL.md#image-generation-tools) rule has resolved to `codex-imagegen` — i.e., the current runtime exposes no native `imagegen` skill but `codex` CLI is on `PATH` with an active `codex login`.

## Preferred path: route through `baoyu-image-gen`

If the `baoyu-image-gen` skill is available in this runtime, **always** invoke through it rather than calling the wrapper directly. It handles retry/cache/batch/EXTEND.md preferences uniformly with every other provider.

```bash
${BUN_X} <baoyu-image-gen-base>/scripts/main.ts \
  --provider codex-cli \
  --image <ABSOLUTE_output> \
  --promptfiles <ABSOLUTE_prompts/NN-slide-{slug}.md> \
  --ar <ratio> \
  [--ref <ABSOLUTE_file>]...
```

Resolve `<baoyu-image-gen-base>` the same way you resolve any sibling skill — through your runtime's skill registry (`Skill` tool, plugin marketplace, or `$HOME/.baoyu-skills/baoyu-image-gen/`).

## Fallback: spawn the wrapper directly

Only when `baoyu-image-gen` is NOT installed in the current runtime. Discover the wrapper's location at runtime — do NOT hard-code `../../packages/...` from this skill:

1. **Honor explicit override**: if `$BAOYU_CODEX_IMAGEGEN_BIN` is set and points to a real file, use that path. It may be `.ts` (spawn `bun <path>`) or `.sh`/binary (spawn directly).
2. **Search the plugin root**: walk up from this skill's directory looking for `packages/baoyu-codex-imagegen/src/main.ts`. If found, that is the wrapper. Spawn it with `bun`.
3. **Last resort**: tell the user that `codex-imagegen` is not available in this runtime and ask whether to install the `baoyu-skills` plugin (or set `BAOYU_CODEX_IMAGEGEN_BIN`) or pick another backend.

Once located, the invocation shape is:

```bash
bun <WRAPPER>/main.ts \
  --image <ABSOLUTE_output> \
  --prompt-file <ABSOLUTE_prompts/NN-slide-{slug}.md> \
  --aspect <ratio> \
  [--ref <ABSOLUTE_file>]... \
  [--timeout <ms>] \
  [--cache-dir ~/.cache/baoyu-codex-imagegen] \
  [--log-file <ABSOLUTE_jsonl_log_path>]
```

If `bun` is missing, `npx -y bun <WRAPPER>/main.ts ...` works as a fallback.

## Parameter notes

- **All filesystem inputs** are auto-resolved against `process.cwd()` when relative, but agents should pass absolute paths to be robust against cwd drift.
- **`--timeout`** defaults to `300000` (5 min) per `codex exec` attempt. Raise (e.g. `--timeout 600000` for 10 min) on slow networks or large prompts.
- **`--cache-dir`** is off by default. Enable for repeatable runs to skip redundant generations of the same prompt+aspect+refs.
- **Authentication**: the wrapper uses the user's Codex subscription — no `OPENAI_API_KEY` is read or sent.

## Stdout contract

Single JSON line:

- Success: `{"status":"ok","path":"...","bytes":N,"elapsed_seconds":N,"thread_id":"...","attempts":N,"cached":bool,...}`
- Failure: `{"status":"error","path":"...","bytes":0,"error":"...","error_kind":"..."}`

`error_kind` values: `codex_not_installed`, `invalid_args`, `prompt_file_missing`, `spawn_failed`, `timeout`, `no_image_gen_tool_use`, `output_missing`, `invalid_png`, `agent_refused`, `lock_busy`.

On retryable errors (timeout, spawn_failed, no_image_gen_tool_use, output_missing, invalid_png, agent_refused), ask the user whether to retry or fall back to another backend.

## Batch semantics

- Codex `image_gen` returns **one image per call** (`n=1` only). Multi-image jobs must dispatch one wrapper call per image.
- The wrapper does NOT accept a `--sessionId` flag. Chain/scene consistency must come from `--ref` reference images.
- `--size` and `--quality` are silently ignored — Codex picks pixel dimensions from `--aspect`.
references/config/preferences-schema.md
# EXTEND.md Schema

Structure for user preferences in `.baoyu-skills/baoyu-slide-deck/EXTEND.md`.

## Full Schema

```yaml
# Slide Deck Preferences

## Defaults
style: blueprint              # Preset name OR "custom"
audience: general             # beginners | intermediate | experts | executives | general
language: auto                # auto | en | zh | ja | etc.
review: true                  # true = review outline before generation
preferred_image_backend: auto # auto | ask | <backend-id>
generation_batch_size: 4      # 1-8, used when backend/runtime supports batch or parallel slide generation

## Custom Dimensions (only when style: custom)
dimensions:
  texture: clean              # clean | grid | organic | pixel | paper
  mood: professional          # professional | warm | cool | vibrant | dark | neutral
  typography: geometric       # geometric | humanist | handwritten | editorial | technical
  density: balanced           # minimal | balanced | dense

## Custom Styles (optional)
custom_styles:
  my-style:
    texture: organic
    mood: warm
    typography: humanist
    density: minimal
    description: "My custom warm and friendly style"
```

## Field Descriptions

### Defaults

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `style` | string | `blueprint` | Preset name, `custom`, or custom style name |
| `audience` | string | `general` | Default target audience |
| `language` | string | `auto` | Output language (auto = detect from input) |
| `review` | boolean | `true` | Show outline review before generation |
| `preferred_image_backend` | string | `auto` | Image backend selection. `auto` = prefer runtime-native tool, fall back to the only installed backend, ask if multiple non-native are present. `ask` = always confirm on every run. `<backend-id>` (e.g., `codex-imagegen`, `baoyu-image-gen`, `image_generate`) = pin this backend when available; fall back to `auto` when it isn't. Absent = `auto`. Resolution logic is documented in `SKILL.md`'s `## Image Generation Tools` section. |
| `generation_batch_size` | int | 4 | Number of slide images to dispatch per batch when the backend has native batch support or the runtime can issue parallel generation calls. Clamp invalid values to 1-8. Current user request overrides this value. |

### Custom Dimensions

Only used when `style: custom`. Defines dimension values directly.

| Field | Options | Default |
|-------|---------|---------|
| `texture` | clean, grid, organic, pixel, paper | clean |
| `mood` | professional, warm, cool, vibrant, dark, neutral | professional |
| `typography` | geometric, humanist, handwritten, editorial, technical | geometric |
| `density` | minimal, balanced, dense | balanced |

### Custom Styles

Define reusable custom dimension combinations.

```yaml
custom_styles:
  style-name:
    texture: <texture>
    mood: <mood>
    typography: <typography>
    density: <density>
    description: "Optional description"
```

Then use with: `/baoyu-slide-deck content.md --style style-name`

## Minimal Examples

### Just change default style

```yaml
style: sketch-notes
```

### Prefer no reviews

```yaml
review: false
```

### Custom default dimensions

```yaml
style: custom
dimensions:
  texture: organic
  mood: professional
  typography: humanist
  density: minimal
```

### Define reusable custom style

```yaml
custom_styles:
  brand-style:
    texture: clean
    mood: vibrant
    typography: editorial
    density: balanced
    description: "Company brand style"
```

## File Locations

Priority order (first found wins):

1. `.baoyu-skills/baoyu-slide-deck/EXTEND.md` (project)
2. `$HOME/.baoyu-skills/baoyu-slide-deck/EXTEND.md` (user)

## First-Time Setup

When no EXTEND.md exists, the skill prompts for initial preferences:

1. Preferred style (preset or custom)
2. Default audience
3. Language preference
4. Review preference
5. Save location (project or user)

Creates EXTEND.md at chosen location.
references/confirmation.md
# Confirmation Questions

Concrete option copy for the confirmation steps. SKILL.md lists which questions to ask — this file gives the verbatim options used in Claude Code. Adapt copy to the runtime's native user-input tool; the intent matters more than the exact wording.

## Round 1 (Always)

Batch all five questions in a single `AskUserQuestion` call.

### Q1: Style

```yaml
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
```

### Q2: Audience

```yaml
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
```

### Q3: Slide Count

```yaml
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
```

### Q4: Review Outline

```yaml
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
```

### Q5: Review Prompts

```yaml
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 — Custom Dimensions

Triggered only when Q1 of Round 1 = "Custom dimensions". Batch all four dimension questions.

### Texture

```yaml
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
```

`paper` is also valid — accept via "Other".

### Mood

```yaml
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
  - label: macaron
    description: Pastel blocks on cream
```

`dark`, `neutral` valid via "Other".

### Typography

```yaml
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
```

`technical` valid via "Other".

### Density

```yaml
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
```

## Outline Review (Step 4)

```yaml
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
```

## Prompt Review (Step 6)

```yaml
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
```

## Existing Content (Step 1.3)

```yaml
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
```
references/content-rules.md
# Content & Style Rules

Guidelines for slide deck content quality and style consistency.

## Content Rules

### 1. Respect Reader Attention
- Each slide should communicate ONE main idea
- Remove redundant information
- Prioritize clarity over comprehensiveness

### 2. Data Traceability
- All statistics must include source attribution
- Cite sources directly on slides with data
- Use specific numbers over vague claims

### 3. Self-Contained Prompts
- Every detail must be in the image prompt
- No external references (e.g., "like slide 2")
- Include all colors, layouts, and content explicitly

### 4. No Placeholders
- Every element must be fully specified
- No "[insert data here]" or "TBD"
- All text content finalized before generation

## Style Rules

### 1. Narrative Headlines
Headlines tell the story, not label the content.

| Bad | Good |
|-----|------|
| "Key Statistics" | "Usage doubled in 6 months" |
| "Our Solution" | "One platform replaces five tools" |
| "Benefits" | "Teams save 10 hours weekly" |

### 2. Avoid AI Clichés
Remove these patterns:
- "Dive into", "explore", "journey"
- "Let's look at", "let me show you"
- "Exciting", "amazing", "revolutionary"
- "In conclusion", "to summarize"

### 3. Meaningful Back Cover
Not just "Thank you" or "Questions?"

Include one of:
- Clear call-to-action
- Memorable key takeaway
- Thought-provoking closing statement
- Contact information with purpose

### 4. Consistent Visual Language
Throughout the deck:
- Same icon style
- Same color usage patterns
- Same layout grid system
- Same typography hierarchy

## Slide Structure

| Position | Type | Purpose |
|----------|------|---------|
| 1 | Cover | Title, visual hook, topic introduction |
| 2 to N-1 | Content | Key points, data, explanations |
| N | Back Cover | Summary, call-to-action, memorable close |

## Key Specifications

| Specification | Value |
|---------------|-------|
| Aspect Ratio | 16:9 (landscape) |
| Slide Count | Dynamic based on content |
| Required Slides | Cover + Back Cover minimum |
| Footers | None (no slide numbers, logos) |
| Language Priority | `--lang` → source language → ask user |
| Tone | Direct, confident (avoid AI phrases) |

## Style Quick Reference

| Style | Visual Summary |
|-------|----------------|
| `sketch-notes` | Hand-drawn, warm off-white, conceptual icons |
| `blueprint` | Technical schematics, grid texture, blue tones |
| `bold-editorial` | High contrast, dark backgrounds, magazine impact |
| `vector-illustration` | Flat vector, black outlines, retro colors |
| `minimal` | Maximum whitespace, single accent, zen-like |
| `storytelling` | Full-bleed imagery, cinematic, emotional |
| `warm` | Soft gradients, rounded shapes, wellness palette |
| `notion` | Dashboard aesthetic, clean data viz, SaaS-inspired |
| `corporate` | Navy/gold, structured layouts, business polish |
| `playful` | Vibrant coral/teal/yellow, dynamic, energetic |

Full style specifications: `references/styles/<style>.md`
references/design-guidelines.md
# Design Guidelines

Detailed design principles for slide decks.

## Audience Guidelines

Design decisions adapt to target audience. Use `--audience` to set.

| Audience | Content Density | Visual Style | Terminology | Slides |
|----------|-----------------|--------------|-------------|--------|
| `beginners` | Low | Friendly, illustrative | Plain language | 8-15 |
| `intermediate` | Medium | Balanced, structured | Some jargon OK | 10-20 |
| `experts` | High | Data-rich, precise | Technical terms | 12-25 |
| `executives` | Low-Medium | Clean, impactful | Business language | 8-12 |
| `general` | Medium | Accessible, engaging | Minimal jargon | 10-18 |

### Audience → Density Mapping

Recommended density dimension based on audience:

| Audience | Recommended Density | Rationale |
|----------|-------------------|-----------|
| `executives` | minimal | One insight per slide, respect time |
| `beginners` | minimal → balanced | Single concepts, build understanding |
| `general` | balanced | Accessible but informative |
| `intermediate` | balanced | Standard information density |
| `experts` | balanced → dense | Can handle more data per slide |

**Automatic Density Selection**:
- If `--audience executives` → default to `minimal` density
- If `--audience beginners` → default to `minimal` or `balanced`
- If `--audience experts` → allow `dense` density
- Otherwise → default to `balanced`

### Audience-Specific Principles

**Beginners**:
- One concept per slide
- Visual metaphors over abstract diagrams
- Step-by-step progression
- Generous whitespace

**Experts**:
- Multiple data points per slide acceptable
- Technical diagrams with precise labels
- Assume domain knowledge
- Dense but organized information

**Executives**:
- Lead with insights, not data
- "So what?" on every slide
- Decision-enabling content
- Bottom-line upfront (BLUF)

## Visual Hierarchy Principles

| Principle | Description |
|-----------|-------------|
| Focal Point | ONE dominant element per slide draws attention first |
| Rule of Thirds | Position key elements at grid intersections |
| Z-Pattern | Guide eye: top-left → top-right → bottom-left → bottom-right |
| Size Contrast | Headlines 2-3x larger than body text |
| Breathing Room | Minimum 10% margin from all edges |

## Content Density

See `references/dimensions/density.md` for full density dimension specs.

| Level | Description | Use When |
|-------|-------------|----------|
| High | Multiple data points, detailed charts, dense text | Expert audience, technical reviews |
| Medium | Key points with supporting details | General business, mixed audiences |
| Low | One main idea, large visuals, minimal text | Beginners, keynotes, emotional impact |

**High-Density Principles** (McKinsey-style):
- Every element earns its space
- Data speaks louder than decoration
- Annotations explain insights, not describe data
- White space is strategic, not filler

**Density by Slide Type**:
| Slide Type | Recommended Density |
|------------|-------------------|
| Cover/Title | minimal |
| Agenda/Overview | balanced |
| Content/Analysis | balanced or dense |
| Data/Metrics | dense |
| Quote/Impact | minimal |
| Summary/Takeaway | balanced |

## Color Selection

See `references/dimensions/mood.md` for full mood dimension specs.

**Content-First Approach**:
1. Analyze content topic, mood, and industry
2. Consider target audience expectations
3. Match palette to subject matter
4. Ensure strong contrast for readability

**Quick Palette Guide**:
| Content Type | Recommended Mood |
|--------------|-----------------|
| Technical/Architecture | cool |
| Educational/Friendly | warm |
| Corporate/Professional | professional |
| Creative/Artistic | vibrant |
| Scientific/Medical | cool or neutral |
| Entertainment/Gaming | dark or vibrant |

## Typography Principles

See `references/dimensions/typography.md` for full typography dimension specs.

| Element | Treatment |
|---------|-----------|
| Headlines | Bold, 2-3x body size, narrative style |
| Body Text | Regular weight, readable size |
| Captions | Smaller, lighter weight |
| Data Labels | Monospace for technical content |
| Emphasis | Use bold or color, not underlines |

## Font Recommendations

**English Fonts**:
| Font | Style | Best For |
|------|-------|----------|
| Liter | Sans-serif, geometric | Modern, clean, technical |
| HedvigLettersSans | Sans-serif, distinctive | Brand-forward, creative |
| Oranienbaum | High-contrast serif | Elegant, classical |
| SortsMillGoudy | Classical serif | Traditional, readable |
| Coda | Round sans-serif | Friendly, approachable |

**Chinese Fonts**:
| Font | Style | Best For |
|------|-------|----------|
| MiSans | Modern sans-serif | Clean, versatile, screen-optimized |
| Noto Sans SC | Neutral sans-serif | Standard, multilingual |
| siyuanSongti | Refined Song typeface | Elegant, editorial |
| alimamashuheiti | Geometric sans-serif | Commercial, structured |
| LXGW Bright | Song-Kai hybrid | Warm, readable |

**Multilingual Pairing**:
| Use Case | English | Chinese |
|----------|---------|---------|
| Technical | Liter | MiSans |
| Editorial | Oranienbaum | siyuanSongti |
| Friendly | Coda | LXGW Bright |
| Corporate | HedvigLettersSans | alimamashuheiti |

## Visual Elements Reference

See `references/dimensions/texture.md` for full texture dimension specs.

### Background Treatments

| Treatment | Description | Best For |
|-----------|-------------|----------|
| Solid color | Single background color | Clean, minimal |
| Split background | Two colors, diagonal or vertical | Contrast, sections |
| Gradient | Subtle vertical or diagonal fade | Modern, dynamic |
| Textured | Pattern or texture overlay | Character, style |

### Typography Treatments

| Treatment | Description | Best For |
|-----------|-------------|----------|
| Size contrast | 3-4x difference headline vs body | Impact, hierarchy |
| All-caps headers | Uppercase with letter spacing | Authority, structure |
| Monospace data | Fixed-width for numbers/code | Technical, precision |
| Hand-drawn | Organic, imperfect letterforms | Friendly, approachable |

### Geometric Accents

| Element | Description | Best For |
|---------|-------------|----------|
| Diagonal dividers | Angled section separators | Energy, movement |
| Corner brackets | L-shaped frames | Focus, framing |
| Circles/hexagons | Shape frames for images | Modern, tech |
| Underline accents | Thick lines under headers | Emphasis, hierarchy |

## Consistency Requirements

| Element | Guideline |
|---------|-----------|
| Spacing | Consistent margins and padding throughout |
| Colors | Maximum 3-4 colors per slide, palette consistent across deck |
| Typography | Same font families and sizes for same content types |
| Visual Language | Repeat patterns, shapes, and treatments |

## Dimension Combination Guide

When combining dimensions, consider compatibility:

| Audience | Recommended Dimensions |
|----------|----------------------|
| Executives | clean + neutral + geometric + minimal |
| Beginners | organic + warm + humanist + minimal |
| General | any texture + any mood + humanist/geometric + balanced |
| Experts | grid/clean + cool + technical + balanced/dense |

| Content Type | Recommended Dimensions |
|--------------|----------------------|
| Tutorial | organic + warm + handwritten + balanced |
| Technical | grid + cool + technical + balanced |
| Business | clean + professional + geometric + balanced |
| Creative | organic + vibrant + humanist + balanced |
| Data-heavy | clean + cool + technical + dense |
references/dimensions/density.md
# Density Dimension

Information density per slide.

## Options

| Option | Content/Slide | Whitespace | Best For |
|--------|---------------|------------|----------|
| `minimal` | One focus point | Maximum | Executive briefings, keynotes, emotional impact |
| `balanced` | 2-3 key points | Standard | General presentations, mixed audiences |
| `dense` | Multiple data points | Compact | Data-heavy, technical reviews, detailed analysis |

## Rendering Guidelines

### minimal

- ONE main idea per slide
- Large visuals dominate
- Minimal text (headline + 1-2 lines max)
- Generous margins (15%+ from edges)
- Maximum breathing room between elements
- Let single element carry full weight

**Principles**:
- "One slide, one message"
- Visual > text
- Empty space is intentional
- Every element must earn its space

### balanced

- 2-3 key points per slide
- Standard margins (10% from edges)
- Balanced text/visual ratio
- Clear hierarchy with supporting details
- Comfortable reading experience

**Principles**:
- Primary point + supporting context
- Visuals complement text
- Structured but not crowded
- Good for diverse audiences

### dense

- Multiple data points acceptable
- Compact margins (5-8% from edges)
- Information-rich layouts
- Charts, tables, detailed annotations
- Assume engaged, attentive audience

**Principles**:
- Data speaks louder than decoration
- Annotations explain insights
- White space is strategic
- Every pixel serves a purpose

## Audience → Density Mapping

| Audience | Recommended Density |
|----------|-------------------|
| Executives | minimal |
| Beginners | minimal to balanced |
| General | balanced |
| Intermediate | balanced |
| Experts | balanced to dense |

## Slide Type → Density Guidelines

| Slide Type | Recommended Density |
|------------|-------------------|
| Cover/Title | minimal |
| Section break | minimal |
| Quote/Impact | minimal |
| Agenda/Overview | balanced |
| Content/Analysis | balanced or dense |
| Summary/Takeaway | balanced |
| Data/Metrics | dense |

## Content Guidelines Per Density

### minimal

| Element | Guideline |
|---------|-----------|
| Headlines | Large (40-60pt equivalent) |
| Body text | Minimal or none |
| Bullet points | 0-2 max |
| Visual elements | 1 dominant element |
| Charts/Data | 1 key stat only |

### balanced

| Element | Guideline |
|---------|-----------|
| Headlines | Medium-large (32-48pt equivalent) |
| Body text | 2-4 lines |
| Bullet points | 2-4 |
| Visual elements | 1-2 elements |
| Charts/Data | Simple charts OK |

### dense

| Element | Guideline |
|---------|-----------|
| Headlines | Medium (24-36pt equivalent) |
| Body text | Multiple paragraphs OK |
| Bullet points | 4-6+ |
| Visual elements | Multiple allowed |
| Charts/Data | Complex charts, tables OK |

## Combination Notes

| Density | Works Best With | Avoid With |
|---------|-----------------|------------|
| minimal | neutral mood, geometric typography | dense data content |
| balanced | any mood/typography | extremes (too sparse or too packed) |
| dense | cool mood, technical typography | handwritten typography, organic texture |
references/dimensions/mood.md
# Mood Dimension

Color temperature and palette style.

## Options

| Option | Color Temperature | Palette Style | Best For |
|--------|-------------------|---------------|----------|
| `professional` | Cool-neutral | Navy, gold, structured grays | Business, investor, corporate |
| `warm` | Warm | Earth tones, oranges, natural colors | Education, friendly, approachable |
| `macaron` | Warm | Pastel blocks (blue, mint, lavender, peach) on cream | Educational diagrams, knowledge sharing |
| `cool` | Cool | Blues, grays, cyan, teal | Technical, data, analytical |
| `vibrant` | Varied | High saturation, bold colors | Marketing, creative, attention-grabbing |
| `dark` | Dark | Deep backgrounds with bright accents | Entertainment, gaming, atmospheric |
| `neutral` | Neutral | Minimal color, grayscale focus | Executive, minimal, sophisticated |

## Palette Specifications

### professional

```
Background: #FFFFFF (Pure White)
Primary Text: #1E3A5F (Navy)
Secondary Text: #4A5568 (Dark Gray)
Accent 1: #C9A227 (Gold)
Accent 2: #3D5A80 (Light Navy)
```

### warm

```
Background: #FAF8F0 (Warm Off-White)
Primary Text: #2C3E50 (Deep Charcoal)
Secondary Text: #4A4A4A (Deep Brown)
Accent 1: #F4A261 (Soft Orange)
Accent 2: #E9C46A (Mustard Yellow)
Accent 3: #87A96B (Sage Green)
```

### macaron

```
Background: #F5F0E8 (Warm Cream)
Primary Text: #2D2D2D (Deep Charcoal)
Muted Text: #6B6B6B (Warm Gray)
Macaron Blue: #A8D8EA (Sky Blue)
Macaron Mint: #B5E5CF (Mint Green)
Macaron Lavender: #D5C6E0 (Lavender)
Macaron Peach: #FFD5C2 (Peach)
Accent: #E8655A (Coral Red)
```

### cool

```
Background: #FAF8F5 (Blueprint Off-White)
Primary Text: #334155 (Deep Slate)
Secondary Text: #64748B (Slate Gray)
Accent 1: #2563EB (Engineering Blue)
Accent 2: #1E3A5F (Navy Blue)
Accent 3: #BFDBFE (Light Blue)
```

### vibrant

```
Background: #FFFFFF or #1A1A2E (Light or Dark)
Primary Text: #1A1A2E or #FFFFFF
Accent 1: #E94560 (Coral Red)
Accent 2: #0F3460 (Deep Blue)
Accent 3: #16C79A (Teal Green)
Accent 4: #F9B208 (Golden Yellow)
```

### dark

```
Background: #0D1117 (Deep Black)
Primary Text: #E6EDF3 (Soft White)
Secondary Text: #8B949E (Muted Gray)
Accent 1: #58A6FF (Bright Blue)
Accent 2: #7EE787 (Bright Green)
Accent 3: #FF7B72 (Coral)
```

### neutral

```
Background: #FFFFFF (Pure White)
Primary Text: #18181B (Near Black)
Secondary Text: #71717A (Medium Gray)
Accent 1: #18181B (Black)
Accent 2: #A1A1AA (Light Gray)
```

## Rendering Guidelines

### professional

- Restrained use of accent colors
- Gold for emphasis only
- Clean, institutional feel
- Balanced contrast

### warm

- Generous use of warm tones
- Natural, approachable colors
- Soft transitions between colors
- Welcoming atmosphere

### macaron

- Soft pastel color blocks as distinct information zones
- Each zone uses one macaron color (blue, mint, lavender, peach)
- Coral Red accent used sparingly for emphasis
- Warm cream background maintains friendly, approachable feel

### cool

- Blue-dominant palette
- Technical precision in color use
- High contrast for clarity
- Analytical, trustworthy feel

### vibrant

- Bold color combinations
- High saturation throughout
- Dynamic color contrasts
- Energetic visual presence

### dark

- Deep backgrounds dominate
- Accent colors pop against dark
- Glowing/luminous effects
- Cinematic atmosphere

### neutral

- Minimal color usage
- Typography carries weight
- Grayscale hierarchy
- Maximum sophistication

## Combination Notes

| Mood | Works Best With | Avoid With |
|------|-----------------|------------|
| professional | clean texture, geometric typography | organic texture, handwritten |
| warm | organic texture, humanist typography | pixel texture, minimal density |
| macaron | organic texture, handwritten typography | pixel texture, dark mood |
| cool | grid texture, technical typography | paper texture, handwritten |
| vibrant | pixel/organic texture, editorial typography | neutral mood overlaps |
| dark | clean/pixel texture, technical typography | paper texture |
| neutral | clean texture, geometric typography | organic texture, vibrant elements |
references/dimensions/presets.md
# Preset → Dimension Mapping

Maps 16 preset styles to their dimension combinations.

## Mapping Table

| Preset | Texture | Mood | Typography | Density |
|--------|---------|------|------------|---------|
| blueprint | grid | cool | technical | balanced |
| chalkboard | organic | warm | handwritten | balanced |
| corporate | clean | professional | geometric | balanced |
| minimal | clean | neutral | geometric | minimal |
| sketch-notes | organic | warm | handwritten | balanced |
| hand-drawn-edu | organic | macaron | handwritten | balanced |
| watercolor | organic | warm | humanist | minimal |
| dark-atmospheric | clean | dark | editorial | balanced |
| notion | clean | neutral | geometric | dense |
| bold-editorial | clean | vibrant | editorial | balanced |
| editorial-infographic | clean | cool | editorial | dense |
| fantasy-animation | organic | vibrant | handwritten | minimal |
| intuition-machine | clean | cool | technical | dense |
| pixel-art | pixel | vibrant | technical | balanced |
| scientific | clean | cool | technical | dense |
| vector-illustration | clean | vibrant | humanist | balanced |
| vintage | paper | warm | editorial | balanced |

## Preset Details

### blueprint
- **Dimensions**: grid + cool + technical + balanced
- **Feel**: Engineering precision, analytical clarity
- **Auto-select**: architecture, system, data, analysis, technical

### chalkboard
- **Dimensions**: organic + warm + handwritten + balanced
- **Feel**: Classroom warmth, educational
- **Auto-select**: classroom, teaching, school, chalkboard

### corporate
- **Dimensions**: clean + professional + geometric + balanced
- **Feel**: Business credibility, institutional trust
- **Auto-select**: investor, quarterly, business, corporate

### minimal
- **Dimensions**: clean + neutral + geometric + minimal
- **Feel**: Maximum sophistication, executive focus
- **Auto-select**: executive, minimal, clean, simple

### sketch-notes
- **Dimensions**: organic + warm + handwritten + balanced
- **Feel**: Friendly learning, approachable education
- **Auto-select**: tutorial, learn, education, guide, beginner

### hand-drawn-edu
- **Dimensions**: organic + macaron + handwritten + balanced
- **Feel**: Hand-drawn educational infographic, macaron pastel zones
- **Auto-select**: hand-drawn, infographic, diagram, process, onboarding

### watercolor
- **Dimensions**: organic + warm + humanist + minimal
- **Feel**: Artistic, natural, lifestyle
- **Auto-select**: lifestyle, wellness, travel, artistic

### dark-atmospheric
- **Dimensions**: clean + dark + editorial + balanced
- **Feel**: Cinematic, entertainment
- **Auto-select**: entertainment, music, gaming, atmospheric

### notion
- **Dimensions**: clean + neutral + geometric + dense
- **Feel**: SaaS professional, data-forward
- **Auto-select**: saas, product, dashboard, metrics

### bold-editorial
- **Dimensions**: clean + vibrant + editorial + balanced
- **Feel**: Magazine impact, keynote drama
- **Auto-select**: launch, marketing, keynote, magazine

### editorial-infographic
- **Dimensions**: clean + cool + editorial + dense
- **Feel**: Publication quality, informative
- **Auto-select**: explainer, journalism, science communication

### fantasy-animation
- **Dimensions**: organic + vibrant + handwritten + minimal
- **Feel**: Magical, storytelling
- **Auto-select**: story, fantasy, animation, magical

### intuition-machine
- **Dimensions**: clean + cool + technical + dense
- **Feel**: Technical briefing, bilingual documentation
- **Auto-select**: briefing, academic, research, bilingual

### pixel-art
- **Dimensions**: pixel + vibrant + technical + balanced
- **Feel**: Retro gaming, developer culture
- **Auto-select**: gaming, retro, pixel, developer

### scientific
- **Dimensions**: clean + cool + technical + dense
- **Feel**: Academic precision, research quality
- **Auto-select**: biology, chemistry, medical, scientific

### vector-illustration
- **Dimensions**: clean + vibrant + humanist + balanced
- **Feel**: Flat design, friendly creative
- **Auto-select**: creative, children, kids, cute

### vintage
- **Dimensions**: paper + warm + editorial + balanced
- **Feel**: Historical, heritage storytelling
- **Auto-select**: history, heritage, vintage, expedition

## Building Custom Combinations

When user selects "Custom dimensions", combine any:

- **Texture** (5): clean, grid, organic, pixel, paper
- **Mood** (6): professional, warm, cool, vibrant, dark, neutral
- **Typography** (5): geometric, humanist, handwritten, editorial, technical
- **Density** (3): minimal, balanced, dense

Total possible combinations: 5 × 7 × 5 × 3 = **525 unique styles**

## Recommended Combinations (Beyond Presets)

| Custom Name | Texture | Mood | Typography | Density | Use Case |
|-------------|---------|------|------------|---------|----------|
| tech-minimal | clean | neutral | technical | minimal | Developer keynotes |
| warm-editorial | paper | warm | editorial | balanced | Heritage brands |
| dark-technical | grid | dark | technical | dense | Security, DevOps |
| playful-clean | clean | vibrant | humanist | balanced | Startups, apps |
references/dimensions/texture.md
# Texture Dimension

Visual texture and background treatment.

## Options

| Option | Background | Visual Elements | Best For |
|--------|------------|-----------------|----------|
| `clean` | Pure solid color, no texture | Clean lines, geometric shapes | Executive, minimal, corporate |
| `grid` | Subtle grid overlay | Grid lines, schematics, technical diagrams | Technical, architecture, engineering |
| `organic` | Soft textures, hand-drawn feel | Brush strokes, watercolor, sketchy lines | Creative, educational, friendly |
| `pixel` | Chunky pixels, 8-bit aesthetic | Pixel art, retro game elements | Gaming, developer, nostalgic |
| `paper` | Aged/textured paper | Vintage elements, stamps, weathering | Historical, heritage, storytelling |

## Rendering Guidelines

### clean

- Solid background colors with no visible texture
- Crisp, sharp edges on all elements
- Digital precision and clarity
- Maximum contrast for readability

### grid

- Light grid overlay (5-10% opacity)
- Engineering paper or blueprint feel
- Alignment guides visible but subtle
- Technical drawing aesthetic

### organic

- Paper grain or canvas texture
- Imperfect edges, natural variations
- Hand-painted color fills
- Casual, approachable feel

### pixel

- Visible pixel grid (chunky, not fine)
- 8-bit color palette aesthetic
- Aliased edges (no smoothing)
- Retro game UI elements

### paper

- Aged paper texture (subtle creases, discoloration)
- Vintage printing artifacts
- Sepia or warm tones
- Historical document feel

## Combination Notes

| Texture | Works Best With | Avoid With |
|---------|-----------------|------------|
| clean | professional, neutral moods | handwritten typography |
| grid | cool, professional moods | handwritten, vibrant moods |
| organic | warm, macaron, vibrant moods | technical typography |
| pixel | vibrant, dark moods | editorial typography |
| paper | warm moods | geometric typography, minimal density |
references/dimensions/typography.md
# Typography Dimension

Headline and body text styling.

## Options

| Option | Headline Style | Body Style | Best For |
|--------|----------------|------------|----------|
| `geometric` | Modern sans-serif, clean angles | Clean sans-serif | Corporate, tech, modern |
| `humanist` | Friendly sans-serif, warm curves | Readable sans-serif | Education, general audiences |
| `handwritten` | Marker/brush, organic feel | Casual script or print | Creative, sketch, friendly |
| `editorial` | Bold serif/sans mix, magazine style | Classic serif | Keynote, magazine, premium |
| `technical` | Monospace accents, precise | Clean sans-serif | Developer, data, engineering |

## Rendering Guidelines

### geometric

**Headlines**: Modern geometric sans-serif with clean angles and consistent stroke width. Think Futura, Avenir, or Proxima Nova. Bold to semi-bold weight. Perfect circles in O, G characters.

**Body**: Clean sans-serif optimized for readability. Regular weight. Consistent x-height. Sufficient letter spacing.

**Characteristics**:
- Mathematical precision in letterforms
- Consistent stroke widths
- Perfect geometry in curves
- Modern, authoritative presence

### humanist

**Headlines**: Friendly sans-serif with subtle stroke variations. Think Frutiger, Open Sans, or Myriad. Medium to semi-bold weight. Warm, approachable letterforms.

**Body**: Readable humanist sans-serif. Comfortable line height. Slight calligraphic influence.

**Characteristics**:
- Warm, approachable feel
- Subtle stroke contrast
- Open counters for readability
- Natural, human touch

### handwritten

**Headlines**: Bold hand-written marker or brush lettering. Thick strokes with organic edges. Slightly uneven baseline. Render as actual hand-drawn letters.

**Body**: Clear handwritten style mimicking notes. Casual but legible. Natural variation in letter forms.

**Characteristics**:
- Organic, imperfect letterforms
- Visible brush/pen character
- Casual, personal feel
- NOT computer fonts - actual drawn letters

### editorial

**Headlines**: Bold serif or high-contrast sans-serif. Magazine cover style. Dramatic scale contrast. Think Playfair Display, Didot, or bold condensed sans.

**Body**: Classic serif for extended reading. Elegant, refined letterforms. Traditional publishing quality.

**Characteristics**:
- High contrast (thick/thin strokes)
- Dramatic headlines
- Sophisticated presence
- Premium, publication quality

### technical

**Headlines**: Clean sans-serif with monospace accents for data/code. Precise, engineered appearance. Think SF Mono for code, Inter for headers.

**Body**: Clean sans-serif optimized for technical content. Fixed-width for numbers and code.

**Characteristics**:
- Monospace for data elements
- Precise alignment
- Clear number distinction (0 vs O, 1 vs l)
- Engineering precision

## Font Rendering Instructions

Since image generators cannot use font names, describe visual characteristics:

| Option | Headline Description | Body Description |
|--------|---------------------|------------------|
| geometric | "bold geometric sans-serif with perfect circular O shapes" | "clean modern sans-serif" |
| humanist | "friendly rounded sans-serif with warm letterforms" | "readable humanist sans-serif" |
| handwritten | "bold hand-drawn marker lettering with organic strokes" | "casual handwritten notes style" |
| editorial | "dramatic high-contrast serif with thick-thin stroke variation" | "elegant classic serif" |
| technical | "precise sans-serif with monospace numbers" | "technical sans-serif, fixed-width for code" |

## Combination Notes

| Typography | Works Best With | Avoid With |
|------------|-----------------|------------|
| geometric | clean texture, professional/neutral mood | organic texture |
| humanist | organic/clean texture, warm mood | pixel texture |
| handwritten | organic/paper texture, warm/vibrant mood | grid texture, professional mood |
| editorial | clean texture, vibrant/professional mood | pixel texture |
| technical | grid/clean texture, cool/dark mood | paper texture, warm mood |
references/layouts.md
# Layout Gallery

Optional layout hints for individual slides. Specify in outline's `// LAYOUT` section.

## Slide-Specific Layouts

| Layout | Description | Best For |
|--------|-------------|----------|
| `title-hero` | Large centered title + subtitle | Cover slides, section breaks |
| `quote-callout` | Featured quote with attribution | Testimonials, key insights |
| `key-stat` | Single large number as focal point | Impact statistics, metrics |
| `split-screen` | Half image, half text | Feature highlights, comparisons |
| `icon-grid` | Grid of icons with labels | Features, capabilities, benefits |
| `two-columns` | Content in balanced columns | Paired information, dual points |
| `three-columns` | Content in three columns | Triple comparisons, categories |
| `image-caption` | Full-bleed image + text overlay | Visual storytelling, emotional |
| `agenda` | Numbered list with highlights | Session overview, roadmap |
| `bullet-list` | Structured bullet points | Simple content, lists |

## Infographic-Derived Layouts

| Layout | Description | Best For |
|--------|-------------|----------|
| `linear-progression` | Sequential flow left-to-right | Timelines, step-by-step |
| `binary-comparison` | Side-by-side A vs B | Before/after, pros-cons |
| `comparison-matrix` | Multi-factor grid | Feature comparisons |
| `hierarchical-layers` | Pyramid or stacked levels | Priority, importance |
| `hub-spoke` | Central node with radiating items | Concept maps, ecosystems |
| `bento-grid` | Varied-size tiles | Overview, summary |
| `funnel` | Narrowing stages | Conversion, filtering |
| `dashboard` | Metrics with charts/numbers | KPIs, data display |
| `venn-diagram` | Overlapping circles | Relationships, intersections |
| `circular-flow` | Continuous cycle | Recurring processes |
| `winding-roadmap` | Curved path with milestones | Journey, timeline |
| `tree-branching` | Parent-child hierarchy | Org charts, taxonomies |
| `iceberg` | Visible vs hidden layers | Surface vs depth |
| `bridge` | Gap with connection | Problem-solution |

**Usage**: Add `Layout: <name>` in slide's `// LAYOUT` section.

## Layout Selection Tips

**Match Layout to Content**:
| Content Type | Recommended Layouts |
|--------------|-------------------|
| Single narrative | `bullet-list`, `image-caption` |
| Two concepts | `split-screen`, `binary-comparison` |
| Three items | `three-columns`, `icon-grid` |
| Process/Steps | `linear-progression`, `winding-roadmap` |
| Data/Metrics | `dashboard`, `key-stat` |
| Relationships | `hub-spoke`, `venn-diagram` |
| Hierarchy | `hierarchical-layers`, `tree-branching` |

**Layout Flow Patterns**:
| Position | Recommended Layouts |
|----------|-------------------|
| Opening | `title-hero`, `agenda` |
| Middle | Content-specific layouts |
| Closing | `quote-callout`, `key-stat` |

**Common Mistakes to Avoid**:
- Using 3-column layout for 2 items (leaves columns empty)
- Stacking charts/tables below text (use side-by-side instead)
- Image layouts without actual images
- Quote layouts for emphasis (use only for real quotes with attribution)
references/modification-guide.md
# Slide Modification Guide

Workflows for modifying individual slides after initial generation.

## Edit Single Slide

Regenerate a specific slide with modified content:

1. Identify slide to edit (e.g., `03-slide-key-findings.png`)
2. Update prompt in `prompts/03-slide-key-findings.md`
3. If content changes significantly, update slug in filename
4. Regenerate image using same session ID
5. Regenerate PPTX and PDF

## Add New Slide

Insert a new slide at specified position:

1. Specify insertion position (e.g., after slide 3)
2. Create new prompt with appropriate slug (e.g., `04-slide-new-section.md`)
3. Generate new slide image
4. **Renumber files**: All subsequent slides increment NN by 1
   - `04-slide-conclusion.png` → `05-slide-conclusion.png`
   - Slugs remain unchanged
5. Update `outline.md` with new slide entry
6. Regenerate PPTX and PDF

## Delete Slide

Remove a slide and renumber:

1. Identify slide to delete (e.g., `03-slide-key-findings.png`)
2. Remove image file and prompt file
3. **Renumber files**: All subsequent slides decrement NN by 1
   - `04-slide-conclusion.png` → `03-slide-conclusion.png`
   - Slugs remain unchanged
4. Update `outline.md` to remove slide entry
5. Regenerate PPTX and PDF

## File Naming Convention

Files use meaningful slugs for better readability:

```
NN-slide-[slug].png
NN-slide-[slug].md (in prompts/)
```

Examples:
- `01-slide-cover.png`
- `02-slide-problem-statement.png`
- `03-slide-key-findings.png`
- `04-slide-back-cover.png`

## Slug Rules

| Rule | Description |
|------|-------------|
| Format | Kebab-case (lowercase, hyphens) |
| Source | Derived from slide title/content |
| Uniqueness | Must be unique within the deck |
| Updates | Change slug when content changes significantly |

## Renumbering Rules

| Scenario | Action |
|----------|--------|
| Add slide | Increment NN for all subsequent slides |
| Delete slide | Decrement NN for all subsequent slides |
| Reorder slides | Update NN to match new positions |
| Edit slide | NN unchanged, update slug if needed |

**Important**: Slugs remain unchanged during renumbering. Only the NN prefix changes.

## Post-Modification Checklist

After any modification:

- [ ] Image file renamed/created correctly
- [ ] Prompt file renamed/created correctly
- [ ] Subsequent files renumbered (if add/delete)
- [ ] `outline.md` updated to reflect changes
- [ ] PPTX regenerated
- [ ] PDF regenerated
- [ ] Slide count in outline header updated
references/outline-template.md
# Outline Template

Standard structure for slide deck outlines with style instructions.

## Outline Format

```markdown
# Slide Deck Outline

**Topic**: [topic description]
**Style**: [preset name OR "custom"]
**Dimensions**: [texture] + [mood] + [typography] + [density]
**Audience**: [target audience]
**Language**: [output language]
**Slide Count**: N slides
**Generated**: YYYY-MM-DD HH:mm

---

<STYLE_INSTRUCTIONS>
Design Aesthetic: [2-3 sentence description combining dimension characteristics]

Background:
  Texture: [from texture dimension]
  Base Color: [from mood dimension palette]

Typography:
  Headlines: [from typography dimension - describe visual appearance]
  Body: [from typography dimension - describe visual appearance]

Color Palette:
  Primary Text: [Name] ([Hex]) - [usage]
  Background: [Name] ([Hex]) - [usage]
  Accent 1: [Name] ([Hex]) - [usage]
  Accent 2: [Name] ([Hex]) - [usage]

Visual Elements:
  - [element 1 from texture + mood combination]
  - [element 2 with rendering guidance]
  - ...

Density Guidelines:
  - Content per slide: [from density dimension]
  - Whitespace: [from density dimension]

Style Rules:
  Do: [guidelines from dimension combinations]
  Don't: [anti-patterns from dimension combinations]
</STYLE_INSTRUCTIONS>

---

[Slide entries follow...]
```

## Building STYLE_INSTRUCTIONS from Dimensions

When using custom dimensions or presets, build STYLE_INSTRUCTIONS by combining:

### 1. Design Aesthetic

Combine characteristics from all four dimensions into 2-3 sentences:

| Texture | Contribution |
|---------|--------------|
| clean | "Clean, digital precision with crisp edges" |
| grid | "Technical grid overlay with engineering precision" |
| organic | "Hand-drawn feel with soft textures" |
| pixel | "Chunky pixel aesthetic with 8-bit charm" |
| paper | "Aged paper texture with vintage character" |

| Mood | Contribution |
|------|--------------|
| professional | "Professional navy and gold palette" |
| warm | "Warm earth tones creating approachable atmosphere" |
| cool | "Cool analytical blues and grays" |
| vibrant | "Bold, high-saturation colors with energy" |
| dark | "Deep cinematic backgrounds with glowing accents" |
| neutral | "Minimal grayscale sophistication" |

### 2. Background

From `references/dimensions/texture.md`:
- Texture description
- Base color from mood palette

### 3. Typography

From `references/dimensions/typography.md`:
- Headline visual description (NOT font names)
- Body text visual description (NOT font names)

**Important**: Describe appearance for image generation: "bold geometric sans-serif with perfect circular O shapes" NOT "Inter font".

### 4. Color Palette

From `references/dimensions/mood.md`:
- Copy the palette specifications for the selected mood
- Include hex codes and usage notes

### 5. Visual Elements

Combine texture and mood characteristics:

| Combination | Visual Elements |
|-------------|-----------------|
| clean + professional | Clean charts, outlined icons, structured grids |
| grid + cool | Technical schematics, dimension lines, blueprints |
| organic + warm | Hand-drawn icons, brush strokes, doodles |
| pixel + vibrant | Pixel art icons, retro game elements |
| paper + warm | Vintage stamps, aged elements, sepia overlays |

### 6. Density Guidelines

From `references/dimensions/density.md`:
- Content per slide limits
- Whitespace requirements
- Element count guidelines

### 7. Style Rules

Combine dimension-specific rules:

**Do rules by texture**:
- clean: Maintain sharp edges, use grid alignment
- grid: Show precise measurements, use technical diagrams
- organic: Allow imperfection, layer with subtle overlaps
- pixel: Keep aliased edges, use chunky elements
- paper: Add subtle aging effects, use warm tones

**Don't rules by texture**:
- clean: Don't use hand-drawn elements
- grid: Don't use organic curves
- organic: Don't use perfect geometry
- pixel: Don't smooth edges
- paper: Don't use bright digital colors

## Cover Slide Template

```markdown
## Slide 1 of N

**Type**: Cover
**Filename**: 01-slide-cover.png

// NARRATIVE GOAL
[What this slide achieves in the story arc]

// KEY CONTENT
Headline: [main title]
Sub-headline: [supporting tagline]

// VISUAL
[Detailed visual description - specific elements, composition, mood]

// LAYOUT
Layout: [optional: layout name from gallery, e.g., title-hero]
[Composition, hierarchy, spatial arrangement]
```

## Content Slide Template

```markdown
## Slide X of N

**Type**: Content
**Filename**: {NN}-slide-{slug}.png

// NARRATIVE GOAL
[What this slide achieves in the story arc]

// KEY CONTENT
Headline: [main message - narrative, not label]
Sub-headline: [supporting context]
Body:
- [point 1 with specific detail]
- [point 2 with specific detail]
- [point 3 with specific detail]

// VISUAL
[Detailed visual description]

// LAYOUT
Layout: [optional: layout name from gallery]
[Composition, hierarchy, spatial arrangement]
```

## Back Cover Slide Template

```markdown
## Slide N of N

**Type**: Back Cover
**Filename**: {NN}-slide-back-cover.png

// NARRATIVE GOAL
[Meaningful closing - not just "thank you"]

// KEY CONTENT
Headline: [memorable closing statement or call-to-action]
Body: [optional summary points or next steps]

// VISUAL
[Visual that reinforces the core message]

// LAYOUT
Layout: [optional: layout name from gallery]
[Clean, impactful composition]
```

## STYLE_INSTRUCTIONS Block

The `<STYLE_INSTRUCTIONS>` block is the SINGLE SOURCE OF TRUTH for style information in this outline.

| Section | Content | Source |
|---------|---------|--------|
| Design Aesthetic | Overall visual direction | Combined from all dimensions |
| Background | Base color and texture details | texture + mood dimensions |
| Typography | Font descriptions (visual, not names) | typography dimension |
| Color Palette | Named colors with hex codes and usage | mood dimension |
| Visual Elements | Graphic elements with rendering instructions | texture + mood dimensions |
| Density Guidelines | Content limits and whitespace | density dimension |
| Style Rules | Do/Don't guidelines | Combined from dimensions |

**Important**:
- Typography descriptions must describe visual appearance (e.g., "rounded sans-serif", "bold geometric") since image generators cannot use font names
- Prompts should extract STYLE_INSTRUCTIONS from this outline, NOT re-read style files

## Preset → Dimensions Reference

When using a preset, look up dimensions in `references/dimensions/presets.md`:

| Preset | Dimensions |
|--------|------------|
| blueprint | grid + cool + technical + balanced |
| sketch-notes | organic + warm + handwritten + balanced |
| corporate | clean + professional + geometric + balanced |
| minimal | clean + neutral + geometric + minimal |
| ... | See presets.md for full mapping |

## Section Dividers

Use `---` (horizontal rule) between:
- Header metadata and STYLE_INSTRUCTIONS
- STYLE_INSTRUCTIONS and first slide
- Each slide entry

## Slide Numbering

- Cover is always Slide 1
- Content slides use sequential numbers
- Back Cover is always final slide (N)
- Filename prefix matches slide position: `01-`, `02-`, etc.

## Filename Slugs

Generate meaningful slugs from slide content:

| Slide Type | Slug Pattern | Example |
|------------|--------------|---------|
| Cover | `cover` | `01-slide-cover.png` |
| Content | `{topic-slug}` | `02-slide-problem-statement.png` |
| Back Cover | `back-cover` | `10-slide-back-cover.png` |

Slug rules:
- Kebab-case (lowercase, hyphens)
- Derived from headline or main topic
- Maximum 30 characters
- Unique within deck
references/styles/blueprint.md
# blueprint

Precise technical blueprint style with professional analytical visual presentation

## Design Aesthetic

Clean, structured visual metaphors using blueprints, diagrams, and schematics. Precise, analytical and aesthetically refined. Information presented in triptych or grid-based layouts with engineering precision.

## Background

- Color: Blueprint Off-White (#FAF8F5)
- Texture: Subtle grid overlay, light engineering paper feel

## Typography

### Primary Font (Headlines)

Neue Haas Grotesk Display Pro or similar clean sans-serif. Bold weight for titles. Precise letterforms with consistent spacing. Technical, authoritative presence.

### Secondary Font (Body)

Tiempos Text or similar elegant serif for body explanations. Clean, readable at smaller sizes. Professional editorial quality.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Blueprint Paper | #FAF8F5 | Primary background |
| Grid | Light Gray | #E5E5E5 | Background grid lines |
| Primary Text | Deep Slate | #334155 | Headlines, body text |
| Primary Accent | Engineering Blue | #2563EB | Key elements, highlights |
| Secondary Accent | Navy Blue | #1E3A5F | Supporting elements |
| Tertiary | Light Blue | #BFDBFE | Backgrounds, fills |
| Warning | Amber | #F59E0B | Warnings, emphasis points |

## Visual Elements

- Precise lines with consistent stroke weights
- Technical schematics and clean vector graphics
- Thin line work in technical drawing style
- Connection lines use straight lines or 90-degree angles only
- Data visualization with clean, minimal charts
- Dimension lines and measurement indicators
- Cross-section style diagrams
- Isometric or orthographic projections

## Style Rules

### Do

- Maintain consistent line weights throughout
- Use grid alignment for all elements
- Keep color palette restrained and unified
- Create clear visual hierarchy through scale
- Use geometric precision for all shapes

### Don't

- Use hand-drawn or organic shapes
- Add decorative flourishes
- Use curved connection lines
- Include photographic elements
- Add slide numbers, footers, or logos

## Best For

Technical architecture, system design, data analysis, professional business presentations, engineering documentation, process flows
references/styles/bold-editorial.md
# bold-editorial

High-impact magazine editorial style with bold visual expression

## Design Aesthetic

Strong visual impact at magazine cover level. Bold typography and dramatic contrast. Full-bleed imagery and large color blocks create commanding presence. Every slide feels like a premium publication cover.

## Background

- Color: Deep Black (#0A0A0A) primary, or Deep Blue (#0F172A) alternative
- Texture: None - clean solid backgrounds, or pure white with bold color blocks

## Typography

### Primary Font (Headlines)

Bold condensed typeface like Impact, Oswald Bold, or Bebas Neue. Oversized headlines that dominate the slide. All-caps for maximum impact. Tight letter-spacing.

### Secondary Font (Body)

Clean sans-serif such as Inter, SF Pro, or Helvetica Neue. Medium weight for body text. High contrast against background.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background Dark | Deep Black | #0A0A0A | Primary dark background |
| Background Alt | Deep Blue | #0F172A | Alternative dark background |
| Background Light | Pure White | #FFFFFF | Light mode background |
| Primary Text | Pure White | #FFFFFF | Text on dark backgrounds |
| Alt Text | Pure Black | #000000 | Text on light backgrounds |
| Accent 1 | Electric Blue | #3B82F6 | Primary highlights |
| Accent 2 | Bright Orange | #FB923C | Energy, urgency |
| Accent 3 | Magenta | #EC4899 | Creative, bold accents |
| Accent 4 | Neon Green | #22C55E | Success, growth |
| Accent 5 | Violet | #8B5CF6 | Innovation, premium |

## Visual Elements

- Strong typography as visual element itself
- Geometric shapes and bold color blocks
- Full-bleed images or solid color backgrounds
- High contrast gradients (subtle, not garish)
- Minimal decoration - let content speak
- Dynamic diagonal lines and angles
- Dramatic lighting effects on text

## Style Rules

### Do

- Use extreme scale contrast (huge headlines, small body)
- Create bold color block compositions
- Let negative space create tension
- Use full-bleed backgrounds
- Make every slide feel like a magazine cover

### Don't

- Use soft or muted colors
- Add unnecessary decorative elements
- Create busy, cluttered layouts
- Use thin or delicate typography
- Add slide numbers, footers, or logos

## Best For

Product launches, marketing presentations, keynote speeches, brand showcases, investor pitches, high-stakes presentations

references/styles/chalkboard.md
# chalkboard

Black chalkboard background with colorful chalk drawing style

## Design Aesthetic

Classic classroom chalkboard aesthetic with hand-drawn chalk illustrations. Nostalgic educational feel with imperfect, sketchy lines that capture the warmth of traditional teaching. Colorful chalk creates visual hierarchy while maintaining the authentic chalkboard experience.

## Background

- Color: Chalkboard Black (#1A1A1A) or Dark Green-Black (#1C2B1C)
- Texture: Realistic chalkboard texture with subtle scratches, dust particles, and faint eraser marks

## Typography

### Primary Font (Headlines)

Hand-drawn chalk lettering style. Bold, slightly uneven strokes with visible chalk texture. Imperfect baseline adds authenticity. White or bright colored chalk for emphasis.

### Secondary Font (Body)

Neater chalk handwriting for readability. Consistent sizing with natural variation. Light chalk texture, thinner strokes than headlines.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Chalkboard Black | #1A1A1A | Primary background |
| Alt Background | Green-Black | #1C2B1C | Traditional green board |
| Primary Text | Chalk White | #F5F5F5 | Main text, outlines |
| Accent 1 | Chalk Yellow | #FFE566 | Highlights, emphasis |
| Accent 2 | Chalk Pink | #FF9999 | Secondary highlights |
| Accent 3 | Chalk Blue | #66B3FF | Diagrams, links |
| Accent 4 | Chalk Green | #90EE90 | Success, nature |
| Accent 5 | Chalk Orange | #FFB366 | Warnings, energy |

## Visual Elements

- Hand-drawn chalk illustrations with sketchy, imperfect lines
- Chalk dust effects around text and key elements
- Doodles: stars, arrows, underlines, circles, checkmarks
- Mathematical formulas and simple diagrams
- Eraser smudges and chalk residue textures
- Wooden frame border optional
- Stick figures and simple icons
- Connection lines with hand-drawn feel

## Style Rules

### Do

- Maintain authentic chalk texture on all elements
- Use imperfect, hand-drawn quality throughout
- Add subtle chalk dust and smudge effects
- Create visual hierarchy with color variety
- Include playful doodles and annotations

### Don't

- Use perfect geometric shapes
- Create clean digital-looking lines
- Add photorealistic elements
- Use gradients or glossy effects
- Add slide numbers, footers, or logos

## Best For

Educational presentations, classroom content, tutorials, teaching materials, back-to-school themes, workshop presentations, informal learning sessions, knowledge sharing
references/styles/corporate.md
# corporate

Professional business style with navy/gold palette and structured layouts

## Design Aesthetic

Clean lines, structured layouts, and business-appropriate sophistication. Projects competence, reliability, and institutional credibility. Balances professionalism with approachability through careful use of whitespace and refined color choices.

## Background

- Color: Pure White (#FFFFFF) with navy structural elements
- Texture: None - crisp digital clarity for maximum professionalism

## Typography

### Primary Font (Headlines)

Modern geometric sans-serif (Inter, SF Pro, or similar). Clean, professional, and highly legible. Conveys competence and contemporary business sensibility. Medium to semi-bold weight.

### Secondary Font (Body)

Humanist sans-serif (Source Sans Pro style) for body text. Friendly yet professional, optimized for reading comprehension. Regular weight with comfortable line height.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Pure White | #FFFFFF | Main slide background |
| Primary Text | Navy | #1E3A5F | Headlines, key text |
| Secondary Text | Dark Gray | #4A5568 | Body text |
| Primary Accent | Gold | #C9A227 | Premium highlights, emphasis |
| Secondary Accent | Light Navy | #3D5A80 | Secondary elements |
| Success | Corporate Green | #059669 | Positive metrics |
| Alert | Corporate Red | #DC2626 | Attention items |
| Neutral | Light Gray | #F3F4F6 | Background sections |

## Visual Elements

- Clean charts and data visualizations
- Professional iconography (outlined style)
- Structured grid layouts
- Subtle shadows for depth (minimal)
- Progress bars and metrics displays
- Organizational charts
- Timeline graphics
- Comparison tables

## Style Rules

### Do

- Maintain clear visual hierarchy
- Use consistent grid alignment
- Apply accent colors strategically (gold for emphasis)
- Keep data visualizations clean and readable
- Use professional outlined iconography

### Don't

- Use playful or casual elements
- Apply heavy decorative effects
- Mix too many accent colors
- Crowd slides with information
- Use informal illustration styles
- Add slide numbers, footers, or logos

## Best For

Business presentations, investor decks, quarterly reports, executive summaries, client proposals, corporate communications, board meetings
references/styles/dark-atmospheric.md
# dark-atmospheric

Dark moody aesthetic with deep colors and glowing accent elements

## Design Aesthetic

Cinematic dark mode aesthetic with atmospheric depth. Deep purples, blacks, and rich shadows with glowing accents creating dramatic visual contrast. Mysterious, sophisticated, and visually striking. Perfect for evening events, creative industries, and premium brand presentations.

## Background

- Color: Deep Purple-Black (#0D0D1A) or Rich Navy (#1A1A2E)
- Texture: Subtle gradient from darker edges to slightly lighter center, atmospheric fog effect

## Typography

### Primary Font (Headlines)

Elegant serif or refined sans-serif in light/white. High contrast against dark background. Medium to bold weight. Letterforms may have subtle glow effect.

### Secondary Font (Body)

Clean sans-serif in light gray or muted white. Readable against dark backgrounds. Regular weight with generous line height.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Deep Purple-Black | #0D0D1A | Primary background |
| Alt Background | Rich Navy | #1A1A2E | Secondary areas |
| Primary Text | Pure White | #FFFFFF | Headlines |
| Secondary Text | Light Gray | #A0AEC0 | Body text |
| Glow Accent 1 | Electric Purple | #8B5CF6 | Primary glow |
| Glow Accent 2 | Cyan Blue | #06B6D4 | Secondary glow |
| Glow Accent 3 | Magenta Pink | #EC4899 | Tertiary accent |
| Glow Accent 4 | Amber | #F59E0B | Warm highlights |
| Subtle | Dark Gray | #2D3748 | Dividers, borders |

## Visual Elements

- Glowing accent elements and borders
- Subtle gradient backgrounds
- Atmospheric fog or particle effects
- Neon-style highlights on key elements
- Silhouettes with backlit edges
- Audio waveforms or sound visualizations
- Radiating light circles and orbs
- Cinematic letterboxing optional

## Style Rules

### Do

- Maintain high contrast for readability
- Use glowing effects sparingly for emphasis
- Create atmospheric depth with gradients
- Design dramatic visual focal points
- Keep text crisp against dark backgrounds

### Don't

- Overuse neon effects (less is more)
- Create low-contrast text combinations
- Use bright backgrounds
- Add cluttered busy elements
- Add slide numbers, footers, or logos

## Best For

Entertainment presentations, music and audio content, creative agency pitches, evening events, premium brand reveals, gaming content, cinematic storytelling, tech product launches
references/styles/editorial-infographic.md
# editorial-infographic

Modern magazine-style editorial infographic with clear visual storytelling

## Design Aesthetic

High-quality magazine explainer aesthetic. Clear visual storytelling that transforms complex information into digestible narratives. Clean illustrations, structured layouts, and professional typography. Think Wired, The Verge, or high-end science publications.

## Background

- Color: Pure White (#FFFFFF) or Light Gray (#F8F9FA)
- Texture: None or subtle paper grain for print feel

## Typography

### Primary Font (Headlines)

Bold display serif or modern sans-serif. Strong visual presence. Clean letterforms with editorial sophistication. Large scale for impact.

### Secondary Font (Subheads)

Semi-bold sans-serif for section headers. Clear hierarchy distinction from body text. Consistent styling throughout.

### Body Font

Humanist sans-serif optimized for reading. Clean, professional, accessible. Comfortable line height (1.6).

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Pure White | #FFFFFF | Primary background |
| Alt Background | Light Gray | #F8F9FA | Section backgrounds |
| Primary Text | Near Black | #1A1A1A | Headlines, body |
| Secondary Text | Dark Gray | #4A5568 | Captions, metadata |
| Accent 1 | Editorial Blue | #2563EB | Primary accent |
| Accent 2 | Coral | #F97316 | Secondary accent |
| Accent 3 | Emerald | #10B981 | Positive elements |
| Accent 4 | Amber | #F59E0B | Warning, attention |
| Dividers | Medium Gray | #D1D5DB | Section dividers |

## Visual Elements

- Clean flat illustrations (not photos)
- Structured multi-section layouts
- Callout boxes for key insights
- Icon-based data visualization
- Visual metaphors for abstract concepts
- Flow diagrams with clear directional hierarchy
- Pull quotes and highlight boxes
- Section dividers and visual breaks

## Style Rules

### Do

- Create clear visual narrative flow
- Use structured multi-section layouts
- Include callout boxes for key insights
- Design visual metaphors for complex ideas
- Maintain magazine-quality polish

### Don't

- Use photographic imagery
- Create cluttered dense layouts
- Mix too many visual styles
- Add decorative elements without purpose
- Add slide numbers, footers, or logos

## Best For

Technology explainers, science communication, research summaries, policy briefings, investigative content, educational deep-dives, thought leadership pieces
references/styles/fantasy-animation.md
# fantasy-animation

Whimsical hand-drawn animation style inspired by classic fantasy illustration

## Design Aesthetic

Charming hand-drawn animation aesthetic reminiscent of classic Disney, Studio Ghibli, or European storybook illustration. Soft, painterly textures with warm, inviting colors. Friendly characters, magical elements, and storybook layouts. Enchanting, nostalgic, and emotionally engaging.

## Background

- Color: Soft Sky Blue (#E8F4FC) or Warm Cream (#FFF8E7)
- Texture: Subtle watercolor wash, soft brush strokes, gentle paper texture

## Typography

### Primary Font (Headlines)

Whimsical serif or decorative hand-lettered style. Slight curvature and organic feel. Warm, friendly character. Think fairy tale book titles.

### Secondary Font (Body)

Rounded sans-serif or casual handwritten style. Friendly and readable. Maintains storybook aesthetic while staying legible.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Soft Sky Blue | #E8F4FC | Primary background |
| Alt Background | Warm Cream | #FFF8E7 | Secondary areas |
| Primary Text | Deep Forest | #2D5A3D | Headlines |
| Body Text | Warm Brown | #5D4E37 | Body content |
| Accent 1 | Golden Yellow | #F4D03F | Magic, highlights |
| Accent 2 | Rose Pink | #E8A0BF | Warmth, charm |
| Accent 3 | Sage Green | #87A96B | Nature elements |
| Accent 4 | Sky Blue | #7EC8E3 | Air, water, dreams |
| Accent 5 | Coral | #F08080 | Emphasis, life |

## Visual Elements

- Central illustrated character (friendly, expressive)
- Small companion creatures (animals, magical beings)
- Storybook-style environment backgrounds
- Magical floating objects (books, bags, boxes, orbs)
- Decorative elements: stars, sparkles, flowers, leaves
- Soft shadows and gentle highlights
- Layered depth with foreground/background elements
- Themed content containers (trunks, satchels, scroll boxes)

## Style Rules

### Do

- Create warm, inviting compositions
- Use soft edges and painterly textures
- Include charming character illustrations
- Add magical decorative touches
- Maintain storybook narrative feel

### Don't

- Use harsh geometric shapes
- Create dark or intimidating imagery
- Add photorealistic elements
- Use cold color palettes
- Add slide numbers, footers, or logos

## Best For

Educational content, children's presentations, storytelling, creative workshops, book presentations, fantasy/gaming content, inspirational talks, family-friendly events
references/styles/hand-drawn-edu.md
# hand-drawn-edu

Hand-drawn educational infographic with macaron pastel color blocks on warm cream paper

## Design Aesthetic

Hand-drawn educational infographic feel with slight wobble on all lines and shapes, like a high-quality presentation visual summary. Warm cream paper background with macaron pastel color blocks creating distinct information zones. Simple cartoon characters and doodle decorations bring concepts to life while maintaining clean composition and generous white space.

## Background

- Color: Warm Cream (#F5F0E8)
- Texture: Subtle warm paper grain, hand-drawn feel with slight organic imperfection

## Typography

### Primary Font (Headlines)

Bold hand-drawn lettering with organic strokes. Large, confident letterforms with slight wobble. Thick marker-style strokes. Render as hand-drawn letters, not typed text.

### Secondary Font (Body)

Clear handwritten style for body text and labels. Warm gray (#6B6B6B) for annotations and small labels. Bold keywords within body text for emphasis. Legible but not mechanical.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Warm Cream | #F5F0E8 | Primary background |
| Primary Text | Deep Charcoal | #2D2D2D | Headlines, main text, outlines |
| Macaron Blue | Sky Blue | #A8D8EA | Info block fill, cool-toned zones |
| Macaron Mint | Mint Green | #B5E5CF | Info block fill, growth/positive zones |
| Macaron Lavender | Lavender | #D5C6E0 | Info block fill, abstract/concept zones |
| Macaron Peach | Peach | #FFD5C2 | Info block fill, warm-toned zones |
| Accent | Coral Red | #E8655A | Key data, warnings, emphasis |
| Muted Text | Warm Gray | #6B6B6B | Secondary annotations, small labels |

## Visual Elements

- Macaron pastel rounded cards as distinct information zones
- Hand-drawn wavy connection lines and arrows between zones
- Simple stick-figure characters and cartoon icons
- Doodle decorations: small stars, underlines, spirals
- Color fills don't completely fill outlines — preserve hand-drawn casual feel
- Dashed borders for secondary or contained zones
- Small icon doodles (clipboard, lock, checkmark) to reinforce concepts

## Style Rules

### Do

- Use distinct macaron color blocks for each information zone
- Keep hand-drawn wobble consistent across all lines and shapes
- Include simple cartoon characters to humanize concepts
- Add small label annotations on connecting arrows
- Include a bold centered quote or takeaway at the bottom
- Maintain generous white space between zones

### Don't

- Use perfect geometric shapes or straight lines
- Create photorealistic elements
- Mix more than 4 macaron colors per slide
- Use pure white backgrounds
- Add slide numbers, footers, or logos
- Overcrowd — each zone should breathe

## Best For

Educational diagrams, process explainers, concept maps, onboarding visuals, knowledge summaries, tutorial walkthroughs
references/styles/intuition-machine.md
# intuition-machine

Technical briefing infographic style with aged paper texture and bilingual explanatory text boxes

## Design Aesthetic

Academic/technical briefing presentation style, NOT artistic 3D renders. Clean 2D or isometric technical illustrations with multiple explanatory text boxes containing article content. Split layouts with visuals on left/center and text on right/bottom. Information-dense but organized with clear visual hierarchy. Vintage blueprint aesthetic with modern clarity.

## Background

- Color: Aged Cream (#F5F0E6)
- Texture: Subtle paper texture with light creases, warm nostalgic feel reminiscent of vintage technical prints

## Typography

### Primary Font (Headlines)

Bold display font in dark maroon, ALL CAPS in brackets for main titles. English subtitle below in smaller size. Technical, authoritative presence with vintage character.

### Secondary Font (Labels)

Clean sans-serif for bilingual callout labels. Format: "ENGLISH TERM 中文翻译". High contrast against background.

### Body Font

Clean geometric sans-serif for text box content. Readable at smaller sizes. Consistent weight throughout.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Aged Cream | #F5F0E6 | Primary background |
| Paper Texture | Warm White | #F5F0E1 | Blueprint paper effect |
| Primary Text | Dark Maroon | #5D3A3A | Headlines, titles |
| Body Text | Near Black | #1A1A1A | Text box content |
| Accent 1 | Teal | #2F7373 | Primary illustrations |
| Accent 2 | Warm Brown | #8B7355 | Secondary elements |
| Accent 3 | Maroon | #722F37 | Titles, emphasis |
| Outline | Deep Charcoal | #2D2D2D | Element outlines |

## Visual Elements

- Isometric 3D technical illustrations OR flat 2D diagrams (choose based on concept)
- 3-5 explanatory text boxes per slide with labeled content
- Bilingual callout labels pointing to key parts
- Faded thematic background patterns (circuits, gears, flowcharts related to topic)
- Clean black outlines on all elements
- Split or triptych layouts
- "KEY QUOTE:" box at bottom with core insight
- No title blocks, stamps, or watermarks in corners

## Style Rules

### Do

- Include 3-5 text boxes with substantive content from source material
- Use bilingual labels (English + Chinese) for key elements
- Add faded thematic background patterns related to the topic
- Maintain aged paper texture throughout
- Create clear visual hierarchy with split layouts

### Don't

- Create photorealistic renders or artistic 3D scenes
- Leave slides without explanatory text content
- Add title blocks or stamps in corners
- Use gradients or glossy effects
- Add slide numbers, footers, or logos

## Best For

Technical explanations, concept breakdowns, academic presentations, knowledge documentation, research summaries, educational content with depth, bilingual audiences
references/styles/minimal.md
# minimal

Ultra-clean keynote style with maximum whitespace and zen-like simplicity

## Design Aesthetic

Maximum whitespace with minimal elements. Zen-like simplicity where every element earns its place. Premium, refined aesthetic suitable for executive audiences. Less is more - remove until nothing more can be taken away.

## Background

- Color: Pure White (#FFFFFF)
- Texture: None - absolute clean, no grain or patterns

## Typography

### Primary Font (Headlines)

Clean geometric sans-serif like SF Pro Display, Inter, or Helvetica Neue. Light to medium weight for elegant restraint. Generous letter-spacing. Large scale for impact without boldness.

### Secondary Font (Body)

Same family as headlines in lighter weight. Minimal size contrast. Clean, airy feeling throughout.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Pure White | #FFFFFF | Primary background |
| Primary Text | Near Black | #1A1A1A | Headlines, body |
| Secondary Text | Medium Gray | #6B7280 | Captions, metadata |
| Accent | Single Brand Color | #2563EB | One accent only, sparingly |
| Dividers | Light Gray | #E5E7EB | Subtle separators |

## Visual Elements

- Single accent color used sparingly
- Thin hairline rules for separation
- Generous margins (minimum 15% on all sides)
- Center or left-aligned layouts
- Simple geometric shapes only when necessary
- No decorative elements
- Data visualizations in single color or grayscale

## Style Rules

### Do

- Embrace empty space as a design element
- Use single accent color only
- Keep text minimal (10 words or less per slide)
- Create breathing room between elements
- Use scale to create hierarchy

### Don't

- Fill empty space with decoration
- Use multiple accent colors
- Add icons or illustrations unless essential
- Create dense information layouts
- Add slide numbers, footers, or logos

## Best For

Executive briefings, keynote presentations, premium brand communications, minimalist products, investor meetings, high-level strategy
references/styles/notion.md
# notion

SaaS dashboard aesthetic with clean data focus and productivity tool styling

## Design Aesthetic

Clean, functional SaaS interface aesthetic. Dashboard-inspired layouts with clear data hierarchy. Notion, Linear, and modern productivity tool styling. Information-dense but organized. Professional and trustworthy.

## Background

- Color: Light Gray (#F7F7F5) or Pure White (#FFFFFF)
- Texture: None - clean solid backgrounds

## Typography

### Primary Font (Headlines)

System UI stack or Inter. Semi-bold weight for emphasis. Clean, functional letterforms. Slightly tighter letter-spacing.

### Secondary Font (Body)

Same family in regular weight. Optimized for screen reading. Comfortable line height (1.5-1.6).

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Light Gray | #F7F7F5 | Primary background |
| Card Background | Pure White | #FFFFFF | Content cards |
| Primary Text | Near Black | #1F1F1F | Headlines, body |
| Secondary Text | Gray | #6B6B6B | Metadata, labels |
| Border | Light Border | #E5E5E5 | Card borders, dividers |
| Accent Blue | Notion Blue | #2383E2 | Links, primary actions |
| Accent Green | Success | #0F7B6C | Positive metrics |
| Accent Red | Alert | #E03E3E | Negative metrics |
| Accent Yellow | Warning | #DFAB01 | Cautions |

## Visual Elements

- Card-based layouts with subtle borders or shadows
- Clean data tables and charts
- Progress bars and metric displays
- Icon-based navigation hints
- Checkbox and toggle styling
- Tag and label chips
- Subtle hover state styling
- Breadcrumb and hierarchy indicators

## Style Rules

### Do

- Use card-based content organization
- Create clear data hierarchy
- Use subtle shadows and borders
- Keep layouts grid-aligned
- Present metrics prominently

### Don't

- Use decorative illustrations
- Add gradients or complex backgrounds
- Create artistic layouts
- Use rounded blob shapes
- Add slide numbers, footers, or logos

## Best For

Product demos, SaaS presentations, productivity tool pitches, metrics dashboards, feature walkthroughs, B2B presentations, technical product marketing
references/styles/pixel-art.md
# pixel-art

Retro 8-bit pixel art aesthetic with nostalgic gaming visual style

## Design Aesthetic

Pixelated retro aesthetic reminiscent of classic 8-bit and 16-bit era games. Chunky pixels, limited color palettes, and nostalgic gaming references. Simple geometric shapes rendered in blocky pixel form. Fun, playful, and immediately recognizable retro tech aesthetic.

## Background

- Color: Light Blue (#87CEEB) or Soft Lavender (#E6E6FA)
- Texture: Subtle pixel grid pattern, CRT scanline effect optional

## Typography

### Primary Font (Headlines)

Pixelated bitmap font style. Chunky, blocky letterforms with visible pixel structure. All caps for maximum readability. Render as actual pixel art, not smooth vectors.

### Secondary Font (Body)

Smaller pixel font with consistent 8x8 or 16x16 character grid. High contrast against background. Limited anti-aliasing to maintain retro feel.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Light Blue | #87CEEB | Primary background |
| Alt Background | Soft Lavender | #E6E6FA | Secondary backgrounds |
| Primary Text | Dark Navy | #1A1A2E | Headlines, body text |
| Accent 1 | Pixel Green | #00FF00 | Success, highlights |
| Accent 2 | Pixel Red | #FF0000 | Alerts, emphasis |
| Accent 3 | Pixel Yellow | #FFFF00 | Warnings, energy |
| Accent 4 | Pixel Cyan | #00FFFF | Info, tech elements |
| Accent 5 | Pixel Magenta | #FF00FF | Special elements |

## Visual Elements

- All elements rendered with visible pixel structure
- Simple iconography: notepad, checkboxes, gears, rockets, play buttons
- Text bubbles and speech boxes with pixel borders
- 8-bit style decorative elements: stars, hearts, arrows
- Progress bars with chunky pixel segments
- Dithering patterns for gradients and shadows
- Limited to 16-32 color palette per slide

## Style Rules

### Do

- Maintain consistent pixel grid throughout
- Use limited color palette (16-32 colors max)
- Create blocky, geometric shapes
- Add nostalgic gaming references where appropriate
- Use dithering for color transitions

### Don't

- Use smooth gradients or anti-aliasing
- Create photorealistic elements
- Use thin lines or fine details
- Add modern glossy effects
- Add slide numbers, footers, or logos

## Best For

Gaming presentations, tech tutorials, nostalgic content, developer talks, retro-themed events, educational content for younger audiences, creative tech presentations
references/styles/scientific.md
# scientific

Educational scientific illustration style for pathways, processes, and technical diagrams

## Design Aesthetic

Academic scientific illustration aesthetic for biological pathways, chemical processes, and technical systems. Clean, precise diagrams with proper labeling and clear visual flow. Educational clarity with professional polish. Think textbook quality illustrations and academic journal figures.

## Background

- Color: Off-White (#FAFAFA) or Light Blue-Gray (#F0F4F8)
- Texture: None or very subtle paper grain for print feel

## Typography

### Primary Font (Headlines)

Clean serif font (Times New Roman style) for formal academic feel. Bold weight for main titles. Professional, authoritative presence.

### Secondary Font (Labels)

Sans-serif for diagram labels and annotations. Clear, readable at small sizes. Consistent sizing for hierarchy.

### Body Font

Serif for body paragraphs, sans-serif for bullet points and lists. Academic publication styling.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Off-White | #FAFAFA | Primary background |
| Primary Text | Dark Slate | #1E293B | Headlines, body |
| Label Text | Medium Gray | #475569 | Annotations |
| Pathway 1 | Teal | #0D9488 | Primary pathway |
| Pathway 2 | Blue | #3B82F6 | Secondary pathway |
| Pathway 3 | Purple | #8B5CF6 | Tertiary pathway |
| Membrane | Amber | #F59E0B | Biological membranes |
| Alert | Red | #EF4444 | Key molecules, emphasis |
| Positive | Green | #22C55E | Products, outputs |

## Visual Elements

- Horizontal membrane or structure bases
- Labeled modular components with distinct colors
- Flow arrows (electron, proton, molecule movement)
- Chemical formulas and molecular notation
- Cross-section and pathway diagrams
- Numbered step sequences
- Key molecule callouts
- Process summary boxes

## Style Rules

### Do

- Use precise, consistent line weights
- Label all components clearly
- Show directional flow with arrows
- Include chemical/molecular notation where relevant
- Create clear numbered sequences

### Don't

- Use decorative illustrations
- Create imprecise or artistic diagrams
- Omit important labels
- Use inconsistent visual language
- Add slide numbers, footers, or logos

## Best For

Biology lectures, chemistry presentations, medical education, research presentations, academic papers, scientific conferences, textbook illustrations, process documentation
references/styles/sketch-notes.md
# sketch-notes

Soft hand-drawn illustration style with fresh, refined minimalist editorial aesthetic

## Design Aesthetic

Illustration or hand-drawn feel with soft, relaxed brush strokes. Fresh, refined overall style with minimalist editorial approach. Emphasis on precision, clarity and intelligent elegance while prioritizing warmth, approachability and friendliness.

## Background

- Color: Warm Off-White (#FAF8F0)
- Texture: Subtle paper grain, slightly warm tone to avoid clinical feel

## Typography

### Primary Font (Headlines)

Bold hand-written marker font or cartoon poster font. Slightly uneven baseline for organic feel. Thick strokes with soft edges. Render as hand-drawn letters, not typed text.

### Secondary Font (Body)

Clear handwritten round or hard-pen style mimicking everyday notes. Consistent sizing with slight natural variation. Render as casual handwriting, legible but not mechanical.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Warm Off-White | #FAF8F0 | Primary background |
| Primary Text | Deep Charcoal | #2C3E50 | Headlines, body text |
| Alt Text | Deep Brown | #4A4A4A | Secondary text elements |
| Accent 1 | Soft Orange | #F4A261 | Highlights, emphasis |
| Accent 2 | Mustard Yellow | #E9C46A | Secondary highlights |
| Accent 3 | Sage Green | #87A96B | Nature, growth concepts |
| Accent 4 | Light Blue | #7EC8E3 | Tech, AI elements |
| Accent 5 | Red Brown | #A0522D | Land, infrastructure |

## Visual Elements

- Connection lines with hand-drawn wavy feel, not perfectly straight
- Conceptual abstract icons illustrating ideas rather than literal scenes
- Color fills don't need to completely fill outlines - preserve hand-painted casual feel
- Simple geometric shapes with rounded corners
- Arrows and pointers with sketchy, informal style
- Doodle-style decorative elements: stars, spirals, underlines

## Style Rules

### Do

- Keep layouts open and well-structured
- Emphasize information hierarchy and readability
- Use hand-drawn quality for all elements
- Allow imperfection - slight wobbles add character
- Layer elements with subtle overlaps

### Don't

- Use perfect geometric shapes
- Create photorealistic elements
- Overcrowd with too many elements
- Use pure white backgrounds
- Add slide numbers, footers, or logos

## Best For

Educational content, knowledge sharing, technical explanations, friendly presentations, tutorials, onboarding materials
references/styles/vector-illustration.md
# vector-illustration

Flat vector illustration style with clear black outlines and retro soft color palette

## Design Aesthetic

Flat vector illustration with no gradients or 3D effects. Clear, uniform-thickness black outlines on all elements. Geometric simplification reducing complex objects to basic shapes. Toy model aesthetic that's cute, playful, and approachable. Panoramic horizontal compositions work well.

## Background

- Color: Cream Off-White (#F5F0E6)
- Texture: Subtle paper texture, warm nostalgic feel reminiscent of vintage prints

## Typography

### Primary Font (Headlines)

Large, bold retro serif for titles conveying authority and elegance. Think classic advertising posters. Clean letterforms with strong presence.

### Secondary Font (Subtitles)

All-caps sans-serif inside colored rectangular blocks. Label-like appearance. High contrast against block color.

### Body Font

Clean geometric sans-serif for readability. Futura, Avenir, or similar. Consistent weight throughout.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Cream Off-White | #F5F0E6 | Primary background |
| Outlines | Deep Charcoal | #2D2D2D | All element outlines |
| Primary Text | Black | #1A1A1A | Headlines, body |
| Accent 1 | Coral Red | #E07A5F | Primary accent, warmth |
| Accent 2 | Mint Green | #81B29A | Secondary accent, nature |
| Accent 3 | Mustard Yellow | #F2CC8F | Highlights, energy |
| Accent 4 | Burnt Orange | #D4764A | Tertiary accent |
| Accent 5 | Rock Blue | #577590 | Cool balance, tech |

## Visual Elements

- All objects have closed black outlines (coloring book style)
- Rounded line endings, avoid sharp corners
- Trees simplified to lollipop or triangle shapes
- Buildings simplified to rectangular blocks with grid windows
- 2.5D perspective (isometric-like but more free-form)
- Depth through layering and overlap, not atmospheric perspective
- Decorative geometric elements: radiating lines (sunbursts), pill-shaped clouds, dots, stars
- People as simple geometric figures with minimal facial detail

## Style Rules

### Do

- Maintain consistent outline thickness throughout
- Use soft, vintage color palette
- Simplify all objects to basic geometric shapes
- Create depth through layering
- Add playful decorative elements

### Don't

- Use gradients or realistic shading
- Create photorealistic elements
- Use thin or varying line weights
- Include complex detailed illustrations
- Add slide numbers, footers, or logos

## Best For

Educational presentations, creative proposals, children's content, brand showcases, warm approachable topics, explainer content
references/styles/vintage.md
# vintage

Vintage aged-paper aesthetic for historical and expedition-style presentations

## Design Aesthetic

Nostalgic vintage aesthetic with aged paper textures and historical document styling. Think explorer's journals, antique maps, and museum exhibits. Rich warm tones with weathered textures. Evokes discovery, heritage, and timeless knowledge.

## Background

- Color: Aged Parchment (#F5E6D3) or Sepia Cream (#FFF8DC)
- Texture: Heavy aged paper texture with subtle creases, coffee stains, and worn edges

## Typography

### Primary Font (Headlines)

Classic serif with historical character (Garamond, Baskerville, or similar). Elegant, authoritative, timeless. May include decorative flourishes.

### Secondary Font (Labels)

Condensed serif or clean sans-serif for map labels and annotations. Period-appropriate styling. Consistent with vintage aesthetic.

### Body Font

Readable serif for longer text. Traditional book typography. Comfortable reading experience.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Aged Parchment | #F5E6D3 | Primary background |
| Alt Background | Sepia Cream | #FFF8DC | Secondary areas |
| Primary Text | Dark Brown | #3D2914 | Headlines, body |
| Secondary Text | Medium Brown | #6B4423 | Annotations |
| Accent 1 | Forest Green | #2D5A3D | Maps, nature |
| Accent 2 | Navy Blue | #1E3A5F | Ocean, lines |
| Accent 3 | Burgundy | #722F37 | Emphasis, borders |
| Accent 4 | Gold | #C9A227 | Highlights, compass |
| Ink | Sepia Black | #3D3D3D | Fine details |

## Visual Elements

- Antique maps with route lines and landmarks
- Compass roses and nautical elements
- Expedition ship or vehicle illustrations
- Specimen drawings (flora, fauna, fossils)
- Handwritten-style annotations
- Rope, leather, and brass decorative motifs
- Wave and terrain texture patterns
- Vintage photograph-style image frames

## Style Rules

### Do

- Apply consistent aged texture throughout
- Use period-appropriate visual language
- Include map and journey elements where relevant
- Create layered collage compositions
- Maintain warm sepia-toned palette

### Don't

- Use modern digital styling
- Create crisp clean edges
- Use cold or bright colors
- Add contemporary elements
- Add slide numbers, footers, or logos

## Best For

Historical presentations, travel and exploration content, museum exhibits, heritage brand storytelling, biography presentations, scientific discovery narratives, educational history content
references/styles/watercolor.md
# watercolor

Soft watercolor illustration style with hand-painted textures and natural warmth

## Design Aesthetic

Gentle watercolor aesthetic with visible brush strokes and natural color bleeding. Hand-painted feel with soft edges and organic shapes. Warm, approachable, and artistically refined. Combines artistic expression with clear information delivery.

## Background

- Color: Warm Off-White (#FAF8F0) or Soft Cream (#FFF9E6)
- Texture: Subtle watercolor paper texture with visible grain

## Typography

### Primary Font (Headlines)

Elegant handwritten or brush script for titles. Organic letterforms with natural variation. Warm, personal feeling. May appear as actual hand-painted lettering.

### Secondary Font (Body)

Clean rounded sans-serif or casual handwriting style. Readable at smaller sizes. Maintains artistic cohesion while staying functional.

## Color Palette

| Role | Color | Hex | Usage |
|------|-------|-----|-------|
| Background | Warm Off-White | #FAF8F0 | Primary background |
| Primary Text | Warm Charcoal | #3D3D3D | Headlines, body |
| Accent 1 | Soft Coral | #F4A261 | Primary warmth |
| Accent 2 | Dusty Rose | #E8A0A0 | Secondary warmth |
| Accent 3 | Sage Green | #87A96B | Nature, growth |
| Accent 4 | Sky Blue | #7EC8E3 | Water, calm |
| Accent 5 | Soft Lavender | #C5B4E3 | Accent, creativity |
| Wash | Pale Yellow | #FFF3C4 | Background washes |

## Visual Elements

- Watercolor washes as section backgrounds
- Illustrated icons with visible brush strokes
- Natural elements: leaves, bubbles, flowers
- Color bleeds and soft edges on all elements
- Hand-drawn arrows and connection lines
- Labeled diagrams with watercolor fills
- Small expressive character illustrations
- Decorative nature accents scattered thoughtfully

## Style Rules

### Do

- Allow color to bleed beyond sharp edges
- Use visible brush stroke textures
- Create soft, organic shapes
- Include hand-drawn quality in all elements
- Maintain warm, inviting color palette

### Don't

- Use sharp geometric shapes
- Create hard edges or digital precision
- Use cold or stark colors
- Add photographic elements
- Add slide numbers, footers, or logos

## Best For

Lifestyle content, wellness presentations, travel guides, food and cooking content, personal stories, creative workshops, artistic portfolios, warm educational content
scripts/merge-to-pdf.ts
import { existsSync, readdirSync, readFileSync } from "fs";
import { join, basename } from "path";
import { PDFDocument, rgb } from "pdf-lib";

interface SlideInfo {
  filename: string;
  path: string;
  index: number;
  promptPath?: string;
}

function parseArgs(): { dir: string; output?: string } {
  const args = process.argv.slice(2);
  let dir = "";
  let output: string | undefined;

  for (let i = 0; i < args.length; i++) {
    if (args[i] === "--output" || args[i] === "-o") {
      output = args[++i];
    } else if (!args[i].startsWith("-")) {
      dir = args[i];
    }
  }

  if (!dir) {
    console.error("Usage: bun merge-to-pdf.ts <slide-deck-dir> [--output filename.pdf]");
    process.exit(1);
  }

  return { dir, output };
}

function findSlideImages(dir: string): SlideInfo[] {
  if (!existsSync(dir)) {
    console.error(`Directory not found: ${dir}`);
    process.exit(1);
  }

  const files = readdirSync(dir);
  const slidePattern = /^(\d+)-slide-.*\.(png|jpg|jpeg)$/i;
  const promptsDir = join(dir, "prompts");
  const hasPrompts = existsSync(promptsDir);

  const slides: SlideInfo[] = files
    .filter((f) => slidePattern.test(f))
    .map((f) => {
      const match = f.match(slidePattern);
      const baseName = f.replace(/\.(png|jpg|jpeg)$/i, "");
      const promptPath = hasPrompts ? join(promptsDir, `${baseName}.md`) : undefined;

      return {
        filename: f,
        path: join(dir, f),
        index: parseInt(match![1], 10),
        promptPath: promptPath && existsSync(promptPath) ? promptPath : undefined,
      };
    })
    .sort((a, b) => a.index - b.index);

  if (slides.length === 0) {
    console.error(`No slide images found in: ${dir}`);
    console.error("Expected format: 01-slide-*.png, 02-slide-*.png, etc.");
    process.exit(1);
  }

  return slides;
}

async function createPdf(slides: SlideInfo[], outputPath: string) {
  const pdfDoc = await PDFDocument.create();
  pdfDoc.setAuthor("baoyu-slide-deck");
  pdfDoc.setSubject("Generated Slide Deck");

  for (const slide of slides) {
    const imageData = readFileSync(slide.path);
    const isPng = imageData[0] === 0x89 && imageData[1] === 0x50 && imageData[2] === 0x4e && imageData[3] === 0x47;
    const image = isPng
      ? await pdfDoc.embedPng(imageData)
      : await pdfDoc.embedJpg(imageData);

    const { width, height } = image;
    const page = pdfDoc.addPage([width, height]);

    page.drawImage(image, {
      x: 0,
      y: 0,
      width,
      height,
    });

    console.log(`Added: ${slide.filename}${slide.promptPath ? " (prompt available)" : ""}`);
  }

  const pdfBytes = await pdfDoc.save();
  await Bun.write(outputPath, pdfBytes);

  console.log(`\nCreated: ${outputPath}`);
  console.log(`Total pages: ${slides.length}`);
}

async function main() {
  const { dir, output } = parseArgs();
  const slides = findSlideImages(dir);

  const dirName = basename(dir) === "slide-deck" ? basename(join(dir, "..")) : basename(dir);
  const outputPath = output || join(dir, `${dirName}.pdf`);

  console.log(`Found ${slides.length} slides in: ${dir}\n`);

  await createPdf(slides, outputPath);
}

main().catch((err) => {
  console.error("Error:", err.message);
  process.exit(1);
});
scripts/merge-to-pptx.ts
import { existsSync, readdirSync, readFileSync } from "fs";
import { join, basename, extname } from "path";
import PptxGenJS from "pptxgenjs";

interface SlideInfo {
  filename: string;
  path: string;
  index: number;
  promptPath?: string;
}

function parseArgs(): { dir: string; output?: string } {
  const args = process.argv.slice(2);
  let dir = "";
  let output: string | undefined;

  for (let i = 0; i < args.length; i++) {
    if (args[i] === "--output" || args[i] === "-o") {
      output = args[++i];
    } else if (!args[i].startsWith("-")) {
      dir = args[i];
    }
  }

  if (!dir) {
    console.error("Usage: bun merge-to-pptx.ts <slide-deck-dir> [--output filename.pptx]");
    process.exit(1);
  }

  return { dir, output };
}

function findSlideImages(dir: string): SlideInfo[] {
  if (!existsSync(dir)) {
    console.error(`Directory not found: ${dir}`);
    process.exit(1);
  }

  const files = readdirSync(dir);
  const slidePattern = /^(\d+)-slide-.*\.(png|jpg|jpeg)$/i;
  const promptsDir = join(dir, "prompts");
  const hasPrompts = existsSync(promptsDir);

  const slides: SlideInfo[] = files
    .filter((f) => slidePattern.test(f))
    .map((f) => {
      const match = f.match(slidePattern);
      const baseName = f.replace(/\.(png|jpg|jpeg)$/i, "");
      const promptPath = hasPrompts ? join(promptsDir, `${baseName}.md`) : undefined;

      return {
        filename: f,
        path: join(dir, f),
        index: parseInt(match![1], 10),
        promptPath: promptPath && existsSync(promptPath) ? promptPath : undefined,
      };
    })
    .sort((a, b) => a.index - b.index);

  if (slides.length === 0) {
    console.error(`No slide images found in: ${dir}`);
    console.error("Expected format: 01-slide-*.png, 02-slide-*.png, etc.");
    process.exit(1);
  }

  return slides;
}

function findBasePrompt(): string | undefined {
  const scriptDir = import.meta.dir;
  const basePromptPath = join(scriptDir, "..", "references", "base-prompt.md");
  if (existsSync(basePromptPath)) {
    return readFileSync(basePromptPath, "utf-8");
  }
  return undefined;
}

async function createPptx(slides: SlideInfo[], outputPath: string) {
  const pptx = new PptxGenJS();

  pptx.layout = "LAYOUT_16x9";
  pptx.author = "baoyu-slide-deck";
  pptx.subject = "Generated Slide Deck";

  const basePrompt = findBasePrompt();
  let notesCount = 0;

  for (const slide of slides) {
    const s = pptx.addSlide();
    const imageData = readFileSync(slide.path);
    const base64 = imageData.toString("base64");
    const ext = extname(slide.filename).toLowerCase().replace(".", "");
    const mimeType = ext === "png" ? "image/png" : "image/jpeg";

    s.addImage({
      data: `data:${mimeType};base64,${base64}`,
      x: 0,
      y: 0,
      w: "100%",
      h: "100%",
      sizing: { type: "cover", w: "100%", h: "100%" },
    });

    if (slide.promptPath) {
      const slidePrompt = readFileSync(slide.promptPath, "utf-8");
      const fullNotes = basePrompt ? `${basePrompt}\n\n---\n\n${slidePrompt}` : slidePrompt;
      s.addNotes(fullNotes);
      notesCount++;
    }

    console.log(`Added: ${slide.filename}${slide.promptPath ? " (with notes)" : ""}`);
  }

  await pptx.writeFile({ fileName: outputPath });
  console.log(`\nCreated: ${outputPath}`);
  console.log(`Total slides: ${slides.length}`);
  if (notesCount > 0) {
    console.log(`Slides with notes: ${notesCount}${basePrompt ? " (includes base prompt)" : ""}`);
  }
}

async function main() {
  const { dir, output } = parseArgs();
  const slides = findSlideImages(dir);

  const dirName = basename(dir) === "slide-deck" ? basename(join(dir, "..")) : basename(dir);
  const outputPath = output || join(dir, `${dirName}.pptx`);

  console.log(`Found ${slides.length} slides in: ${dir}\n`);

  await createPptx(slides, outputPath);
}

main().catch((err) => {
  console.error("Error:", err.message);
  process.exit(1);
});
    baoyu-slide-deck | Prompt Minder