@gitruck/cli 1.3.16 → 1.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/AGENT.md +40 -10
  2. package/CHANGELOG.md +1262 -1231
  3. package/README.en.md +1 -1
  4. package/README.md +1 -1
  5. package/assets/composite-kit/kit.css +66 -57
  6. package/assets/composite-kit/stage.html +164 -18
  7. package/dist/index.js +653 -343
  8. package/docs/reference.en.md +866 -852
  9. package/docs/reference.md +909 -895
  10. package/docs/workflow.en.md +4 -3
  11. package/docs/workflow.md +4 -3
  12. package/package.json +1 -1
  13. package/skills/gtrk-ai-drama/SKILL.md +7 -7
  14. package/skills/gtrk-composite/SKILL.md +428 -222
  15. package/skills/gtrk-composite/references/fullscreen-card-migration.md +99 -0
  16. package/skills/gtrk-food-recap/SKILL.md +6 -3
  17. package/skills/gtrk-live-slicing/SKILL.md +9 -6
  18. package/skills/gtrk-long2short/SKILL.md +3 -2
  19. package/skills/gtrk-matrix/SKILL.md +9 -9
  20. package/skills/gtrk-mg/SKILL.md +62 -48
  21. package/skills/gtrk-music-visualizer/SKILL.md +1 -1
  22. package/skills/gtrk-narration/SKILL.md +15 -8
  23. package/skills/gtrk-oralcut/SKILL.md +1 -1
  24. package/skills/gtrk-splitter/SKILL.md +116 -24
  25. package/skills/gtrk-splitter/references/example-visual-split.json +34 -13
  26. package/skills/gtrk-splitter/references/example-visual-split.md +28 -5
  27. package/skills/gtrk-splitter/references/field-schema.md +88 -3
  28. package/skills/gtrk-style-maker/SKILL.md +8 -4
  29. package/skills/gtrk-style-maker/references/seeds/seed-ecom-home-goods.md +2 -2
  30. package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +1 -1
  31. package/skills/gtrk-talking-head/SKILL.md +26 -20
  32. package/skills/gtrk-tools/SKILL.md +1 -1
  33. package/skills/gtrk-transcript/SKILL.md +1 -1
  34. package/skills/gtrk-travel-recap/SKILL.md +36 -28
  35. package/skills/gtrk-vlog-docu/SKILL.md +41 -33
  36. package/skills/gtrk-voiceover/SKILL.md +19 -11
@@ -12,6 +12,9 @@
12
12
  "contract_version": "v1", // 固定 "v1"
13
13
  "transcript_hash": "<64 位 hex>", // 必填:原样透传投影视图的 transcript_hash(hash 链,错版硬拒)
14
14
  "beats": [ /* Beat[],见下 */ ], // 必填非空
15
+ "layouts": [ /* Layout[],版式窗口,可选;见下「顶层 layouts」 */ ],
16
+ "layout_note": "…", // layouts 为空数组时必填
17
+ "layout_density_note": "…", // 可选:窗口总时长超全片 25% 时的交代
15
18
  "queues": { /* 人读派单汇总,可选;机器侧不消费,dispatch.json 由 beats 现场生成 */ }
16
19
  }
17
20
  ```
@@ -55,6 +58,82 @@
55
58
  且任何具体的 N 都给不出依据。「一个都不需要」是可以要求交代的**判断**;「不超过 N%」不是。
56
59
 
57
60
  纯字卡片是**合法**形态,本条只要求它是个有意识的选择。
61
+ 版式窗口(见下)里声明了 `relation` / `data` 的,也算这条片子有关系型视觉——关系段按画面三层交给合成,不必再为 MG 槽位补这句。
62
+
63
+ ## 顶层 `layouts`(版式窗口,可选)
64
+
65
+ 版式窗口声明「这个时间窗里整幅画面交给合成(版)」:讲者挪位或缩进圆窗、多画面并置、换底、整幅盖住。
66
+ 它是**盖在若干 beat 之上的一层声明,不占车道**——beat 的 `lane` 仍写这段底下要什么画面(B-roll 检索照常),
67
+ 窗口只说这段怎么排。「beat 照派 `A_ROLL` + 在 `visual_task` 里写『交合成层』」的绕法,正式写法就是 beat 照派 `A_ROLL`、再挂一个窗口。
68
+
69
+ ```jsonc
70
+ "layouts": [
71
+ {
72
+ "id": "L01", // 必填:L + 两位起序号,全稿唯一
73
+ "span": { "from": "u0042", "to": "u0045" }, // 必填:utterance id 区间,规则同 beat
74
+ "visual_job": "relation", // 必填:四档同 MG 槽位(statement | relation | data | decor)
75
+ "visual_brief": "讲者收进右下圆窗,主画面左右两画并置「死循环」与「螺旋上升」", // 必填:一句话说这段怎么排(几画、谁在哪、何时换)
76
+ "slot_hints": ["讲者:主轨,右下圆窗", "死循环:纯排版的闭环线条"] // 可选:每个槽位打算放什么(参考,不是绑定)
77
+ },
78
+ {
79
+ "id": "L02", // 满屏卡:零槽位版式窗口(整幅纯排版,没有画面槽位)
80
+ "span": { "from": "u0039", "to": "u0041" }, // 窗口底下的 beat 派 A_ROLL
81
+ "visual_job": "data",
82
+ "visual_brief": "满屏卡:一条双重下降曲线,三个术语随口播依次标在曲线上",
83
+ "zero_slot": true, // 可选,缺省 false;true 时 MUST NOT 写 slot_hints
84
+ "theme": "overfitting|双重下降", // 可选:主题,原样交给合成作参考
85
+ "bg": "#F4F1EA" // 可选:底色 #RRGGBB / #RRGGBBAA(骨架 .bed 用它)
86
+ }
87
+ ],
88
+ "layout_note": "整条是访谈直出,没有要重排整幅画面的段" // layouts 为 [] 时必填
89
+ ```
90
+
91
+ | 字段 | 必填 | 说明 |
92
+ |---|---|---|
93
+ | `id` | 是 | `L` + 两位起序号(`L01`…),全稿唯一 |
94
+ | `span` | 是 | utterance id 区间:两端 id 在视图里存在、`from ≤ to`(id 序) |
95
+ | `visual_job` | 是 | `statement` \| `relation` \| `data` \| `decor`;版式窗口多为 `relation` / `data`,标题牌加讲者圆窗这类是 `statement` |
96
+ | `visual_brief` | 是 | 非空一句话:这段怎么排。合成的设计说明从它起笔(`gtrk composite plan --mode split` 把它作窗口理由) |
97
+ | `slot_hints` | 否 | 字符串数组:每个槽位打算放什么;原样写进合成场景的上下文文件,选片时参考 |
98
+ | `zero_slot` | 否 | 布尔,缺省 false。true = **满屏卡**(零槽位合成:标题牌、章节卡、数据卡、纯排版的并置面板)——没有画面槽位,与非空 `slot_hints` 并存即拒;不告「短于 5 秒」、不计 25% 密度;窗口底下的 beat 派 `A_ROLL` |
99
+ | `theme` | 否 | 非空字符串:满屏卡的主题(`<系统>|<内容>` 写法照收),原样交给合成作参考 |
100
+ | `bg` | 否 | 颜色 `#RRGGBB` / `#RRGGBBAA`:满屏卡的底色(合成骨架 `.bed` 用它);格式不对告警并忽略 |
101
+
102
+ 满屏卡的屏上文字由合成从口播原话(字幕输入)取,`visual_brief` 写排成什么,不另编文案。
103
+ 零槽位窗口盖住 `FILM_BROLL` / `AI_DRAMA` beat ⇒ 告警(底下画面会被整幅盖住,检索 / 出片白做;改派 `A_ROLL`)。
104
+
105
+ **满屏 MG 自动转满屏卡**(merge-fullscreen-mg-into-composite):`lane: MG` 且品类为满屏类(`fullscreen`、`title`,遗留 `mg-fullscreen` / `op-ed-title`——
106
+ 即 `CATEGORY_EXPECTED_OPAQUE` 为 true 的四个值;期望透明的 `subtitle` / `explain-subtitle` 不算)的 beat,`gtrk split` 落地时一律转成零槽位窗口:
107
+ 窗口 id `L` + beat id(B07 ⇒ `LB07`,永不与 `L01` 这类显式 id 相撞),`span` 同 beat,`visual_job` / `theme` / `bg` 取自它的 handoff(`bg` 不合法不写),
108
+ `visual_brief` 取 handoff 的 `visual_brief`、没有就取 beat 的 `visual_task`,另带 `converted_from: <beat id>`;该 beat 不进 `dispatch.mg`,在
109
+ `struct_meta.split.beats[]` 里按 `lane: A_ROLL` 落地、带 `converted: <窗口 id>`、不带 `category` / `handoff`;挂在它上面的叠层 aux 记 `covered_by_layout`。
110
+ 新旧拆分稿同一套处理,**拆分稿文件不改**;重跑幂等。落地回执逐条列出转换(人读告警与 `--json` 的 `layouts.converted: [{ beat, layout_id }]`)。
111
+ 新稿请直接写零槽位窗口。
112
+
113
+ 窗口里不留叠层:出片时整段落在合成窗口里的叠层颗粒一律不出画(合成车道在最上层),要强调的词句由合成场景自己画。
114
+ 旧稿里写过的 `keep_overlay` 已不支持——校验只告警、忽略,不拒。
115
+
116
+ 顶层配套字段:
117
+
118
+ | 字段 | 何时必填 | 说明 |
119
+ |---|---|---|
120
+ | `layout_note` | `layouts` 为空数组时 | 一句话说明为什么这条片子不开版式窗口(「不做合成」也是要交代的判断);合成在空队列时引述它 |
121
+ | `layout_density_note` | 不强制 | 窗口总时长超过全片 25% 时写一句交代(如「用户要整片做合成」);不写只告警 |
122
+
123
+ **校验(`gtrk split` 硬查;拒 = 进程非 0、零写入、逐条列出窗口 id 与原因)**:
124
+
125
+ 1. 两端 id 存在、不倒序;窗口之间不重叠 —— 拒;
126
+ 2. 窗口端点落在某个 beat 的 span 中间 —— 拒(窗口要么整盖一个 beat、要么不碰它;beat 之间的空隙可以作端点);
127
+ 3. `lane: MG` 且品类为满屏类(上一段四个值)的 beat 与窗口有交集 —— 拒(它落地会转成满屏卡,同一时刻两个版);`zero_slot: true` 与非空 `slot_hints` 并存、`zero_slot` 不是布尔、`theme` 为空串 —— 拒;
128
+ 4. 叠层(`overlay` aux 的挂载区间、`category: overlay` 的 MG beat)**整段**落在窗口内(含满屏 MG 转来的满屏卡)—— 一律不派单,记入结果 `beats.skipped[]`,原因 `covered_by_layout`;它们的 id、`visual_job`、`visual_brief` 记进该窗口的 `covered_overlays`;部分重叠 —— 告警照派;
129
+ 5. 窗口投影后时长在 5–25 秒以外 —— 告警不拒(零槽位窗口只告长于 25 秒);
130
+ 6. 带画面槽位的窗口总时长超过全片 25% 且顶层没有 `layout_density_note` —— 告警不拒(零槽位窗口不计);
131
+ 7. `layouts` 为空数组且没有 `layout_note` —— 拒;
132
+ 8. 写了 `layouts` 键而 `lane: MG` 的主 beat 没写 `category` —— 告警「按叠层理解」(叠层写 `overlay`,满屏卡写零槽位窗口)。
133
+
134
+ **没写 `layouts` 键 = 旧稿**:以上规则全部跳过;稿里也没有满屏类 MG beat 时,落地与本键之前逐字一致(`dispatch.json` 仍为三桶,精剪包装照旧 `--mode auto`)。
135
+ 有满屏类 MG beat 的旧稿照样转出满屏卡:派单多出 `composite` 队列与 `layouts_declared: false`,精剪包装先 `--mode split` 取满屏卡、再 `--mode auto` 补其余窗口。
136
+ 写了键(哪怕是 `[]`)= 拆分已经替合成定了窗口,精剪包装用 `gtrk composite plan --mode split`,不再跑 `auto` 另挑。
58
137
 
