☰
三提示词出三条片:onetake 30 秒发布片的“零剪辑“工作流,照着跑一遍
2026/10/10 15:17:33 网站建设 项目流程

三提示词出三条片:onetake 30 秒发布片的"零剪辑"工作流,照着跑一遍

【免费下载链接】onetakeMotion films that never cut to the next slide: every beat grows out of the one before, one continuous camera, continuity measured by an oracle. Product launch films and feature demos, made with a coding agent.项目地址: https://gitcode.com/gh_mirrors/on/onetake

2025 年底,onetake 用一条 30 秒的片子给自己做了发布片。这条片子里,一个终端风格的提示词栏被输入了三次——先是一整句话,再缩成四个词,最后只剩下一个词——每一次回车,输入框都"长成"一部全新的产品成片,三部成片分别有自己的配色和动效语言,却共享同一个桌面、同一条从未剪断的镜头。发布片自己就是工作流最好的演示:三个提示词,三条影片,一条镜头,零剪辑。

这不是演示视频的修辞,而是 onetake 这个 Claude Agent Skill 的核心协议:它把产品发布片、预告片、功能演示片从"一张张 PPT 拼起来"改写成"一条连续的电影合成(composition)",并且把"连贯"做成可测量的指标,在任何人眼看之前先交给一个自动化 oracle 验收。本文照着发布片自己演示的路径走一遍:装好 Skill、看懂提示词栏这条"脊柱"、跑通三次发送三条影片的流程,最后用仓库自带的验收脚本检查你自己的成片是否成立。

准备:拉仓库、装 Skill、看懂"提示词栏 = 脊柱"

安装只有一条命令。README.md 给出两种 Agent 的落点:Claude Code 克隆到~/.claude/skills/onetake,Codex 等按 skills 读取的 Agent 克隆到~/.agents/skills/onetake。依赖是 python3(playwright + chromium、numpy、scipy、Pillow、matplotlib,分析参考片需要 opencv-python)、ffmpeg、node;配音另加 faster-whisper 与 Kokoro TTS。装好后直接说「给我的 App 做个 15 秒发布视频」即可。

装好后值得先读两样东西:SKILL.md 的 8 步协议,和 cases/onetake-launch-30s/README.md 的节拍表。前者告诉你"先测量、再创作"的顺序不可跳过,后者就是发布片的工作台账。

"提示词栏作为脊柱"(the prompt bar is the spine)是发布片的概念句,写在合成文件头部的 CONCEPT 里:提示词栏被输入三次,一次比一次短——一句话 → 四个词 → 一个词——每次输入都看得见地变成一部成品 mini-film,服务于一个新的虚构产品,各自拥有独立的配色与动作语汇。条 1 展开成 Mac 窗口,条 2 展开成 Hush 耳机框,条 3 压成一条线射过桌面、展开成 LED 屏幕。三条影片坐在同一张暖色纸质桌面上,镜头从不剪断,最后拉远,三条影片同时播放,提示词栏的块状光标一笔写出 "onetake" 的名字。

值得注意的是 v8 的修订记录:v7 被评审驳回,理由是"看起来只有一个 prompt"。v8 的修法不是加素材,而是让镜头落在每一条提示词栏上,让每一次发送都成为对应影片的诞生时刻——衔接是设计出来的,不是堆出来的。这正对应当前仓库 SKILL.md 里的硬规则之一:"Never replace a beat — carry it"(永远不要替换一个节拍,要接住它)。

这条脊柱在代码层面也有对应物。templates/comp.html 是合成骨架,它的核心契约是一行注释:window.__seek(t) → Promise,即整个画面是时间 t 的纯函数——跳到任意时间,得到的都是同一帧。打字的速度、光标的闪烁、卡片的弹簧入场、复选框的打勾,全部由 lib/motion.js 提供的纯函数驱动:OM.typeOn(t, t0, text, {cps, blink})返回当前已打出的字符串和光标状态,OM.wordRise(t, t0)返回一个词的弹跳位移和缩放,OM.press(t, tc)返回按钮的按压、回弹与状态翻转。动作库本身约 39 个动作,全部是"数字进、数字出"的纯函数,不碰 DOM、不依赖构建,<script src="motion.js"></script>即得window.OM。

