Skip to content
Video & Audio
Skill

/html-explainer

把任意主题做成讲解/科普视频并渲染成 MP4(HTML/CSS/GSAP 画面 + 确定性逐帧渲染 + 配音 + 词级硬字幕)。触发场景:要做科普/讲解/教学/知识/产品类视频、「讲一下 X 做成视频」、要挑某种视觉风格(极简/数据/赛博/电影感/品牌)出片、要出抖音封面/竖版封面/9:16 封面、要用 html-video 那种模板化画面但更稳的音画同步、anything2explainer 换 HTML 渲染,或提到 html-explainer / HTML 讲解视频 / explainer video / MG 视频。内置 23 个模板风格(8

BOOST
From plugin
html-explainer
1821 skill
Install
$ npx -y skills add OneMoh/html-explainer --skill html-explainer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/html-explainer

Context preview

The summary Claude sees to decide when to auto-load this skill.

把任意主题做成讲解/科普视频并渲染成 MP4(HTML/CSS/GSAP 画面 + 确定性逐帧渲染 + 配音 + 词级硬字幕)。触发场景:要做科普/讲解/教学/知识/产品类视频、「讲一下 X 做成视频」、要挑某种视觉风格(极简/数据/赛博/电影感/品牌)出片、要出抖音封面/竖版封面/9:16 封面、要用 html-video 那种模板化画面但更稳的音画同步、anything2explainer 换 HTML 渲染,或提到 html-explainer / HTML 讲解视频 / explainer video / MG 视频。内置 23 个模板风格(8

SKILL.md

html-explainer.SKILL.md
name: html-explainer
version: 2.0.7
description: 把任意主题做成讲解/科普视频并渲染成 MP4(HTML/CSS/GSAP 画面 + 确定性逐帧渲染 + 配音 + 词级硬字幕)。触发场景:要做科普/讲解/教学/知识/产品类视频、「讲一下 X 做成视频」、要挑某种视觉风格(极简/数据/赛博/电影感/品牌)出片、要出抖音封面/竖版封面/9:16 封面、要用 html-video 那种模板化画面但更稳的音画同步、anything2explainer 换 HTML 渲染,或提到 html-explainer / HTML 讲解视频 / explainer video / MG 视频。内置 23 个模板风格(8 类)与 40+ 动作词汇的动效库,主题驱动模板编排;支持 4K60、快门运动模糊、多进程提速、断点续渲;流程含六个用户确认点(渲染通道是硬闸门)。独立可移植,不依赖 html-video / anything2explainer。
agent_created: true

html-explainer

> **定位**:`anything2explainer` 的流程与音画同步 + `html-video` 的 **23 个模板风格库**, > 渲染层独立实现。作者 **Moh**,MIT 许可(第三方声明见 `THIRD_PARTY_NOTICES.md`)。 > > **零外部依赖**:不需要 Remotion/npm 工程,不需要 html-video 仓库/Studio/pnpm/agent 后端。 > 技能自带:GSAP(离线)、playwright-core、渲染器、TTS/字幕/时间轴/主题/QC/封面全套脚本。 > 对两个来源项目的引用**只存在于注释署名里**,运行时不读它们的任何文件。 > 风格库是**抄下来的设计规范文本**(`references/style-catalog.md`),来源 `html-video`(Apache-2.0), > 类比:把菜谱抄回家,之后做菜不需要原餐厅营业。

**v2.0 新增能力(全部可选、向下兼容;不用就是 v1.4 行为)**

| 能力 | 入口 | 文档 | |---|---|---| | **动效库**(40+ 动作词汇) | `assets/motion.js` → `window.HXM` | `references/motion-library.md` | | **主题驱动模板编排**(挑风格 / 混用 / 动态开头) | `scripts/style_director.py` | `references/style-director.md` | | **画质帧率档位 + 快门运动模糊 + 提速** | `scripts/render_video.mjs --profile/--quality/--fps/--shutter-only/--motion-hold` | `references/render-profiles.md` | | **渲染基准测试**(优化前后对比) | `scripts/bench_render.py` | `references/render-profiles.md` | | **宣传片范式**(去模板化:模板只吸纳配色/字体/时序三层) | 设计方法 | `references/showcase-mode.md` | | **库全量演示编排**(统一舞台 + 节拍网格 + 标签常驻) | 设计方法 | `references/library-showcase.md` | | **确认闸门**(六个确认点由用户拍板才放行) | `scripts/gate_check.py` | `SKILL.md` 流程第 3 步 | | **★ 渲染通道确认**(渲染前必问:`png-fast` / `jpeg q95` / `png` / `jpeg q82`,**默认推荐 `png-fast`**,附速度与描述) | `consent.json` 的 `render_channel` + `gate_check.py --phase render` | `SKILL.md` 确认点 5 · `references/render-profiles.md` §0 |

把一个主题做成**原创**讲解视频:任意风格的 MG 画面(HTML/CSS/GSAP,1920×1080 或竖版)、 配音(edge-tts)、词级对齐硬字幕、全局进度条。一句话一个场景,画面节拍直接锚在 吐字时刻上(`B('块文本')` 节拍器)。

★ 画面风格库(23 个模板 / 8 个类别)

**不要自己从零想画面 —— 先从风格库里挑;多个风格要混用时用编排器自动挑(见下)。** 挑出候选后交用户拍板(见**确认点 0**),不许静默自选。 完整目录(含每种的画布/字体/时间轴/配色纪律) 见 **`references/style-catalog.md`**;怎么改编成合规帧见 **`references/template-guide.md`**。

**两种用法的深度不同,先分清在做哪一种**:

| 你在做 | 怎么用风格库 | 读这篇 | |---|---|---| | **讲解片**(默认) | 从 23 个模板里**挑一个**,按 `template-guide.md` 改编成帧 | `references/template-guide.md` | | **宣传片 / 发布片**(去模板化) | 只从模板**吸纳配色 / 字体 / 时序骨架三层**,画面语言用 `assets/motion.js` 重写 —— **不搬模板画面** | **`references/showcase-mode.md`** | | **要全量展示某个库**(40+ 动效 / 23 个模板) | 统一舞台 + 节拍网格 + 标签常驻,把「N 个动作」演成「一个动作语言的 N 拍」 | **`references/library-showcase.md`** |

> 判据:成片能被认出「这是 bold-signal 模板」= 吸纳过头;只能说「颜色像 xx、节奏像 yy」= 深度对了。

> **★ v2.0:不要一片只用一个模板。** 用 `scripts/style_director.py` 读解说词, > 自动给每场挑主风格(按角色/时长/关键词打分)、按需搭次风格做**局部替换**、 > 决定**动态开头变体**与**场间转场**、并算出每场的**动效强度**。 > 详见 `references/style-director.md`。核心价值:**让模板服务于主题,而不是让主题被模板限制**。

| 类别 | 可用风格 | |---|---| | 演示 / 标题卡 | 大胆海报帧、大胆信号卡帧、奢华极简留白帧、创意电压分屏帧、电光工作室分屏帧、故障艺术标题帧、Kinetic Type、Swiss Grid、Warm Grain | | 数据可视化 | NYT 风数据图表帧、数据滚动帧、NYT Graph、瑞士网格数据帧 | | 图解 / 流程 | 东方柔和有机帧、Decision Tree | | 氛围 / 空镜 | 胶片漏光电影帧 | | 营销 / Hero | 流体背景 Hero 帧 | | 片头片尾 | 品牌 Logo 收尾帧 | | 社媒竖版 | Play Mode、Vignelli(9:16)| | 产品演示 | Product Promo、Product Promo · 30s | | 特效 | VFX 文字光标 |

**两类模板、两种改编成本**(速查表「类型」列):

| 类型 | 数量 | 处理 | |---|---|---| | **★ rich** | 12 | 单文件 + 纯 CSS `@keyframes`。**零改动可渲染** —— 只需①换系统字体栈(删 Google Fonts)②让出底部字幕带③填真实内容 | | **gsap** | 11 | 多 composition + CDN GSAP(或 Remotion)。**不要搬代码**,只取视觉 DNA 用 CSS keyframes 重写(搬进来会得到静止首帧且零报错,见 `lessons.md` #9)|

> 时长档要匹配内容:`frame-bold-signal` 是 3–6s 的短片花,拉长到 20s 会空。 > 长段(>10s)优先选 3–30s 档的(Swiss Grid / Kinetic Type / NYT Graph / Warm Grain)。

何时用 / 不用

  • 用:给主题/文章/文档做讲解视频;要挑某种视觉风格出片;要 html-video 那种模板化画面但要求音画稳;要 anything2explainer 流程但不想装 Remotion。
  • 不用:复刻现有视频、真人口播、实拍为主;要 Remotion/React 代码动画本体(那是 anything2explainer 的领域)。

环境(首台机器跑一次)

bash <skill>/setup_env.sh            # 自检;--install 联网补装

依赖:Python≥3.9(edge-tts==7.2.8 钉死 / numpy / pillow / imageio-ffmpeg)、Node≥18、 **火山引擎零额外依赖**(`tts_volcano.py` 只用标准库 `urllib`,不需要装任何 SDK)。 Chrome 或 Edge(几乎必有;都没有才下载 playwright chromium ~115MB)、ffmpeg(PATH 或 imageio-ffmpeg 静态二进制自动回退)。Windows 注意:项目路径全 ASCII;给 Node/Python 传 `C:/...` 正斜杠路径;别用 heredoc 给 Python 传正则。

命令流水线(项目目录内,顺序不能乱)

PY=<venv python 绝对路径>          # 派子 agent 时必须展开成绝对路径写进 prompt
"$PY" <skill>/scripts/new_project.py <dir> <slug> --topic "主题"   # 阶段 0 建项目
"$PY" <skill>/scripts/tts_setup.py      --project .   # ★ 先定配音方案 + 音色(问用户:edge / 火山)
"$PY" <skill>/scripts/tts_build.py      --project .   # 配音:audio/*.mp3 + manifest
"$PY" <skill>/scripts/timeline_build.py --project .   # 全局时间轴:layout.json + narration-full.mp3
"$PY" <skill>/scripts/subs.py           --project .   # 字幕:subs.json + beats.js + srt/vtt
"$PY" <skill>/scripts/check_beats_refs.py --project . # ★ 节拍引用校验:B()/Be() 是否都能解析(前缀匹配,失配秒级报出可用块)
"$PY" <skill>/scripts/style_director.py --project .   # ★ v2.0 风格编排:读解说词给每场挑主/次风格 + 开场变体 + 转场 + 动效强度 → style-plan.json
"$PY" <skill>/scripts/gate_check.py     --project .   # ★★ 确认闸门:六个确认点未由用户拍板 → 拒绝放行(缺 consent.json 用 --init 生成)
"$PY" <skill>/scripts/gate_check.py     --project . --phase render   # ★★ 渲染前必过:render_channel(渲染通道)未拍板 → 拒绝渲染
"$PY" <skill>/scripts/lint_frames.py    --project .   # 静态体检:八条契约违规(渲染前一秒出结果,比渲完再发现便宜得多)
node <skill>/scripts/check_layout.mjs   .             # ★ 几何体检:越界 / 侵入字幕带 / 元素互相遮挡(lint 看不见几何)
node <skill>/scripts/render_video.mjs   . [--audio audio/narration-full.mp3] [--profile draft|balanced|final|master] [--quality 1080p|2k|4k] [--fps 30|60] [--shutter 180] [--shutter-flush 4] [--shutter-only <场景id,场景id>] [--motion-hold 1] [--preview 30] [--keep-frames] [--only <场景id>] [--mux-only] [--png-fast|--jpeg --jpeg-quality 95] [--workers N] [--concurrency N] [--resume]   # 渲染:out/<slug>.mp4(★ 通道/档位先按确认点 5 问过用户;★ 通道与档位必须一起报——`--jpeg` 与默认快门同时用,中间帧扩展名要一路贯穿到积分器;★ 快门覆盖面也要问:全片开还是 `--shutter-only` 点名几场)
"$PY" <skill>/scripts/qc_check.py       --project .   # 体检 + 抽帧速览图
node <skill>/scripts/cover_build.m
Read more
Ships withhtml-explainer

一个 Agent Skill:给任意主题,产出一条带配音、硬字幕、封面的讲解视频。 HTML 写画面 → 确定性逐帧渲染 → 真 MP4。全本地跑,核心链路零 API key、零按次计费。 画面用一套可 seek 的动效库写,风格由主题驱动编排,渲染支持 4K60、快门运动模糊与多进程并行。 两条用本技能生成的成片——画面、配音、字幕、封面全部由流水线产出,无手工后期。 封面等素材托管在演示仓库,本仓库零体积。

Get the whole plugin
Stats
186
Stars
22
Forks
Active
Maintenance
Python
Language
MIT
License
8d ago
Last commit
1mo ago
Created
13h ago
Added

Repo: OneMoh/html-explainer