59
138
  ## handoff 按 lane 分型(校验器硬查)
60
139
 
@@ -84,8 +163,10 @@
84
163
  // ⚠️ duration_hint 语义(2026-07-24 主理人硬性规定):只是「动画主叙事时长」参考,供生产 skill 排布节奏;
85
164
  // 落轨 clip 恒占满槽位包络(track_ed − track_st),颗粒 tl 总长须 ≥ 包络、终态定格或有限循环驻留、
86
165
  // 禁全局渐隐退场(gsap-emit v1 铁律⑦)。别把 duration_hint 当颗粒寿命写短。
87
- // category(颗粒品类子类型,裁决⑩):overlay(透明叠加,叠在 A-roll/B-roll 上,不挡主体)
88
- // | fullscreen(不透明满屏,旁白主导整帧);缺省=下游按颗粒 HTML 根 background 反推透明度。
166
+ // category(颗粒品类子类型,裁决⑩):overlay(透明叠加,叠在 A-roll/B-roll 上,不挡主体)——MG 车道只派叠层,写它。
167
+ // fullscreen(不透明满屏):**已并入合成,落地自动转换**——整幅纯排版写零槽位版式窗口(满屏卡,见上「顶层 layouts」),
168
+ // 不再派 MG;旧稿里的 fullscreen / title(及遗留名)beat 落地转成满屏卡、不进 dispatch.mg。
169
+ // 缺省=下游按颗粒 HTML 根 background 反推透明度;写了 layouts 键的稿里缺省会告警「按叠层理解」。
89
170
  // 二期扩 subtitle/title。供剪辑器色带按品类分层(叠加/满屏 各一行)。
90
171
  // 读旧兼容:遗留品牌值 rrv-overlay/mg-fullscreen/explain-subtitle/op-ed-title 仍认。
91
172
 
@@ -162,7 +243,11 @@
162
243
  - **`split/dispatch.json`**:`{mg:[{beat, composition_id, duration, visual_job, visual_brief?, category?, theme, bg, slug_hint, track_st, track_ed, span}], film_broll:[{beat, queries, shots, per_shot_sec, exclude, track_st, track_ed, span}], ai_drama:[{beat, ...handoff, track_st, track_ed, span}]}`(去品牌化前 `mg` 键为 `rrv_mg`,消费方 `mg ?? rrv_mg` 双读)。
163
244
  - **`span:{from,to}`**:该条目对应的 utterance 区间——派单**自述「派什么」**,消费方据它现场重投影,时码不再是派单唯一的权威内容。**aux 派生条目写的是 aux 自己的 span**(`mount` 为子区间时 ≠ 主 beat span);注意 aux 条目的 `beat` 字段记的仍是**主 beat id**,所以按 `beat` 回查 `struct_meta.split` 会把 aux 错算成主 beat 的整段窗口——要回查一律用 `composition_id`。
164
245
  - **`track_st/track_ed` 是快照**:投影那一刻的值。老档(无 `span`)消费方会回落到 `struct_meta.split.beats[].span` 定位,照样重投影。`composition_id` = `<工程slug>-<beatId>`(MG 颗粒 `data-composition-id` 直接用它,打通 beat↔颗粒命名);`overlay` aux 派生颗粒 = `<工程slug>-<beatId>-aux<n>`(`n` 从 1)——`composition_id` 全局唯一,一 beat 可派生主 + N 个 `-aux<n>` 颗粒。
165
- - **`split/visual-split.md`**(`--md`):由机器 JSON 单向渲染的人读稿,不回读。
246
+ - **`composite:[{layout_id, span, track_st, track_ed, source_ranges, visual_job, visual_brief, slot_hints, zero_slot?, theme?, bg?, converted_from?, covered_overlays?}]`**(拆分稿写了 `layouts` 键、或满屏 MG 转出了满屏卡时出现,`[]` 也照写;顶层另带 `layout_note` 与 `layouts_declared`):版式窗口派给合成的队列。时码同为快照——`gtrk composite plan --mode split` 与 `gtrk mg` 的接管判定都按 `span` 现场重投影,与 `dispatch.mg` 同一套投影代码。`slot_hints` 缺省 `[]`;`zero_slot` 只在满屏卡时出现(`true`);`converted_from` 只在由满屏 MG 转来时出现;`covered_overlays: [{id, visual_job?, visual_brief?}]` 只在接管了叠层时出现。有转换窗口时按时间先后排。
247
+ - **`layouts_declared`**:只要写了 `composite` 就写——拆分稿有 `layouts` 键为 `true`(精剪包装只跑 `--mode split`);没有、只因满屏 MG 转换才出现窗口为 `false`(先 `--mode split` 再 `--mode auto`)。
248
+ - **`struct_meta.split.layouts`**:与 `dispatch.composite` 同形的快照(与 `composite` 同时出现);`struct_meta.split` 其余键不变。由满屏 MG 转来的 beat 在 `beats[]` 里按 `lane: A_ROLL` 落地、带 `converted: <窗口 id>`、不带 `category` / `handoff`。
249
+ - **结果 JSON `beats.skipped[]`**:被版式窗口整段接管的叠层记 `{ beat: "<beatId>" | "<beatId>-aux<n>", reason: "covered_by_layout", layout: "L01", note }`——它们不进 `dispatch.mg`、也不合成 `struct_meta.split` beat(出片时窗口里的叠层本就不出画,派了是白产)。
250
+ - **`split/visual-split.md`**(`--md`):由机器 JSON 单向渲染的人读稿,不回读。写了 `layouts` 键时多一节「版式窗口」:窗口、覆盖的 beat、怎么排、被接管而不派的叠层。
166
251
 
167
252
  ## 落地时的 dropped 处理(你要知道)
