把看不见的技术过程,做成能看见的剧场式动画 HTML。
这是一个 Claude Code skill:输入一个技术主题("打开浏览器到屏幕上像素的全过程"、"一个 SQL 查询是怎么执行的"、"TLS 1.3 握手"…),它会产出一份单文件 HTML 动画演示 —— 多场景、自动播放、章节导航、配真实代码/抓包/日志旁白。
animation-explainer/
├─ SKILL.md # 技能定义 + 工作流 + 反 AI slop 清单
├─ package.json # msedge-tts + playwright 依赖
├─ scripts/
│ ├─ generate-audio.mjs # TTS 生成 mp3(edge-tts 云希男声)
│ └─ export-video.mjs # 导出 MP4(Playwright + ffmpeg)
├─ templates/
│ └─ theater-shell.html # 最小骨架(含 TTS 模块 + 推进逻辑)
└─ examples/
├─ browser-request/
│ ├─ index.html # 浏览器请求底层之旅(8 节,网络协议)
│ └─ audio/scene-1~8.mp3 # 口播音频
└─ vue-internals/
├─ index.html # Vue 3 原理之旅(8 节,前端框架)
└─ audio/scene-1~8.mp3 # 口播音频
直接双击打开(无构建步骤):
open examples/browser-request/index.html浏览器里会看到一个 8 节的剧场演示,带云希男声口播:
- 你按下了回车键 — URL 解析
- DNS:名字翻译 — 递归查询的动画
- TCP 三次握手 — SYN/SYN+ACK/ACK 时序
- TLS 握手 — ClientHello → Cert → Key Exchange
- HTTP 请求 — 真实报文格式飞向服务器
- 服务器内部处理 — Nginx → Router → Handler → DB 流水线 + 实时日志
- HTTP 响应 — 200 OK + Headers + body 飞回
- 浏览器渲染 — HTML/CSS → DOM/CSSOM → Render Tree → Layout/Paint
操作:键盘 ← → 翻页 · Space 播放/暂停 · R 重播本节 · M 静音切换 · 顶部小方块直接跳转。
切换章节按口播结束驱动(不是固定 setTimeout),所以语音和动画始终同步。
在浏览器里看过觉得 OK,再导出可分发的视频:
# 第一次跑前
npm install
npx playwright install chromium
# 导出
npm run video:browser # → examples/browser-request/video.mp4
npm run video:vue # → examples/vue-internals/video.mp4
# 自定义参数
node scripts/export-video.mjs examples/vue-internals --width=1920 --height=1080 --fps=60输出约 5MB / 2 分钟,1280×800 30fps,H.264 + AAC。可直接发微信/抖音/B站。
工作原理:Playwright headless 录 WebM(无音轨)+ ffmpeg 拼 mp3 + mux → MP4。详情见 SKILL.md 的"视频导出"那节。
跟 Claude 说:
"用 animation-explainer skill 给我做一个 [主题] 的动画演示"
例如:
- "用 animation-explainer skill 做一个 git rebase 内部发生了什么的动画演示"
- "用 animation-explainer skill 把 JS 事件循环讲清楚"
- "用 animation-explainer 解释 React fiber reconciler"
Claude 会按 SKILL.md 的 6 + 1 步工作流:
- 把主题拆成 3–8 个场景
- 选视觉模式(实物 mockup / 节点+飞包 / 时序图 / 流水线 / 树)
- 复制
examples/browser-request/index.html改 —— 不会从零写 - 用真实命令输出/报文/日志填旁白(反 AI slop)
- 写 3–5 句口语化中文 narration 字段
- 自检(反 AI Slop 清单)
- 跑
node scripts/generate-audio.mjs examples/<topic>生成口播 mp3 - (可选)人工审核通过后
node scripts/export-video.mjs examples/<topic>导出 MP4
完整在 SKILL.md。最重要的几条:
- 真实数据胜过完美设计:旁白里的命令必须能跑、报文必须符合协议、时间数字必须在合理范围
- 隐喻要排他:一节一个能动的视觉隐喻;"DNS 是电话簿" ✅,"DNS 是分布式服务" ❌
- 3–8 个场景:少于 3 不必动画化;多于 8 注意力分散
- 5 种已有视觉模式优先:先问能不能用现有模式讲清楚,再考虑发明新的
- 单文件零依赖:所有 CSS/JS/SVG 内联,复制到任何机器都能跑
- 静态信息图、纯文字说明(用 Markdown 就行)
- 交互式教程(要让用户输入并响应,本 skill 是"播放型"不是"操作型")
- 长篇课程(> 8 节就该拆成多个 demo)
- GIF 导出(只支持 MP4;如要 GIF 用
ffmpeg -i video.mp4 -vf "fps=10,scale=720:-1" out.gif二次转)
每完成一个新 demo:
- 把它的章节拆解模式补进
SKILL.md的"常见任务参考"表 - 如果发现了一种复用了 2 次以上的新视觉模式,沉淀到
templates/ - demo 之间不共享代码(保持单文件分发),但共享设计 token 和模式