Communitygithub.com

sourceframe

生成工程级解释性视频,将其构建为使用 Remotion 和 three.js 的动态图表,屏幕上每个数字都来自源代码或构建过程的计算结果。

sourceframe 是什么?

sourceframe 是一个 AI 代理技能,用于创建高精度的解释性视频,将视频制作视为系统工程过程。它会生产 15 到 90 秒的无声优先视频,通过追踪一个核心元素来解释一个机制。该技能的核心原则是“每一帧都追溯到一个来源”:每个像素、数字和动画都由事实账本、计算脚本或布局合同来保证。它适用于展示具有状态变化机制的主题,例如协议、算法或系统架构。sourceframe 支持 Remotion(使用 React 和 three.js 进行 3D 渲染)和 Cursor 或 Claude Code 等 AI 代理环境。其工作流程包括七个原则和十个阶段,从需求摄取、事实收集和监督,到程序化资产生成、测量验证和交付。该技能优先考虑确定性和可验证性,避免非确定性元素、基于观点的设计或装饰性动画。它还包括一个包含账本状态和验证脚本的参考资料库,以及一个可工作的 Remotion 项目模板,用于快速搭建。对于需要精确性和事实准确性的技术讲解视频,它是一个理想的工具。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/endlessconflict/sourceframe/tree/HEAD/skills/sourceframe

在你喜欢的 AI 中提问

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

文档

sourceframe 是做什么的?

一种制作视频的方法,就像构建系统一样:先有需求,然后有一份真实情况的账本,一份布局合同,逐步验证的小步骤,以及在发表意见之前先进行测量。最终产品是一个简短的、无声优先的视频(15 到 90 秒),通过追踪一个核心元素来解释一个机制。其名称就是规则:每一帧都追溯到一个来源。

此技能源自一个真实的构建案例(一个 77 秒的解释性视频,讲解 coreboot 如何在 DRAM 存在之前运行 C 代码,包含一个 4096 单元格的缓存网格、一个 3D 闪存芯片和 DRAM 训练),并在第二个无关的主题(examples/merkle-proof,一个 Merkle 包含证明,其每个哈希值都由构建过程计算)上得到了验证。以下路径均相对于此技能的文件夹。

何时使用,何时不使用

适用于以下场景:工作原理类视频、协议或算法讲解、系统架构导览、“当…时会发生什么”序列、事后复盘。当主题涉及具有变化状态的机制(如比特翻转、指针移动、哈希传播)时,其优势尤为突出。

不适用于以下场景:人物讲解或素材剪辑、产品广告、纯动态品牌宣传、任何内容是基于观点而非机制的视频。对于这些场景,请使用普通的动态图形技能。如果用户只想要静态轮播,请使用轮播技能。

七大原则

  1. 账本先于像素。 在第一个场景之前,先编写 FACTS.md(声明、证据、状态)。状态 V 表示本会话中从来源读取的内容,C 表示由构建过程计算得到,S 表示示意图并已在屏幕上标注,H 表示记忆内容(需重新检查),N 表示需要来源(阻碍交付)。永远不要凭空捏造数字、符号、路径或版本。首选 C:让构建过程计算视频所展示的内容。
  2. 一个核心元素。 每帧只有一个东西是视觉的锚点:它使用唯一的“焦点”颜色,始终是当前步骤,绝不与另一个元素竞争。其他所有元素都保持低调。
  3. 颜色即意义。 调色板角色(data、focus、ok、bad、ink)是语义化的,并针对整个视频固定。永远不要因为好看而选择某种色调。
  4. 确定性。 一帧是其帧号的纯函数。不使用挂钟时间、Math.random、CSS 过渡或 useFrame。任何伪随机内容都使用种子化的 hash(n)。这使并行渲染、静态帧和后续的音频同步成为可能。
  5. 画面即工具。 动画的存在是为了展示状态变化。每一个运动都要回答“这展示了什么?”。禁止:在每个块上使用相同的淡入效果、弹跳或弹性缓动、循环装饰、为了发光而发光。
  6. 先测量,后观察。 数字廉价而精确;观点昂贵且主观。进行类型检查、账本检查、探测容器、尽可能测量像素,然后再每轮查看一张联系表。
  7. 停止规则。 每组场景最多三轮审查,每轮最多三次修复。说明留下了什么以及为何停止。诚实胜过完美:标注未经验证的内容。

十个阶段

每个阶段都有可交付成果和关口。不要为了节省时间而跳过关口:昂贵的错误都出在上游。