168
253
 
@@ -83,7 +83,11 @@ description: "能生产 skill 的 meta skill——通过启发式访谈引导视
83
83
  2. **契约绑定**:产物命中管线 handoff 类型的,查 `contracts/handoff-contracts.json`(本 CLI 包内);映射到契约的(如 HTML 动画颗粒 → gsap-emit v1),在 skill 中引用「契约名+版本」并把契约合规项加进其自检清单;映射为 null 或管线外产物,无此要求。
84
84
  3. **共享词表**(条件产出,见第⑤招)。
85
85
  4. **安装**:安装会把 skill 长期链接进用户机器上的 Agent 宿主,**先问用户装到哪些 Agent**(缺省只装当前在用的这一个,如 Claude Code 为 `claude-code`、Codex 为 `codex`)。拿到答复后以作坊里的 skill 目录为源,运行 `npx -y skills@1.7.4 add "<skill正本目录>" -g -y -a <agent-id>`(`-a` 可重复);用户明确说「全都装」才省掉 `-a`,交给通用适配器自动探测全部 Agent。统一正本 + symlink/junction 安装,明确要求独立副本时追加 `--copy`。适配器版本钉在 `skills@1.7.4`,MUST NOT 去掉版本号:不钉版本,每次安装都会拉上游最新代码来执行。不要在本 skill 里维护各 Agent 宿主的安装路径表(探测归适配器)。skill README 写明**「正本→安装」单向流**:源码正本在作坊,安装位是产物,改动先改正本再重装。
86
- 5. **登记**:把 `{id, ref: <正本路径>, produces: <handoff 类型或自造串>}` **追加**进本地栏目配置 `style.skills`(词表进 `style.shared`)。配置文件位置以 gtrk 的 paths 口径为准(当前 `~/.gitruck/columns/<栏目id>.json`);文件不存在则创建最小骨架 `{meta:{id},style:{skills:[…]}}`。**追加,绝不清空既有条目**。产物是管线外的(封面等),登记时加 `routing:"none"`。
86
+ 5. **登记**:把 `{id, ref: <正本路径>, produces: <handoff 类型或自造串>}` **追加**进本地栏目配置 `style.skills`(词表进 `style.shared`)。配置文件位置以 gtrk 的 paths 口径为准(当前 `~/.gitruck/columns/<栏目id>.json`);文件不存在则创建最小骨架 `{meta:{id},style:{skills:[…]}}`。**追加,绝不清空既有条目**。有框架 skill 消费的产线(封面 `produces:"cover"` 由 `/gtrk-cover` 消费、合成风格 `produces:"composite"` 由 `/gtrk-composite` 消费)**活跃条目 MUST NOT 加 `routing:"none"`**——加了会被消费方跳过;只有确无任何消费方的纯登记条目才加(口径见 `references/craft-output-spec.md` §4)。
87
+
88
+ **`produces` 各归哪层**(画面三层:底 / 版 / 叠):`MG` = **只产叠层颗粒**(一颗点出一个对象),绑 gsap-emit v1;`composite` = 合成(版:一段时间里整幅画面怎么排)的 `theme.css` 与场景写法,**满屏卡(标题牌、章节卡、数据卡等整幅纯排版)也归它**——满屏卡已并入合成(零槽位合成);`AI_DRAMA`、`FILM_BROLL` 产的是底轨画面的分镜与检索偏好;`cover` 在成片之外。同一栏目有叠层也有整幅版式时,切成 `MG` 与 `composite` 两个 skill,各自写「这个 skill 不做什么 → 找谁」。访谈里提到「每章开头一张整幅章节卡」这类,写进 composite 风格 skill,MG 风格只放叠层。
89
+
90
+ **已有栏目的 MG 风格 skill 里写着满屏卡**(`category: fullscreen` 的数据卡、章节卡系统):提示用户照随 CLI 分发的迁移说明 `skills/gtrk-composite/references/fullscreen-card-migration.md` 把它迁到 composite 风格;MUST NOT 替栏目直接改写它的 skill 正文——迁不迁、怎么迁由栏目定。
87
91
 
88
92
  **顺带问一句看点准则**:访谈里若已问出「这个栏目什么样的画面才叫有看点」(哪怕只是几条口语判据),
89
93
  把它写成一段纯文本落进同一份栏目配置的 `broll.highlight_rubric`(L2 层)。它只影响 B-roll 候选的
@@ -97,9 +101,9 @@ description: "能生产 skill 的 meta skill——通过启发式访谈引导视
97
101
 
98
102
  1. **访谈七招照用**。用户给了参考片时,第①招「作品逆向」的证据先按 `/gtrk-ref-reading` 精读拿到(精读目录落工程目录 `ref-reading/<参考片名>/`),再逐条出示、让用户认领——认领的才进 skill,命名用用户的话。
99
103
  2. **只产一个 skill**:写到宿主说明给的目录 `<自建目录>/<英文短名>/SKILL.md`,frontmatter 照宿主说明(`name` 与目录名相同、`description`、`metadata.label` 中文显示名)。
100
- 3. **家族切分收成正文分节**:需要区分 MG 字卡 / OV 叠层 / 合成画面时各写一节;共享词表并进正文的「词表」一节,不另写文件;契约绑定(第 2 步)照查、写进正文。
104
+ 3. **家族切分收成正文分节,按画面三层分「版 / 叠」两节**:**版**(合成:一段时间里整幅画面怎么排——讲者圆窗、多画并置、整幅标题牌、满屏卡;满屏卡是零槽位合成,写成合成场景,不写成 MG 颗粒)与**叠**(叠层 OV:在现有画面上点出一个对象——点题词、单个数、印章、角标),判据是「要不要改变整幅画面的构成」;用户只有其中一种就只写一节。共享词表并进正文的「词表」一节,不另写文件;契约绑定(第 2 步)照查、写进正文。
101
105
  4. **不做的事**:不写 README 与作坊正本、不运行任何安装命令、不登记栏目配置(不碰 `~/.gitruck/columns/`)、不写别的 Agent 的 skill 目录。参考片原片的帧与片段不进 skill 目录。
102
- 5. **纯生产者照旧**(铁律 6):正文里没有 gtrk 命令、不碰 SOP 编排——它被选为「视频风格」时,由宿主告诉模型按它的调性做整条片子的 MG / OV / 合成颗粒。
106
+ 5. **纯生产者照旧**(铁律 6):正文里没有 gtrk 命令、不碰 SOP 编排——它被选为「视频风格」时,由宿主告诉模型按它的调性做整条片子的版(合成颗粒、满屏卡)与叠(叠层颗粒)。
103
107
  6. 写完告诉用户:在输入区「视频风格」列表的「我的」一组里就能选到它;以后想改就在对话里说,或在知识库里编辑。
104
108
 
105
109
  自检时,下面「栏目配置登记是追加语义」一条换成「没有写栏目配置、没有运行安装命令」。
@@ -117,4 +121,4 @@ description: "能生产 skill 的 meta skill——通过启发式访谈引导视
117
121
 
118
122
  ## 下一步(回成片管线)
119
123
 
120
- 建栏目是**一次性装修厨房**,装完就该开始做菜。栏目 skill 家族 + 词表 + 栏目配置就绪后,告诉用户「风格体系已就绪,给我一条口播毛片就能开工」,顺势回到成片管线起点:用户给毛片 → 触发 `/gtrk-oralcut`(agent 跑 `gtrk oralcut`)→ `/gtrk-splitter` 拆分派单 → 各车道用你**刚建的生产 skill** 产内容 + agent 跑 `gtrk mg`/`matrix` 铺轨 → `gtrk render` 出片。往后每片都在这套厨房里做,不用重新装修。**agent 替用户跑 CLI,用户只对话。**
124
+ 建栏目是**一次性装修厨房**,装完就该开始做菜。栏目 skill 家族 + 词表 + 栏目配置就绪后,告诉用户「风格体系已就绪,给我一条口播毛片就能开工」,顺势回到成片管线起点:用户给毛片 → 触发 `/gtrk-oralcut`(agent 跑 `gtrk oralcut`)→ `/gtrk-splitter` 拆分派单(含版式窗口)→ 各车道用你**刚建的生产 skill** 产内容,agent 按位次跑 `gtrk matrix` 铺底轨 → 上字幕 → `gtrk composite` 做合成 → `gtrk mg` 铺叠层 → `gtrk render` 出片。往后每片都在这套厨房里做,不用重新装修。**agent 替用户跑 CLI,用户只对话。**
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## 家族切分
22
22
 
23
- 单产线不切家族:只有一条产线(带货片子),封面从片中截帧、不单独生产 → 1 个 skill 足够。`produces` = 自造串「带货台本」,查 handoff 映射表未命中注册集 → 无契约绑定,登记加 `routing:"none"`。
23
+ 单产线不切家族:只有一条产线(带货片子),封面从片中截帧、不单独生产 → 1 个 skill 足够。`produces` = 自造串「带货台本」,查 handoff 映射表未命中注册集 → 无契约绑定;也没有任何框架 skill 消费它,登记可加 `routing:"none"` 豁免拼写提示。
24
24
 