<!-- templates/comp.html:提示词打字 + 光标,两行代码 --> const ty = OM.typeOn(t, TYPE0, PROMPT_TEXT, {cps: TYPE_CPS}); $('ptxt').textContent = ty.str; $('caret').style.opacity = ty.caret;

跑通三次发送、三条影片、零剪辑的完整流程

发布片自己演示了"跑通"的样子。把 cases/onetake-launch-30s/README.md 的节拍表摊开,三次发送的骨架一目了然:

t节拍镜头什么活下来进入下一拍
0.00–4.40提示词 1(无音乐)微距,两段死静,一次滑移提示词栏
4.40ENTER → 音乐起拉出 2.25× → 0.93×提示词栏展开成 Mac 窗口
5.10–9.50Dayline 影片推、倾、俯冲、拉 + 荷兰角窗口重排成手机
9.52–10.40点击:Launch day 以 sheet 展开定在手机上,文字,死静—
10.95–11.30回到提示词栏 2右移,落在 1.4×提示词栏
11.30–12.03"concept ad — Hush earbuds"死静—
12.08–12.75提示词栏展开成 Hush 框拉到 1.2"Hush" 飞到角落
12.75–16.14城市噪音堆叠 → 耳塞落下、噪音泄掉、充电盒合盖手持蠕动—
16.00–16.92"Hush." 提示词栏 3:"event"拉回 Hush + 提示词栏 3,死静提示词栏
16.92DROP:提示词栏 3 → 一条线 → LED 屏沿线甩镜这条线是宣传片的第一根网格线
17.28–23.18FRAME/26 宣传片(含循环一次)沿海报下移,回抹到第一帧—
23.30–25.90三条影片聚成一排越过一排拉远提示词栏
26.835一切冻结——
27.357–28.45块状光标写出 onetake推近,跟笔—
28.55GitHub 标记 · 开源死静至片尾—

注意这张表的两件事。第一,节奏有形状:0.4 秒的单词、2 秒的静置、0.7 秒的甩镜、0.22 秒的节拍交替出现,长短相差 4 倍以上,还有大段死静——这正是 references/rhythm.md 里从 motion-web 三版被拒剪辑中提炼出的规则(镜头长度变异系数 ≥ 0.25,至少 25% 的帧是死静的,至少一段 ≥ 1 秒的安静)。第二,每一处交接都写明了"谁活下来":提示词栏 → Mac 窗口 → 手机 → 提示词栏 → Hush 框 → LED 屏的第一根网格线 → 三条影片聚拢 → 块状光标写出名字。没有一处是"换一张卡"。

音乐对位也写进了节拍表:Dorothy & IamDayLight 的 Thief(instrumental)115 BPM,小节 2.087 秒,片内 4.40 秒对齐音轨第 33.657 秒的重拍;46.179 秒的 drop 正好落在提示词栏 3 压成线、射向 LED 屏的瞬间。音画是对位出来的,不是随缘配上的。

如果换成你自己做一条片子,SKILL.md 的 8 步协议就是"照跑一遍"的路线图,顺序不可跳过:

  1. 先把参考片拆成数字:python3 scripts/analyze_ref.py ref.mp4 --out ana/,输出能量图、剪辑点、静止占比、接触表和运动线(t80 与 smear)。参考片 34% 死静、7 个硬切分两段爆发、元素小、留白多——这些一遍看不出来,不测量就写的片子会两次掉进均匀节奏的坑。
  2. 出三个概念,选一个:每个概念是一句关于画面的话("一个点变成一切""一个镜头穿过所有尺度"),不是同一套卡片换三种讲法;同时选好 look(python3 scripts/look.py list/from-shot)。发布片的概念是"提示词栏作为脊柱",它也不是模板里的默认故事。
  3. 写节拍表,节奏和衔接都要写:镜头长短差 ≥ 4 倍,每个交接处写明什么活下来。发布片的节拍表就是上面的例子。
  4. 取材:真实页面用 scripts/record_footage.py 按真实时间驱动录制,输入开始瞬间注入洋红标记以便后续定位;或按截图用 HTML 复刻 UI(不录屏),见 references/product-demo.md。
  5. 合成:mkdir -p cases/my-film && cp templates/comp.html lib/motion.js cases/my-film/,在动作库上写一个 HTML 文件,每个值都是f(t);物理模拟在__ready里以 240 Hz 预模拟一次再按时间采样,渲染路径上不允许Math.random()(用OM.rng(seed))。
  6. 渲染:草稿 1080p30(python3 scripts/render.py comp.html --out draft.mp4),带 180° 快门的真实运动模糊——每个运动帧是快门张开期间的多次采样、在线性光下平均,快动作拖出残影而不是一格一格闪;只有剪辑通过验收后才允许--final出 4K60。
  7. 配声:六个合成材料放进同一个混响房间(T60 1.1 秒),时间与声像直接从合成导出的事件与速度曲线取,峰值 −8 dBFS 给音乐留位,打点处音乐自动让位。
  8. 先过验收,再给人看——这就是下一节。

