Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create beautiful, zero-dependency HTML presentations that run entirely in the browser — no npm, no build tools. 21 curated style presets with named layout variations, visual style discovery with live previews, viewport-fitted slides, inline browser editing, Presenter Mode, and optional PPTX export. Content-type routing suggests the best style for pitch decks, dev docs, data reports, and more. Supports --plan (outline), --generate (HTML from plan), and --export pptx flags.
.claude/skills/slide-creator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
Generate zero-dependency HTML presentations that run entirely in the browser. This skill guides users from raw ideas to a polished, animated slide deck — using visual style discovery ("show, don't tell") to nail the aesthetic before writing a line of code.
--plan creates a PLANNING.md outline first; --generate then produces HTML. Separating thinking from execution leads to better structure and less backtracking.Parse the invocation to determine mode:
--plan [prompt] — Planning mode. Inspect resources/, analyze the prompt, create PLANNING.md. Stop — do NOT generate HTML.--generate [instructions] — Generation mode. Read PLANNING.md if present (skip Phase 1/2 questions), then generate HTML.--export pptx [--scale N] — Export the most recently modified HTML as PPTX via the bundled Python script. Requires Python 3 + pip install playwright python-pptx. No Node.js required.--plan)resources/ — read text/markdown files, note images. Tell the user what was found (or "Planning from prompt only" if empty).PLANNING.md in the working directory.--export pptx)*.html in current directory (prefer most recently modified).python3 <skill-path>/scripts/export-pptx.py <presentation.html> [output.pptx]The script uses Playwright with the user's existing system Chrome (--channel chrome flag, no Chromium download). It captures pixel-perfect screenshots of each slide and assembles them into a PPTX. Only pip install playwright python-pptx required — no Node.js, no 300MB browser download. If system Chrome is not found, the script will report an error and ask the user to install Chrome.
Determine what the user wants:
PLANNING.md first. If it exists, read it as source of truth and jump directly to Phase 3 — skip Phase 1/2..ppt/.pptx file → go to Phase 4.Content-type → Style hints (use when user hasn't chosen a style):
| Content type | Suggested styles | |---|---| | Data report / KPI dashboard | Data Story, Enterprise Dark, Swiss Modern | | Business pitch / VC deck | Bold Signal, Aurora Mesh, Enterprise Dark | | Developer tool / API docs | Terminal Green, Neon Cyber, Neo-Retro Dev Deck | | Research / thought leadership | Modern Newspaper, Paper & Ink, Swiss Modern | | Creative / personal brand | Vintage Editorial, Split Pastel, Neo-Brutalism | | Product launch / SaaS | Aurora Mesh, Glassmorphism, Electric Studio | | Education / tutorial | Notebook Tabs, Paper & Ink, Pastel Geometry | | Chinese content | Chinese Chan, Aurora Mesh, Blue Sky | | Hackathon / indie dev | Neo-Retro Dev Deck, Neo-Brutalism, Terminal Green |
First, silently scan for a resources/ folder. If found, read text/markdown files and note images as background context. Don't ask the user to take any action.
Then gather everything in a single AskUserQuestion call with all 5 questions at once — collecting everything before submitting avoids back-and-forth.
> Default: Always include inline editing unless user explicitly selects "No". When --generate skips Phase 1, include inline editing by default.
If user has content, ask them to share it after submitting the form.
Language: Detect from the user's message — never default to a fixed language. Maintain the detected language throughout all slide text including labels, CTAs, and captions. English may appear as secondary annotation text only when the style calls for it.
Skip if user chose "No images." Text-only decks are fully first-class — CSS-generated gradients, shapes, and typography create compelling visuals without any images.
If images are provided:
ls the folder, then use Read (multimodal) to view each image.USABLE or NOT USABLE (with reason: blurry, irrelevant, broken) + what it represents + dominant colors + shape.Most people can't articulate design preferences in words. Generate 3 mini visual previews and let them react — this is the "wow moment" of the skill.
Ask via AskUserQuestion:
Before showing presets, silently scan <skill-path>/themes/ for subdirectories. Skip any directory whose name starts with _ (those are examples/templates, not real themes). Each remaining subdirectory with a reference.md is a custom theme. Append them to the preset list as Custom: <folder-name> entries. If any custom themes exist, mention them first: "I also found N custom theme(s) in your themes/ folder."
Available Presets (full details in STYLE-DESC.md):
| 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 | Clean, airy, enterprise-ready | SaaS pitches, AI/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, research summaries | | Neo-Retro Dev Deck | Opinionated, technical, handmade | Dev tool launches, API docs, hackathon presentations |
Mood → Preset mapping:
| Mood | Style Options | |------|---------------| | Impressed/Confident | Bold Signal, Enterprise Dark, Neo-Brutalism | | Excited/Energized | Creative Voltage, Neon Cyber, Aurora Mesh | | Calm/Focused | Notebook Tabs, Paper & Ink, Chinese Chan | | Inspired/Moved | Dark Botanical, Vintage Editorial, Glassmorphism | | Clean/Enterprise | Blue Sky, Electric Studio, Enterprise Dark | | Data-Driven | Data Story, Enterprise Dark, Swiss Modern | | Playful/Creative | Split Pastel, Pastel Geometry, Neo-Brutalism | | Developer-Focused | Terminal Green, Neon Cyber, Neo-Retro Dev Deck | | Editorial/Organized | Notebook Tabs, Vintage Editorial, Modern Newspaper |
Create 3 mini HTML files in .claude-design/slide-previews/ (style-a/b/c.html). Each is a single title slide (~50-100 lines, self-contained) demonstrating typography, color palette, and animation style.
If a USABLE logo was found in Step 1.2, embed it (base64) into each preview — seeing their own brand in 3 different aesthetics makes the choice feel personal, not abstract.
Never use: Inter/Roboto/Arial as display fonts, generic purple-on-white gradients, predictable centered hero layouts.
Present the 3 files with a one-sentence description each, then ask via AskUserQuestion which they prefer (Style A / B / C / Mix elements).
Generate the presentation based on content from Phase 1 and style from Phase 2. If PLANNING.md exists, it's the source of truth — skip Phases 1 and 2.
Read references/blue-sky-starter.html and use it as the base.
All 10 signature visual elements (orbs, noise texture, grid, glassmorphism, spring-physics horizontal track, gradient text, cloud hero, pill dots, counter, entrance animation) are already implemented in that file. You only need to:
--slide-count in :root to your actual slide count#track with your content, following the slide-type patterns in the comment blockorbPositions array in JS — one [l1,t1,s1, l2,t2,s2, l3,t3,s3] entry per slideDo not rewrite the visual system CSS. Do not change the track/slide layout. Content goes inside .slide wrappers using the pre-built component classes: .g (glass card), .gt (gradient text), .pill, .stat, .divider, .cols2/3/4, .ctable, .co (amber callout), .warn (red warning), .info (blue info), .layer (org row), ul.bl (bullet list).
Read the theme's reference.md for style constraints. If a starter.html exists in the theme folder, use it as the base (same as Blue Sky). Otherwise, follow the standard references below and apply the custom theme's colors, typography, and layout rules.
Read references/html-template.md — it contains the required HTML structure, JavaScript patterns, animation recipes, and edit button implementation.
> IMPORTANT — MUST READ before writing any HTML. Do NOT implement the edit button or presenter button from memory. The correct pattern uses a hotzone <div> + JS mouseenter/mouseleave with a 400ms grace period. Using body:hover is a known mistake — it makes the button permanently visible. The exact implementation is in html-template.md; copy it directly.
Also read STYLE-DESC.md for viewport fitting CSS, responsive breakpoints, style preset details, and CSS gotchas (especially: never negate CSS functions directly — use calc(-1 * clamp(...)) not -clamp(...)).
Each slide must equal exactly one viewport height (100vh / 100dvh). When content doesn't fit, split it across slides — never allow scrolling within a slide. This is what separates a polished presentation from a broken one.
Content density limits:
| Slide Type | Maximum | |------------|---------| | Title slide | 1 heading + 1 subtitle | | Content slide | 1 heading + 4-6 bullets | | Feature grid | 1 heading + 6 cards max (2×3 or 3×2) | | Code slide | 1 heading + 8-10 lines | | Quote slide | 1 quote (3 lines max) + attribution | | Image slide | 1 heading + 1 image (max 60vh height) |
When in doubt → split the slide.
Visual Rhythm: Alternate between text-heavy and visual-heavy slides. Three or more consecutive slides with the same layout signal low effort. Vary between: headline-dominant → data/diagram → evidence list → quote or visual break → headline-dominant. Every 4–5 slides, one slide should be nearly empty (a single statement, a big number, or a quote).
When a slide needs to show a process, comparison, hierarchy, timeline, or data — generate an inline SVG diagram instead of bullet points.
Read references/diagram-patterns.md for ready-to-use SVG templates:
| Need | Pattern | |------|---------| | Steps in a process | Horizontal Flowchart | | Events over time | Vertical Timeline | | Ranking / metrics | Horizontal Bar Chart | | Prioritisation | 2×2 Comparison Grid | | Team / structure | Org / Hierarchy Chart |
Rules:
currentColor so diagrams inherit the slide's text color automatically--accent color to the most important element (first step, top bar, highlighted quadrant)For each USABLE image from Step 1.2, determine processing needed (circular crop for logos, resize for large files, padding for screenshots needing breathing room) and run it with Pillow. Reference images with relative paths (assets/...) — don't base64 encode unless the user explicitly wants a fully self-contained file.
Rules:
<section>, <nav>, <main>)@media (prefers-reduced-motion: reduce) support#, *, **, _) in slide text — use semantic HTML elements (<strong>, <em>, <h2>) for structure and emphasisRead references/pptx-extraction.md for the Python extraction script.
assets/), and slide order. Put speaker notes in data-notes attributes on each .slide section (not HTML comments) so they work in Presenter Mode..claude-design/slide-previews/ if it exists..slide section must have a data-notes="..." attribute with 2-4 sentences (what to say, key emphasis, transition cue). These power the built-in Presenter Mode.PRESENTATION_SCRIPT.md if deck has 8+ slides or was created from PLANNING.md (same notes content, formatted as a readable document).open [filename].htmlYour presentation is ready!
📁 File: [filename].html
🎨 Style: [Style Name]
📊 Slides: [count]
Navigation: Arrow keys or Space · Scroll or swipe · Click dots to jump
Presenter Mode: press P to open the presenter window (notes + timer + controls)
To customize: edit :root variables at the top of the CSS for colors, fonts, and spacing.
To export as PPTX: run `/slide-creator --export pptx` (requires Python 3 + playwright + python-pptx, no Node.js)Always mention: hover the top-left corner or press E to enter edit mode (included by default unless user explicitly opted out).
| Feeling | Techniques | |---------|-----------| | Dramatic/Cinematic | Slow fade-ins 1-1.5s, dark backgrounds, full-bleed images, parallax | | Techy/Futuristic | Neon glow, particle canvas, grid patterns, monospace accents, glitch text effects | | Playful/Friendly | Bouncy easing, large rounded corners, pastels, floating/bobbing animations | | Professional | Subtle 200-300ms animations, clean sans-serif, minimal decoration, data-focus | | Calm/Minimal | Very slow motion, high whitespace, muted palette, generous padding, serif type | | Editorial | Strong typography hierarchy, pull quotes, serif headlines, one accent color |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.