25
25
  ## 词表(并入 SKILL.md 一节)
26
26
 
@@ -34,4 +34,4 @@
34
34
 
35
35
  ## 这个种子教你什么
36
36
 
37
- 维度名(痛点/上手/砸价/廉价感/划走)**只属于这个栏目**。可迁移的是形态:①**负面维度可以当第一等组织维度**——说不出「我是什么」但秒答「什么绝对不行」的创作者,禁令清单就是骨架;②**次序本身可以是铁律**(先痛后卖),不只是内容主张;③判定不了的主张降级为倾向,绝不硬凑阈值;④单产线绝不硬拆家族;⑤`produces` 写自造串完全合法——框架静默登记,管线外加 `routing:"none"` 即可,不逼创作者学管线词汇。
37
+ 维度名(痛点/上手/砸价/廉价感/划走)**只属于这个栏目**。可迁移的是形态:①**负面维度可以当第一等组织维度**——说不出「我是什么」但秒答「什么绝对不行」的创作者,禁令清单就是骨架;②**次序本身可以是铁律**(先痛后卖),不只是内容主张;③判定不了的主张降级为倾向,绝不硬凑阈值;④单产线绝不硬拆家族;⑤`produces` 写自造串完全合法——框架静默登记,确无消费方的纯登记条目可加 `routing:"none"`,不逼创作者学管线词汇(有消费方的产线,如封面,活跃条目不加)。
@@ -22,7 +22,7 @@
22
22
  | 拆分派单器 | 全片 beat 派单文档 | —(管线文档生产者,不登记) | — |
23
23
  | 动态图生成 | HTML 动画颗粒 | MG | gsap-emit v1(合规项进自检) |
24
24
  | AI 情景动画分镜 | 双语分镜提示词文本 | AI_DRAMA | 暂无契约 |
25
- | 封面设计 | 文生图 prompt + 排字工作台 | cover + routing:"none" | 管线外 |
25
+ | 封面设计 | 文生图 prompt + 排字工作台 | cover(由 `/gtrk-cover` 消费,活跃条目不加 `routing:"none"`) | 成片之外 |
26
26
 
27
27
  每个 skill 开头声明「这个 skill 不做什么 → 找谁」。
28
28
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: gtrk-talking-head
3
- description: 通用口播视频创作图纸(口播链)——把一条或一组真人出镜的口播毛片,做成完整包装的可出片工程:外录音轨对齐换轨 → 多段拼接 → oralcut 粗剪 → 拆分派单 → B-roll/MG 字卡 → BGM → 字幕 → 客户端出片。当用户想「口播视频从毛片做到成片 / 口播完整包装 / 我拍了几段口播帮我做成一期 / 领夹麦音轨怎么合进去 / 口播加 B-roll 加字卡 / talking head 成片」时使用本 skill。凡涉及真人口播的完整成片编排,优先用本图纸驱动全链,别只跑一句 oralcut 了事、也别手搓 ffmpeg。
3
+ description: 通用口播视频创作图纸(口播链)——把一条或一组真人出镜的口播毛片,做成完整包装的可出片工程:外录音轨对齐换轨 → 多段拼接 → oralcut 粗剪 → 拆分派单 → B-roll → 字幕 → 合成包装 → MG 字卡 → BGM → 客户端出片。当用户想「口播视频从毛片做到成片 / 口播完整包装 / 我拍了几段口播帮我做成一期 / 领夹麦音轨怎么合进去 / 口播加 B-roll 加字卡 / talking head 成片」时使用本 skill。凡涉及真人口播的完整成片编排,优先用本图纸驱动全链,别只跑一句 oralcut 了事、也别手搓 ffmpeg。
4
4
  ---
5
5
 
6
6
  # gtrk-talking-head(通用口播 · 组合成片图纸)
7
7
 
8
- 把**真人出镜的口播毛片**(一条或一组)变成**完整包装的可出片工程**:双轨换声 → 拼段 → 粗剪 → 检查点① → 拆分 → B-roll → 字卡 → BGM → 字幕 → 精剪包装(合成)→ 客户端出片。
8
+ 把**真人出镜的口播毛片**(一条或一组)变成**完整包装的可出片工程**:双轨换声 → 拼段 → 粗剪 → 检查点① → 拆分(含版式窗口)→ B-roll → 抽帧检查 → 字幕 → 精剪包装(合成)→ 字卡 → BGM → 客户端出片。
9
9
 
10
10
  > **定位**:第四张 **structure 级组合图纸**。本图纸自身不新增命令,只编排零件(audio align / oralcut / split / matrix / mg / audio lay / subtitle lay——其中对轨零件 `gtrk audio align` 与本图纸同批交付)。零件参数细节以各自 skill(`/gtrk-oralcut`、`/gtrk-splitter`、`/gtrk-matrix`、`/gtrk-mg`)与 `--help` 为准,**本图纸引用不复制**;编排次序、检查点、双轨与多段规约以本图纸为准。**CLI 是手,你是脑。**
11
11
 
@@ -36,7 +36,7 @@ description: 通用口播视频创作图纸(口播链)——把一条或一
36
36
 
37
37
  > **推荐面(公约 §三‴)**:问答收口时可问一句「要不要看看第三方 skill?」;题材命中场景触发词才定向推荐,读取 `gtrk skills recommend --scene <id> --json`;用户拒绝后不执行推荐动作。
38
38
 
39
- > **精剪包装(公约 §三⁵)**:开工时告知一句「快速成片会在适合的段落做合成包装,最多全片四分之一,不要就说一声」——不是问题,用户说不要即零动作;`gtrk composite bake --abi` 报烘焙浏览器没装时,在这张问询表里多问一句装不装(不装用本机 Chrome / Edge)。
39
+ > **精剪包装(公约 §三⁵)**:开工时告知一句「快速成片会在适合的段落做合成包装,最多全片四分之一,这些段里的字幕会按版式重排;不要就说一声」——不是问题,用户说不要即零动作;`gtrk composite bake --abi` 报烘焙浏览器没装时,在这张问询表里多问一句装不装(不装用本机 Chrome / Edge)。
40
40
 
41
41
  ## 二、双轨收音:对轨 → 换轨(本图纸最大的新东西)
42
42
 
@@ -79,7 +79,7 @@ gtrk audio align --resume "<名>_align.gtrk"
79
79
 
80
80
  ### 链路位置
81
81
 
82
- 对轨(§二,可选)→ `oralcut` → **检查点①** → **`gtrk pip lay`** → 包装(字卡 / BGM / 字幕)→ 客户端出片。
82
+ 对轨(§二,可选)→ `oralcut` → **检查点①** → **`gtrk pip lay`** → 包装(字幕 → 精剪包装 → 字卡;BGM 不受顺序约束)→ 客户端出片。
83
83
  `pip lay` **不新增必停点**——铺完让用户在客户端看一眼即可;只有低置信兜底会停(那是数据正确性问题,两种模式都停)。
84
84
 
85
85
  ### 一条命令
@@ -97,12 +97,13 @@ gtrk pip lay --project "<口播工程目录>" --companion "<屏录.mp4>" \
97
97
  gtrk pip lay --project "<口播工程目录>" --resume "<屏录名>_pip_align.gtrk"