验收:用自带 oracle 检查自己的成片是否成立

发布片在给人看之前,先过的是仓库里的自动化"神谕"(oracle)。入口是 scripts/verify_promo.py:

python3 scripts/verify_promo.py draft.mp4 --comp comp.html --ref ref.mp4 --shots 0,1.6,3.0,4.8,7.0,9.6,12.1,13.25,14.3

这条命令跑一组"腿"(leg),只有 FAIL 才让整体 VERDICT 判为 FAIL。每一条腿都是一条被真实拒稿喂出来的规则:

  • cadence:镜头长度变异系数 CV ≥ 0.25,等长镜头就是节拍器,就是 PPT;
  • rest:≥ 25% 的帧死静(320px 下平均绝对差 < 0.5),且至少有一段 ≥ 1.0 秒的安静——停顿让动作落得下来;
  • burst:1.5 秒内 ≥ 3 次大变动的爆发窗口;只有参考片有爆发而你没有时才判 FAIL,否则是 WARN——无爆发的概念(一个元素持续变形、一条镜头穿过尺度)不是缺陷;
  • audio:峰值 ≤ −3 dBFS、零削波、≥ 15% 的时间帧安静——音频爆音或从未安静都会被拒;
  • continuity:这是唯一一条把被拒与通过的剪辑分开的腿。它调用 scripts/probe.py 读合成:probe 在每一帧记录画面上有什么(DOM 元素、canvas 绘制、文本、色块),找出 0.4 秒内的交接窗,判断有没有东西活着穿过交接并看得见地移动或缩放——carried(有承载者)、anchored(只有大块不变的锚)、bare(什么都没有)。carry score 低于 0.5 判 FAIL,低于 0.7 给 WARN。历史数据摆在脚本 docstring 和 references/rhythm.md 里:
片子结果carry score
更早的发布片 v1:节奏完美,仍然像 PPT被否0.00
同一条 v2被否0.40
v3:每个画面从上一个里长出来通过0.75
onetake 发布片通过0.83
motion-web 第三版通过0.56(WARN 边缘)

节奏各腿对四部片子全部通过,唯独 continuity 分开了裁决——"连贯是量出来的,不是靠感觉"这句话的字面意思。

  • curves:任意元素(含镜头)单帧位移超过 80 px/frame(按 1920 宽归一)而影片又没渲染快门模糊,判 FAIL——这是渲染缺陷,不是设计选择;
  • framing:声明在window.__meta.inFrame里的 id 在对应时间窗内完全出画(或标记'whole'的未完整入画)即 FAIL。one-dot 影片的第一个镜头渲染就是被这一腿抓住的:那颗点被弹簧追不上的甩镜甩出了画,除此之外没有任何人发现。

所以"照着跑一遍"的最后一步其实很简单:跑完verify_promo.py,看 VERDICT 是 PASS 还是 FAIL。PASS 不代表它就是好电影,但 FAIL 一定意味着它还是幻灯片——无论单帧多漂亮。这是 onetake 最反直觉也最值得带走的设计:把"像不像 PPT"从审美判断改写成可执行、可复现、有历史判例的工程检查,让 Agent 在浪费 4K60 渲染和人类观众的耐心之前,先在一堆数字面前栽跟头。

三条提示词、三条影片、一条镜头。现在你可以克隆仓库,把发布片的节拍表当作工作台账,把verify_promo.py当作审片人,试着给你的产品也写一句概念、排一张节拍表、敲一次回车。

【免费下载链接】onetakeMotion films that never cut to the next slide: every beat grows out of the one before, one continuous camera, continuity measured by an oracle. Product launch films and feature demos, made with a coding agent.项目地址: https://gitcode.com/gh_mirrors/on/onetake

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询