#阶段可交付成果关口
0需求摄入一行适配性检查、平台、时长、是否无声优先只询问会阻碍工作的内容(一个问题),否则做出决定并说明
1简报BRIEF.md 第 1 到 3 节核心信息能用一句话概括;核心元素能用一句话命名
2证据FACTS.md 填满所有计划中的声明;C 行的计算脚本tools/ledger_lint.py 通过;没有 N 行
3方向排除列表、核心理念句、标志性时刻、theme.ts 令牌通过竞争对手测试(参见 references/02-direction.md)
4故事板表格:场景、秒数、运动内容、字幕、账本行;timeline.json字幕预算达标;总时长合理
5基础建设脚手架项目、字体、主题、外壳、相机、预览打开能渲染出一张静态帧;WebGL 正常工作(参见陷阱:路径长度)
6构建场景,从最难和最核心的开始每个场景:静态帧、一张联系表、最多 3 次修复
7资源3D 和图标资源,除非需要许可来源,否则使用程序化生成每个使用的徽标或商标,未经修改并注明出处
8验证完整渲染、编码、探测、帧表、账本检查所有自动检查通过;帧表已审查;列出缺陷
9交付mp4、封面帧、字幕文本、替代文本、致谢、“未验证”列表用户无需追问真实性即可发布

阶段 0:需求摄入

用一句话说明你要制作的内容:解读为:<媒介> 面向 <读者>,<核心元素>,<时长>。只有当问题的答案会改变你的构建内容(平台和宽高比;是否后续有音频;哪些来源是权威的)时才提问。社交源默认画布为 1080 x 1350 (4:5),30 fps;参见 references/08-adapting.md 了解 16:9、1:1、9:16。

阶段 1:简报

复制 templates/starter/BRIEF.md。填写意图(媒介、读者、核心信息、核心元素、情绪)。核心信息必须是一个观众能重复说出的句子。如果你无法用一个短语命名核心元素,你还没有一个视频:做出决定并说明,或者问一个问题。

阶段 2:证据(大多数视频忽略的部分)

  1. 确定主要来源(规范、RFC、源代码树、数据表、手册页、测量输出)。阅读你将引用的确切行。记录 文件:行号 或 URL 加章节。
  2. 对于每个数字,问:构建过程能计算它吗?如果能,编写一个脚本来计算它,用第二种方法交叉检查,发现不一致时中止,并写入一个场景可以导入的生成模块(examples/merkle-proof/scripts/compute.mjs 是范例:RFC 递归与迭代构建必须一致,否则什么都不写入)。
  3. 任何无法找到来源的内容要么变成带标签的示意图(S,并且屏幕上会显示“示意图”字样),要么被删除。草稿中允许出现可见的 [需要来源],但渲染版中不允许。
  4. 示例数据在诚实的条件下是合法的:虚构的示例项以纯文本示例形式显示,并记录为 S。
  5. 运行 python tools/ledger_lint.py 作为触发器:场景字符串中的每个数字都必须在账本中出现。

完整格式和示例:references/01-brief-and-ledger.md。

阶段 3:方向

写下核心理念句:“在这个视频中,[属于主题的某个东西] 变成了 [那个装置]。”运行竞争对手测试:如果一个关于该主题的通用视频也可以使用相同句子,那它就是一个类别创意,而不是一个真正的创意。选择一个标志性时刻(唯一一个高调的动作)和排除列表(三种最明显的可视化方式,现在被禁止:通常是带箭头的矩形堆栈、屏幕截图、渐变背景上的居中对象)。设定基调:变化程度、运动强度、密度,每个维度从 1 到 10,根据主题而定(面向工程师的安全解释器应平静而密集;发布预告片则两者皆非)。详细信息和编排规则见 references/02-direction.md。

阶段 4:故事板和时序

一个表格:场景、秒数、运动内容、字幕、账本行。实践中验证有效的预算:

  • 字幕最多 2 行、14 个单词,在 1080 画布上最小字号 48 px(手机显示画布约为 0.36 倍,因此 48 px 约为 17 pt);标签至少 26 px;
  • 字幕至少停留 单词数 / 2.6 + 0.8 秒,绝不在句子中间替换;
  • 一个场景一个想法;超过 12 秒的场景需要内部节拍(步骤)并配有相应字幕;
  • 整部作品只讲述一个想法:删除任何不会导致丢失账本行的场景。

仅在 timeline.json 中编写场景顺序和时长。Remotion、验证脚本和 cuelab 音频管道都读取这一个文件。

阶段 5:基础建设

node scripts/scaffold.mjs <目标目录> --install

然后:编辑 src/theme.ts(调色板,画布),将字体放入 public/fonts,在 src/ui/Chrome.tsx 中设置 BRAND,编辑 timeline.json。保持项目路径简短(参见陷阱:ANGLE 在 Windows 上需要短路径)。在编写更多内容之前,先渲染一个 3D 场景的静态帧:如果现在 WebGL 失败,它以后也会失败。

阶段 6:逐步构建场景

顺序:标志性场景优先(困难的 3D 或网格),然后是其依赖的场景,最后是连接性场景。每个场景:

  1. 使用外壳、令牌和动画辅助工具,按照布局合同(references/03-layout-contract.md)编写场景;
  2. bash tools/shots.sh <场景名> out/<场景名> <帧号...>:选取每个节拍的开始、运动中和结束的帧,生成一张联系表;
  3. 查看一次联系表,回答:第一眼/第二眼/第三眼看到什么?核心元素是否在预期位置?是否有任何通用元素?要删减什么?最多修复三件事;仅重新渲染更改过的帧;
  4. 当场景稳定后,继续前进。不要在场景 6 未构建的情况下打磨场景 2。