98
98
  ```
99
99
 
100
- ### 四条纪律
100
+ ### 五条纪律
101
101
 
102
102
  - **录制规约**(开工时就说):两条文件同步录;**屏录 MUST 带麦克风音轨**(互相关的参照,无麦只能 `--offset` 或客户端拖齐);开录后拍一下手。
103
103
  - **主轨不动**:人像仍是主轨(`split` / `subtitle lay` 对 transcript 的锚不变),屏录与画中画都是叠加轨;画中画副本恒静音,人声由主轨承担。
104
104
  - **屏录比人像短 / 晚开录**:对应段留空、回执点名毫秒数,MUST NOT 拉伸或变速补齐;成片该段只见人像主轨——这是如实,不是缺陷。
105
105
  - **幂等**:改了参数直接重跑,自产轨剥旧重铺;用户在客户端动过的画中画 clip 会被保留并点名,不会被覆盖。
106
+ - **画中画 × 合成:讲者只出现一次**。客户端在合成窗口里只藏字幕与 MG 颗粒,**不藏画中画轨**(2026-11-09 核实客户端接管实现);合成画在最上层,出片烘焙成不透明视频会盖住下面各轨,预览里却只有场景画了底的地方盖得住。所以铺过 `pip lay` 的工程,精剪包装的场景 MUST 铺满幅底,讲者 / 屏录要出现就用槽位绑人像主轨 / 屏录轨,MUST NOT 让人像画中画圆窗从底下透出来、和讲者槽同屏(细则见 `/gtrk-composite` 编排规则 2)。
106
107
 
107
108
  ### 出片口径
108
109
 
@@ -137,7 +138,7 @@ gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset c
137
138
  1. **粗剪回执走查**:时长压缩比是否合理(口播毛片通常剪去 20–50%)、report 剪除项抽查 2–3 处是否真是废话。**剪错了真内容** → 换 `--preset steady` 或开 `--visual-assist` 重跑,MUST NOT 带着错误粗剪往下铺。
138
139
  2. **BGM 拍板(双来源,推荐必附试听链接)**:用户自带音乐 → 问是否 `audio_separation` 分离取伴奏;没带 → 素材矩阵按内容基调搜 3–5 首附试听直链。
139
140
  3. **字幕样式拍板**:给样式候选,用户没选用 default。
140
- 4. **前六秒方案拍板**(公约 §三⁗ 执行文本,引用不复制):粗剪回执到手后、检查点①之前由你产——基于粗剪转写**首段**改写**钩子文案三候选**(五型任选,每条一行,只改开口方式、MUST NOT 改动用户的事实与数据)+ **画面层建议**(A_ROLL / MG 字卡 / 拼贴或 AI 片段三选一)+ **字卡节奏**(屏字与出现时机按公约口径)。与前三项同屏一次拍板;用户答「开场照原样」= 零动作、后续不再提。先给自持方案,再一句轻提「要更多变体也可以看第三方钩子 skill」(推荐面 §三‴ 的 `hook` 场景,不列名)。拍了 MG 字卡 ⇒ §五 拆分稿里开场 beat 的 MG `handoff.theme` 写 `"opening-hook|屏字:<拍板文案>"`;拍了 A_ROLL ⇒ 开场不派辅助层。
141
+ 4. **前六秒方案拍板**(公约 §三⁗ 执行文本,引用不复制):粗剪回执到手后、检查点①之前由你产——基于粗剪转写**首段**改写**钩子文案三候选**(五型任选,每条一行,只改开口方式、MUST NOT 改动用户的事实与数据)+ **画面层建议**(A_ROLL / MG 字卡 / 拼贴三选一;口播链不派 AI 车道)+ **字卡节奏**(屏字与出现时机按公约口径)。与前三项同屏一次拍板;用户答「开场照原样」= 零动作、后续不再提。先给自持方案,再一句轻提「要更多变体也可以看第三方钩子 skill」(推荐面 §三‴ 的 `hook` 场景,不列名)。拍了 MG 字卡 ⇒ §五 拆分稿里开场 beat 的 MG `handoff.theme` 写 `"opening-hook|屏字:<拍板文案>"`;拍了拼贴 ⇒ §五 拆分稿开一个盖住开场 beat 的**版式窗口**(开场 beat 照派 `A_ROLL`,`visual_brief` 写怎么拼),由 §五′ 精剪包装来做;拍了 A_ROLL ⇒ 开场不派辅助层。
141
142
 
142
143
  以上四项一次确认完 = 检查点①收口。
143
144
 
@@ -147,29 +148,34 @@ gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset c
147
148
 
148
149
  - **A_ROLL 主导**:真人出镜是叙事主体——大部分 beat 就该是 A_ROLL,别为了「丰富」硬切走人。
149
150
  - **FILM_BROLL 辅助**:只在**需要视觉支撑**处切出(提到具体事物/场景/数据来源时),切出必回。
150
- - **MG 字卡强调**:金句、要点列举、数字——叠加强调,不抢主体。
151
+ - **MG 字卡强调**:金句、点题词、单个数字——叠层一颗一件事,不抢主体。
152
+ - **版式窗口**(合成):要点列举、对照、步骤、讲者缩进圆窗配图版——这些会改变整幅画面构成,归版,不做成字卡(公约 §二⁗「画面三层」判层一问)。beat 照派 `A_ROLL` / `FILM_BROLL`,在拆分稿顶层 `layouts[]` 挂窗口。整幅纯排版的标题牌、章节卡写成零槽位版式窗口(满屏卡,`zero_slot: true`,beat 派 `A_ROLL`),随精剪包装一起做。
151
153
 
152
- 流程与制片顺序(遵既有定序,细节归各车道 skill)。**B-roll 步按开工⑤的确认结果走**:
154
+ **主链**(位次照公约 §二⁗「画面三层」,正本 `production-order`,本图纸不另述):拆分(含版式窗口)→ B-roll 底轨 → 全局抽帧检查 → 字幕 → 合成(精剪包装,§五′)→ `gtrk mg`(字卡等叠层)→ 客户端出片;BGM 不受顺序约束。
155
+
156
+ 细节归各车道 skill。**B-roll 步按开工⑤的确认结果走**:
153
157
  用户给了本地素材夹 → `gtrk matrix --local --dirs`;同意云端 → `gtrk matrix`;都不要 →
154
- **跳过 matrix,拆分稿不派 FILM_BROLL**(对应 beat 改 A_ROLL + MG 强调)——别给用户硬塞素材。
158
+ **跳过 matrix,拆分稿不派 FILM_BROLL**(对应 beat 改 A_ROLL + 字卡或版式窗口)——别给用户硬塞素材。
155
159
 
156
160
  ```
