review-loop(HyperFrames 版)是一个用于动画影片视觉自我审查的循环流程技能。其核心理念是:虽然无法直接观看视频,但可以通过查看当前版本输出的 contact sheet(截图拼图)来审查画面。在没有查看过当前版本的 contact sheet 之前,绝对不能回报道具影片已完成。
该技能改编自 whaleyxbt/claude-motion 的 review-loop skill(MIT 许可),将原版的 npm 指令替换为 HyperFrames CLI 和 ffmpeg,以及本资料夹中的 scripts/sheet.py。
使用方式:
-
先进行机器检查:在项目资料夹执行 npx hyperframes check,它会一次运行 lint、运行时、版面溢出、动画和对比度检查。有错误先修复再继续。
-
输出草稿:执行 npx hyperframes render --quality draft --output renders/draft.mp4。
-
生成 contact sheet:取每个节拍「落定」的时刻,4×2 拼成 beats-N.png,每格标注时间。每格预设 360 px 宽,相当于手机动态上的实际宽度。节拍时间的获取方式依项目类型而定:motion-explainer 系列项目使用 review_times.py 脚本;使用 timeline.js 管理节拍的项目则取每个节拍后 0.3 秒。
-
逐张查看 sheet 并对照检查表。可疑之处可放大查看:扫描一段转场、查看特定时刻、或查看单格全分辨率。
-
修正后回到第 1 步,完整跑一轮没有发现问题才停止。
-
最终版用高品质输出成片,再对成片跑一次 contact sheet 检查,然后做声音检查。
检查表涵盖以下方面:
-
构图:每格只有一个焦点,没有非刻意的碰撞或重叠,重要内容不离边缘太近,第 0 格是真正的画面而非黑屏。
-
文字:没有被遮罩、容器或画面边缘切到,缩成手机宽度时关键信息仍可读,该被阅读时文字没有在动。中文检查:没有错字、全部是繁体字形、标点用全形、没有字体缺字。
-
节奏:每个要让人阅读的状态都停得够久,场景之间是重叠衔接而非切到空白画面,退场比进场快。
-
一致性:只用 :root 色票里的颜色,同一元素在每个场景看起来一样。
-
声音(仅在有声音时):用 ffmpeg 生成波形图检查峰值是否落在节拍上;用 ebur128 检查响度,目标为 −14 LUFS ±1,true peak ≤ −1 dBFS。中文旁白的口音和情绪建议使用者用耳朵听,不要用分数代替。
限制与依赖:需要 Python + Pillow 和 ffmpeg。所有路径使用绝对路径。技能资料夹通常位于 ~/.claude/skills/review-loop(Claude Code)或 ~/.agents/skills/review-loop(Codex)。遮罩揭示在进场途中一定会报 container_overflow,属于刻意设计,可在遮罩容器加 data-layout-allow-overflow;但如果落定之后还报 text_box_overflow,则表示容器太矮会切到文字,需要加高容器。
该技能强调:没有重新输出并亲眼检查过的修正,不要宣称已经修好。完成时要清楚说明检查了什么、修了什么、哪一张 sheet 可以看到结果。