
这是什么
一个把 Claude Code 或 Codex 变成动态设计工作室的 agent 技能:把产品交给它,它就用 Remotion 做分镜、做动画、做声音设计,产出一支电影感的产品宣传片、发布片或功能演示片。核心是那座库——十个功能分类下共 157 张镜头配方卡,每张写清用途、能量、建议时长、参数、实现要点与已知的坑,并配一份带着真实缓动与时间参数的 TSX 实现、一段能在线画廊里筛选的动效预览。库之上还有一支验证过的 36.2 秒模板片(1920×1080、30fps、十个镜头、纸墨琥珀风)、按十六个场景类别归档的 149 个音效与五首垫底曲、一套抓取真实页面做 2.5D 运镜的相机、一个把成片导出为剪映草稿的导出器,以及一个交付之后把片子拆成镜头/转场/字幕/音效多轨重新打开的工作台。安装是把仓库软链到 agent 的技能目录,或者一条 npx 命令;Apache-2.0 许可,仓库约 183 MB。
谁做的仓库挂在 GitHub 账号 Vincentwei1021 下,README 的落款是 Vincent。101 次提交由两个署名完成——Wei Yihao 用了 amazon.com 的邮箱、占 47 次,Yihao 用了与该账号关联的邮箱、占 36 次——两者合计 83 次。其中 71 次带着共同作者尾注,62 条写的是 Claude 模型:Fable 5 四十七次、带百万 token 上下文的 Opus 5 十二次、Fable 5.1 两次、Claude Code 一次。贡献者一共九位,作者之外最多的一位有六次提交。
它是怎么搭起来的
组成 · 6一个包在镜头卡库外面的 agent 技能,复用单位是「卡」。技能入口写着制作规则,参考文档写着方法,而库里的每一项技术都存了三遍——一段人能读的散文、一个握着逐帧调出来的缓动与时间参数的可复现 Remotion 组件、一段让人在下手之前先看一眼的渲染预览。正是这三份让这座库可以被教给 agent:可以点名让它用某张卡,读这张卡是干什么的,然后照抄真实参数而不是自己编。渲染时片子需要的东西被刻意收到一处——声音是声明在一张表里的时间线资产,不是写在场景组件里的代码;时间表从成片自己的入口 import,不由编辑器再存一份;模板的场景从默认对象里读文案、字号与颜色,于是同一组值同时喂给渲染和属性面板。工作台是外挂上去的,不是长在里面的,它的契约写明了能改什么、不能改什么:时间、变速与图层可编辑,逐属性编辑要靠把语境级参数做成带 schema 的 props 才开放,而决定节奏的常量保持为常量。
- SKILL.md 与 references/
- 面向 agent 的那一半:19,863 字节的技能入口,以及旁边的流程文档——
pipeline.md(25,226)、aesthetic-rules.md(27,547)、sound-design.md(27,677)、music-beat-sync.md(13,049)、workbench.md(13,212)、guided-free-creation.md(10,874)、jianying-export.md(9,348)与final-review.md(7,095)。references/shots/下是十个分类的 157 张配方卡加一份来源说明,references/sequences/里放着一个可复用的整片结构。 - demos/
- Remotion 实现,每张卡一个目录、沿用同样的十个分类名,每个目录里是一个由归一化进度值驱动的可复现 TSX 组件。旁边是
demos/README.md(7,276)、三个共用夹具、25 个贴图资产,以及两个保证它们不出事的脚本:assets/scripts/capture-template.mjs(8,973)与smoke-render-demos.py(5,940)。工作台数出来是 216 个这样的动效。 - template/
- 可运行的 Ink Press 成片:
src/aifl/Main.tsx(9,730)放着时间表与音效表,src/aifl/live/下六个场景(最大的是 25,822 字节的SceneOpen.tsx),src/themes/是主题层,palettes.json里九套预设喂给生成出来的 105,914 字节palette-assets.json。src/workbench.ts(9,616)是编辑器要读的清单契约,template/themes/ui.cjs(23,076)负责主题编辑。 - gallery/ 与 .github/
- 静态站点和它背后的收稿机器:
index.html、library.html(68,925)与showcase.html及各自的脚本、65,192 字节的翻译表、api/library.json(267,673)、157 个生成出来的源文件、llms.txt(41,035),以及两个从卡片重建这一切的生成器——sync-from-cards.py(6,202)与build-seo.py(6,318)。旁边是 showcase 的 issue 表单(3,066)、发布脚本(8,145)与三个分别管 Pages、pull request 检查与发布的工作流。 - workbench/
- 一个 Vite 加 Remotion Player 的编辑器:应用外壳、几个面板(Inspector 11,828、LibraryPanel 14,950、ThemePanel 8,907)、时间轨(Timeline.tsx 9,841)、预览、11,726 字节的 store,以及 41,147 字节的 i18n 文件与
i18n/ru/下四个俄语 JSON。四个脚本驱动它——gen-index.mjs(14,604)、open.mjs(8,254)、parity.mjs(5,209)、test-themes.mjs(9,945)——GUIDE.md配九张截图介绍界面。 - assets/ 与 jianying-export/
- 原材料:156 个音频文件、36,228 KB——五首垫底曲与 16 个类别下的 149 个音效——外加
ATTRIBUTION.md(22,401)与 2026-07-27 那轮试听清单(36,465);assets/lib/下七个共用 Remotion 组件及它们自己的测试与辅助函数;品牌 SVG 与一份品牌说明;以及剪映草稿导出器mac_draft.py(17,946,在 macOS 上验证过)与windows_draft.py(7,980,树里标注为未测)。
取舍,以及它替代了什么
把声音排在画面锁定之后 替代 让音频和剪辑一起长出来
写在
references/sound-design.md里:模板片的音频工作直到画面改了约三十轮之后才开始,而有一次换 BGM 和画面重做挤在同一轮,整张音效表只能重钉。文档把这变成一道工序——先锁画面,再铺 BGM,最后逐拍钉音效。一部片子一张声明式音效表 替代 把音频代码写进每个场景组件
文档给的理由是:声音是时间线级资产,不是镜头级资产。音效集中在一个「帧号、文件、音量」的数组里,每条都注明它落在哪个画面动作上,场景组件里完全没有音频代码。
每张卡进门时都去品牌 替代 照搬那些被研究的片子的外观
致谢里点名了十二支被拿来研究节奏与调度的官方产品片,并写明其中没有任何画面、美术或品牌资产被收进仓库;每张卡都用中性占位文案与一个可替换的强调色,后来一位贡献者的 pull request 也用同样的话作出了同样的承诺。
让编辑器复用成片自己的时间表,只开放作者暴露出来的参数 替代 另做一条什么都能改的时间线
写在引入工作台的那条 pull request 里:清单由成片的
src/workbench.ts导出,时间表从Main.tsximport 且不许写第二份,216 个 demo 动效零改动接入。时间、变速与图层可编辑,逐属性编辑不可用,因为 demo 是常量驱动;流程文档要求以后的成片把语境级参数做成带 schema 的 props,而把决定节奏的常量留成常量。缩略图保持静止,悬停才播放 替代 每张卡上挂一个自动播放的播放器
有用户报首屏疯狂闪。原因是一屏十几个自动播放的 1080p 预览:闪白转场卡每 0.3 秒白一次、字卡每 1.8 秒淡出重来,StrictMode 还把每个播放器挂载了两遍。缩略图改成静止在 45% 的一帧、去掉 StrictMode,实测结果是静止时 0 次 DOM 变更、0 条控制台 warning,而此前有 28 条 EncodingError。
依据README.md(15,586 字符,侦查报告只印了前 6,000,其余于 2026-10-01 从默认分支取到全文)、报告里印出的 references/sound-design.md(16,331 字符,其中显示了 12,000)、完整的 989 个文件树及其体积与两级目录汇总,以及第 65、72、75、80、86、88 号 pull request 与上文提到的 showcase issue 的正文和评论串。
制作过程
6 个阶段- 01
十一周、三批提交,和一个一直在变的卡片数
仓库建于 2026-07-19,第一次提交就把 v1 的全部内容放进一条信息里:镜头卡库、demo 实现、成片模板、资产与画廊。此后是 101 次提交,分布本身就是这个项目的形状——七月 66 次、八月 25 次、九月 10 次,最后一次在 2026-09-28,给工作台界面加上俄语。公开的数字是一批一批跳的,不是连续长出来的。八月的说明宣布新增 48 张卡,说库从 104 张涨到 152 张卡、209 段动效预览,来源是 209 个候选动效经过八轮对着参考片逐帧评审。2026-09-01 的一条贡献记录则写着 152 张卡 / 209 段预览变成 155 / 212。今天 README 的横幅写 157 张卡、214 段预览,而仓库描述仍停在 152 和 209,工作台自己数的则是 216 个 demo 动效。周围是 10,029 个星、897 个 fork、11 个 watcher、5 个未关的 issue、九位贡献者,以及两个 release——2026-07-26 的
gallery-media与 2026-09-01 的showcase-media——它们是媒体资产投放,不是版本号。 - 02
209 个候选、八轮评审、48 个活下来
一张卡是怎么来的,README 直接写出来了:209 个候选动效经过八轮对着参考片逐帧评审,其中 48 个成了八月那一批。活下来的每一个都以三件套的形式进来——
references/shots/<category>/下的一张配方卡、demos/<category>/<name>/<Component>.tsx里一个由归一化进度值驱动、可复现的 Remotion 组件、以及一段渲染好的动效预览;三件套进门时都被去了品牌:中性占位文案加一个可替换的强调色变量。动效的出处写在致谢里:包括 ClickUp、Perplexity、Slack、Notion、Figma、Framer、Bear、Raycast、Pitch、Miro、Superhuman 与 Loom 在内的十二支官方产品片被拿来研究节奏与调度,而它们的画面、美术与品牌资产一件都没有进仓库。后来的贡献者也照这个纪律手工做:一条新增三张卡的 pull request 写明自己不包含任何第三方图片、视频、标识、产品界面或品牌名,只有确定性的几何与占位文案,并记录卡数从 152 张 / 209 段预览走到 155 / 212。大部分活是脚本干的,不是手改的——gallery/sync-from-cards.py与gallery/build-seo.py从卡片源码重新生成画廊索引、65,192 字节的翻译表和 SEO 文件,template/scripts/build-palette-assets.cjs生成 105,914 字节的配色资产清单。 - 03
声音排在最后钉,而这个顺序是踩出来的
27 KB 的声音设计文档是全仓最坦诚的过程记录,它的第一条就是工序:先锁画面,再铺 BGM 定能量骨架,最后逐拍钉音效。这条规则来自一次教训——模板片的音频工作直到画面改了约三十轮之后才开始;有一次把换 BGM 和画面重做混在同一轮改动里,整张音效表只能全部重钉。BGM 换过三稿:先是 Kevin MacLeod 一首暖色氛围钢琴(CC-BY 授权),再是一首欢快的 folk-pop,最后是留用的 Mixkit tech-house 鼓底。前两稿被用户先后否掉,两稿之间只隔 34 分钟;第二稿的判词是配乐与音效都太像游戏。这句判词后来变成一条写下来的规则:按片种选音,不按事件选音——产品宣传片只用 whoosh、impact、riser、sparkle 与 transition,游戏音包一律排除。库里现在有 16 个场景与材质类别下的 149 个音效,外加 5 首 BGM,并在 2026-07-27 那一轮试听后留下 36,465 字节的清单,记着每个文件的时长、峰值与建议钉帧;同一次复核还发现四对文件其实是同一个素材被下载了两次、存成了两个名字。
- 04
工作台从姊妹项目移植过来,评审留在公开的 pull request 里
2026-09-04,一条 pull request 把浏览器工作台从同系列的解说视频项目 video-talkcraft 移植过来,并写下「交付后由技能打开一个编辑器」的接入契约。片子按创作时的样子拆成镜头、转场、字幕、音效多轨;时间表从成片自己的入口 import,并明确规定不许写第二份;demo 动效以 216 个组件零改动的方式接入为素材库——218 个 tsx 里跳过两个,一个需要 mp4 素材,另一个是辅助组件;逐属性编辑则被有意保留为不可用,因为 demo 是常量驱动,这条限制被作者写进流程文档而不是藏起来。这条 thread 同时也是评审记录:五项问题在一条提交里修掉,其中包括一个新版本总时长相同也仍会触发导入的 manifest key、拒绝复用不属于本工作台的开发服务器,以及一个宁可带着自己的退出码失败、也不报假绿的 parity 脚本。用户报的首屏「疯狂闪」被追到「用自动播放的播放器当缩略图」这件事上;现在缩略图静止在 45% 的一帧、悬停才播,改完实测静止时 0 次 DOM 变更、0 条控制台 warning,而此前有 28 条 EncodingError。另一个场景的闪烁是用录屏里数亮度脉冲的办法定位的(约二十次降到两次),再用渲染环境分流修掉。一次在全新上下文里跑的独立复审结论是没有阻塞项。
- 05
两条俄语 pull request,只留一条本地化路线
2026-09-23,工作台界面改为默认英文,顶栏加了切换按钮,每种语言约 150 条界面文案集中收在一个翻译文件里;已保存的工程数据一个字节都不改——轨道名与卡片名在展示时翻译,所以用另一种语言打开旧工程不会把它重写。随后来了两份俄语贡献。第一份本地化了界面、翻译了卡片文案,并迁移已保存工程里的旧轨道名;十一天后的第二份,在新语言层之上补了一张完整的俄语字符串表。维护者关掉了第一份,而不是把两套实现都合进来;他写明第二份与 main 在八个工作台文件上冲突,要求它改建为已合并语言层的扩展——同一个文件、同一个偏好键、英文仍是默认、原有行为不变。贡献者照此重做,并报告切语言只影响显示,保存的工程 JSON 逐字节一致,构建、主题测试与四帧渲染 parity 全部通过。仓库现在最后一次提交落地的,就是这个俄语界面,合并于 2026-09-28。
- 06
用 issue 表单收稿的 showcase,以及社区真正在争什么
成片通过 GitHub 的 issue 表单投稿——表单 3,066 字节,带一条必须勾选的版权与展示授权;发布由一个 8,145 字节的 Python 脚本和它的工作流完成。机器人会留言说作品几分钟后会出现在 showcase 页,而维护者把投稿转成适合网页播放的 1080p H.264。策展是手工的:只贴链接的人会被要求把视频拖进 issue;至少有一份投稿被退回,理由是看不出用了本库的动效镜头。记录在案的 30 条 issue 与 pull request 大致就是这个流量——一条微信小程序宣传片点了六张卡、全片以 128 BPM 锚定拍号,还有浏览器插件、专利陪练工具、AI 交易平台,以及一支用网盘链接交付的 4K 片。有一条 pull request 给投稿表单加了可选的 YouTube 字段,并把此前把 YouTube 链接填进小红书字段的旧投稿迁移过来,23 项测试通过。主题侧栏也是这么进来的:先是一条功能建议加一份草稿,合并时贡献者已按维护者要求把差异从 190 个文件收敛到 42 个,删掉了生成的图片和生成它们的脚本。最尖锐的一条 thread 是有用户说这套东西配 Claude 几乎完美,而 Codex、Antigravity、Cursor 等 agent 做出来的片子明显更差;维护者回答说 Codex 把强度开高也应该不错,另有用户报告另一个模型。还有一条 issue 报告 CI 测试不稳定,而它给的文件路径在这个仓库里并不存在。
相关档案
全部档案 →第 088 号
sepia
一个可移植的去 AI 味写作技能:一套规则文件配四个操作,小说先修叙事结构再谈用词,专业文稿按场合套一份薄薄的规则文件,而每条规则都标着它是被测出来的、被咨询过的,还是这个项目自己的推断。
第 087 号
scroll-craft
一个编码 agent 在动手设计页面前先读的技能,自带一整套写下来的标准——八种互斥的页面语法、一次必须原创的标志性交互、一条情绪曲线、一个被工程化的最高点,加上排版、间距、色彩与纵深四条底线——外加一个不许改的滚动引擎,和一趟逐滚动位置检查成品页面的无头巡检。
第 070 号
OpenChatCut
一个本地优先的视频剪辑器,剪辑方式是跟它说话:内置 agent 与外部 Codex、Claude Code 会话调用的是界面自己在用的同一套剪辑工具,于是每一处改动都落在一条真实的多轨时间线上——是片段、转场、字幕、特效或音频,仍然能拖、能撤销、能导出。工程与素材留在本机,预览与最终渲染都出自 Remotion。