OpenMontage music-to-video 运动基元目录(motion-primitive catalog):面向节拍锚点的 free-compose 微动作速查与组合语法
发布时间:2026/9/9 13:26:16来源:尧图网络
OpenMontage music-to-video 运动基元目录motion-primitive catalog面向节拍锚点的 free-compose 微动作速查与组合语法【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage导读本文解析 OpenMontage 仓库中 music-to-video 技能的references/motion-primitive-catalog.md运动基元目录——它是技能体系里原子动作层的完整菜单。当某个帧内小组group没有现成模板可套用时编排者orchestrator可以直接按锚点 最佳时长 动作语义三要素命名一组运动基元primitive来自由编排free-compose。读完本文你将掌握46 个运动基元的全量清单与适用锚点、贯穿所有基元的时序与延迟铁律0ms 硬击、提前 40–190ms 落地、300–500ms 缓动入场、800–2000ms 宏观构建等、把基元组合成一个一个主导系统 最多一层纹理的构图语法以及这些规则如何在仓库的 GSAP/HyperFrames 参考实现与 STORYBOARD 规划格式中落地。一、运动基元在 music-to-video 工作流中的定位music-to-video 技能SKILL.md是一个一曲一视频的节拍同步工作流先由唯一的节拍分析器 analyze-beatgrid.py 生成audiomap.json再切帧、写 STORYBOARD、逐帧派发子代理构图、最后装配渲染。每一帧frame内可再拆出多个小组group每个小组在 Step 3planning时只能选择三种处理方式之一匹配模板template从 template-catalog.md 中挑选整帧级成套方案自由编排free-compose从运动基元目录命名一组 L0 原子动作素材处理asset按 montage.md 处理用户提供的图片/视频。运动基元目录正是第 2 种方式的选菜单。从目录结构看它被明确标注为L0 目录实现atomic layer而模板目录则是建立在 L0 之上的 L1 成套实现原子层atomic layer的语义是一个锚点 → 一个微动作one anchor → one micro-move。当没有模板能覆盖某个小组时就通过命名这里的基元来做 free-compose——扫描每个基元的锚点 anchor最佳时长 best span动作效果 what it does然后挑出能承载该小组的最小动作集合。规划阶段的决策权划分是编排者决定WHAT选哪些模板/基元、写什么文案、绑到哪个真实音频锚点秒frame-worker 子代理决定HOW微时序、布局、命名空间等实现细节。这一点在 planning.md 中写得很明确——storyboard 里绝不出现毫秒级 tween。因此这份目录是编排者唯一需要背诵的动作词汇表。二、先看懂三个扫描维度使用这份目录之前需要理解每个基元行的三个列字段它们是扫描-挑选协议字段含义读法id基元唯一标识如hypercut-whip直接写进 free-compose 的primitives列表如primitives: [hypercut-whip, content-swap]anchor该动作应该骑乘ride的音频锚点类型用audiomap.json里真实的 beat / onset / drop 秒数替代示例时刻best span动作活跃窗口的建议时长不是可以把一个基元抻满整帧的许可证而是活跃运动的窗口目录中反复出现的锚点词汇对应analyze-beatgrid.py产出的audiomap.json字段含义对照如下beat / downbeat节拍网格中的击拍/强拍下拍beat_cut节奏型下才可信hard_stop音乐骤停是锁死类动作的首选落地锚点drop / surge / crash / kick / snare能量相位中的重音类锚点DROP/SURGE 是key_moments级别onset瞬态起始点带有onset_rate密度信息roll / build滚奏/渐强——天然的累积容器phrase / section_start / section change / reveal / transition / accent / texture / hold / energy / silence乐句、段落切换、揭示点、重音、氛围停留等结构性锚点。当某个锚点带有→箭头如roll → downbeat、onsets → downbeat、roll → downbeat表示该基元是一个先累积、后在目标锚点上锁定/收束的两段式动作。三、通用时序与延迟铁律适用于所有基元目录开头给出了一套所有基元都必须遵守的时序法则这也是与配乐背景跑马灯最根本的区别——这里运动本身即是打击乐。共六条3.1 硬击点必须是 0ms缓动会杀死它Cuts、调色板翻转palette flips、内容交换content swaps、冻结freezes都通过tl.set(...)实现——没有时长、没有缓动。打击乐就是动作本身一旦给硬击加上缓动它就失去了击打感。仓库实现中hard-cut 参考实现 就是这条规则的直译它预构建 N 个全帧面板背景色词然后仅用tl.set()在每拍处瞬时切换可见面板注释里写得很直白——Sample-accurate 0ms cuts … tl.set has no duration and no ease — brutal instant switchingfor (let i 1; i N; i) { const t i * STEP; // STEP 0.28s即一个 beat 间隔 tl.set(#p (i - 1), { opacity: 0 }, t); // 藏起上一块 tl.set(#p i, { opacity: 1 }, t); // 同帧秒显出下一块 }3.2 提前锚点、迟滞响应40–190ms 提前落地0–45ms 跟随响应动作分为两类时序方向相反落点型动作必须在拍上落地的如覆盖全帧的划像 wipe、卡住的计数、两块碰撞提前约 40–190ms 启动使其恰好在该锚点处完成即lead the anchor提前量带动动作落在拍上反应型入场因击打而出现的元素在锚点之后 0–45ms触发。这个早到/晚到的二分法保证观众感知到的因果链是动作打中节拍而非动作碰巧跟在节拍后。3.3 缓动入场 300–500ms宏观构建 800–2000ms动作时长分两档缓动入场eased entrancesscale punch、滑动、镜头推进等300–500ms宏观构建macro builds跨越整个 roll / 静默段的累积动作800–2000ms。参考实现中可观察到典型取值如 kinetic-letter-in 使用duration: 0.55约 550msback.out(2)的每个字母入场、stagger: 0.045错峰随后 0.6s 的字距展开——正是缓动入场档位counting-punch 的计数主过程duration: 1.15则落在宏观构建档。3.4 每小节配额per-bar caps克制是配乐的常识具体三条配额每个击打点只累积一个元素是累积不是爆发镜头运动每个乐句至多一次绝不在每个拍上都动高密度翻转/strobe 系统连续运行不超过 2–3 秒。3.5 张力构建必须锁死tension-builds lock计数、顺序构建、形变等张力型基元必须在某个强拍downbeat或 hard_stop 上解决/收束绝不允许在小节中途拖尾散掉。这条规则与锚点列中大量roll → downbeat、roll → hard_stop的形态一一对应。3.6 best span 指的是活跃运动不是拉伸许可证目录给出的 span 指引不是允许把一个基元拉长覆盖整帧。若自由编排的小组实际时长超过了清单 span增加一个 hold驻留或 bed衬底追加下一个基元或者在下个音乐锚点处把帧再切分出一个新小组。四、全量目录46 个运动基元原目录共收录 46 个基元下表完整保留其 id、锚点、最佳时长与效果描述best span 中的 in 指入场如0ms in表示该动作的入场是 0ms 硬切idanchorbest spanwhat it doeshypercut-whipbeat / hard_stop0.18-0.45s帧与帧之间的快速 whip-pan 硬切kinetic-letter-indownbeat / phrase0.4-1.2s逐字母动能入场braam-punchdrop / surge0.2-0.9s active大冲击缩放 重量感砸击chromatic-splitsnare / glitch / surge0.1-0.6s在某个词上做 RGB 通道分裂 / glitchmask-revealsection_start / downbeat0.5-1.2sclip-path 蒙版划像揭示screen-shakedrop / crash / kick0.1-0.5s镜头/屏幕抖动 jitterbinary-decryptroll / build0.8-2.5s乱码→解码二进制→单词dolly-zoomphrase / build1.2-2.5s眩晕感 dolly-zoom缩放 vs 透视iris-opensection_start / reveal0.6-1.2s圆形 iris 打开式揭示electric-arcaccent / glitch0.1-0.6s电弧 / 闪电重音neon-flickerhold / texture0.5-2.5s霓虹灯招牌闪烁chrome-sweepdownbeat / reveal0.6-1.4s金属高光扫过文字slot-machine-revealroll → downbeat0.8-2.0s老虎机式滚动-落定字符揭示liquid-morphphrase / transition1.0-2.5s液态 / blob 形变gooey-metaballbuild / drop1.5-3.0sgooey 融合球体场3d-card-flipdownbeat / swap0.8-1.6s3D 卡片翻转rotateYcrash-zoom-indrop / surge0.2-0.8s猛烈 crash 推近spotlight-sweepreveal / hold0.8-2.0s聚光灯 / 渐变扫过文字outline-to-filldownbeat / reveal0.8-1.8s描边轮廓 → 实色填充counting-punchroll → downbeat1.0-2.5s数字计数并在落定时击打锁死particle-burstdrop / crash0.2-1.2s粒子爆炸迸发radial-burst-linesdrop / surge0.2-0.8s放射状速度线迸发pixel-dissolvetransition / hard_stop0.5-1.5s像素化溶解datamosh-smearglitch / transition0.4-1.2sdatamosh / 运动涂抹text-wave-distorthold / texture1.0-2.5s波浪形文字扭曲bg-flow-fieldenergy / whole span (bed)4-12s bed生成式 curl-noise 背景衬底可在其上自由叠加任意前景动作blur-resolvestop / final hold0.7-2.0s模糊入→清晰聚焦切出前再模糊出chromatic-pressuresnare / glitch0.1-0.5s瞬态上的 RGB 分裂 / 数字张力color-grid-shuffleonset0ms hits; ≤2s run网格单元按每次 onset 的确定性索引重着色content-swapbeat0ms hits; ≤3s run堆叠节点的 0ms 交换最常用的打击乐式动作workhorse percussive movedirectional-fillbeat / reveal0.3-1.0s each方向性划像填充scaleX横扫各小节flash-cutdrop / crash0-0.6s全帧闪光遮蔽词 / 颜色状态变化freeze-holdhard_stop0ms in; 0.5-2s冻结运动系统并驻留hard-cutbeat / hard_stop0ms in; 0.3-2s采样级精确的色块 词硬切mosaic-packbeat / build1.5-3.5s散落瓷砖飞入并拼装成网格negative-space-holdsilence / hard_stop / final hold1-6s hold杀掉拥挤图层在留白中驻留一个可读标记overlay-popaccent0.2-0.6s in徽章 / 下三分之一条在基底上弹入palette-flipsection change0ms flip; 0.5-4s同一布局通过 0ms 调色板变量翻转换肤staggered-exitphrase / transition0.4-1.2s有序级联清场staggered-revealbuild0.8-2.5s堆叠 / 列表的有序级联入场system-replacedrop / regime change0ms cut整视觉系统硬切然后启动新系统text-spectral-raysphrase / sweep (hero text)2.5-5s字标向扫动的光标投出体积光唯一 hero 字标专属基元tile-mosaicbuild / reveal1.5-3.5s网格瓷砖对角扫亮、拼装成海报typewriter-revealroll / build1.0-3.0s字符 / 词打字机式显字带光标value-counterroll → downbeat1.0-2.5s在强拍 / hard_stop 上锁定的计数word-grid-burstonsets → downbeat1.8-3.2s词网格随 onset 逐个揭示在强拍上聚焦一个词五、快速检索按在乐曲中的角色分组全量表是权威清单但为了在 Step 3 现场快速缩小候选范围可以把 46 个基元按功能角色重新映射编组仅为检索便利不改变上表的权威定义结构性大动作structure骑强拍/段落边界负责布局与切换system-replace、hard-cut、hypercut-whip、palette-flip、content-swap、freeze-hold、mask-reveal、iris-open、pixel-dissolve、datamosh-smear、liquid-morph、3d-card-flip、staggered-exit、staggered-reveal、mosaic-pack、tile-mosaic、negative-space-hold。打击/冲击类percussive0ms 或极短制造击打content-swap、hard-cut、flash-cut、color-grid-shuffle、chromatic-pressure、chromatic-split、screen-shake、crash-zoom-in、braam-punch、particle-burst、radial-burst-lines、overlay-pop、electric-arc、hypercut-whip。累积-落定型accumulate-and-lockroll/build → downbeat/hard_stop两段式binary-decrypt、slot-machine-reveal、counting-punch、value-counter、word-grid-burst、typewriter-reveal。揭示/揭示性渐变reveal缓动入场档 300–500ms 起步kinetic-letter-in、chrome-sweep、outline-to-fill、spotlight-sweep、directional-fill、blur-resolve、mask-reveal、iris-open。氛围 / 纹理 / 背景hold / texture / bed长驻留bg-flow-field唯一的整帧 bed、neon-flicker、text-wave-distort、gooey-metaball、text-spectral-rayshero 字标专用。镜头类cameradolly-zoom、screen-shake、crash-zoom-in、hypercut-whip。六、组合语法free-compose 的构图规则目录的 How to combine 一节定义了把多个基元叠成一个小组的组合语法。直接照抄其规则如下6.1 一个主导系统最多一层纹理每个小组只有一个主导系统dominant system最多只能在一层结构性基元之上叠一层纹理基元。参考实现的目录布局印证了这一分层references/motion-primitives/id/index.html中的每个基元都是单文件自包含的 recipe组合时由 frame-worker 把若干 recipe fork 进同一帧、分别命名空间化。6.2 结构上强拍纹理上弱拍结构性动作放在强拍上cut、镜头运动、system-replace骑乘downbeat / phrase / section_start纹理性动作放在弱拍/切分音上content-swap、打字机字符、chromatic 重音等。6.3 roll 是累积容器一个 roll滚奏段本质上是一个累积容器在 roll 期间持续构建然后在结束它的那个强拍上硬切到干净布局。所以表里累积型基元的锚点几乎都是roll → downbeat形态。6.4drop≠downbeat这是两个层级downbeat同一 regime视觉体制内部的一次切换drop一次 regime 切换system-replace、整体清空、元素数量级跳变。两者不混用因为它们的构图代价完全不同。6.5 让静默做减法用negative-space-hold让静默移除密度——silence / hard_stop 时主动杀掉拥挤图层只留一个可读标记在空场中而不是让画面继续填空。6.6 背景衬底是图层而不是动作bg-flow-field这类 bed 属于图层而非动作同一时刻只能有一个 bed且永远放在前景基元之下one bed at a time, under foreground primitives。6.7 hero 字标的排他性text-spectral-rays是 hero 字标主字标的专属待遇一旦使用它就不要再在同一画面上叠加同一个词的另一个可见副本。七、在代码层落地参考实现与子代理契约这份目录不是纸面清单——仓库在 references/motion-primitives/ 下为 46 个条目中的 37 个提供了可运行的 HTML 参考实现如hypercut-whip/、bg-flow-field/、counting-punch/等各自是一个id/index.html并共享一个 vendored 的 gsap.min.js。每个实现都是 1920×1080、注册window.__timelines[main]暂停时间线的标准 HyperFrames 组合可直接在浏览器打开预览。以三个实现为例看时序规则如何在代码中兑现1hard-cut/index.html —— 0ms 硬击预构建全帧面板数组背景色/前景色/词三数组WORDS [CUT,NOW,HARD,SNAP,STOP,GO,CUT]STEP 0.28s即一个拍间隔。切换只发生在tl.set()上tl.set无 duration、无 ease——对应 3.1 的缓动杀死硬击。帧尾还带回卷逻辑把末面板切回首面板保证循环重入时颜色与词与起点一致。2kinetic-letter-in/index.html —— 300–500ms 缓动入场把单词拆成span classchar用tl.from(.char, { y: 80, opacity: 0, stagger: 0.045, ease: back.out(2), duration: 0.55 }, 0.05)逐字母弹入再以power2.out做 0.6s 字距展开——时值落在目录给定的缓动入场档。3counting-punch/index.html —— 累积-落定-锁死用一个 tween 驱动计数器对象在duration: 1.15expo.out内滚到目标值12847数字每变一帧触发一次 1.045 的微缩放 tick在落定时刻t1.3s先power4.out冲到 scale 1.12再以elastic.out(1, 0.55)弹回 1.0同时下划线expo.out画线、caption 淡入。整个构建→落定 punch→弹性锁死正是roll → downbeat锚点与tension-builds lock规则的一次完整演示。frame-worker 的实际装配契约在 sub-agents/frame-worker.md 中定义子代理拿到 storyboard 里该帧的free_design块后把材料 fork 进本帧文件把所有锚点换算为帧内本地时间local_t track_t − span_sec[0]用一个暂停的gsap.timeline({paused:true})在window.__timelines[frame_id]上同步注册并用tl.set(group,{autoAlpha:1/0}, start/end)的 0ms 交换实现帧内 group→group 切点frame-worker 不运行hyperframesCLI那是装配后项目上 Step 6 的事。另外目录里注明GSAP 由宿主加载帧文件不再自带script但单个参考 recipe 为了独立预览仍自带 gsap 引用fork 进帧文件时需要按 worker 契约删除该行。八、STORYBOARD 中的实际写法Step 3 规划时free-compose 组在 storyboard 中写成free_design块。综合 planning.md 定义的字段典型形态如下字段格式示意实际以该技能规划的 storyboard-format 为准### Groups - group: g1 free_design: dominant_system: hard-cut # 一个主导系统 primitives: [content-swap, chromatic-split] # 一层结构 一层纹理 density_topology: 2-region # 密度拓扑如双区域/单焦点/满帧 anchors: # audiomap.json 的真实秒数 - { beat: 12.30, role: hard-cut } - { onset: 12.86, role: content-swap } copy: [CUT, NOW, HARD]编排者只写选了什么 内容 真实锚点秒 累积/错峰意图微时序完全留给 frame-worker。完成后运行 validate-plan.mjs 校验凡是硬错误时长不匹配、帧未铺满音轨、缺少src都会以✗报出并需清零warning 则尽力而为。九、组合时的常见误区对照把前文的规则浓缩成一份快速自检清单供 Step 3/4 时对照把硬击加了缓动→ 打击感消失。检查content-swap、hard-cut、palette-flip、freeze-hold是否仍是 0ms。让落点型动作在拍后才启动→ 永远感觉慢半拍。wipe、锁数值、碰撞类动作要提前 40–190ms。一个基元拉满整帧→ span 是活跃运动窗口超了就加 hold/bed/下个基元或在下一锚点切帧。每拍都推镜头→ 违反镜头每乐句至多一次。张力构建在中途散掉→ counting/morph/顺序构建必须落在 downbeat 或 hard_stop 上。drop 和 downbeat 混为一谈→ downbeat 是体制内切换drop 是 regime 级更换。叠了两个 bed 或两套主导系统→ 每帧一个主导系统 至多一层纹理 至多一个 bed。在text-spectral-rays上再叠同词副本→ hero 字标排他。十、小结motion-primitive-catalog 是 music-to-video 技能自由编排层的动作语法书46 个原子动作覆盖了从 0ms 打击乐式硬切hard-cut、content-swap到秒级宏观构建binary-decrypt、value-counter、word-grid-burst再到长驻留氛围层bg-flow-field、negative-space-hold的全部语义而锚点列beat / drop / roll→downbeat / hard_stop / silence…让每个动作都能被绑定到audiomap.json的真实时间轴上。配合 37 份可运行参考实现、free_design规划格式与 frame-worker 的装配契约编排者可以在没有模板兜底时依然用最小动作集合精确承载任意小组的画面意图——这正是这套以音乐为主干music-grounded工作流能在零素材前提下产出节拍级同步视频的关键设计。【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网