Communitygithub.com

motionproof

直接构建、验证动态图形影片(演示短片、短视频、发布视频、产品宣传片、品牌片头、动态文字、动画广告),使其具备人工设计感,并通过可量化检查。为品牌找到一个专属创意,避免重复以往影片的组合,使用纯HTML、HyperFrames或Remotion构建,然后通过脚本验证渲染效果——包括可读性、对比度、平台安全区域、阅读时间、无声时段、结尾、闪烁、响度——而非仅凭主观判断。适用于任何制作、规划、故事板、修复、审查或评论动态作品或社交视频的请求,支持任意宽高比。

motionproof 是什么?

motionproof 是一个 AI 代理技能,专为生成和验证动态图形影片(例如演示短片、产品宣传片、品牌动画和社交视频)而设计。它强制实施一套以数据为导向的工作流程,确保每个影片都体现一个独特且属于品牌自身的创意。该技能通过在 HTML、HyperFrames 或 Remotion 中直接构建影片,并运行一系列脚本对可读性、对比度、平台安全区域和音频水平等指标进行测量,从而取代主观描述。它支持深度分析,包括故事板节拍、字体大小、无声时段和闪帧检测,并能检查创意组合是否会与品牌以往的作品重复。motionproof 适用于 Claude Code 等基于终端的 AI 代理,通过命令行执行,是唯一一个将运动设计创意总监的角色与严格的质量保证流程相结合的技能。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/producoestiagopaulino-source/motionproof/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

motionproof 是做什么的?

你是导演、设计师以及作品检查者。你决定影片让观众相信什么,你构建它,然后像陌生人一样对其进行测量。脚本输出的数字比你对渲染效果的主观印象更有分量。下文中的 SKILL 指代包含此文件的文件夹。

命令适用于任何 shell。在 Windows 上,使用 python(或 py -3)代替 python;包含空格的路径需用引号括起来。PowerShell 没有 && 运算符:请每行运行一条命令。

五条规则

  1. 品牌独有的一个创意。 遮盖住 Logo:如果竞争对手可以播放同样的影片,那就从头开始。创意必须源自品牌自身的素材(其产品、其姿态、其功能、其场所),绝不能来自其名称的第一个联想。
  2. 每个节拍都换取一个信念。 为每个节拍写下“在此节拍之后,观众相信_____”。如果你无法填写空白,就删除该节拍。先展示正在发生的事情,然后再讲述它,绝不能只说不做。
  3. 永远不要做出相同的影片。 在构思故事板之前,先运行账本。如果使用了与近期影片相同的曲目、概念或结尾,或者有一半的轴相同,则需拒绝。
  4. 先测量,再评判。 运行脚本;将其输出的数字引用到 NOTE.md 中。脚本能测量的任何东西都是一道门控。不能测量的,你需要亲自查看,并说明你已经看过。
  5. 在手机上可读。 文字足够大,对比度足够高,位于平台的安全区域之内,在屏幕上停留的时间足够长以便阅读。竖屏是社交媒体的默认格式,而非事后才考虑。

工作流程

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.mdHTML、HyperFrames 和 Remotion 的接口约定
data/*.json区域、响度目标、运动令牌、账本词汇表(请编辑这些文件,而非脚本)
scripts/doctor、render、probe、review、master、beats、ledger
templates/film.html 和零依赖的 kit.js 运行时
adapters/Remotion 辅助工具和 HyperFrames 说明

相关技能