157
- gtrk split(投影 → 你写拆分稿 → 落地)→ gtrk matrix(按⑤走或跳过)
158
- → 全局抽帧检查构图 → gtrk mg(字卡,§六风格)→ gtrk audio lay(BGM,-20dB 口径)
159
- → gtrk subtitle lay(检查点①拍板样式)→ 精剪包装(§五′)→ 客户端打开出片
161
+ gtrk split(投影 → 你写拆分稿,含版式窗口 → 落地)→ gtrk matrix(按⑤走或跳过)
162
+ → 全局抽帧检查构图 → gtrk subtitle lay(检查点①拍板样式)→ 精剪包装(§五′)
163
+ → gtrk mg(字卡,§六风格)→ gtrk audio lay(BGM,-20dB 口径)→ 客户端打开出片
160
164
  ```
161
165
 
162
- 拆分稿写完自查两条:
166
+ 拆分稿写完自查四条:
163
167
  - **lane 里出现 AI_DRAMA 即改派**(机检 grep 即可);
164
- - **字卡要产颗粒的,aux 必须用 `type:"overlay"` + handoff(含 duration_hint)**——`quote-card` 等
165
- 前七类 aux 只是语义标注、**不产派单**;需要颗粒的字卡必须用 `type:"overlay"` + handoff。
168
+ - **字卡要产颗粒的,aux 必须用 `type:"overlay"` + handoff(含 `visual_job` 与 `duration_hint`)**——`quote-card` 等
169
+ 前七类 aux 只是语义标注、**不产派单**;需要颗粒的字卡必须用 `type:"overlay"` + handoff。字卡是叠层,`visual_job` 取 `statement` / 单个数的 `data`;
170
+ - **写了 `layouts` 键**:有窗口列窗口;判定不做或开工说了不要合成包装,写 `layouts: []` + `layout_note`;
171
+ - **整幅字卡写成满屏卡(零槽位版式窗口),不派满屏 MG**;窗口之间不重叠、端点在 beat 边界(`gtrk split` 会拒)。
166
172
 
167
- ### 五′、精剪包装(字幕之后、出片之前)
173
+ ### 五′、精剪包装(字幕之后、字卡之前)
168
174
 
169
- 字幕上完、出片之前,把适合的时间窗做成**合成**(一段时间内的整个画面由一颗代码颗粒接管:逐句换画面、对照并排、并列卡片、字幕排版,讲者与 B-roll 作为槽位画进去)。既有步骤的顺序不变,这一步加在最后:
175
+ 字幕上完、`gtrk mg` 铺字卡之前,把拆分稿里的版式窗口做成**合成**(一段时间内的整个画面由一颗代码颗粒接管:逐句换画面、对照并排、并列卡片、字幕排版,讲者与 B-roll 作为槽位画进去)。版在叠前:窗口里的字卡被合成接管,`gtrk mg` 不再为它们开工。
170
176
 
171
- - 交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:快速成片 auto ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。
172
- - 用户中途说「整片做一下合成」「11 秒到 32 秒做一个」时,入口按 `/gtrk-composite` 的三选一走,不受快速成片口径限制。
177
+ - 交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:快速成片取拆分稿的版式窗口 `--mode split`(拆分稿没有 `layouts` 键才 `auto` ≤ 25%)→ 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。
178
+ - 用户中途说「整片做一下合成」「11 秒到 32 秒做一个」时,入口按 `/gtrk-composite` 的四选一走,不受快速成片口径限制。
173
179
  - ⚠️ 合成颗粒出片靠本机烘焙(`/gtrk-composite` 的「出片:烘焙」一节);某颗烘焙失败时导出该段按粗剪出画——回执里点名。
174
180
 
175
181
  ## 六、MG 风格:内容驱动的临场泛化(成片型图纸通用条款)
@@ -196,7 +202,7 @@ gtrk split(投影 → 你写拆分稿 → 落地)→ gtrk matrix(按⑤走
196
202
  | 模式 | 停点 |
197
203
  |---|---|
198
204
  | **快速成片** | 开工五问 → 检查点①(§四,必停一次)→ 一杆到底(含 SOP 既有的「B-roll 铺完抽帧检查」与精剪包装,归入快速语义不再单独打扰用户;合成静帧随交付一次给) |
199
- | **逐步推进模式** | 每步停:对齐/拼段确认 → 粗剪回执 → 拆分稿 → B-roll 候选 → 字卡 → BGM/字幕逐项确认 → 精剪包装(合成 skill 两个检查点) |
205
+ | **逐步推进模式** | 每步停:对齐/拼段确认 → 粗剪回执 → 拆分稿(含版式窗口)→ B-roll 候选 → 抽帧检查 → 字幕 → 精剪包装(合成 skill 两个检查点)→ 字卡 → BGM 逐项确认 |
200
206
 
201
207
  快速成片停两处:开工问询(§一,答完才开剪)与检查点①(§四)。表里「必停一次」说的是检查点①;开工问询那一次另算,用户原话已答全时才省掉。
202
208
 
@@ -133,7 +133,7 @@ metadata:
133
133
  1. **先看清单、再对号**:用户的意图对到某个工具名(拿不准就 `gtrk tool list --json` 核对触发语与输入要求)。
134
134
  2. **执行前转述实时计费提示**:先读本次 `gtrk tool list --json` 的 `billingHint`/`pricing`,再把实时结果如实告诉用户;不得引用本文件或记忆中的旧价格。若显示价格暂不可用,就说明最终以服务端结算为准。
135
135
  3. **一律带 `--json`**:`gtrk tool <name> <输入> --json`。stdout 只会有一行结果 JSON(`{ ok, outDir, files, taskId, fileId, … }`),人读日志在 stderr。按 `ok` 判成败、从 `files` 拿产物路径、把 `outDir` 回给用户。
136
- 4. **缺 API Key 先引导配置**:cloud 型工具没配 Key 会报错让先跑 `gtrk init`。遇到就引导用户 `gtrk init`(或设 `GITRUCK_API_KEY`),别反复重试。
136
+ 4. **缺 API Key 先引导配置**:cloud 型工具没配 Key 会报错让先跑 `gtrk init`。遇到就引导用户 `gtrk init`(或设 `GITRUCK_API_KEY`),别反复重试(用户还没有 Key 就转告:打开 https://cloud.ai-mcn.tv/zh-CN ,点「注册 / 登录」,进入「仪表盘」复制 API Key;报错里也写着这句)。
137
137
  5. **瞬时网络错误退避后只重试 1 次**:若 `gtrk tool list --json` 或工具命令因 `fetch failed`、`ECONNRESET`、`ETIMEDOUT`、`ENOTFOUND`、`socket hang up`、网络不可达或 HTTP `502/503/504` 失败,先等 **2 秒**,再原样执行同一命令 **1 次且仅 1 次**(总尝试次数最多 2 次)。第二次仍失败就停止,如实说明网络波动并给出最后错误,绝不循环重试。参数/文件校验错误、缺 Key、HTTP 4xx、云端业务错误码、明确的任务失败/取消均**不重试**。重试前先检查日志及输出目录:一旦已出现 `taskId` 或 `task.json`,说明任务可能已经提交,禁止重跑整条以免重复计费,转入下一条恢复语义。
138
138
  6. **产物落地与恢复**:产物落在 `outDir`(缺省 = 输入同目录下 `<输入名>-<工具名>/`,可 `--out <dir>` 覆盖)。**无输入文件的工具**(`input=none`,如纯文本转语音)缺省落**当前目录**下 `<工具名>-<时间戳>/`。该名撞上已有目录时自动带 `-2`/`-3` 序号后缀;同一目录内产物文件撞名时带 taskId 后 6 位后缀。**一律以回执的 `outDir` / `files` 为准,别按名字硬拼**——猜出来的路径会指向上一次那份产物。提交成功即写 `task.json`(含 `taskId`)、完成即写 `result.json`。**分析型工具**(`video_segment` / `video_ai_segment` / `video_motion_cut`)产的是**结构化数据不是下载文件**:结果落 `result-output.json`(分镜/运镜结构),`result.json` 的 `resultFile` 字段指向它、`files` 为空且 `ok=true` 属正常,别当成「没出产物」。**若 `ok=false`**(任务完成但产物下载失败,如链接过期;或既无文件也无结构):`result.json` 的 `errors` 有明细、`task.json` 保留——凭其中的 `taskId` 可稍后人工恢复取回,别急着重跑整条(重跑会重新计费)。
139
139
  7. **透传高级参数**:命令没为某个云端参数开 flag 时,用 `--param k=v`(可重复)或 `--params-json '<对象>'` 直接透传(如 `image_move` 想指定输出几何 `--param width=1080 --param height=1920`)。
@@ -84,7 +84,7 @@ metadata:
84
84
 
85
85
  ## 失败处理
86
86
 
87
- - 缺 API Key:引导运行 `gtrk init`,不要无效重试。
87
+ - 缺 API Key:引导运行 `gtrk init`,不要无效重试(用户还没有 Key 就转告:打开 https://cloud.ai-mcn.tv/zh-CN ,点「注册 / 登录」,进入「仪表盘」复制 API Key;报错里也写着这句)。
88
88
  - 输入是 URL 或远端资源:停止执行,要求用户提供本地视频文件。
89
89
  - ASR 没有可用文字:如实报告失败,不生成虚假总结或空白成品。
90
90
  - 云任务失败:报告 CLI 返回的错误与 `taskId`(若有),不要把失败包装成完成。
@@ -45,7 +45,7 @@ description: 旅拍解说一站式成片图纸——输入一个旅拍素材文
45
45
 
46
46
  > **推荐面(公约 §三‴)**:问答收口时可问一句「要不要看看第三方 skill?」;题材命中场景触发词才定向推荐,读取 `gtrk skills recommend --scene <id> --json`;用户拒绝后不执行推荐动作。
47
47
 
48
- > **精剪包装(公约 §三⁵)**:开工时告知一句「快速成片会在适合的段落做合成包装,最多全片四分之一,不要就说一声」——不是问题,用户说不要即零动作;`gtrk composite bake --abi` 报烘焙浏览器没装时,在这张问询表里多问一句装不装(不装用本机 Chrome / Edge)。
48
+ > **精剪包装(公约 §三⁵)**:开工时告知一句「快速成片会在适合的段落做合成包装,最多全片四分之一,这些段里的字幕会按版式重排;不要就说一声」——不是问题,用户说不要即零动作;`gtrk composite bake --abi` 报烘焙浏览器没装时,在这张问询表里多问一句装不装(不装用本机 Chrome / Edge)。
49
49
 
50
50
  ## 一′、素材适配闸(写稿前必过)
51
51
 
@@ -77,6 +77,8 @@ description: 旅拍解说一站式成片图纸——输入一个旅拍素材文
77
77
 
78
78
  ## 二、全链总览(快速成片)
79
79
 
80
+ **主链**(位次照公约 §二⁗「画面三层」,正本 `production-order`,本图纸不另述):拆分(含版式窗口)→ B-roll 底轨 → 全局抽帧检查 → 字幕 → 合成(精剪包装)→ `gtrk mg`(地名条等叠层)→ 交付;BGM 不受顺序约束。
81
+
80
82
  ```
81
83
  ① 理解 transcript 原片(二创)/ matrix index + describe(原创)
82
84
  ①′ 适配闸【必过】读 ① 的既有产物判题材(见 §一′)——不是旅拍就硬停,MUST NOT 进入写稿
@@ -84,14 +86,15 @@ description: 旅拍解说一站式成片图纸——输入一个旅拍素材文
84
86
  ③ 检查点① 【必停】稿件确认 · 画幅 · 音色 · BGM(gtrk matrix material --scope audio)· 字幕样式 · B-roll 编排量预估(§四)
85
87
  ④ 配音 gtrk tool audio_tts_clone(≤5000 字,句级时码直出)
86
88
  ⑤ 建工程 gtrk project init --tts-task <id> --canvas <WxH>
87
- ⑥ 拆分派单 gtrk split 投影 → 你写拆分稿(含字卡 overlay aux)→ split 落地
89
+ ⑥ 拆分派单 gtrk split 投影 → 你写拆分稿(含字卡 overlay aux 与版式窗口 layouts)→ split 落地
88
90
  ⑦ B-roll matrix --local --dirs(二创钉单片)→ describe --plan → lay --mark-weight 0.3 --yes
