slide-creator
July 1, 2026 · View on GitHub
You have great content — but great content deserves a great presentation. AI can generate slides, but the results are inconsistent and re-rolling gets old fast. Slide-Creator gives you stable, polished output every time: pick a style that fits your audience, and let the model handle the rest. Go grab a coffee.
See the guide as a report → — this document was generated by slide-creator itself.
A skill for Claude Code and OpenClaw that generates stunning, zero-dependency HTML presentations.
English | 简体中文
Live Demo
See what slide-creator produces — open directly in your browser:
Click any screenshot below to open the live demo (same content, different styles):
Design Philosophy: Build for the Real Last Mile
slide-creator is built around one observation: people usually spend a long time generating or discussing content first, then ask for slides at the very end. That is the worst possible moment to depend on raw conversation context. The model is already overloaded, style signals are diluted, and hard constraints get dropped.
The design philosophy of slide-creator is to protect that last mile.
1. IR-first workflow, planning is optional
The main workflow is now explicitly IR-first workflow:
user prompt → BRIEF.json → HTML → validate → eval
--plan exists to distill a durable BRIEF.json, not to force a human review step every time. PLANNING.md is optional, a human-readable view when someone explicitly wants to inspect structure before rendering.
This matters because the generator should not carry the full chat history into the render step. --generate should execute against a small, hard truth source, not against a messy, late-stage conversation.
The same rule applies to direct prompt generation. "Give content + preset and generate now" is still an IR-first path: materialize BRIEF.json, route native core presets, unified profile presets, and custom themes through render_from_brief(), then pass the strict pre-write validator before writing the final HTML.
2. Public modes stay simple, internal pipeline stays strict
Users should not need to think in six internal phases. The public mental model is deliberately small:
- Auto for fast first draft
- Polish for the quality-locked path
Internally, the pipeline is stricter than the UI suggests. The real path is style discovery, BRIEF distillation, rendering, validation, and review. Simpler UX outside, stronger contract inside.
This is why the README and the skill keep talking about Auto / Polish, while the repo still maintains explicit routing, review logic, and eval infrastructure.
3. Progressive disclosure for model context
A skill file loads into model context on every invocation. That means context is a product surface, not an implementation detail.
slide-creator keeps SKILL.md as a thin router and pushes detail into references so each path loads only what it needs:
--plan → references/brief-template.json only
--generate → references/html-template.md + references/js-engine.md + one style file + base-css.md
interactive → references/workflow.md
style picker → references/style-index.md
The goal is not elegance for its own sake. It is to reduce context pressure so the model does not forget the important parts right before it renders.
4. Show, don't tell, for visual choices
Most users cannot reliably describe a visual direction in abstract language. They can react to concrete options immediately.
That is why slide-creator treats style selection as a preview problem, not a questionnaire problem. Show three strong directions. Let the user point. Then write the decision into BRIEF.json.
This is also why style choice belongs before rendering. If style remains a vague instruction until the HTML step, it is too late.
5. Zero-dependency runtime is part of the product
The output is not a screenshot, and not a build artifact that still needs another toolchain. The output is a browser-native deck with:
- viewport-fitted slides
- presenter mode
- Default-on inline editing
- keyboard navigation
- self-contained runtime
The zero-dependency requirement forces discipline. If a deck only works after a bundler, remote font fetch, or extra runtime glue, the product has already missed its point.
6. Validate before trust
The system should catch failure before the user opens a broken deck.
That is why slide-creator is moving quality checks earlier:
--plancreates a structuredBRIEF.json--generaterenders from the IR instead of from the whole conversationvalidate-brief.pychecks the brief contractscripts/validate_html.py --strictchecks the runtime contract- evals score route / compression / render / efficiency
The important design idea here is not "more tests". It is better failure localization. If a result is bad, we want to know whether the mistake happened in routing, compression, rendering, or polish. That feedback then improves the skill itself.
Validation positioning: pre-write gate, not optional review
validate.py should run inside --generate, but after rendering and before the final file is accepted. The right sequence is: assemble HTML → write temp file → run python3 scripts/validate_html.py "$TMP_HTML" --strict → fix/regenerate until pass → write final output. If you also want a single-deck eval artifact, add --eval or --eval-out report.json after the strict gate passes.
This keeps validation out of planning and composition, but inside delivery:
- No extra planning step → no extra LLM cognitive load during ideation
- No extra style-file reads beyond the existing generation inputs
- Hard failures stop bad output before handoff
- Warnings can still feed polish / retry policy without pretending the deck is already valid
Captured-run skill evals
scripts/run_evals.py checks committed BRIEF/HTML artifacts and deterministic renderer behavior. It is a regression gate, not a full skill eval.
For OpenAI-style captured-run skill evals, use:
python3 scripts/run-skill-evals.py --runner codex --run-live --format json --json-out .tmp-run/skill-evals/results.json
This runs the prompt set in evals/slide-skill-prompts.csv through the selected runner, stores raw and normalized traces under evals/artifacts/current/skill-runs/, and scores each case across four categories:
- Outcome: deck task completion and valid HTML artifacts.
- Process: skill routing, BRIEF/materialization evidence, reference loading, and strict validation evidence from normalized runner metrics.
- Style: preset fit, slide rhythm, content fidelity, and structured rubric grading for positive captured-run cases.
- Efficiency: command count, repeated failures, token budgets, and wall-clock budget.
The live eval architecture is deliberately split into three roles:
- Supervisor: selects cases, launches isolated workers, captures traces, writes baselines, and compares regressions.
- Generate Worker: one fresh isolated worker per case; reads
SKILL.md, a small reference set, writesBRIEF.json, renders HTML, and runs strict validation. - Style Judge: a separate grader that produces
style-rubric.json; the generator does not self-grade style.
All generation-worker shell commands and tokens count toward Efficiency. Subagents/fresh workers are for context isolation, not for hiding cost. The live worker prompt forbids broad repo searches, previous eval traces, existing decks, tests/, demos/, evals/baselines/, CLI discovery, Python introspection, symlinks, and writes outside the per-case artifact directory.
Use fixture mode for deterministic local tests:
python3 scripts/run-skill-evals.py --runner fixture --case-id explicit-generate --normalized-trace tests/fixtures/skill-evals/explicit-generate-normalized.json --format json
scripts/preset_release_gate.py keeps captured-run evals optional. Add --include-skill-evals for deterministic release checks, or let --runner codex --run-live run only during a manual evaluation pass. Positive fixture cases use checked-in tests/fixtures/skill-evals/*-style-rubric.json; if a positive case has no rubric, the harness marks it eval_complete: false and fails the eval instead of hiding the gap behind a green score.
When --baseline-dir contains skill-evals.json, the release gate automatically compares the new captured-run result against that baseline and fails on pass, completeness, total score, or category regressions. You can also run the comparator directly:
python3 scripts/compare-skill-eval-baseline.py \
--old evals/baselines/2026-05-17/skill-evals/skill-evals.json \
--new /path/to/candidate/skill-evals.json \
--format json
Before adding any new check, verify: does this check belong in the deterministic runtime gate? If it requires subjective taste judgment rather than contract validation, it should stay in review/eval instead of strict validate.
For the full 22-preset delivery gate, run the slow path:
python3 scripts/preset_release_gate.py \
--suite evals/preset-surface-all/manifest.json \
--output-dir /tmp/slide-quality-full-slow-gate \
--browser-geometry \
--contract \
--export-smoke \
--mobile-geometry \
--ai-advised \
--promotion-gate \
--pptx-export
This gate blocks desktop/mobile geometry failures, missing PresetContract components, empty export slots, AI-advised content/rhythm proxy failures, unsupported style-native promotion, and real PPTX export/page-count failures.
Contract alignment: validators must match generation contracts
validate.py checks must align with actual contracts in SKILL.md / html-template.md / js-engine.md. For example:
- Check hotzone → must use
.edit-hotzone(class) notid="hotzone" - Check preset metadata → generated decks must emit a real
body[data-preset], not omit it or leave the template placeholder - Check external links → must allow Google Fonts (explicitly required by html-template.md)
- Check watermark → must verify JS injection logic (not hardcoded position)
Contract alignment isn't about doc syncing; it's about script validation: every validate.py change should run against demos to ensure checks match actual generation output.
7. Against slide slop, visual and semantic
Most AI slide failures are not dramatic. They are mediocre. Sparse pages, repeated layouts, weak titles, and generic structure. That is what makes decks feel machine-made.
slide-creator treats this as a design problem and a content problem:
- visual density must be intentional
- layout rhythm must change
- titles should carry judgments when the content type calls for it
- numbers should surface early when the material has them
- jargon should be translated for the audience
The point is not to make every deck look busy. It is to avoid accidental emptiness and accidental vagueness.
8. Extensible themes, but with a contract
Custom themes are supported, but they are not prompt soup. The contract is explicit:
- create
themes/your-theme/ - add
reference.mdfor the design language - optionally add
starter.htmlfor complex systems
This makes themes composable and reviewable. A theme is not just "use our brand colors". It is a reusable rendering contract.
9. Content-type routing is a quality feature
22 presets are useful only if the system helps users start in the right neighborhood.
That is why slide-creator routes by content type, using the current generator-ready surface rather than the full design-reference library:
Data report / KPI dashboard → Data Story, Enterprise Dark, Swiss Modern
Business pitch / VC deck → Enterprise Dark, Blue Sky, Swiss Modern
Developer tool / API docs → Data Story, Blue Sky, Enterprise Dark
Consulting / strategy → Enterprise Dark, Swiss Modern, Data Story
Good defaults reduce rework. In practice, that means fewer bad first drafts, fewer style resets, and less wasted context.
Phase 1 recommendation surface is intentionally narrower than the full preset library:
Swiss ModernEnterprise DarkData StoryBlue Sky
All built-in presets are explicitly renderable. The five native deterministic core presets are the most stable generation surface; only Swiss Modern, Enterprise Dark, Data Story, and Blue Sky are in the default recommendation surface, while Chinese Chan is contextual only. The remaining reference-backed presets use the unified profile renderer with the same BRIEF, shared runtime, strict validation, and eval/release gates. Profile-rendered presets are renderable, and they are demo-parity gated against the historical checked-in demos before being described as restored to historical style fidelity, but they are still not presented as native deterministic core or default recommendations.
Install
Claude Code
Tell Claude: "Install https://github.com/kaisersong/slide-creator"
Or manually:
git clone https://github.com/kaisersong/slide-creator ~/.claude/skills/slide-creator
Restart Claude Code. Use as /slide-creator.
OpenClaw
# Via ClawHub (recommended)
clawhub install kai-slide-creator
# Or manually
git clone https://github.com/kaisersong/slide-creator ~/.openclaw/skills/slide-creator
ClawHub page: https://clawhub.ai/skills/kai-slide-creator
Usage
Commands
/slide-creator --plan # Analyze content + resources/, create BRIEF.json
/slide-creator --generate # Generate HTML from BRIEF.json
/slide-creator --review # Diagnose and fix content quality issues
/slide-creator # Start from scratch (interactive style discovery)
/kai-html-export # Export to PPTX or PNG (separate skill)
Bare Sandbox Fallback
/slide-creator ... is a Claude/OpenClaw slash-skill call, not a raw bash or python command.
If you are in a bare sandbox or external agent runner:
python3 main.py --validate-brief --brief BRIEF.json
python3 main.py --generate --brief BRIEF.json --output presentation.html
python3 main.py --generate --brief BRIEF.json --output presentation.html --eval
Built-in presets still load from references/ / references/style-index.md; themes/<name>/reference.md is only for custom themes.
The raw CLI renderer covers native deterministic built-ins, unified profile built-ins, and custom themes through the same BRIEF-to-HTML path, then the same strict validator before final output.
Planning Depths
- Auto — fast draft; skips Phase 3.5 Review
- Polish — deeper path; auto-runs Phase 3.5 Review
Same content switching between Auto/Polish should keep the same preset unless user explicitly requests a style change.
Typical Workflows
Interactive creation:
- Run
/slide-creator, answer four questions (purpose, length, content, images) - See 3 style previews, pick one
- Generate full deck, open in browser
IR-first workflow (complex content):
- Put assets in
resources/folder - Run
/slide-creator --plan "My AI startup pitch deck" - Inspect
BRIEF.json; only ask forPLANNING.mdif a human review view is needed - Run
/slide-creator --generate
PPT conversion:
- Put
.pptxfile in current directory - Run
/slide-creator— skill auto-detects and extracts content
Review Mode
/slide-creator --review presentation.html
Behavior:
- Load
references/review-checklist.md - Execute 16 checkpoints (6 auto-detect + 10 AI-advised)
- Show results: ✅ passed / 🔧 auto-fixable / ⚠️ needs confirmation / ❌ needs judgment
- User chooses: [Auto-fix all] / [Confirm each] / [Skip]
- Output fixed HTML + diagnostic report
Polish mode: Phase 3.5 Review runs automatically after generation. Auto mode: Skips Phase 3.5.
Timing
Expected end-to-end:
- Auto: ~3–6 minutes
- Polish: ~8–15 minutes
Tracked segments: plan, generate, validate, polish, total
Features
Core
- IR-first workflow —
--plandistillsBRIEF.json,--generaterenders from the IR - Two planning depths — Auto for speed, Polish for narrative and visual locking
- Content Review System — 16 checkpoints:
--reviewfor on-demand diagnosis; Polish auto-runs review; three rule types (hard/context-aware/advisory) - 22 design presets — each with named layout variations
- Content-type routing — auto-suggests best style for pitch decks, dev tools, data reports
- Style discovery — generate 3 visual previews before committing
- Inline SVG diagrams — flowcharts, timelines, bar charts, comparison grids, org charts — no external libs
- Blue Sky starter template — complete boilerplate so models never mis-implement the visual system
Interaction
- Play Mode — Press
F5or click ▶ (bottom-right) for fullscreen; slides scale to any screen; controls auto-hide;Escto exit - Presenter Mode — Press
Pfor synced speaker window: notes, timer, slide counter, prev/next nav; height auto-adapts - Notes editing panel — In edit mode (
E), notes bar at bottom; click title bar to collapse/expand; edits sync live - Inline editing — Default-on browser editing; edit text in-browser,
Ctrl+Sto save - Viewport fitting — Every slide fits 100vh exactly, no scrolling
Output
- Custom theme system — Drop
reference.mdinthemes/your-theme/to add preset;starter.htmloptional for complex systems - Template export chrome switch — Set
data-export-progress="false"on<body>to hide progress bar and nav dots - Image pipeline — Auto-evaluate and process assets (Pillow)
- PPT import — Convert
.pptxto web presentations - PPTX / PNG export — via kai-html-export
- Bilingual — Chinese / English support
Design Presets
| Preset | Vibe | Best For |
|---|---|---|
| Bold Signal | Confident, high-impact | Pitch decks, keynotes |
| Electric Studio | Clean, professional | Agency presentations |
| Creative Voltage | Energetic, retro-modern | Creative pitches |
| Dark Botanical | Elegant, sophisticated | Premium brands |
| Blue Sky | Airy, enterprise SaaS | Product launches, tech decks |
| Notebook Tabs | Editorial, organized | Reports, reviews |
| Pastel Geometry | Friendly, approachable | Product overviews |
| Split Pastel | Playful, modern | Creative agencies |
| Vintage Editorial | Witty, personality-driven | Personal brands |
| Neon Cyber | Futuristic, techy | Tech startups |
| Terminal Green | Developer-focused | Dev tools, APIs |
| Swiss Modern | Minimal, precise | Corporate, data |
| Paper & Ink | Literary, thoughtful | Storytelling |
| Aurora Mesh | Vibrant, premium SaaS | Product launches, VC pitch |
| Enterprise Dark | Authoritative, data-driven | B2B, investor decks, strategy |
| Glassmorphism | Light, translucent, modern | Consumer tech, brand launches |
| Neo-Brutalism | Bold, uncompromising | Indie dev, creative manifesto |
| Chinese Chan | Still, contemplative | Design philosophy, brand, culture |
| Data Story | Clear, precise, persuasive | Business review, KPI, analytics |
| Modern Newspaper | Punchy, authoritative, editorial | Business reports, thought leadership |
| Neo-Retro Dev Deck | Opinionated, technical, handmade | Dev tool launches, API docs, hackathons |
| Strategy Consulting | Structured, authoritative, clean | Consulting reports, strategy decks, due diligence |
Blue Sky
Light sky-blue gradient (#f0f9ff → #e0f2fe) with floating glassmorphism cards and animated ambient orbs. Inspired by a real enterprise AI pitch deck (CloudHub V12 MVP). Feels like a high-altitude clear day: open, confident, premium.
Signature elements: grainy noise texture overlay · 3 animated blur orbs repositioning per slide · glassmorphism cards with backdrop-filter: blur(24px) · 40px tech grid with radial mask · spring-physics horizontal transitions · cloud hero effect on title slides.
Why Blue Sky is the starter template: It demonstrates all 10 signature visual elements pre-built. Models only fill in content — no risk of mis-implementing the design system. This pattern (reference.md + starter.html) is reusable for any complex theme.
Creating Custom Themes
- Create
themes/your-theme/directory - Write
reference.mddescribing:- Colors (primary, accent, neutrals)
- Typography (fonts, weights, sizes)
- Layout patterns (cards, grids, full-bleed)
- Component classes (if custom CSS needed)
- Optionally add
starter.htmlfor complex visual systems (animated backgrounds, custom JS)
Your theme appears as "Custom: your-theme" in the style picker.
Example brand themes bundled: themes/cloudhub/ and themes/kingdee/
Brand Style Migration
Migrate existing .pptx to custom brand design — get pixel-perfect archive + editable version.
# Step 1 — re-style
/slide-creator --plan "migrate company-deck.pptx to our brand style"
/slide-creator --generate # → branded-deck.html
# Step 2 — export both modes
/kai-html-export branded-deck.html # pixel-perfect
/kai-html-export --pptx --mode native branded-deck.html # editable
Requirements
slide-creator has no external dependencies. Python 3 is optional for image evaluation — no packages required.
For PPTX/PNG export: clawhub install kai-html-export or pip install playwright python-pptx
Output
presentation.html— single-file, zero dependencies, runs in browserPRESENTATION_SCRIPT.md— speaker notes (auto-generated if ≥8 slides)
Compatibility
| Platform | Version | Install path |
|---|---|---|
| Claude Code | any | ~/.claude/skills/slide-creator/ |
| OpenClaw | ≥ 0.9 | ~/.openclaw/skills/slide-creator/ |
Version History
v2.27.0 — Captured-run eval architecture release: added OpenAI-style skill eval prompts, normalized trace scoring, fixture style rubrics, live Codex baselines, regression comparison, and optional release-gate integration. README and design docs now document the Supervisor / Generate Worker / Style Judge split, context isolation rules, and token accounting policy so live eval cost remains visible instead of hidden by subagents.
v2.26.0 — Blue Sky deterministic renderer and custom theme release: Blue Sky now renders through the canonical BRIEF pipeline with strict validation coverage, custom themes resolve correctly in both source and plugin layouts, and private Kingdee / Cloudhub theme assets were cleaned up, compressed, and locked with regression tests.
v2.25.0 — Strategy Consulting preset: new consulting-style design with 12 canonical layouts (exec summary, before/after, three things, funnel, framework matrix, quote + evidence, driver breakdown, etc.), white-background navy-accent visual language inspired by MBB slide decks. Preset count now 22.
v2.24.3 — Single-deck eval and production verification release: --generate / render-from-brief can now emit per-deck eval JSON via --eval or --eval-out, Data Story chart routing/label logic now fails closed on weak numeric signals instead of drawing fake charts, and production demo fixtures were revalidated and resynced to the current watermark version so core preset verification remains green.
v2.24.2 — Enterprise Dark / Chinese Chan chrome hardening: validator now rejects hidden-brand regressions for presets that must suppress #brand-mark, and watermark checks now fail stale version/preset strings so non-canonical shell output cannot pass --strict with leaked skill names or outdated credits.
v2.24.1 — Direct-route contract and pre-write gate fix: forced direct prompt generation back through BRIEF.json -> render_from_brief(), made both CLI render entrypoints run scripts/validate_html.py --strict before writing output, and tightened the SKILL/workflow/doc contracts plus regression tests so non-canonical Chinese Chan HTML can no longer slip through a current-version generation path.
v2.24.0 — Core preset hardening and quality-gate release: added preset support tiers plus manifest-driven eval/release-gate tooling, upgraded low-context BRIEF semantics and preset usage rules, repaired Chinese Chan formal contracts and production/shared runtime drift, modernized family demo runtimes, moved the canonical HTML validator to scripts/validate_html.py with a compatibility wrapper, and tightened Swiss Modern/shared shell chrome so nav dots and page-number treatments render correctly across presets.
v2.23.2 — Sandbox entrypoint and skill-surface patch: added root main.py plus slide-creator wrapper for bare-sandbox BRIEF validation/rendering, made --plan fail with a clear slash-skill boundary instead of a misleading runtime error, restored SKILL.md's user-facing style recommendation surface, and clarified that built-in presets live under references/ while themes/<name>/reference.md is only for custom themes.
v2.23.1 — Enterprise Dark runtime stability patch: fixed shared js-engine active-slide reveal toggling, hid editing chrome by default, replaced unresolved watermark tokens with real version/preset metadata, stabilized one-gesture-per-page wheel pagination for scroll-snap decks, and corrected Enterprise Dark narrative cover routing, split-title clipping, governance/table rhythm, and subtle grid overlay balance.
v2.23.0 — Title composition and low-context quality release: added a preset-aware title profile registry plus browser-level title QA, expanded low-context diagnostics/eval buckets for quality uplift checks, hardened strict gates around shared runtime and body[data-preset], and reordered SKILL.md so style enforcement, narrative arc, and title quality take priority over degradable playback/edit/watermark features.
v2.22.0 — Style reference rollout and strict quality gate hardening: all presets now pass style-reference audit, Swiss Modern plus Enterprise Dark / Data Story / Glassmorphism / Chinese Chan gain explicit canonical export contracts and user-content routing, tests/validate.py --strict is documented and tested as the --generate pre-write gate, and new regression coverage locks CSS variable resolution, layout variety, and priority preset contract checks.
v2.19.0 — IR-first release: BRIEF.json becomes the primary truth source, PLANNING.md is optional human view, late-context eval fixtures added under evals/generated-decks/, README design philosophy rewritten around prompt → BRIEF → HTML → validate → eval, and stronger regression coverage added for the new contract.
v2.18.1 — Paper & Ink style fix: restored correct editorial style reference (Cormorant Garamond headlines, Source Serif 4 body, crimson ornamental rules, drop caps); added .slide-content wrapper to slide HTML structure for proper vertical centering; Chinese text font fallback now uses system serif (宋体) instead of Noto Sans SC.
v2.18.0 — JS engine extraction (html-template.md 557→222 lines); style signature injection expanded to require all CSS classes from Typography/Components sections; neon-cyber glow effects clarified; style consistency audit tool (tests/audit_style_consistency.py).
v2.17.0 — Style reference system overhaul; contrast fix for light backgrounds; glassmorphism text theme mapping.
v2.12.0
v2.11.0 — Hard rules embedded in SKILL.md; --generate flow restructured with explicit validation.
v2.9.0 — Content Review System: 16 checkpoints (6 auto-detectable, 10 AI-advised); Phase 3.5 Review in Polish mode; --review command for on-demand diagnosis; three rule types (hard/context-aware/advisory).
v2.8.0 — Simplified planning depths (Auto / Polish); bilingual naming; timing guidance; preset-lock across depths; checked-in demo paths; regression coverage.
v2.7.1 — Zero-dependency check-doc-sync.py contract checker for SKILL.md/README/workflow.md sync; regression test integration.
v2.7.0 — Enhancement Mode guardrails for editing existing HTML decks; inline editing default-on but optional; bundled brand theme examples (themes/cloudhub/, themes/kingdee/).
v2.6.1 — Brand Style Migration workflow documentation.
v2.6.0 — Design Quality Baseline (references/design-quality.md): minimum 65% fill, multi-column balance, 90/8/2 color law, no 3 consecutive bullet slides, content-tone color calibration, pre-output self-check. Fixed aurora-mesh Inter font contradiction (Space Grotesk + DM Sans).
v2.5.0 — 21 presets with Blue Sky starter template; Show Don't Tell style discovery.
v2.0.0 — Two-stage workflow (--plan / --generate); inline editing; presenter mode.
v1.0.0 — Initial release with 10 presets.





















