# html-explainer
**一个 Agent Skill:给任意主题,产出一条带配音、硬字幕、封面的讲解视频。**
HTML 写画面 → 确定性逐帧渲染 → 真 MP4。全本地跑,核心链路零 API key、零按次计费。
[](LICENSE)
[](CHANGELOG.md)
[](SKILL.md)
[](#安装)
[](#安装)
[](#安装)
[](#环境要求)
[](#环境要求)
[简体中文](README.md) · [English](README.en.md)
三条用本技能生成的成片——画面、配音、字幕、封面全部由流水线产出,无手工后期。
封面等素材托管在[演示仓库](https://github.com/OneMoh/html-explainer-demos),本仓库零体积。
https://github.com/user-attachments/assets/912e6c2d-831f-43dd-a39f-57b749bb417d
| 港股创新药 · 早盘 | 量化简史 |
|---|---|
| https://github.com/user-attachments/assets/8007843c-088d-457c-8550-81ec912e0add | https://github.com/user-attachments/assets/28949988-449b-4c4e-8d0f-6706af6f64ee |
**欢迎关注测试账号,实时观看视频数据**
| 抖音 · OnlyOneMoh | 主页实况 · Moen | 抖音 · Moen_xin |
|---|---|---|
|

|

|

|
---
## 它是什么
`html-explainer` 把一个主题做成**带配音、带硬字幕、带进度条**的讲解视频,画面用
HTML/CSS/GSAP 写。
它**是一个 Agent Skill**(`SKILL.md` + `scripts/` + `references/`),遵循
[Agent Skills](https://code.claude.com/docs/en/skills) 约定,Claude Code / OpenAI Codex /
WorkBuddy / Cursor / Gemini CLI 等都能直接加载。内部是普通的 Python 与 Node 脚本,
手工跑也完全没问题。
你只需要说一句:
> 把「为什么天空是蓝色的」做成一条 1 分钟的讲解视频。
技能会带着智能体走完:调研 → 解说词 → 配音 → 字幕与节拍 → 挑风格写画面 → 渲染 → 体检 → 封面。
---
## 安装
### 一句话安装(推荐)
把下面这句发给你的智能体:
```text
给当前本地环境安装该 Skill:https://github.com/OneMoh/html-explainer.git
安装到你的技能目录,并检测安装必要的运行环境(Python 3.9+ / Node 18+ / Chrome 或 Edge / ffmpeg)
```
它会自己 clone 到对应目录、跑环境自检、把缺的东西装上。装完**新开一个会话**,让智能体重新
扫描技能目录。
### 手动安装
仓库根目录**就是**技能目录(`SKILL.md` 在根),直接 clone 进技能目录即可,不用再拷子目录:
```bash
git clone https://github.com/OneMoh/html-explainer.git ~/.workbuddy/skills/html-explainer
bash ~/.workbuddy/skills/html-explainer/setup_env.sh --install
```
Windows 上 `~` 就是 `C:\Users\<你的用户名>`。
### 各智能体的技能目录
| 智能体 | 个人级(全局) | 项目级(仓库内) |
|---|---|---|
| **WorkBuddy** | `~/.workbuddy/skills/` | `<工作区>/.workbuddy/skills/` |
| **Claude Code** | `~/.claude/skills/` | `.claude/skills/` |
| **OpenAI Codex** | `~/.codex/skills/` | `.codex/skills/` 或 `.agents/skills/` |
| **Gemini CLI** | `~/.gemini/skills/` | `.gemini/skills/` 或 `.agents/skills/` |
| **Cursor** | `~/.cursor/skills/` | `.cursor/skills/` |
| **GitHub Copilot / VS Code** | `~/.copilot/skills/` | `.github/skills/` |
| **OpenCode** | `~/.config/opencode/skills/` | `.opencode/skills/` |
| **Windsurf** | `~/.windsurf/skills/` | `.windsurf/skills/` |
| 其他(通用约定) | `~/.agents/skills/` | `.agents/skills/` |
记不住放哪:优先 `.agents/skills/`,多数工具都认它(Claude Code 是例外,只认
`.claude/skills/`)。
### 环境要求
| 项 | 最低 | 说明 |
|---|---|---|
| Python | 3.9+ | `edge-tts==7.2.8`(刻意钉死 —— v7 改过边界 API)、`numpy`、`pillow`、`imageio-ffmpeg`。**火山引擎引擎零额外依赖**(只用标准库 `urllib`,不需要装 SDK) |
| Node.js | 18+ | 渲染器与封面器用 |
| 浏览器 | Chrome 或 Edge | 自动探测;都没有才下载 playwright chromium(约 115MB,只需一次) |
| ffmpeg | 任意版本 | 先在 `PATH` 找;没有则用 `imageio-ffmpeg` 自带的静态二进制 |
| 磁盘 | 每条成片约 2GB | 帧 PNG 体积大,合成后可删 |
`bash setup_env.sh` 只检查并报告缺什么,`--install` 才会装。全程不需要管理员权限。
---
## 配音:两个引擎
流水线开始前,智能体会**先问你用哪个 TTS**,再列候选音色让你挑(也可以直接给它音色 ID):
| | `edge-tts` | 火山引擎语音合成 2.0 |
|---|---|---|
| 你要做什么 | 什么都不用做 | 填一次 API Key |
| 费用 | 免费 | 按字符计费 |
| 音色 | 内置中英文若干 | 豆包 2.0 音色库,含声音复刻 |
| 字级时间戳 | `WordBoundary` | `sentence.words[]` |
| 额外依赖 | `edge-tts==7.2.8`、`imageio-ffmpeg` | **零** —— 只用标准库 `urllib` |
| 什么时候选它 | 默认。开箱可用、够用 | 想要更自然的语气与更好音质 |
两者产出的 `audio-manifest.json` **结构完全一致**,所以时间轴、字幕、渲染**全都不用改** ——
换引擎只是换一个字段的事。
### 选火山时,你唯一要动手的地方
技能第一次跑火山时会**生成一个 `tts.env` 并停下来**,然后告诉你把 API Key 填进去
(火山控制台 → 语音技术 → API Key 管理)。你填好回来说一声,智能体就去测连接、确认音色,
然后接着往下跑。
**这一步刻意不经过对话窗口** —— 密钥不发给智能体,智能体也不需要知道它。
内置常用音色(完整列表见[官方音色文档](https://docs.volcengine.com/docs/6561/1257544)):
| 男声 | 女声 |
|---|---|
| 云舟 2.0(默认)· 温暖阿虎 2.0 · 解说小明 2.0 · 磁性解说男声 2.0