资讯详情

资讯详情

「连贯」是量出来的:onetake 怎么把一镜到底写成了可测量的工程协议

「连贯」是量出来的onetake 怎么把一镜到底写成了可测量的工程协议【免费下载链接】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/onetakeAI 现在做动效视频十有八九是散的标题卡、淡出、界面镜头、淡出、功能卡片、淡出、Logo。每一镜单看都还行连起来就是翻 PPT——因为画面之间没有任何联系后一个场景只是把前一个替换掉了。onetake 这个开源项目要解决的正是这个问题。它是一个 Claude Agent Skill面向 Claude Code / Codex 等 Agent 的技能包目标不是生成幻灯片式动效拼接而是产出一条 10–30 秒的一镜到底产品短片并且把连贯这件事从审美直觉变成了可测量、可验收的工程协议全片是一个 HTML 合成文件每个像素都是时间的纯函数在任何人观看之前先过一个自动神谕oracle判定。本文直接拆它的仓库源码看这套协议到底是怎么把连贯量化出来的。从PPT 式拼接到全片一个 HTML 合成文件的形态跃迁先说清问题到底出在哪。onetake 自己的第一支片子 motion-webcases/motion-web-15s/README.md被砍了两刀这两刀几乎就是今天所有 AI 动效视频的通病v1被否理由「PPT 式一个一个展示」九张页面卡片摆在一个 2.5D 场里镜头每 0.74 秒推过一张。测量结果是0.02 帧静止、镜头从未停过、每张卡片停留时间完全相同。镜头移动让它感觉像画廊巡游——而画廊巡游就是带推轨的幻灯片。v2被否理由「没有节奏变化 依然是 PPT」改成七张页面全帧展示每张 1.55 秒手绘光标、推入、弹簧落定都做了。可七段等长的镜头配上同一个切入-推近-标签的形状依然是七张会动的幻灯片。没有停顿、没有爆发、没有故事是个目录。v3通过节奏曲线有了形状——三个词 0.4 秒/个弹出、字标字母下落压扁、提示卡 38 cps 打字、构建面板 7 行逐个勾选、三页真实页面倾斜飞过各 0.9 秒构成一个爆发段、四个微交互卡片重叠入场、浏览器窗口 1.15 秒的慢推静场、结尾 0.22 秒/个的连续硬切、黑场收尾。镜头长度从 0.22 秒到 2.2 秒CV变异系数0.78。结论被写进了仓库的硬规则SKILL.md永远不要在节拍器上切镜头等长镜头不管单镜多好都读作幻灯片。所以它拒绝视频编辑器这个形态改走合成文件路线一条片子就是一个 HTML 文件模板见 templates/comp.html时间线就是文件顶部的一组数字常量const FPS30, DUR15; const W1[0.15,0.50,0.92], W1_OUT1.55; const PROMPT_IN2.95, TYPE03.15, TYPE_CPS38, CLICK4.45, PROMPT_OUT4.75; const STAC[[13.25,motion],[13.50,is],[13.72,the],[13.94,material]], STAC_END14.3;配合这套形态的是一份明确的浏览器运行时契约references/composition.mdwindow.__seek async (t) { ...; return true; } // 为时间 t 设置每一处样式图片解码完成后 resolve window.__ready document.fonts.ready.then(() { measure(); simulate(); return seek(0); }); window.__meta { dur: 15, fps: 30 }; window.__track (t) ({ hand: [x, y], card: { x, y, w, h, op } }); window.__motion (t0, t1) px; // 渲染器据此为该帧计算快门采样数产品界面不用录屏而是按截图用 HTML 重建、放在镜头平面上lib/ui_kit.js所以镜头可以推到任意缩放都清晰动效全部来自动作库 lib/motion.js 里 39 个实测过的动作弹簧、入场、衔接、碰撞、物理模拟、镜头、流体光场速度曲线都测量过禁止手写固定常量的缓动。到这一步形态已经从剪辑软件里的时间轴跃迁为一段可 seek、可测量、可自动检查的代码。每个像素都是时间 t 的纯函数意味着什么形态跃迁只是第一步真正撑起整套工程的是__seek(t)的纯函数要求用 6.4、2.0、再 6.4 调用得到的必须是同一帧。为此不允许跨调用累积状态弹簧全部写成闭式解真正需要积分的物理软体、Verlet 串、依赖手部历史的磁吸在__ready里以固定种子在 240 Hz 预模拟一次之后按时间索引采样——OM.sim.*就是这么实现的。渲染路径上禁止Math.random()一切随机走OM.rng(seed)。纯函数的直接红利是运动模糊从滤镜变成了积分。截图是瞬时而摄像机是快门张开期间积分。render.py 对每个运动帧在 180° 快门半个帧间隔以帧时刻为中心内多次 seek 采样、在线性光下平均先采两端若完全一致则判定为静帧、直接写出。注释里有一个被验证过的数字一个 100 px 盒子以 167 px/帧 移动留下 173 px 拖尾加 27 px 实心核——正是 180° 快门该有的结果。而因为__seek是纯函数这是真实的积分不是blur()滤镜。成本是可数的每次捕获约 0.2 秒156 ms 是 Chrome 截图编码canvas 绘制不到 1 ms所以 render.py 用--workers多开 Chromium 并行草稿 1080p30、验收通过后才出 4K60。每个动作都是一组数字进、数字出的纯函数DOM 和 Canvas 通用。以 carry 类的zoomThrough为例references/motion-library.mdconst z OM.zoomThrough(t, 6.3, 7.3, card); // 矩阵型动作两边都是同一组数字 g.setTransform(...z.matrix); // canvas layer.style.transform matrix(${z.matrix.join(,)}); // DOMtransform-origin: 0 0时间全部是绝对秒所以时间线就是文件顶部的一列数字这也让探针成为可能——scripts/probe.py 在页面脚本运行前注入CanvasRenderingContext2D的钩子追踪每一次drawImage/fillText/fill配合 DOM 的变换矩形与有效透明度无需任何注解就能读出每一帧画面上有什么、每个元素怎么移动并输出每个动作的 t80走过 80% 路程所耗时长占比0.23 是 expo 急停0.67 是对称 S 曲线与峰值像素/帧。纯函数还给了镜头操作员手感以确定性的实现OM.camera(t, keys)键控镜头但像有人扛着来自键的摆法——在sineInOut上提前约 0.1 秒键主体来跟随在expoInOut上键落点来甩加一层双正弦慢浮动的手静场时归零每次落地加OM.shake。onetake 第一支概念片 one-dot 的教训就写在 cases/one-dot-15s/README.md固定镜头版被评「就缺灵动的跟踪运镜」换成会追的主体镜头后才拿到「运镜、镜头和物理都没问题」。节奏阈值、自动验收与每一拍从上一拍长出来的工程闭环量化不是目的用阈值建自动验收才是。整条流水线是先测量、再创作的闭环输入端参考片先拆成数字。scripts/analyze_ref.py 把参考片转成能量图——每 1/12 秒一个字符.:-*#%从静止到硬切同时输出静止比例、切点、爆发段窗口、最长安静段以及光流指纹t80、smear 是否 0.78 判定是否带快门模糊。motion-web 参考片测出的数字是34% 帧完全静止、两簇共 7 个硬切、元素始终小且留白大——这些看一遍根本看不出来不测量就动手的片子连续两次落在均匀节奏上。输出端scripts/verify_promo.py 是那个神谕每个腿都打印数字并给出 PASS / WARN / FAILcadence镜头长度变异系数 ≥ 0.25等长镜头幻灯片rest≥ 25% 帧在 320 px 尺度下死静且有一段 ≥ 1.0 秒的安静慢推不是静场——clearing 第一版每个静场都带 1→1.05 的推rest 腿 0.178 直接 FAILburst有参考片时1.5 秒窗口内 ≥ 3 次大变化才算爆发段audio峰值 ≤ −3 dBFS、0 个削波样本、≥ 15% 的 1/12 秒帧安静continuitycarry score 0.5 判 FAIL、 0.7 警告curves无快门模糊的片子里有元素超过 80 px/帧归一化到 1920 宽即 FAILframing__meta.inFrame声明的主体任何一帧出画即 FAIL——one-dot 第一次镜头渲染把点甩丢了就是这个腿抓出来的。其中 carry score 是整套协议的核心。probe.py 把交接处定义为 0.4 秒内画面主体身份大规模更替的窗口然后对每个交接判定三种结果references/rhythm.mdcarried有东西活下来并移动 ≥ 2% 画面对角线或缩放 ≥ 10%、anchored唯一幸存者是 ≥ 3% 帧面积的大块头且未动、bare什么都没活下来。爆发段硬切、最后 1.2 秒片尾、__meta.cuts声明过的切点可以豁免。得分 (carried anchored/2) / 计入的交接数。这条腿的历史战绩最有说服力——Pocket Weather Club 三版节奏腿全部通过只有连贯腿把版本分开影片结果carry scorecarried · anchored · baremotion-web 第三版通过0.565 · 0 · 4Pocket Weather v1被否0.000 · 0 · 2Pocket Weather v2前 6 秒保留0.402 · 0 · 3Pocket Weather v3通过0.754 · 1 · 1onetake 发布片通过0.83—v1 的节奏、静止、爆发、音频全过但每一拍都是独立场景、展示一幕就把其余display:none——probe 量出两个交接全是 bare0.00。这就是连贯是量出来的最干脆的证明节奏不能解释的否决连贯分数能解释。每一拍从上一拍长出来也因此落成了动作库里的具体函数references/motion-library.md被按下的东西变成结果morphRect矩形 A 变成矩形 B、主体打开自己的世界iris从一点张到全帧、一张卡片被推穿就是下一场zoomThrough、全体收拢成标志gather→seal。pith 案例把这条做到了极致cases/pith-21s/README.md从一枚磷光像素开始像素在光标里、光标在提示行里、提示行在输出流里窗口的边框是绕着早已存在的输出流画出来的——440× → 0.52× 一路只出不进没有一次替换probe 测出 continuity 1.00、3 个交接全部 carried。one-dot 同理一颗点走完全片每处交接点变光标、光标变四个点、点吞掉提示、变成环、环展开成弹簧曲线、曲线变成球、球落地打开影片都靠构造保证 carry6 个交接 1.00。闭环的最后一块是反馈回路每个案例目录cases/都同时收成片和拆解文档——概念、节拍表、数字、被否掉的版本和原因。失败的版本不是废案而是标定数据v1 的 0.00、v2 的 0.40 校准了 0.5 的阈值motion-web 0.56 通过但带着四个 bare 交接注释里写明carried 会更好__meta.cuts、probe 的两处盲点单一连续世界里交接太少、rest 腿在深色地面上的过读也都作为已知边界写进了文档。下一次创作从这些数字开始而不是从感觉开始。至此onetake 把一镜到底这个电影感词汇完整翻译成了工程语言一条片子 一个纯函数合成文件 一组实测动作 一把测量探针 一台自动验收神谕。参考片拆成能量图节拍表同时约束节奏与衔接渲染带真实快门积分声音放进同一个混响房间验收在人类观看之前完成。连贯不再是一种说不清的感觉对不对而是一组可以打印在验收报告里的数字——这正是它与所有AI 模板生成器的分水岭别的工具给你动画它给你一条可测量的、不会把观众带回 PPT 时代的连贯性协议。【免费下载链接】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),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →