1实现原理 · 为什么它能做到
教义把两条规则缝成一条:① 字幕模型(每个口语句子只有 drop / rail / embed 三种命运,embed 是稀缺的「挣来的」峰值);② 叠层律(字幕行是合成在影片「之上」的 overlay,不是预留区,因此绝不为它上移内容或留死带)。
Two ideas combine here. First, the **caption model** — every spoken phrase is `drop`, `rail`, or `embed`, and embed is the scarce earned peak, not the default. Second, the **overlay law** — a caption line is composited ON TOP of the film as an overlay; it is NOT a reserved zone, so you never shift content up or leave a dead band to "make room" for it.
稀缺度是硬约束:rail 承载绝大多数文字,embed ≤1/句(beat),不得相邻或同框,间隔 ≥ 一个 beat;短片通常一个 embed,长解说约每节一个,「把每个词都 embed」是常见错误。
**The rail carries most of the text; embed is the scarce, earned peak** — ≤1 per beat, never two adjacent/co-visible, spaced ≥ a beat apart. A short clip → usually one embed; a long explainer → ~one per section. Embedding every word is the common mistake.
叠层律的可验收表述是「以真实垂直中心构图」:y = H/2(横屏 540、竖屏 960),内容可以一直画到画布底;0.42×H 加底部死带是 bug 不是 fix。
- **Center the composition on the TRUE vertical center — y = H / 2** (landscape 540, portrait 960). Do not shift content up to "make room" for captions; a composition centered at 0.42 × H with a dead lower band is the bug, not the fix. - Content may extend to the canvas bottom.
唯一保留的软避让:不要把小号关键可读文字(URL 行、法律条款、次级字幕)恰好停在底部 ~80px 中央带;大图形/卡片/环境内容压在字幕下是允许的。
**One soft courtesy rule:** avoid parking _critical small readable text_ (a URL line, a legal line, a sub-caption) exactly in the bottom ~80px center span where the caption line sits — the overlay would fight it. Large imagery / cards / ambient content under the captions is fine; the caption skin is designed to read over content.
机器闸门被废除:旧的 captions.mjs keepout 检查已退役,字幕压内容的可读性改由 finalize 的快照 QA 目视判定。
- There is no machine keep-out gate (the old `captions.mjs keepout` check is retired). Finalize snapshot QA judges caption-over-content legibility visually.
与上游 skill 的关系是「叠加」而非「并入」:本教义 ON TOP of embedded-captions,别期待上游把它吸收。
> **Overlay doctrine — supplements the upstream `embedded-captions` skill. Applies ON TOP of it; do not expect it folded into the upstream skill.**
加载时机(触发条件)由 description 写明:加字幕到 talking-head 或 launch 视频时、判定某短语该 drop / rail / embed 时、排布将承载字幕的构图(且「不要」预留 keep-out 带)时、以及在字幕存在下把构图对到真实画面中心时。
Load when adding captions/subtitles to a talking-head or launch video, when deciding whether a phrase should be dropped, ride the verbatim rail, or be promoted to a scarce embedded climax, when laying out a composition that will carry captions (do NOT reserve a keep-out band), or when centering a composition on the true frame center under captions.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| package | 上游 skill 依赖(被本教义叠加):embedded-captions(rail+embed 模型出处)与 product-launch-video 的场景/finalize 代理(约束 #13) |
| cli | 已退役的 captions 检查入口(仅在文中被点名为「不再存在」的检查名,本目录不含该脚本) |
4风险提醒 风险提醒:绿色 · 放心使用
- 唯一验收手段是人眼快照,弱视觉模型或快速 QA 下容易漏判 — keepout 机器闸门退役后,字幕压字(URL 行、次级字幕)只能靠 finalize 快照 QA 目视发现;本 skill 也自认没有自动保障。批量出片时这是最可能的漏网点。
- 「真中心构图」与部分既有素材/模板的版式冲突 — 若某场景的既有模板本来就为下三分之一留了带,按本教义需重构构图(0.42×H 被判为 bug);照抄旧工程会持续踩这条规则。
- 教义是软约束,无 lint 落地 — SKILL.md 只写规则,没有附带可运行的检查脚本(对比 motion-doctrine 自带 seam-gate)。不读这份文档的代理不会被任何闸门拦住。
- prompt injection 面:教义以 verbatim 方式引用上游文本,上游被改写则教义随之漂移 — 本文件搬用了 embedded-captions 的条款与 constraint #13,但没有任何版本校验;上游更新后两者可能不一致。
5第二遍独立确认
- [ok] 是否真的没有任何可执行物(green 档的关键前提) — rglob 全量列举:只有 `.claude/skills/captions-overlay/SKILL.md` 一个文件;无 scripts/、无 assets/、无 references/。全文无 shebang、无 ```bash 块。
- [ok] 是否含隐藏的网络外发(域名/端点) — `https?://` 在本文件零命中;无 curl/npx/CLI 调用语句。被点名的 `captions.mjs keepout` 是「已退役」的历史检查名,本目录并不含该文件(全量清单已证)。
- [discrepancy] meta.official_desc 是否与 frontmatter 原文一致 — 本 SKILL.md 的 description 是**未加引号的 plain scalar**,正文里含 `constraint #13 (...)`——YAML 把空格后的 `#` 当注释起点,`yaml.safe_load` 因此只解析到 `…embedded-captions and constraint`,丢掉后半段(解析长度 643 vs 原文该行 782 字符)。为避免展示层出现半句话,本 JSON 按**原文逐字**保留完整 description(含 `#13 (captions overlay, keep-out band retired) … Applies ON TOP of embedded-captions.`),该串在源文件中逐字可命中。此为上游 frontmatter 的书写瑕疵,非本 skill 的行为差异。
- [ok] 「验收靠人眼」是否被误读为「无验收」 — 原文两条并存:`There is no machine keep-out gate … Finalize snapshot QA judges caption-over-content legibility visually.` 与底部 ~80px 的软避让规则。结论:有验收,但验收方式从机器闸门改为快照目视——第一遍表述准确。
- [ok] 与上游 embedded-captions 的关系是否有事实依据 — SKILL.md 开篇 blockquote 与 description 双重声明 ON TOP 关系;引用的 rail+embed 与 constraint #13 均标注了出处(embedded-captions / product-launch-video scene agent),未见与上游冲突的改写。
6结论
4983e91a90bd624b…d2f0bc7f34