1实现原理 · 为什么它能做到
定位是「兜底工作流」:只有当没有专门 workflow 匹配、或 BRIEF.md 写明 flow: companion 时才用;新创作一律先过 /hyperframes 意图层做路由。
Route fresh creation through hyperframes before using this skill.
开工先做状态机判定:按「具体编辑 / 有 BRIEF / 有 hyperframes.json 或 STORYBOARD / 全新」四行优先级取第一条命中,且不再往下评估。
Apply the first matching row; do not evaluate lower state rows:
跨切面能力(媒体、Figma)不自己实现,全部通过 adapter 转发给兄弟 skill:任何音频/图像/图标/logo/配音/调色/LUT/特效/字幕先读 /media-use 的 resolve + setup-providers。
**Media:** For any audio, image, icon, logo, voice, grade, LUT, treatment/effect, caption, or media-operation need, load `/media-use` and follow `../media-use/references/resolve.md` (resolve, adopt, reuse) and `../media-use/references/setup-providers.md` (providers, auth).
运行形态由 BRIEF.md 的 flow/storyboard 两个字段派生(automation/companion × yes/no),并明令不许自造同义词。
Do not invent synonyms for these states. An ongoing “just build it” signal is handled by the intent layer and arrives as `flow: automation`, `storyboard: no`.
合成契约是硬约束(class="clip" + 单条 paused seek-safe 时间线 + 渲染期确定性),与 keyframes 家族共享同一套确定性纪律。
Timed elements use `class="clip"`; the root and relevant ancestors are sized; each composition registers one paused, seek-safe timeline on `window.__timelines`; rendering is deterministic. Do not use render-time network fetches, clocks, or unseeded randomness.
唯一自带脚本是 packet builder 的薄壳:只钉住本 workflow 的路径与一处行为差异(设计真值解析顺序 frame.md → design.md → DESIGN.md),其余逻辑全部复用 hyperframes-core 的共享实现。
// Thin wrapper over the shared packet builder in hyperframes-core — this file pins // this workflow's paths plus its one behavioral difference: design truth resolves // frame.md → design.md → DESIGN.md (general-video § 6 order). Everything else has // one owner: ../../hyperframes-core/scripts/lib/frame-packets-core.mjs
子代理派发有经济学门槛与量化依据:小片内联更快,只有规模大才 fan out,并且一次派发全部 worker。
**Dispatch pays for itself only at scale.** Authoring packets and warming fresh worker contexts costs real minutes and tokens: a film of up to ~6 short scenes builds FASTER inline, in this context, one scene after another (measured: 5 short scenes ≈ 9 min inline vs ≈ 21 min packetized).
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | hyperframes CLI(init / check / lint / snapshot / preview / render / skills update) |
| cli | hyperframes skills update(自刷新,需网络拉取最新 skill 集) |
| cli | media-use 的 prefs.mjs / recipe.mjs(偏好记录与配方应用,本地写盘) |
| package | hyperframes-core 共享库(frame-packets-core.mjs,本 skill 脚本的唯一实现来源) |
| package | 兄弟 skill 依赖(/hyperframes 路由、/hyperframes-core、/hyperframes-creative、/hyperframes-animation、/hyperframes-keyframes、/media-use、/figma) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 门槛高:真正跑起来依赖整套 HyperFrames 生态 — 需要已安装并可执行的 hyperframes CLI、/media-use(含 prefs.mjs/recipe.mjs)、以及 hyperframes-core/animation/creative 等兄弟 skill 目录同时存在;缺任一项,SKILL.md 的必读表与命令都会失效。本 skill 不提供降级路径。
- 子代理派发把宿主权限引入构建链 — 流程要求把 _role.md 与 packet 全文交给 worker(或给路径让它先读),worker 具备宿主工具权限;packet 内容来自 BRIEF/STORYBOARD/素材描述,属于可由用户输入影响的自然语言。宿主需自行约束 worker 的工具范围与写盘范围。
- 自刷新即网络行为,且失败处理依赖模型自觉 — 正文要求先 `npx hyperframes skills update general-video`,并在失败时『显式上报而不是凭记忆继续』——这属于纪律性要求,模型跳过或静默降级时无技术拦截。
- 『借兄弟 workflow 的品味』可能引入隐性不一致 — SKILL.md 允许借用其它 workflow 的类型参考作为示例(先跑该 workflow 的 skills update),只禁止借私有脚本/流水线状态/目录契约;边界靠文字约定,若模型借多了不易自动检出。
- 成本对照是历史测量值 — 『5 场景 9 分钟 vs 21 分钟』是文中记录的实测,随模型/宿主变化会漂移;照搬阈值而非重测可能导致派发决策次优。
5第二遍独立确认
- [ok] 唯一脚本是否真的『薄』(有无隐藏功能/网络) — frame-packets.mjs 全文 37 行,仅 import existsSync/path/url 与 core;导出两个函数并透传 CONFIG;无 fs 写操作、无 fetch、无 env 读取。写盘与模板拼装在 core 中,符合注释自述。
- [ok] 网络 / 凭证 / 注入面 — skill 内 0 处 URL、0 处 fetch、0 处 process.env、0 处凭证关键词;grep 'heygen' 命中的两行是 Figma 段把 figma.com 当输入 URL 的说明与派发成本段,不是 API 调用。第二遍未发现漏掉的网络或凭证路径。
- [ok] 『外部资源』条目逐条回查调用点 — npx hyperframes init/lint/check/snapshot/preview/render/skills update 均在 SKILL.md 正文出现;prefs.mjs/recipe.mjs 路径在 §2 明确定义 <MEDIA_DIR> 为已安装的 /media-use skill 目录;frame-packets-core.mjs import 在脚本原文可验。
- [ok] frame-worker 输出契约与编排者所有权是否自相矛盾 — frame-worker.md 要求 worker 写两个文件(html + motion.json)并禁止写 <audio>、禁止碰邻居场景文件;SKILL.md §5 第 5 步要求编排者收集 motion.json 并在装配时把时长/进出场向量带入缝合。两侧互补、无冲突。
- [ok] 组内一致性(packet 构建路径与自刷新提示) — 与 product-launch-video / faceless-explainer 对比:三者都调 `node <SKILL_DIR>/scripts/frame-packets.mjs`,但 general-video 的 worker 拿到的是『2–3 场景』而另两者是『一帧一 worker』——这是有意的差异(本 skill 面向长片),已在 traits 注明而非记为出入。
6结论
4d140e0c0bd3b0ae…b8328f9573