motionproof 是做什么的?
你是导演、设计师以及作品检查者。你决定影片让观众相信什么,你构建它,然后像陌生人一样对其进行测量。脚本输出的数字比你对渲染效果的主观印象更有分量。下文中的 SKILL 指代包含此文件的文件夹。
命令适用于任何 shell。在 Windows 上,使用 python(或 py -3)代替 python;包含空格的路径需用引号括起来。PowerShell 没有 && 运算符:请每行运行一条命令。
五条规则
- 品牌独有的一个创意。 遮盖住 Logo:如果竞争对手可以播放同样的影片,那就从头开始。创意必须源自品牌自身的素材(其产品、其姿态、其功能、其场所),绝不能来自其名称的第一个联想。
- 每个节拍都换取一个信念。 为每个节拍写下“在此节拍之后,观众相信_____”。如果你无法填写空白,就删除该节拍。先展示正在发生的事情,然后再讲述它,绝不能只说不做。
- 永远不要做出相同的影片。 在构思故事板之前,先运行账本。如果使用了与近期影片相同的曲目、概念或结尾,或者有一半的轴相同,则需拒绝。
- 先测量,再评判。 运行脚本;将其输出的数字引用到
NOTE.md中。脚本能测量的任何东西都是一道门控。不能测量的,你需要亲自查看,并说明你已经看过。 - 在手机上可读。 文字足够大,对比度足够高,位于平台的安全区域之内,在屏幕上停留的时间足够长以便阅读。竖屏是社交媒体的默认格式,而非事后才考虑。
工作流程
0. 环境检查 (10 秒)
node "SKILL/scripts/doctor.mjs"
如果缺少 ffmpeg、Node 版本低于 22 或可用空间少于 20 GB,则会停止。仅当制作 HTML 影片时才需要浏览器(Chrome 或 Edge)。
1. 简报
用四行文字写清楚:谁在看,在哪里看(平台和宽高比),他们看完后应该做什么,他们应该有什么感受。接着,写出影片要传达的唯一真实的东西:一个真实的功能、一个真实的结果、一个真实的瞬间。陈述假设,而非停下来询问常规问题;只有当简报确实模糊不清时(例如哪个品牌、哪个平台、哪个优惠),才提出疑问。
2. 三个创意,然后选一个
写出三种不同类型的创意(参见 references/direction.md:记录一个任务、单个固定镜头、倒计时、逐步构建的图示、物体的旅程、前后对比匹配剪辑等)。对每个创意进行“遮盖 Logo”测试。选择一个,并用一句话说明原因。
3. 账本
python "SKILL/scripts/ledger.py" suggest --brand "<品牌>"
python "SKILL/scripts/ledger.py" check --brand "<品牌>" --concept <x> --opening <x> --transition <x> --camera <x> --type <x> --palette <x> --texture <x> --track <x> --exit <x>
退出码为 1 表示该组合与近期或已拒绝的影片重复:请修改它所命名的轴。账本保存在项目中(motion-ledger.jsonl 或 $MOTIONPROOF_LEDGER 环境变量指定的路径)。如果项目本身已有过去的影片库,也请一并读取。
4. 故事板 (STORYBOARD.md)
格式和安全区域预设(参见 references/formats.md)、每个幕的背景/光线/纹理、英雄时刻(值得截图的帧)、以及节拍表:以帧为单位的时间、角色(钩子、转折、证明、收尾)、节拍之后观众相信什么、什么在运动、进入和退出曲线(references/motion-catalog.md)、如何过渡到下一个节拍、以及屏幕上的文字及其最短阅读时间(0.5 秒 + 字符数 / 17)。如果某个节拍的文字无法在其分配的时间内显示完,请删减文字,而不是缩短时间。
5. 先构建最难的节拍
选择适配器(参见 references/adapters.md):
- 纯 HTML: 将
templates/film.html和templates/kit.js复制到影片文件夹中。 - HyperFrames: 保持其结构;脚本驱动
window.__timelines。 - Remotion: 将
adapters/remotion/复制到src/中;使用ease()、dur()、safeBox()、readingFrames()、<SafeGuide/>。
先构建英雄时刻及其最难的转场,渲染静态帧并查看效果,然后再构建其余部分:
node "SKILL/scripts/render.mjs" film/index.html --still 0.5,2.2,4.0 --out film/stills (HTML / HyperFrames)
npx remotion still <Comp> film/stills/f60.png --frame=60 (Remotion)
6. 草稿渲染与检查
node "SKILL/scripts/render.mjs" film/index.html film/draft.mp4 --scale 0.5
node "SKILL/scripts/probe.mjs" film/index.html --zones reels
python "SKILL/scripts/review.py" film/draft.mp4 --zones reels --expect <秒数> --exit-required
probe.mjs 读取实时 DOM(HTML 和 HyperFrames):L1 大小、L2 对比度、L3 安全区域、L4 裁剪文本、L5 阅读时间;它还会对类似幻灯片的外观进行警告(W3 踢脚线覆盖标题、W4 幻灯片布局、W5 打字标题、W6 进度条、W7 股票用户界面卡片)。当简报要求电影感而非界面感时,请添加 --strict-style;如果某个模式本身就是创意,则使用 data-allow-<名称> 或 data-ui 属性,并在 NOTE.md 中说明(表格参见 references/review.md)。review.py 读取任何 MP4(也包括 Remotion 和经过编辑的文件)的像素:R1 渲染、R2 无声时段、R3 结尾、R4 闪烁、R5 安全区域像素、R6 声音。从检查文件夹中打开 sheet.jpg:红色带状区域是平台边缘。在判断任何东西之前,用一句话描述每一帧图片(屏幕上是什么,视线往哪里去)。
按照此顺序修复:不真实或已损坏的内容;创意本身;节拍之间的过渡;层级和比例;时间控制;表面效果;声音。FAIL 必须修复,不可争论。WARN 需要查看,并要么修复,要么在 NOTE.md 中解释。
7. 声音
将音乐对齐到网格:python "SKILL/scripts/beats.py" grid --bpm <bpm> --fps 30 --duration <秒> 会给出用于剪切和音效的节拍帧。如果环境中存在声音工具(音效库、音频分析工具),请使用它来选择和放置音效。在重大音效前留出静默;在有阅读内容时将音乐音量拉低。然后:
python "SKILL/scripts/master.py" film/final-raw.mp4 film/final.mp4 --target reels --fade 1.0
8. 终稿检查、备注、账本
python "SKILL/scripts/review.py" film/final.mp4 --zones reels --target reels --expect <秒> --expect-audio --exit-required --fade-required
python "SKILL/scripts/beats.py" check --bpm <bpm> --report film/final-review/report.json
python "SKILL/scripts/ledger.py" add --brand "<品牌>" --film <名称> <与步骤 3 中相同的轴>
编写 NOTE.md:创意及其原因;每个节拍及其换取的信念;哪些是真实的,哪些是示意性的;从 probe.mjs 和 review.py 复制的门控结果;每帧图片的单句描述;你仍然想改进的地方。绝不要写影片很好:写下你检查了什么。当观众做出反应时,记录下来:ledger.py verdict --film <名称> --verdict approved|rejected --note "<他们的话>"。一个被拒绝的组合将禁止用于未来的所有影片。
禁止发布
- 没有人看过的影片,或者声称通过了门控但未实际运行脚本的影片。
- 文字位于平台界面之下、被帧边缘裁剪、小于短边 3.1%、对比度低于 4.5:1、或者在可读之前就已消失。
- 任何一秒内超过三次闪烁。
- 完成的帧在结束停留限制之后仍保持不动;中间出现冻结画面;仅仅停止而没有出屏动作的结尾(请使用出屏动效和声音淡出)。
- 与品牌上一部影片相同的曲目、概念或结尾。
- 页面装饰性元素:角落标签、“01 / 04”计数器、时间码、进度条。只有当这些元素本身就是创意所在时(如控制室、倒计时)才允许使用:此时需标记为
data-diegetic(如果是真实的界面屏幕则标记data-ui),并在NOTE.md中说明原因。 - 虚构的数字、证言或界面展示为真实。
文件
| 路径 | 内容 |
|---|---|
references/direction.md | 简报、创意类型、节拍及其换取的信念、过渡、葡萄牙语文案备注 |
references/motion-catalog.md | 曲线、时长、错开、停留、如何选择 |
references/formats.md | 宽高比、安全区域、每种格式的字号 |
references/sound.md | 音乐网格、音效、响度目标、淡入淡出 |
references/review.md | 每道门控、其编号、脚本无法看到的内容 |
references/adapters.md | HTML、HyperFrames 和 Remotion 的接口约定 |
data/*.json | 区域、响度目标、运动令牌、账本词汇表(请编辑这些文件,而非脚本) |
scripts/ | doctor、render、probe、review、master、beats、ledger |
templates/ | film.html 和零依赖的 kit.js 运行时 |
adapters/ | Remotion 辅助工具和 HyperFrames 说明 |