89
- ⑧ 抽帧检查 对字卡挂点抽帧看底轨构图(gtrk-mg SOP)
90
- ⑨ MG 字卡 按 §六 轻量规约产颗粒 → mg lint → gtrk mg --project
91
- ⑩ BGM gtrk audio lay --volume 0.1 --beat-align(-20dB 口径)
92
- ⑪ 字幕 gtrk subtitle lay --style <检查点①拍板样式>(用户没选用 default)
93
- ⑪′ 精剪包装 交棒 /gtrk-composite(公约 §三⁵:auto ≤ 25% → 复核 → 构建机检 → 铺轨烘焙,不停)
94
- ⑫ 交付 客户端打开工程出片(gtrk render 仅主轨快照预览,见 §八)
91
+ ⑧ 全局抽帧检查 对铺好的底轨终态抽帧看主体、明暗与原片字幕区(位次 ④;快速成片不另停,结论交给合成与字卡)
92
+ ⑨ 字幕 gtrk subtitle lay --style <检查点①拍板样式>(用户没选用 default)
93
+ ⑩ 精剪包装 交棒 /gtrk-composite(公约 §三⁵:取拆分稿的版式窗口 --mode split → 复核 → 构建机检 → 铺轨烘焙,不停)
94
+ ⑪ 产前逐挂点抽帧 对每颗没被合成接管的字卡挂点抽帧定落位(gtrk-mg SOP)
95
+ ⑫ MG 字卡 按 §六 规约产颗粒(gtrk mg status 看 todo)→ mg lint → gtrk mg --project
96
+ ⑬ BGM gtrk audio lay --volume 0.1 --beat-align(-20dB 口径;不受顺序约束)
97
+ ⑭ 交付 客户端打开工程出片(gtrk render 也能出带颗粒与合成的成片,字幕不进,见 §八)
95
98
  ```
96
99
 
97
100
  检查点①之后一路跑完不再打扰用户——**垂类示例的承诺面就是快速成片一杆到底**。
@@ -199,7 +202,7 @@ gtrk matrix describe --plan <工程>/split/broll-plan.json --highlight-rubric @<
199
202
  推荐 3-5 首、**每首附试听链接**(结果的 `download_url`);`audio_type:"pure"` 纯音乐直接用,`"song"` 直接取 `accompaniment_url` 现成伴奏(零处理成本,两档都有);注意曲长 vs 成片时长(`duration` 字段):`audio lay` **缺省循环叠满至工程末尾、尾段裁齐**(多 clip 首尾相接,命令会打 INFO 报段数),短曲只是**接缝多一些**、不会铺一半就静音(想少几道接缝,挑曲时加 `--min-duration <秒>`);要单次铺请显式传 `--no-loop`;
200
203
  - **试听链接义务(MUST)**:音色与 BGM 的推荐没有试听链接=未完成推荐。
201
204
  - **BGM 落地一步(MUST)**:检索出参只给签名 URL,而 `gtrk audio lay --file` 只收本地路径。拍板后先把选中曲落成本地文件:`audio_type:"song"` 取 `accompaniment_url` 伴奏版,`"pure"` 取 `download_url`。文件名按 `bgm-<曲名>[-伴奏].<扩展名>`,供跨片避让记账使用。
202
- 5. **字幕样式**:7 种样式(default/outline/cinema_yellow/immersive_box/wide_spacing/deep_shadow/boxed)× 11 色(雅黑/淡绿/森林绿/湖蓝/道奇蓝/钢蓝/浅粉红/深橙/珊瑚橙/橙红/土豪金)挑选;**用户没选就用 default+雅黑**(不追问不阻塞)。拍板值在 ⑪ `gtrk subtitle lay` 落地,客户端里仍可整轨换样式(悔棋通道)。
205
+ 5. **字幕样式**:7 种样式(default/outline/cinema_yellow/immersive_box/wide_spacing/deep_shadow/boxed)× 11 色(雅黑/淡绿/森林绿/湖蓝/道奇蓝/钢蓝/浅粉红/深橙/珊瑚橙/橙红/土豪金)挑选;**用户没选就用 default+雅黑**(不追问不阻塞)。拍板值在 ⑨ `gtrk subtitle lay` 落地,客户端里仍可整轨换样式(悔棋通道);合成窗口里的字幕由场景按版式重排。
203
206
  6. **B-roll 编排量预估(本地素材路必报)**:本地素材产的 plan 走 `matrix lay` 时缺省即云端编排并按编排量计费(`--arrange local` 不受理)。先拿数再拍板:
204
207
 
205
208
  ```bash
@@ -258,7 +261,8 @@ gtrk project init --tts-task <TTS任务id> --canvas 1920x1080 --no-open --json
258
261
  gtrk split --project "<工程目录>" --json # 投影:拿 utterance id/时码/hash
259
262
  # 你写 split/visual-split.json:beat 全覆盖(配音工程无 A-roll 画面,留隙=黑屏!)、
260
263
  # lane 全 FILM_BROLL、base_track="旁白主导"、narrative 用八枚举、
261
- # 字卡挂 aux_layers type:"overlay"(handoff.category:"overlay"+duration_hint,进 dispatch.mg)、
264
+ # 字卡挂 aux_layers type:"overlay"(handoff.category:"overlay"+visual_job:"statement"+duration_hint,进 dispatch.mg)、
265
+ # 多画面对照 / 行程图配实拍这类要重排整幅的段挂顶层 layouts[] 版式窗口(判定不做写 layouts: [] + layout_note)、
262
266
  # 看点关键词圈 handoff.anchors([{keyword,utterance,query}] ≤2 个/beat——地名/奇观/数字头衔类实词,
263
267
  # 铺轨把锚 query **原始 sim 最高的合格命中**(原始检索相似度,不是 mark/highlight 融合分)
264
268
  # 钉在关键词说出时刻:听到「野牛高速」的瞬间看到野牛;锚预留优先于普通序贯槽消费,
@@ -286,11 +290,19 @@ gtrk matrix lay --project "<工程目录>" --mark-weight 0.3 --highlight-weight
286
290
  # 不带 --yes 且无 TTY 时本步**整轮铺轨中止**、工程零改动(plan 照常可用、可重跑)——
287
291
  # 未报预估或未取得同意时不要继续执行
288
292
 
289
- # ⑧⑨ 字卡(§六 规约产颗粒 → lint → 铺)
293
+ # ⑧ 全局抽帧检查(位次 ④):底轨铺完,对底轨终态抽帧看主体位置、明暗与原片烧录字幕区
294
+ # (gtrk client frame --at <轨秒> --project "<工程目录>",图落系统 temp 用完即删);快速成片不另停
295
+
296
+ # ⑨ 字幕(样式/颜色 = 检查点①拍板值;用户没选用 default/雅黑;零计费——拆行走云端 subtitle_line_split 0 积分留痕,离线可加 --offline 用本地拆窗、重跑幂等替换)
297
+ gtrk subtitle lay --project "<工程目录>" --style default --color 雅黑 --json
298
+
299
+ # ⑩ 精剪包装:见下方引注
300
+
301
+ # ⑪⑫ 产前逐挂点抽帧 → 字卡(§六 规约产颗粒 → lint → 铺;先 gtrk mg status 看 todo,被合成接管的不产)
290
302
  gtrk mg lint "<工程目录>/mg/<composition_id>.html" --dispatch "<工程目录>/split/dispatch.json"
291
303
  gtrk mg --project "<工程目录>" --json
292
304
 
293
- # ⑩ BGM(音量口径见下;<bgm> 是**本地文件**,检查点①拍板后先落地——URL 传给 --file 必炸)
305
+ # ⑬ BGM(不受顺序约束;音量口径见下;<bgm> 是**本地文件**,检查点①拍板后先落地——URL 传给 --file 必炸)
294
306
  # BGM 是带人声歌曲(audio_type:"song")→ MUST 下载 accompaniment_url 伴奏版上轨,
295
307
  # 不得用 download_url 原曲(人声与配音会打架);"pure" 取 download_url。
296
308
  # 文件名 bgm-<曲名>[-伴奏].<扩展名>:跨片避让按**标题归一化键**记账(剥 bgm- 前缀与伴奏/instrumental/off-vocal 后缀),乱命名=下一轮 --exclude-recent 失准
@@ -298,14 +310,9 @@ gtrk mg --project "<工程目录>" --json
298
310
  # 拆分稿没带这两个字段 ⇒ 落 0.75×全片兜底档,**CLI 会明示那是猜的**。不接受就用 --climax <轨秒> 指定。
299
311
  # 两侧都够长时零平铺(恰好 1 个 clip);不够长才按小节线平铺补齐、接缝吸附 downbeat。
300
312
  gtrk audio lay --project "<工程目录>" --file "<bgm>" --volume 0.1 --beat-align --json