承担主要工作的动画模式(遮罩线条揭示、交错行、哈希打乱、比特翻转、3D 投影标签、实例化网格)见 references/04-remotion-patterns.md;3D 配方见 references/05-three-assets.md。

阶段 7:资源

优先使用程序化生成资源:它们是确定性的、体积小、可定制主题且无许可风险。箔片盒子、挤压徽标、实例化单元格网格和点场涵盖了大多数解释性视频的需求。仅当有机或品牌对象是必需的,并且服务的许可和成本可被用户接受时,才使用 AI 生成的网格;永远不要隐瞒某个资源是生成的。真实的徽标和商标:使用项目自己的原始文件(重新着色单色标志通常可以;但重新绘制则不行),检查许可,在屏幕或字幕中注明出处。

阶段 8:验证

自动化,按此顺序执行(从便宜到昂贵):

npx tsc --noEmit                 # 类型检查
python tools/ledger_lint.py      # 数字与账本比对
bash tools/shots.sh Main out/m <帧号>   # 生成联系表,查看一次
npm run render && npm run encode          # 原始渲染,然后限定范围的 yuv420p h264
                                          # encode.sh 最后运行 tools/probe.py

tools/probe.py 检查编码格式、yuv420p(而非 yuvj420p)、尺寸、fps、相对于 timeline.json 的时长、限定范围、无黑帧、快速启动原子。然后查看最终 mp4 的静态帧表(每 4 秒一帧,使用 ffmpeg 提取),并以全尺寸查看一帧以检查文字清晰度。如果可以使用设计评审(例如 creator-critic 技能),则在一组静态帧上运行它:将阻塞性问题视为必须修复的问题,将主要问题视为待讨论的问题。完整检查清单:references/06-verification.md。

阶段 9:交付

交付内容:out/video.mp4、封面帧(标题和核心元素均清晰可读的静止帧)、字幕草稿(平实描述,无夸张,注明来源)、替代文本(一句话描述视频内容)、致谢(资源、徽标、许可)、以及一个**“未验证”列表**(账本状态为 H 或 S 的任何内容,构建过程无法证明的任何内容,以及你无法肉眼审查的任何内容)。不要自行发布任何内容。

选项选择决策表

问题选择原因
元素使用 2D 还是 3D仅在深度或物理形态是关键时(如芯片、堆栈、包含数百万项的字段)使用 3D;否则使用 2D3D 耗费渲染时间并降低可读性;在它能解释问题的地方使用它
相机正交相机,manual = true,每个场景固定正交视角使标签可投影,测量真实
3D 上的标签使用 project() 投影的 HTML 或 SVG文字保持清晰且样式化
大量重复单元格使用 InstancedMesh(数千个)或 Points(数百万个)减少 draw calls
字体最多两种字族,OFL 或授权字体,打包在 public/fonts 中确定性,渲染时无网络请求
文字在色块或填充上深色文字在亮色填充上,绝不在亮色上使用白色文字确保对比度
音频在画面锁定后,根据 timeline.json 设计音频参见 cuelab 技能

此方法旨在预防的失败模式

内容美观但错误(没有账本);内容正确但难以阅读(没有布局合同);内容通用无特色(没有核心理念句,没有排除列表);在工作室中看起来不错但在渲染时出错(非确定性);在 100% 缩放时看起来不错但在手机上模糊不清(字号下限,缩略图测试);无法评分的视频(没有单一的 timeilne);声称的内容无人能验证(交付不诚实)。在前两部视频构建过程中遇到的具体错误,包括症状、原因和修复,记录在 references/07-pitfalls.md 中;在调试任何看起来像魔法的问题之前,请先阅读它。

此技能包含的文件

路径内容
references/01-brief-and-ledger.md简报模板、账本格式、如何计算和交叉验证事实
references/02-direction.md核心理念句、排除列表、基调、编排规则、运动令牌
references/03-layout-contract.md画布、安全区域、字号下限和手机缩放计算
references/04-remotion-patterns.md经过测试的动画模式及代码
references/05-three-assets.mdRemotion 中的 three.js:相机、箔片着色器、边缘、实例化、点云、挤压、标签投影
references/06-verification.md完整的验证阶梯、联系表协议、编码和探测
references/07-pitfalls.md遇到的所有真实错误及修复方法
references/08-adapting.md其他宽高比、主题、语言、无 3D 变体、音频移交
templates/starter/一个可运行的 Remotion 项目:主题、辅助工具、UI 外壳、three.js 工具包、工具、BRIEF 和 FACTS 模板
scripts/scaffold.mjs将 starter 复制到新项目并安装
../../examples/merkle-proof/一个完整的 36 秒示例,包含计算的事实、账本、渲染和探测

你必须传达的许可证说明

Remotion 不是 MIT 许可证。它对个人和最多三人的团队免费;超过该规模的公司需要付费许可证(Remotion CLI 会打印此通知,请参见 remotion.pro/license)。在项目可能用于商业用途时,尽早告知用户一次。three.js、React 和打包的字体(SIL OFL)是宽松许可证。

相关技能