1实现原理 · 为什么它能做到
两个入口共用一个门:topic 模式下四问过滤器只用于选题与取舍、绝不能拒绝用户已指定的主题(要说明失败在哪、损失什么、给替代);source 模式下过滤器完全不适用,改为读完全部用户素材并跑「storyline 矿脉」——把源材料当矿而不是提纲,抽 on-ramp / tension / turn / mechanism / receipts 五件事,多源多线只选一条脊梁,其余降级为 receipts。
- **Topic mode** (the user names a subject, or asks for ideas): the four-part filter governs IDEATION and tie-breaking only.
结构脊梁是权威权重表:FAMILIAR 15% → DIG(点名人物+日期)5% → STORY 15% → ARTIFACT 10% → MECHANISM(观众能当场在屏幕上验证)20% → SECOND WIND 15% → THESIS(黄圈)10% → CLOSE 10%;THE FAMILY 属 FAMILIAR 的后半而不是新 beat。
FAMILIAR 15% → DIG (person + date named) 5% → STORY 15% → THE ARTIFACT BEAT 10% → MECHANISM the viewer verifies on screen 20% → SECOND WIND (a technology removes a constraint) 15% → THESIS in the yellow circle 10% → CLOSE mirrors the open 10%.
设计 pass 先交付接触表(每 beat 一帧、960×540 tile、HTML → 无头 Chrome 截图)且在交付前自检 LOOK GATE:调色板必须是官方测得的固定色(ink #1a1a1a / yellow #FFE619 / process blue #66CFFF / specimen blue #58BCEC / greys / ground #fbfaf8),标题用 Archivo Black,每帧必须是命名 recipe,黄圈作为反复出现的视觉载体;这里迭代比在成片阶段改便宜 10 倍。另有一条防污染规则:源文档带自己的品牌系统时不要顺势继承(brand-faithful 是另一条工作流)。
Iterate here — it is 10x cheaper than comp notes.
音频时钟:VO 先录或走 TTS(TTS 输入写成发音稿:数字写全、名字按读音写),再转写取词级时间戳;此后每一次 cut、弹出与高亮都对到词时间,换一条 VO 等于整片重定时。字幕转写的是「实际念出来的」而不是脚本文件。
Transcribe the result for word timestamps — audio is the clock; every cut, pop, and highlight keys to a word time.
接缝(seam)是这一 skill 的核心机制,且是「生成 + 验证」两件套:先写 ledger.json(一 seam 一行:cut 秒、exit/entry 的 axis+dir、承载运动的 selector、technique),用 seam-stamp.mjs 把 master seam 代码盖进 index.html(替换 // <seams:auto> 块),再由 seam-gate.mjs 数值核验——ledger 行一致性、exit 在切点仍在动、entry 不得从静止起步、实测方向与 ledger 一致、entry/exit 速度匹配(WARN)、zero-overlap(同一帧只有一侧可见,不是叠化)、Z 符号(scale 变化方向两侧一致,且扫描 incoming 场景自身入场是否反号)、carrier 矩形连续性(含祖先 scale,12px/5% 容差)。
The script (usage + ledger schema: [seam-gate.md](seam-gate.md)) numerically enforces, per seam: ledger-row consistency, exit still moving at the cut, entry mid-flight (never from rest), measured direction = ledger direction, entry/exit speed match (WARN), **zero overlap** (one side visible per frame — the cut is not a dissolve), the **Z sign** rule
反幻灯片地板与技术声明:每个 beat 在 beat map 阶段就要**声明**布局 recipe 与运动手法(不许在建片时即兴),整片必须清过最低线(≥1 次 zoom-isolation 推入并穿过载体的换镜、≥1 次用于 payoff 的 inverse zoom-through、≥2 次以满屏收尾的 drive-past/scale traversal、≥1 次背景剥离的 cutout 做平卡做不到的运动、≥1 次 newsprint layering 与 circle reveal),并有硬上限(静态卡/并排 ≤ 每 3 个 beat 一个,相邻 beat 不得同 recipe 同手法)。
- CAPS: static-card / side-by-side layouts ≤ one third of beats; no two consecutive beats share the same layout recipe or the same treatment.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | HyperFrames 预览服务(版本钉在脚本常量里:0.8.14;--project 模式下由 npx 拉起,未缓存时会从 npm 下载;可改用 --url 复用已在跑的服务) |
| cli | 上游脚手架/技能安装:npx skills add heygen-com/hyperframes、npx hyperframes init |
| cli | Node 22+ 与本地 Chrome/chrome-headless-shell(verifier 自找 Puppeteer 缓存或系统 Chrome,用隔离临时 profile) |
| network | source 模式会抓公开引用与公共领域/开放许可资产(最多一跳公开引用),资产来源为 Wikimedia Commons API、LOC 等声明的来源 |
| api | 可选的第三方 TTS / 转写 API(须先向用户说明 provider、数据、所需凭据与可能成本并获得批准) |
| network | 预览期仍可能加载构图自身声明的远端资产(verifier 只把 --url/--comp-url 限制为 localhost,不限制页面内的远端引用) |
4风险提醒 风险提醒:黄色 · 留意使用
- 验收依赖本地环境 — verify --project 要拉起 HyperFrames 预览服务与无头 Chrome;npx 首次会下载钉版包。环境不通时这条数值门禁直接落空,接缝只能靠肉眼。
- speed-match 只是 WARN — 入口/出口速度不匹配不会让 gate 失败,只打印警告;文档也承认『generated seams satisfy the generator's hard invariants, but the verifier may still report speed-match warnings』——警告需人工处置。
- 脚本能力边界要靠作者遵守 — seam-gate.md 列了脚本查不到的项:full-frame incoming wrapper 必须在 HTML/CSS 里先 opacity: 0;多段链必须写成 fromTo(..., {immediateRender:false}),否则随机 seek 下 GSAP 惰性取值会出错。
- 抓回的素材进上下文 — source 模式抓取的公开引用与档案资产会成为脚本与设计依据,远端文本可携带指令式内容(prompt injection 面),skill 无技术隔离。
- 第三方 TTS 路径的隐私成本 — 默认走本地 TTS,但一旦用户批准第三方 provider,配音稿文本与凭据就交给外部服务——文档要求先披露,选择权与责任在用户。
- 素材合规靠纪律不靠检查 — 『Real assets only』与 PD/开放许可来源是提示级规则,没有许可校验机制;商用前仍需自行确认每个资产的授权状态。
5第二遍独立确认
- [ok] 『--url/--comp-url 只接受 localhost』是否真在代码里 — seam-gate.mjs 有 localUrl(value, label) 校验函数,非 localhost 直接报错;--project 模式自己 spawn 预览服务后拼 http://localhost:<port> 再连。文档声明与实现一致。
- [ok] seam-gate 到底验什么(本题重点) — 逐 seam 的报告行对应规则:ledger(plan 层 exit/entry 向量一致)、exit-moving / entry-moving(规则1/3:不许静止退出、不许从静止入场)、exit-direction / entry-direction(实测符号 = ledger 符号)、speed-match(law §3 速度匹配,仅 WARN)、zero-overlap(规则6:同帧只有一侧可见,切口不是叠化)、z-sign-scan(规则7:incoming 场景自身入场不得与 Z 符号打架)、carrier-*(规则3/4:carrier 矩形连续性,含祖先 scale,12px/5% 容差)。速度不匹配只是警告,不是失败——使用者需自己看警告与渲染帧对。
- [ok] 子进程环境是否被显式过滤 — previewEnv() 只取 15 个白名单系统变量 + npm_config_audit/fund,不用 process.env 整包;另单独读 CHROME_PATH 找浏览器。
- [ok] stamp 的写入边界 — seam-stamp.mjs 的 --write 目标 resolve 后必须落在当前项目目录内,且拒绝符号链接(lstatSync 判定)——降低借 ledger 写项目外文件的面。
- [ok] 文档量化门禁是否都有出处 — 色值/字体/recipe 命名在 vox-collage-layout.md 与 SKILL.md 的 LOOK GATE;运动法则与反模式表在 motion-continuity.md;转场代码与占位符在 velocity-matched-transitions-gsap.md;ledger schema 与容差在 seam-gate.md。引用链完整。
- [unlocatable] 『Grammar measured from Vox's Cooper Black film』所述测量过程与样本 — 该测量(以及 motion 的 frame-by-frame calibration)的过程与数据不在本 skill 目录内,无测量脚本或样本文件;只作为文档声明记录,本次只读侦查未运行 verifier 或渲染,故不作为已核事实使用。
6结论
e75b209b1949465d…ba7a0bb6d3