返回 html-ppt-skill
SKILL.md
根目录 / SKILL.md
1 ---
2 name: html-ppt
3 description: HTML PPT Studio — author professional static HTML presentations in many styles, layouts, and animations, all driven by templates. Use when the user asks for a presentation, PPT, slides, keynote, deck, slideshow, "幻灯片", "演讲稿", "做一份 PPT", "做一份 slides", a reveal-style HTML deck, a 小红书 图文, or any kind of multi-slide pitch/report/sharing document that should look tasteful and be usable with keyboard navigation. Triggers include keywords like "presentation", "ppt", "slides", "deck", "keynote", "reveal", "slideshow", "幻灯片", "演讲稿", "分享稿", "小红书图文", "talk slides", "pitch deck", "tech sharing", "technical presentation".
4 ---
5
6 # html-ppt — HTML PPT Studio
7
8 Author professional HTML presentations as static files. One theme file = one
9 look. One layout file = one page type. One animation class = one entry effect.
10 All pages share a token-based design system in `assets/base.css`.
11
12 ## Install
13
14 ```bash
15 npx skills add https://github.com/lewislulu/html-ppt-skill
16 ```
17
18 One command, no build. Pure static HTML/CSS/JS with only CDN webfonts.
19
20 ## What the skill gives you
21
22 - **36 themes** (`assets/themes/*.css`) — minimal-white, editorial-serif, soft-pastel, sharp-mono, arctic-cool, sunset-warm, catppuccin-latte/mocha, dracula, tokyo-night, nord, solarized-light, gruvbox-dark, rose-pine, neo-brutalism, glassmorphism, bauhaus, swiss-grid, terminal-green, xiaohongshu-white, rainbow-gradient, aurora, blueprint, memphis-pop, cyberpunk-neon, y2k-chrome, retro-tv, japanese-minimal, vaporwave, midcentury, corporate-clean, academic-paper, news-broadcast, pitch-deck-vc, magazine-bold, engineering-whiteprint
23 - **15 full-deck templates** (`templates/full-decks/<name>/`) — complete multi-slide decks with scoped `.tpl-<name>` CSS. 8 extracted from real-world decks (xhs-white-editorial, graphify-dark-graph, knowledge-arch-blueprint, hermes-cyber-terminal, obsidian-claude-gradient, testing-safety-alert, xhs-pastel-card, dir-key-nav-minimal), 7 scenario scaffolds (pitch-deck, product-launch, tech-sharing, weekly-report, xhs-post 3:4, course-module, **presenter-mode-reveal** — 演讲者模式专用)
24 - **31 layouts** (`templates/single-page/*.html`) with realistic demo data
25 - **27 CSS animations** (`assets/animations/animations.css`) via `data-anim`
26 - **20 canvas FX animations** (`assets/animations/fx/*.js`) via `data-fx` — particle-burst, confetti-cannon, firework, starfield, matrix-rain, knowledge-graph (force-directed), neural-net (pulses), constellation, orbit-ring, galaxy-swirl, word-cascade, letter-explode, chain-react, magnetic-field, data-stream, gradient-blob, sparkle-trail, shockwave, typewriter-multi, counter-explosion
27 - **Keyboard runtime** (`assets/runtime.js`) — arrows, T (theme), A (anim), F/O, **S (presenter mode: magnetic-card popup with CURRENT / NEXT / SCRIPT / TIMER cards)**, N (notes drawer), R (reset timer in presenter)
28 - **FX runtime** (`assets/animations/fx-runtime.js`) — auto-inits `[data-fx]` on slide enter, cleans up on leave
29 - **Showcase decks** for themes / layouts / animations / full-decks gallery
30 - **Headless Chrome render script** for PNG export
31
32 ## When to use
33
34 Use when the user asks for any kind of slide-based output or wants to turn
35 text/notes into a presentable deck. Prefer this over building from scratch.
36
37 ### 🎤 Presenter Mode (演讲者模式 + 逐字稿)
38
39 If the user mentions any of: **演讲 / 分享 / 讲稿 / 逐字稿 / speaker notes / presenter view / 演讲者视图 / 提词器**, or says things like "我要去给团队讲 xxx", "要做一场技术分享", "怕讲不流畅", "想要一份带逐字稿的 PPT" — **use the `presenter-mode-reveal` full-deck template** and write 150–300 words of 逐字稿 in each slide's `<aside class="notes">`.
40
41 See [references/presenter-mode.md](references/presenter-mode.md) for the full authoring guide including the 3 rules of speaker script writing:
42 1. **不是讲稿,是提示信号** — 加粗核心词 + 过渡句独立成段
43 2. **每页 150–300 字** — 2–3 分钟/页的节奏
44 3. **用口语,不用书面语** — "因此"→"所以","该方案"→"这个方案"
45
46 All full-deck templates support the S key presenter mode (it's built into `runtime.js`). **S opens a new popup window with 4 magnetic cards**:
47 - 🔵 **CURRENT** — pixel-perfect iframe preview of the current slide
48 - 🟣 **NEXT** — pixel-perfect iframe preview of the next slide
49 - 🟠 **SPEAKER SCRIPT** — large-font 逐字稿 (scrollable)
50 - 🟢 **TIMER** — elapsed time + slide counter + prev/next/reset buttons
51
52 Each card is **draggable by its header** and **resizable by the bottom-right corner handle**. Card positions/sizes persist to `localStorage` per deck. A "Reset layout" button restores the default arrangement.
53
54 **Why the previews are pixel-perfect**: each preview is an `<iframe>` that loads the actual deck HTML with a `?preview=N` query param; `runtime.js` detects this and renders only slide N with no chrome. So the preview uses the **same CSS, theme, fonts, and viewport as the audience view** — colors and layout are guaranteed identical.
55
56 **Smooth navigation**: on slide change, the presenter window sends `postMessage({type:'preview-goto', idx:N})` to each iframe. The iframe just toggles `.is-active` between slides — **no reload, no flicker**. The two windows also stay in sync via `BroadcastChannel`.
57
58 Only `presenter-mode-reveal` is designed from the ground up around the feature with proper example 逐字稿 on every slide.
59
60 Keyboard in presenter window: `← →` navigate (syncs audience) · `R` reset timer · `Esc` close popup.
61 Keyboard in audience window: `S` open presenter · `T` cycle theme · `← →` navigate (syncs presenter) · `F` fullscreen · `O` overview.
62
63 ## Before you author anything — ALWAYS ask or recommend
64
65 **Do not start writing slides until you understand three things.** Either ask
66 the user directly, or — if they already handed you rich content — propose a
67 tasteful default and confirm.
68
69 1. **Content & audience.** What's the deck about, how many slides, who's
70 watching (engineers / execs / 小红书读者 / 学生 / VC)?
71 2. **Style / theme.** Which of the 36 themes fits? If unsure, recommend 2-3
72 candidates based on tone:
73 - Business / investor pitch → `pitch-deck-vc`, `corporate-clean`, `swiss-grid`
74 - Tech sharing / engineering → `tokyo-night`, `dracula`, `catppuccin-mocha`,
75 `terminal-green`, `blueprint`
76 - 小红书图文 → `xiaohongshu-white`, `soft-pastel`, `rainbow-gradient`,
77 `magazine-bold`
78 - Academic / report → `academic-paper`, `editorial-serif`, `minimal-white`
79 - Edgy / cyber / launch → `cyberpunk-neon`, `vaporwave`, `y2k-chrome`,
80 `neo-brutalism`
81 3. **Starting point.** One of the 14 full-deck templates, or scratch? Point
82 to the closest `templates/full-decks/<name>/` and ask if it fits. If the
83 user's content suggests something obvious (e.g. "我要做产品发布会" →
84 `product-launch`), propose it confidently instead of asking blindly.
85
86 A good opening message looks like:
87
88 > 我可以给你做这份 PPT!先确认三件事:
89 > 1. 大致内容 / 页数 / 观众是谁?
90 > 2. 风格偏好?我建议从这 3 个主题里选一个:`tokyo-night`(技术分享默认好看)、`xiaohongshu-white`(小红书风)、`corporate-clean`(正式汇报)。
91 > 3. 要不要用我现成的 `tech-sharing` 全 deck 模板打底?
92
93 Only after those are clear, scaffold the deck and start writing.
94
95 ## Quick start
96
97 1. **Scaffold a new deck.** From the repo root:
98 ```bash
99 ./scripts/new-deck.sh my-talk
100 open examples/my-talk/index.html
101 ```
102 2. **Pick a theme.** Open the deck and press `T` to cycle. Or hard-code it:
103 ```html
104 <link rel="stylesheet" id="theme-link" href="../assets/themes/aurora.css">
105 ```
106 Catalog in [references/themes.md](references/themes.md).
107 3. **Pick layouts.** Copy `<section class="slide">...</section>` blocks out of
108 files in `templates/single-page/` into your deck. Replace the demo data.
109 Catalog in [references/layouts.md](references/layouts.md).
110 4. **Add animations.** Put `data-anim="fade-up"` (or `class="anim-fade-up"`) on
111 any element. On `<ul>`/grids, use `anim-stagger-list` for sequenced reveals.
112 For canvas FX, use `<div data-fx="knowledge-graph">...</div>` and include
113 `<script src="../assets/animations/fx-runtime.js"></script>`.
114 Catalog in [references/animations.md](references/animations.md).
115 5. **Use a full-deck template.** Copy `templates/full-decks/<name>/` into
116 `examples/my-talk/` as a starting point. Each folder is self-contained with
117 scoped CSS. Catalog in [references/full-decks.md](references/full-decks.md)
118 and gallery at `templates/full-decks-index.html`.
119 6. **Render to PNG.**
120 ```bash
121 ./scripts/render.sh templates/theme-showcase.html # one shot
122 ./scripts/render.sh examples/my-talk/index.html 12 # 12 slides
123 ```
124
125 ## Authoring rules (important)
126
127 - **Always start from a template.** Don't author slides from scratch — copy the
128 closest layout from `templates/single-page/` first, then replace content.
129 - **Use tokens, not literal colors.** Every color, radius, shadow should come
130 from CSS variables defined in `assets/base.css` and overridden by a theme.
131 Good: `color: var(--text-1)`. Bad: `color: #111`.
132 - **Don't invent new layout files.** Prefer composing existing ones. Only add
133 a new `templates/single-page/*.html` if none of the 30 fit.
134 - **Respect chrome slots.** `.deck-header`, `.deck-footer`, `.slide-number`
135 and the progress bar are provided by `assets/base.css` + `runtime.js`.
136 - **Keyboard-first.** Always include `<script src="../assets/runtime.js"></script>`
137 so the deck supports ← → / T / A / F / S / O / hash deep-links.
138 - **One `.slide` per logical page.** `runtime.js` makes `.slide.is-active`
139 visible; all others are hidden.
140 - **Supply notes.** Wrap speaker notes in `<div class="notes">…</div>` inside
141 each slide. Press S to open the overlay.
142 - **NEVER put presenter-only text on the slide itself.** Descriptive text like
143 "这一页展示了……" or "Speaker: 这里可以补充……" or small explanatory captions
144 aimed at the presenter MUST go inside `<div class="notes">`, NOT as visible
145 `<p>` / `<span>` elements on the slide. The `.notes` class is `display:none`
146 by default — it only appears in the S overlay. Slides should contain ONLY
147 audience-facing content (titles, bullet points, data, charts, images).
148
149 ## Writing guide
150
151 See [references/authoring-guide.md](references/authoring-guide.md) for a
152 step-by-step walkthrough: file structure, naming, how to transform an outline
153 into a deck, how to choose layouts and themes per audience, how to do a
154 Chinese + English deck, and how to export.
155
156 ## Catalogs (load when needed)
157
158 - [references/themes.md](references/themes.md) — all 36 themes with when-to-use.
159 - [references/layouts.md](references/layouts.md) — all 31 layout types.
160 - [references/animations.md](references/animations.md) — 27 CSS + 20 canvas FX animations.
161 - [references/full-decks.md](references/full-decks.md) — all 15 full-deck templates.
162 - [references/presenter-mode.md](references/presenter-mode.md) — **演讲者模式 + 逐字稿编写指南(技术分享/演讲必看)**.
163 - [references/authoring-guide.md](references/authoring-guide.md) — full workflow.
164
165 ## File structure
166
167 ```
168 html-ppt/
169 ├── SKILL.md (this file)
170 ├── references/ (detailed catalogs, load as needed)
171 ├── assets/
172 │ ├── base.css (tokens + primitives — do not edit per deck)
173 │ ├── fonts.css (webfont imports)
174 │ ├── runtime.js (keyboard + presenter + overview + theme cycle)
175 │ ├── themes/*.css (36 token overrides, one per theme)
176 │ └── animations/
177 │ ├── animations.css (27 named CSS entry animations)
178 │ ├── fx-runtime.js (auto-init [data-fx] on slide enter)
179 │ └── fx/*.js (20 canvas FX modules: particles/graph/fireworks…)
180 ├── templates/
181 │ ├── deck.html (minimal 6-slide starter)
182 │ ├── theme-showcase.html (36 slides, iframe-isolated per theme)
183 │ ├── layout-showcase.html (iframe tour of all 31 layouts)
184 │ ├── animation-showcase.html (20 FX + 27 CSS animation slides)
185 │ ├── full-decks-index.html (gallery of all 14 full-deck templates)
186 │ ├── full-decks/<name>/ (14 scoped multi-slide deck templates)
187 │ └── single-page/*.html (31 layout files with demo data)
188 ├── scripts/
189 │ ├── new-deck.sh (scaffold a deck from deck.html)
190 │ └── render.sh (headless Chrome → PNG)
191 └── examples/demo-deck/ (complete working deck)
192 ```
193
194 ## Rendering to PNG
195
196 `scripts/render.sh` wraps headless Chrome at
197 `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`. For multi-slide
198 capture, runtime.js exposes `#/N` deep-links, and render.sh iterates 1..N.
199
200 ```bash
201 ./scripts/render.sh templates/single-page/kpi-grid.html # single page
202 ./scripts/render.sh examples/demo-deck/index.html 8 out-dir # 8 slides, custom dir
203 ```
204
205 ## Keyboard cheat sheet
206
207 ```
208 ← → Space PgUp PgDn Home End navigate
209 F fullscreen
210 S open presenter window (magnetic cards: current/next/script/timer)
211 N quick notes drawer (bottom overlay)
212 R reset timer (in presenter window)
213 ?preview=N URL param — force preview-only mode (single slide, no chrome)
214 O slide overview grid
215 T cycle themes (reads data-themes attr)
216 A cycle demo animation on current slide
217 #/N in URL deep-link to slide N
218 Esc close all overlays
219 ```
220
221 ## License & author
222
223 MIT. Copyright (c) 2026 lewis &lt;sudolewis@gmail.com&gt;.
224
224 lines MARKDOWN