301
-
302
- # ⑪ 字幕(样式/颜色 = 检查点①拍板值;用户没选用 default/雅黑;零计费——拆行走云端 subtitle_line_split 0 积分留痕,离线可加 --offline 用本地拆窗、重跑幂等替换)
303
- gtrk subtitle lay --project "<工程目录>" --style default --color 雅黑 --json
304
-
305
- # ⑪′ 精剪包装:见下方引注
306
313
  ```
307
314
 
308
- > **⑪′ 精剪包装**:交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:快速成片 auto ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。旅拍主画面多是素材本身,按「没有讲者」口径只用 B-roll 与排版。
315
+ > **⑩ 精剪包装**:交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:快速成片取拆分稿的版式窗口 `--mode split`(拆分稿没有 `layouts` 键才 `auto` ≤ 25%)→ 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。旅拍主画面多是素材本身,按「没有讲者」口径只用 B-roll 与排版;几处景点对照、行程图配实拍这类多画面段在拆分时就开版式窗口。
309
316
 
310
317
  > **停顿太长时**:自训音色加 `--fragment-interval 0.2`(合成时就对);云引擎音色**不支持**该参数(传了会报错,不会静默忽略),改在合成后跑 `gtrk audio tighten --project <工程>` 收紧句间停顿(纯本地零计费;只压跨句界的停顿,句内换气与原声引用段不动)。
311
318
 
@@ -326,21 +333,22 @@ gtrk subtitle lay --project "<工程目录>" --style default --color 雅黑 --js
326
333
 
327
334
  ## 六、MG 轻量字卡规约(旅拍向最小集,不建栏目 skill)
328
335
 
329
- > 本节采用「因势象形、不建栏目 skill」原则:风格锚定本片内容,不强行套用预设模板。原则正本见《成片型图纸公约》§三。
336
+ > 本节采用「因势象形、不建栏目 skill」原则:风格锚定本片内容,不强行套用预设模板。原则正本见《成片型图纸公约》§三;地名条归叠,见公约 §二⁗「画面三层」。
330
337
 
331
338
  快速成片**禁留白**——字卡按下述规约直接产好叠上,用户不满意在客户端删,别等确认。
332
339
 
333
- - **内容**:地名字卡为主(地标名中文+英文/头衔副标),可加里程/价格数字卡;每片 2-4 颗、挂在地标出场句(拆分稿 aux_layers overlay);
334
- - **形态**:左下安全区地名条——竖色条装饰+半透明深色衬底圆角条+主标题(60px 级粗体白字)+副标题(28px 级 75% 白);透明叠加不挡画面主体;
335
- - **动效**:入场滑入淡入约 1.5-2s → **定格驻留到坑位末尾**(gsap-emit v1 铁律⑦:时间线总长≥坑位+0.3s,禁全局渐隐);
336
- - **工艺**:严格按 `contracts/gsap-emit-v1.md` 颗粒骨架(`<template>` 包裹/1920×1080/`gsap.timeline({paused:true})`/`__timelines` 注册/无随机无时钟/lib.baomitu.com GSAP CDN);字体用渲染字体注册表在册族(如 `Alibaba PuHuiTi`);实心衬底写子层不写根(铁律 4);
337
- - **产前抽帧**(overlay 必做):对挂点用本地 ffmpeg 抽 1 帧看底轨明暗与主体位置(临时文件落系统 temp 用完即删);
340
+ - **内容**:地名字卡为主(地标名中文+英文/头衔副标),可加里程/价格数字卡;每片 2-4 颗、挂在地标出场句(拆分稿 aux_layers overlay,`visual_job: statement`,单个里程 / 价格数可填 `data`);一颗点出一个地名或一个数——几处景点并排对照、行程路线图这类多元素段归版,开版式窗口交合成,不做成字卡;
341
+ - **产法**:照 `/gtrk-mg` 的「按 `visual_job` 路由」——地名条是 `statement`,文字模板在候选集里,中性块或手写颗粒也行,图纸不另立规矩;**不论走哪条,同片字卡同一套风格**(公约 §三);
342
+ - **风格锚点**(模板改色改字、手写照做都对齐它):左下安全区地名条——竖色条装饰+半透明深色衬底圆角条+主标题(60px 级粗体白字)+副标题(28px 级 75% 白);透明叠加不挡画面主体;
343
+ - **动效**:入场滑入淡入约 1.5-2s → **定格驻留到坑位末尾**(gsap-emit v1 铁律⑦:时间线总长≥坑位+0.3s,禁全局渐隐);文字模板取块时坑位时长由命令钉定;
344
+ - **手写颗粒时的工艺**:严格按 `contracts/gsap-emit-v1.md` 颗粒骨架(`<template>` 包裹/画幅 = 工程画布/`gsap.timeline({paused:true})`/`__timelines` 注册/无随机无时钟/lib.baomitu.com GSAP CDN);字体用渲染字体注册表在册族(如 `Alibaba PuHuiTi`);实心衬底写子层不写根(铁律 4);
345
+ - **产前逐挂点抽帧**(overlay 必做,全链 ⑪):对挂点抽 1 帧看底轨明暗与主体位置(临时文件落系统 temp 用完即删);
338
346
  - 产物存 `<工程目录>/mg/<composition_id>.html`,逐颗 lint 过了再铺。
339
347
 
340
348
  **字卡自检清单**(形制同 §三「写后自校验清单」):
341
349
 
342
350
  - [ ] 拆分稿写完,**数一遍** `aux_layers` 里 `type:"overlay"` 的条数,是否落在**每片 2-4 颗**;
343
- - [ ] 落地后核对 `gtrk split --json` 的 `queues.mg` 条数,与上一条对得上、且仍在 2-4;
351
+ - [ ] 落地后核对 `gtrk split --json` 的 `queues.mg` 条数,与上一条对得上、且仍在 2-4(落在版式窗口里的字卡被合成接管、不进派单,记在 `beats.skipped[]` 的 `covered_by_layout`——窗口里的颗粒出片一律不出画,地名条别挂进窗口;那一段要报地名,写进窗口的 `visual_brief` 交合成画);
344
352
  - [ ] 不足按地标出场句补挂;超出按「稀缺才有力」裁掉。
345
353
 
346
354
  > 这是图纸层的审美自检,不是 CLI 通用硬闸:`split` 与 `mg` 负责报告实际条数,是否在 2–4 颗由本垂类图纸裁定。
@@ -367,8 +375,8 @@ gtrk subtitle lay --project "<工程目录>" --style default --color 雅黑 --js
367
375
 
368
376
  ## 八、交付与出片
369
377
 
370
- - **成片出口 = 客户端**(OpenCut Gitruck Edition「打开工程」选 `gtrk/project.gtrk`):多轨合成(B-roll+字卡+黑底+双音轨混音)只有客户端出片链完整支持;
371
- - **`gtrk render` 仅是主轨快照预览**(★ 打样误用教训):只渲一条视频轨、不合成字卡 overlay——可以当粗查混音与 B-roll 落位的预览片,**MUST NOT 当成片交付**;
378
+ - **成片出口 = 客户端**(OpenCut Gitruck Edition「打开工程」选 `gtrk/project.gtrk`):B-roll + 字卡 + 合成 + 字幕 + 双音轨混音,客户端出片链全都带;
379
+ - **`gtrk render` 不带字幕轨**:它会合成 B-roll 叠加轨、字卡颗粒(未命中缓存的颗粒云渲**计费**,先报预估等确认;`--no-particles` 零计费出无颗粒版)与合成段(本机烘焙),但客户端字幕轨不进成片——要带字幕交付走客户端导出,`gtrk render` 出的片当粗查预览;
372
380
  - **云渲必拒**:含本地 B-roll 的工程提交云渲会被直接拒绝(`local_broll_cloud_render_rejected`)——出片走客户端本地导出或 `gtrk render` 预览,如实告知用户;
373
381
  - 交付话术:报产物目录+客户端打开指引+各环节计费实耗;候选轨小眼睛切换、字卡可删可改、BGM 音量客户端可终调、字幕客户端可整轨换样式——把悔棋通道讲清楚。
374
382
  - 报计费实耗 SHALL 转述 `--json` 的 `credits_estimated`(**实耗口径**,豁免时为 0),MUST NOT 转述 `credits_would_be`(原价);`exempt_probe:"failed"` 时须注明『身份没探到,此数按非豁免保守估』。
@@ -397,7 +405,7 @@ gtrk subtitle lay --project "<工程目录>" --style default --color 雅黑 --js
397
405
 
398
406
  - **闪帧**:VFR 素材的场景切点可能产生闪帧(专项修复中)——用户报闪帧时告知已立案,客户端可手动微调切点避开;
399
407
  - **拆分注释投影**:客户端暂不显示 beat 注释(调查中);
400
- - **字幕**:⑪ `gtrk subtitle lay` 已直接上好(7 样式 × 11 色,客户端可整轨换样式、逐条可编辑);改稿重跑 TTS 后须重跑 subtitle lay(时码变了);
408
+ - **字幕**:⑨ `gtrk subtitle lay` 已直接上好(7 样式 × 11 色,客户端可整轨换样式、逐条可编辑);改稿重跑 TTS 后须重跑 subtitle lay(时码变了);
401
409
  - describe 的 `text_overlay` 信号命中多为撞上原片烧录字幕区(片头片尾高发)——裁定换段或保留交客户端;
402
410
  - `matrix lay` 拒铺(`tracks_edited`)不是失败:用户在客户端动过候选轨,plan 照产(`planReusable:true`),提示用户后按其意愿 `--replace-all` 或保留;
403
411
  - BGM 曲长 < 成片:缺省**循环叠满至工程末尾、尾段裁齐**(多 clip 首尾相接,命令打 INFO 报段数);要单次铺才传 `--no-loop`。