将每周更新日志 .md 文件转换为完整的品牌化更新日志视频(方形1080p,约45-60秒,Annie配音,动画品牌背景,模拟UI可视化,低调字幕)。当用户提供更新日志/摘要markdown并希望生成每周视频,或说“更新日志视频”时使用。自包含——字体、背景、词典和脚本均随技能一起提供。
更新日志 → 品牌化视频
输入:一个更新日志 .md(主题+条目,如每周HyperFrames摘要)。
输出:一个lint干净、seam-gate绿色的HyperFrames项目,位于
projects/active/weekly-changelog-<range>/。仅在用户要求时渲染。
首先加载,不可协商: motion-doctrine(+ cut-the-curve、
oversized-cursor(如果出现光标)、seam-craft)和 captions-overlay。
此技能提供更新日志特定的流水线;doctrine提供运动法则。
首要原则:可视化,而非罗列
每个主题通过实际UI的动画模拟或忠实类比来展示变化体验——绝不用文本要点。
在编写脚本之前,将每个主题/条目路由到 references/visualization-registry.md;
注册表决定 ui-recreate / ui-analog / terminal / checklist。文本清单是最后的手段,
仅用于真正不可视的条目(可靠性修复列表)。
流水线
1 · 解析 + 编辑裁剪
- 提取:周范围、标题统计(发布次数、提交数)、主题、条目。
- 总时长预算:45-60秒。 标题≤2秒,结尾≤3.5秒,4个主题各约9-12秒。
- 每个主题保留一个英雄可视化 + 最多3个口头条目。其余所有内容仅作为结尾的“完整摘要”指针存在。
裁剪是关键:一个包含30个条目的更新日志仍然只产生≤14个口头节拍。 - 按故事顺序排列主题:主打功能 → 产品表面 → 性能 → 可靠性(摘要通常已按此顺序排列)。
2 · 可视化路由
对于每个主题,从 references/visualization-registry.md 中选择表面,并写一行:
theme → surface → 模拟执行的2-4个顺序动作,每个动作与一个脚本短语关联。
如果没有注册表表面适合且没有忠实的类比,则作为清单场景——不要为我们无法诚实表示的内容发明虚假UI。
3 · 双层脚本(口语 vs 显示)
按照 references/script-voice.md 将脚本写为标记行:
对话式语气,每个技术术语从 references/lexicon.json 中携带 spoken 语音形式,
而 display 保持标准拼写。字幕显示 display;配音读取 spoken。
任何不在词典中的术语:停止并询问用户如何发音,然后将其添加到词典中。
保存为项目中的 script-tokens.json。
4 · 配音 — Annie(HeyGen,固定)
# 仅口语层文本;words JSON = 口语文本的基准时间戳
# 仓库原生路径:changelog-video 技能从 hyperframes 仓库根目录运行,
# 因此直接使用跟踪的 hyperframes-media TTS 辅助工具(无需 `npx hyperframes
# skills` 安装步骤)。如果你将技能复制到另一个仓库,请替换为你自己的
# media-use / hyperframes-media heygen-tts.mjs 路径。
node skills/hyperframes-media/scripts/heygen-tts.mjs ./vo-spoken.txt \
-o voiceover.mp3 --words vo-words.json \
--voice 330290724a1b470fb63153f34d4c0183 # Annie — 逼真(请勿替换)
需要 heygen CLI ≥0.3.0 并已认证(heygen auth login --oauth)。
然后将口语时间戳对齐回显示标记:
node <SKILL_DIR>/scripts/align-captions.mjs \
--tokens script-tokens.json --words vo-words.json --out captions.json
captions.json 是字幕轨道的输入(显示拼写,口语时间)。
对齐器会打印 MISMATCH 警告——在构建前解决每一个(通常是词典中TTS渲染为多个单词的拼写)。音频是时钟:所有节拍时间来自 vo-words.json;重新生成配音会重新打开每个接缝。
5 · 构建
严格按照 references/build-spec.md:品牌标记 + 字体(打包在
<SKILL_DIR>/assets/ 中)、动画背景编码、场景脚手架、
chrome、字幕轨道、每个场景一个配给的绿色时刻。然后按 doctrine 顺序:
ledger.json(所有普通接缝 cut-the-curve LEFT)→ seam-stamp →
VO 单词上的内部节拍 → seam-gate verify。
6 · 门控(全部通过后再展示)
bun run --cwd packages/cli hyperframes check(或仓库本地skills/hyperframes-cli/技能中的已安装hyperframesCLI)——
0 错误(对比度:暗文本 ≥ .66 alpha)。不要使用npx hyperframes@latest;
跟踪的仓库本地 CLI 是此技能生成的组合合约的真相来源。seam-gate.mjs verify— 0 失败。- 重启预览服务器(它会缓存构建包),通过原始合成页面上的
__player.seek抽查3-4个节拍。 - 除非用户要求,否则不要渲染。在请求渲染后,从 MP4 中验证帧(
ffmpeg -ss <t> … -frames:v 1):字幕存在,背景视频非黑,无微小/冻结帧。
项目布局
projects/active/weekly-changelog-<range>/
├── index.html # 单文档主文件(场景作为幻灯片,带戳记的接缝)
├── ledger.json # 向量账本(seam-stamp 输入)
├── script-tokens.json # 双层脚本(配音+字幕的真相来源)
├── vo-spoken.txt # 生成:口语层,一行
├── voiceover.mp3 + vo-words.json + captions.json
├── bgm.mp3 # 从 <SKILL_DIR>/assets/bgm.mp3 复制(默认曲目),除非用户提供
└── assets/fonts/ + assets/bg-pattern-<dur>s.mp4
反模式
| 不要 | 改为 |
|---|---|
| 对UI更改使用要点幻灯片 | 模拟表面执行更改 |
| 对不可表示的条目使用虚假UI | 诚实的清单场景 |
| 在TTS文本中使用纯文本“JSON”/“CLI” | 词典口语形式;显示保持标准 |
| 在字幕中使用语音拼写 | 字幕始终显示显示层 |
| 猜测未知术语的发音 | 询问,然后扩展词典 |
| 说出每个更新日志条目 | 每个主题≤3个;摘要链接承载其余部分 |
| 到处使用绿色强调 | 每个场景一个绿色时刻(#5ef17c) |






