@gitruck/cli 1.3.15 → 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.
- package/AGENT.md +40 -10
- package/CHANGELOG.md +1262 -1231
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/assets/composite-kit/kit.css +66 -57
- package/assets/composite-kit/stage.html +164 -18
- package/dist/index.js +653 -343
- package/docs/reference.en.md +866 -852
- package/docs/reference.md +909 -895
- package/docs/workflow.en.md +4 -3
- package/docs/workflow.md +4 -3
- package/package.json +1 -1
- package/skills/gtrk-ai-drama/SKILL.md +7 -7
- package/skills/gtrk-composite/SKILL.md +428 -222
- package/skills/gtrk-composite/references/fullscreen-card-migration.md +99 -0
- package/skills/gtrk-food-recap/SKILL.md +6 -3
- package/skills/gtrk-live-slicing/SKILL.md +9 -6
- package/skills/gtrk-long2short/SKILL.md +3 -2
- package/skills/gtrk-matrix/SKILL.md +9 -9
- package/skills/gtrk-mg/SKILL.md +62 -48
- package/skills/gtrk-music-visualizer/SKILL.md +1 -1
- package/skills/gtrk-narration/SKILL.md +15 -8
- package/skills/gtrk-oralcut/SKILL.md +1 -1
- package/skills/gtrk-splitter/SKILL.md +116 -24
- package/skills/gtrk-splitter/references/example-visual-split.json +34 -13
- package/skills/gtrk-splitter/references/example-visual-split.md +28 -5
- package/skills/gtrk-splitter/references/field-schema.md +88 -3
- package/skills/gtrk-style-maker/SKILL.md +8 -4
- package/skills/gtrk-style-maker/references/seeds/seed-ecom-home-goods.md +2 -2
- package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +1 -1
- package/skills/gtrk-talking-head/SKILL.md +26 -20
- package/skills/gtrk-tools/SKILL.md +1 -1
- package/skills/gtrk-transcript/SKILL.md +1 -1
- package/skills/gtrk-travel-recap/SKILL.md +36 -28
- package/skills/gtrk-vlog-docu/SKILL.md +41 -33
- package/skills/gtrk-voiceover/SKILL.md +19 -11
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# 满屏卡迁移说明:栏目 MG 风格里的满屏卡写法 → 栏目 composite 风格
|
|
2
|
+
|
|
3
|
+
> 适用:栏目的 MG 风格 skill(`style.skills` 里 `produces: "MG"` 的条目)里写过满屏卡——标题牌、章节卡、数据卡、并置面板,
|
|
4
|
+
> 凡派单里是 `category: fullscreen`(或 `title`、遗留 `mg-fullscreen` / `op-ed-title`)的那些。
|
|
5
|
+
> 背景:满屏卡已并入合成(零槽位合成,`/gtrk-composite`「满屏卡(零槽位合成)」一节):新拆分稿把它写成零槽位版式窗口,
|
|
6
|
+
> 旧稿里的满屏 MG beat 由 `gtrk split` 落地时自动转成满屏卡;满屏卡随合成在本机烘焙出片、不再云渲。
|
|
7
|
+
|
|
8
|
+
**不迁也能用**:旧派单里的满屏槽位照旧由 `gtrk mg` 产铺、云渲出片。但新稿的满屏卡会走合成——栏目没有 composite 风格时,
|
|
9
|
+
合成会先读同栏目 MG 风格 skill、以它为正本按它的硬规则定 `theme.css`(再没有才临场定一套,见 `/gtrk-composite`「风格」一节),
|
|
10
|
+
但 MG 风格写的是叠层,整幅版式的写法要合成自己推,可能与栏目的打算有出入。迁过来,满屏卡就和栏目其它合成同一套风格。
|
|
11
|
+
|
|
12
|
+
本说明只讲怎么迁;**CLI 不替栏目改它的 skill**,迁移由栏目自己做(`/gtrk-style-maker` 可以陪着做)。
|
|
13
|
+
|
|
14
|
+
## 1. 哪些要迁
|
|
15
|
+
|
|
16
|
+
在栏目 MG 风格 skill 里找这几类,它们都是「整幅纯排版、没有画面槽位」:
|
|
17
|
+
|
|
18
|
+
| 系统 | 常见写法 | 迁过去是 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 标题牌 / 片头标题 | 满屏实心底 + 大字逐字出 | 满屏卡:`.bed` + 标题元素 + `typeOn` |
|
|
21
|
+
| 章节卡 | 「第二部分 · 成本」整幅卡,常带进度条 | 满屏卡:`.bed` + `.kicker` / `.h1` + 进度条按 `prog` 走 |
|
|
22
|
+
| 数据卡 | 折线 / 柱状 / 数字翻牌,整幅白卡 | 满屏卡:SVG 路径 `draw` + 数字随锚点出 |
|
|
23
|
+
| 并置面板 | 「温柔—坚定 / 和善—有立场」两列对照 | 满屏卡:两列同基线 + 破折号 + 右列字重更重 |
|
|
24
|
+
| 幕间卡 / 梗卡 | 2–5 秒的整幅转场卡 | 满屏卡(零槽位窗口不告「短于 5 秒」) |
|
|
25
|
+
|
|
26
|
+
只在现有画面上点出一个对象的(点题词、单个数、印章、角标)是**叠层**,留在 MG 风格里,不迁。
|
|
27
|
+
|
|
28
|
+
## 2. 时间线写法:GSAP → `CP.render`
|
|
29
|
+
|
|
30
|
+
满屏 MG 是 GSAP 时间线(注册到 `window.__timelines`、靠 seek 驱动);合成场景是**逐帧纯函数** `CP.render = (t) => { … }`(`t` = 窗口内局部秒),
|
|
31
|
+
同一帧号永远画出同一画面,MUST NOT 用 `Date` / `Math.random` / `requestAnimationFrame` / `setInterval` / `setTimeout`(lint 会拦)。
|
|
32
|
+
不要把整条 GSAP 时间线塞进场景再逐帧 seek——那会绕开合成的机检。对照着改写:
|
|
33
|
+
|
|
34
|
+
| GSAP 里 | 场景里 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `tl.from(el, { opacity: 0, y: 26, duration: 0.4 }, 0.2)` | `reveal(el, prog(t, 0.2, 0.4))`(淡入 + 上浮) |
|
|
37
|
+
| `tl.to(el, { width: 1200, duration: 0.5, ease: "power2.out" }, at)` | `el.style.width = 1200 * prog(t, at, 0.5, ease.out) + "px"` |
|
|
38
|
+
| 逐字出(SplitText / 自写循环) | `typeOn(el, 文本, prog(t, 起, 时长))` |
|
|
39
|
+
| 描边动画(`strokeDashoffset`) | `draw(pathEl, prog(t, 起, 时长))` |
|
|
40
|
+
| 擦出(`clipPath` 补间) | `wipe(el, prog(t, 起, 时长))` |
|
|
41
|
+
| 进、驻留、出(`.from` + `.to` 一对) | `span(t, 进, 出)` 或 `seq(t, 到点, 下一张到点)` |
|
|
42
|
+
| 按台词某个词的时刻触发 | 场景规格写锚点 `"anchors": { "名字": ["句 id", "关键词"] }`,场景里 `A("名字")` 取局部秒 |
|
|
43
|
+
| 结尾定格驻留到坑位末尾(铁律⑦) | 不用管:`CP.render` 每一帧都画,窗口多长就画多长 |
|
|
44
|
+
|
|
45
|
+
屏上的字**只用口播原话**:从字幕输入 `subs` 取——`cueAt("subs", t)` 取当前这一条、`cues("subs")` 取窗口内全部、`caption(…)` 直接排一行字幕。
|
|
46
|
+
满屏卡的骨架只有这一个输入,**不用也要留着**(合成颗粒要求槽位非空,由它满足)。
|
|
47
|
+
|
|
48
|
+
## 3. 实心底:`.bed` 与 `--bg`
|
|
49
|
+
|
|
50
|
+
- 满屏 MG 要在根下第一个全幅子层写实心底(契约铁律 4);合成场景里**底就是 `.bed`**:骨架已写 `<div class="bed"></div>`,
|
|
51
|
+
拆分稿窗口带 `bg` 时骨架写成 `<div class="bed" style="background:<bg>"></div>`。
|
|
52
|
+
- 全片统一的底色写进栏目风格的 `--bg` / `--bg2` 变量(见下),卡与卡之间不用各写各的。
|
|
53
|
+
- 深色底用 `.bed.dark`。合成颗粒本来就盖满整幅、合成车道在最上层,不存在「底没落地、底轨透出来」的问题。
|
|
54
|
+
|
|
55
|
+
## 4. 配色与字体:`theme.css` 变量
|
|
56
|
+
|
|
57
|
+
合成工具箱的配色与字体全是 CSS 变量,栏目风格写在工程的 `composite/theme.css`(构建时接在工具箱样式之后):
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
:root {
|
|
61
|
+
--bg: #F4F1EA; --bg2: #E8E2D6; /* 底色 */
|
|
62
|
+
--ink: #1D1D1F; --muted: #6B6B70; /* 正文 / 次要文字 */
|
|
63
|
+
--line: #CFCFCB; /* 分隔线 */
|
|
64
|
+
--accent: #E4572E; --accent2: #2E86AB; --accent3: #F2A541; --alert: #C0392B;
|
|
65
|
+
--font: "Source Han Sans SC", sans-serif;
|
|
66
|
+
--font-serif: "Source Han Serif SC", serif;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
把 MG 风格 skill 里写死在颗粒里的色值与字体搬成这组变量;场景里用 `.kicker` `.h1` `.h2` `.body` `.num` `.tag` `.card` `.rule` 这些工具箱样式,
|
|
71
|
+
颜色自动跟变量走。需要栏目特有的纹理(纸纹、网点)就在 `theme.css` 里给 `.bed` 加背景图——图要内联或登记成素材,别外链。
|
|
72
|
+
|
|
73
|
+
## 5. 栏目配置登记
|
|
74
|
+
|
|
75
|
+
1. 新建(或扩写)一个栏目 composite 风格 skill,产物是 `theme.css` 与满屏卡的版式写法(这张表里的几类各一段);
|
|
76
|
+
2. 在栏目配置 `style.skills` 里登记它:`{ "produces": "composite", "ref": "<skill 路径或名字>" }`;
|
|
77
|
+
3. MG 风格 skill 里原来的满屏卡几节改成一句「满屏卡归合成,见 <composite 风格 skill>」,MG 风格只留叠层;
|
|
78
|
+
4. 有内置 AI 的栏目,登记完后它做满屏卡时就会读这份 composite 风格。
|
|
79
|
+
|
|
80
|
+
## 6. 迁移前后对照
|
|
81
|
+
|
|
82
|
+
迁之前从旧工程里挑一张代表性的满屏 MG(标题牌、数据卡各一张),记下它的静帧;迁之后在同一段写一张满屏卡:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
gtrk composite plan --project <工程> --range <同一段的起止> # 或重跑拆分后 --mode split 取转来的满屏卡
|
|
86
|
+
gtrk composite review --project <工程> --approve W01
|
|
87
|
+
gtrk composite scaffold --project <工程>
|
|
88
|
+
#(照本说明改写场景)
|
|
89
|
+
gtrk composite build --project <工程>
|
|
90
|
+
gtrk composite lint --project <工程> --stills <段内某一秒>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
把两张静帧并排看:配色、字体、底色、文字层级是否一致;不一致就回 `theme.css` 调变量,而不是在场景里写死色值。
|
|
94
|
+
|
|
95
|
+
## 7. 旧工程怎么切过来
|
|
96
|
+
|
|
97
|
+
- 重跑 `gtrk split`(拆分稿文件还在就能直接重跑):满屏 MG beat 转成满屏卡,回执逐条列出「B07 → LB07」;
|
|
98
|
+
- 精剪包装:派单 `layouts_declared: false` 时先 `gtrk composite plan --mode split` 做满屏卡,再 `--mode auto` 补其余窗口;
|
|
99
|
+
- 满屏卡做成合成之前,`gtrk mg` 会先留着对应的旧满屏颗粒(回执 `kept_superseded`);做成之后再跑 `gtrk mg`,旧颗粒才剥(`removed_superseded`)。
|
|
@@ -85,8 +85,9 @@ gtrk matrix describe --plan <工程>/split/broll-plan.json --highlight-rubric @<
|
|
|
85
85
|
|
|
86
86
|
## 四、快速成片编排
|
|
87
87
|
|
|
88
|
-
命令序照正本 §五(索引/字幕锚 → 写稿+出处 → 检查点① → 基座 → 建工程 →
|
|
89
|
-
|
|
88
|
+
命令序照正本 §五(索引/字幕锚 → 写稿+出处 → 检查点① → 基座 → 建工程 → 拆分(含版式窗口)→ 铺排 →
|
|
89
|
+
抽帧检查 → 字幕 → 精剪包装 → 字卡 → BGM),配方口径(mark-weight 0.3 / BGM 0.10 / gap-fill fast)照旅拍 §五,引用不复制。
|
|
90
|
+
**主链**(位次照公约 §二⁗「画面三层」,正本 `production-order`,本图纸不另述):拆分(含版式窗口)→ 铺排底轨 → 全局抽帧检查 → 字幕 → 合成(精剪包装)→ `gtrk mg`(店名条等叠层)→ 交付;BGM 不受顺序约束。
|
|
90
91
|
BGM 检索词照公约 §三′ 内容驱动(这家店的气质:地域/年代/客群/烟火感,禁通用词套路;
|
|
91
92
|
候选给用户挑不许默认 top1;跨片避让自动生效)。
|
|
92
93
|
看点加权:`--highlight-weight 0.2` 配 §二′ 的 rubric(**须先 `matrix describe --plan` 且那一次
|
|
@@ -96,7 +97,9 @@ BGM 选带人声歌曲(`audio_type:"song"`)时 **MUST 下载 `accompaniment_
|
|
|
96
97
|
不得直接用 `download_url` 原曲——人声与解说配音会打架。换已上轨的 BGM 文件时
|
|
97
98
|
注意:`audio lay` 同源幂等按文件路径判定,**换不同文件不会替换旧轨**,须先剥旧 BGM 轨再 lay。
|
|
98
99
|
质检按公约「三级收敛」执行:L1 结构自检恒开;L2 画音对齐在落轨前可选运行;L3 渲后终检随本来就要交付的本地渲附带,不为质检单独逼渲。跑过的质检结论随交付呈现。
|
|
99
|
-
|
|
100
|
+
字卡归叠(公约 §二⁗):店名条/菜名条/价格条为主,一颗点出一个对象,派单 `visual_job: statement`(单个价格数也可以是 `data`);
|
|
101
|
+
产法照 `/gtrk-mg` 的「按 `visual_job` 路由」——文字模板在 `statement` 的候选集里,有栏目 skill 走栏目,图纸不另立「手做」或「用模板」的规矩;
|
|
102
|
+
不论走哪条,**同片叠层同一套风格**,锚在这家店的气质上(公约 §三 临场泛化)。几道菜并排比分量、后厨与出品对照这类多画面段归版,开版式窗口交合成。
|
|
100
103
|
|
|
101
104
|
## 五、检查点①(拍板停一次;铺画面前另有一次用量确认)
|
|
102
105
|
|
|
@@ -191,9 +191,11 @@ gtrk oralcut-result <task_id> --out <目录> # task_id 在产物根 task.json
|
|
|
191
191
|
- **封面**:走 `/gtrk-cover`(另出图,不改片)。
|
|
192
192
|
- **合成包装**:见下「合成包装」——开工 ⑥ 答要才做,只对入选 clip。
|
|
193
193
|
|
|
194
|
+
**主链**(入选 clip 的包装次序,位次照公约 §二⁗「画面三层」,正本 `production-order`):字幕 → 合成(合成包装,开工 ⑥ 答要)→ `gtrk mg`(MG 动画,开工 ④ 答要);模糊底、运镜、调速随时可做,不受这条次序约束。版在叠前:合成先落位,窗口里的叠层颗粒被接管、不白做。
|
|
195
|
+
|
|
194
196
|
### 合成包装(缺省不做,开工 ⑥ 答要才做,只对入选 clip)
|
|
195
197
|
|
|
196
|
-
|
|
198
|
+
选题清单敲定、该 clip 的字幕上好之后,对每条入选 clip 交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:本链不走拆分,快速成片 `--mode auto` ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过)。开工 ④ 也答要、该 clip 要走拆分派单时,拆分在合成之前做,拆分稿带 `layouts` 键就改用 `--mode split`(拆分是唯一规划者)。clip 工程与整片转写的路径同「字幕上轨」:`--gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" --transcript "<产物根>/json/transcript.json"`(`gtrk composite --help` 核实过这两个参数)。合成写在工程里、可在客户端撤销,不动源片像素。
|
|
197
199
|
|
|
198
200
|
### 字幕上轨(缺省做,只对入选 clip)
|
|
199
201
|
|
|
@@ -241,11 +243,12 @@ gtrk project background --gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" -
|
|
|
241
243
|
|
|
242
244
|
### MG 动画(仅当开工④用户要了才做)
|
|
243
245
|
|
|
244
|
-
- **时机**:选题清单敲定**之后**、只对**入选** clip
|
|
245
|
-
- **姿势**:逐 clip 走标准成片化车道(`gtrk split` 拆分派单 → 颗粒 → `gtrk mg` 铺轨),
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
-
|
|
246
|
+
- **时机**:选题清单敲定**之后**、只对**入选** clip 做——没入选的切片不白做颗粒;次序照上面的主链(字幕、合成之后)。
|
|
247
|
+
- **姿势**:逐 clip 走标准成片化车道(`gtrk split` 拆分派单 → 字幕 → 合成(⑥ 答要时)→ 颗粒 → `gtrk mg` 铺轨),
|
|
248
|
+
拆分的输入=该 clip 的粗剪工程与整片转写:`gtrk split --gtrk "<产物根>/clip{i}/gtrk/<该 clip 的 .gtrk>" --transcript "<产物根>/json/transcript.json"`
|
|
249
|
+
(`.srt` 不是拆分的输入;拆分只认 `transcript.json`)。拆分照公约 §二⁗ 判层:字卡归叠(一颗一件事),会改变整幅画面构成的段开版式窗口。
|
|
250
|
+
- **风格**:先走栏目——栏目配置里有 MG 生产 skill 就用它;**没有栏目 skill 时**按公约 §三「内容驱动的临场泛化」为这批切片定一套风格直接做,不发问(与口播链同口径)。
|
|
251
|
+
- **红线**:MG 颗粒写在工程里(叠层;整幅的满屏卡归合成,随 ⑥ 合成包装做),照旧不动源片像素;④答「不要」= 全程零 MG 动作。
|
|
249
252
|
|
|
250
253
|
### B-roll:缺省不掺(明示条款)
|
|
251
254
|
|
|
@@ -30,7 +30,7 @@ description: 长剪短闭环——把一条长视频(课程/直播/播客/访
|
|
|
30
30
|
|
|
31
31
|
先跑 `gtrk doctor`:
|
|
32
32
|
- **`gtrk` 找不到** → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js),再重试。
|
|
33
|
-
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init
|
|
33
|
+
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init`(交互式、需真终端,你别替他跑)(用户还没有 Key 就转告:打开 https://cloud.ai-mcn.tv/zh-CN ,点「注册 / 登录」,进入「仪表盘」复制 API Key;报错里也写着这句)。
|
|
34
34
|
- 全绿就往下走。
|
|
35
35
|
|
|
36
36
|
## 一条命令
|
|
@@ -88,7 +88,8 @@ gtrk long2short "D:/毛片/对谈.mp4" --language zh-CN --split-screen --split-o
|
|
|
88
88
|
- 横屏源进竖屏画布(缺省 9:16)时工程上下是黑边;要模糊底:`gtrk project background --gtrk <产物根>/clip{i}/gtrk/clip{i}_project.gtrk --blur`——给该 clip **主轨每个片段**写模糊底(片段级底板),客户端里可逐片段或多选批量改成黑底 / 纯色;从客户端导出的剪映草稿带模糊底、Pr 工程降级为纯黑、本地 `gtrk render` 带模糊底;云端随长剪短产出的剪映 / PR 工程生成在它之前、不带。零计费。只想要旧的整片画布设置:加 `--scope canvas`。
|
|
89
89
|
- 用了 `--camera-move` 时:`clips.md` 每条时长后标「运镜 N 处」(0 处属正常);若有 clip 未能加运镜,`clips.md` 会单列「未能加运镜的切片」;告诉用户运镜在客户端 / 剪映里看,本地渲染与 PR 看不到。之后用 `gtrk patch` 裁剪 / 切分带运镜的片段,关键帧会跟着调整。
|
|
90
90
|
- 用了 `--speed-factor` 时:`clips.md` 的时长是**变速后**的时长并标注倍率;若有 clip 未能变速,`clips.md` 会单列「未能变速的切片」,如实告诉用户。
|
|
91
|
-
- **合成包装**(跑前答了要才做):对每条 clip
|
|
91
|
+
- **合成包装**(跑前答了要才做):对每条 clip、字幕上好之后交棒 `/gtrk-composite` 做**精剪包装**(公约 §三⁵:本链不走拆分,快速成片 `--mode auto` ≤ 25% → 逐窗口复核 → 构建机检 → 铺轨烘焙,不停;回执列「做了 / 建议了没做 / 烘焙结果」;逐步推进按合成 skill 两个检查点停;开工时用户说了不要就跳过);参数同上面字幕那条:`--gtrk <产物根>/clip{i}/gtrk/clip{i}_project.gtrk --transcript <产物根>/json/transcript.json`(`gtrk composite --help` 核实过)。
|
|
92
|
+
- **主链**(逐 clip 的包装次序,位次照公约 §二⁗「画面三层」,正本 `production-order`):字幕 → 合成(合成包装)→ `gtrk mg`(用户另要叠 MG 时,逐 clip 拆分派单后铺,拆分在合成之前、拆分稿带 `layouts` 键时合成改用 `--mode split`);模糊底、运镜、调速不受这条次序约束。
|
|
92
93
|
- **先看 `clips.md`**(产物根,人读总览):一张表列全部切片的标题/时长/评分/一句话简介 —— 用它给用户复述「出了哪几条、各讲什么、建议先精修哪条」,别让用户自己开工程猜。逐条的入选理由、跳剪说明、高光词在 `clip{i}/clip.md`。
|
|
93
94
|
- 开了 `--split-screen` 时:**分屏素材落在毛片旁的 `split_screen/` 子目录**(工程素材路径指向那里,别移动/删除,移动了工程会缺素材)——这点要提前告知用户。
|
|
94
95
|
- 剪映草稿已拷入草稿根(给了 `--jianying-draft-dir` 时),剪映里直接可见 `<产物根名>_clip{i}`;CLI 提示「剪映草稿组……已被占用,本次改落……-2」时,告诉用户这一组叫 `<产物根名>-2_clip{i}`(另一条同名毛片的草稿原样保留),以 `result.json` 里各 clip 的 `jianyingDraftPath` 为准。**判据**:草稿目录里必须是 `draft_content.json` + `draft_meta_info.json` 两个精确文件名(云端产物侧的 `clip{i}_` 前缀在拷进草稿根这一跳被剥掉,产物目录 `clip{i}/jianying/` 里保留带前缀的归档原名)。CLI 日志按实际齐全条数报「N/M 条两件套齐全」,不齐的记进 `result.json` 的 `errors`、该 clip 的 `jianyingDraftPath` 为 `null`。
|
|
@@ -338,15 +338,15 @@ gtrk matrix describe --materials <同一素材> --review <工程目录/visual-ov
|
|
|
338
338
|
|
|
339
339
|
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全链:
|
|
340
340
|
|
|
341
|
-
> ① `oralcut` 剪口播 → ② `split` 拆分派单出 `dispatch.json
|
|
341
|
+
> ① `oralcut` 剪口播 → ② `split` 拆分派单出 `dispatch.json`(含版式窗口)→ **③ B-roll 底轨全铺齐**(**`matrix` 铺影视/本地素材(你在这)** + `/gtrk-ai-drama` 产稿→外部出片→`gtrk ai-drama lay` 回填,**两条腿同一阶段**)→ **用户 opencut 调整/挑选** → ④ **全局抽帧检查画面构图** → ⑤ `subtitle lay` 上字幕 → ⑥ `/gtrk-composite` 合成(版,含满屏卡)→ ⑦ `mg` 铺叠层 → `render` 收口。BGM 不受顺序约束;位次正本 `production-order`,口径见《成片型图纸公约》§二⁗「画面三层」。
|
|
342
342
|
|
|
343
|
-
**为什么 B-roll 整个阶段最先**:**AI 情景片段属于底轨 B-roll
|
|
343
|
+
**为什么 B-roll 整个阶段最先**:**AI 情景片段属于底轨 B-roll 画面家族,不是叠层**——合成(版)和 MG(叠层、满屏卡)都排在底轨之上。它们的排版决策是「因势象形避主体」,**依赖底轨的最终画面构图**;三源(影视/本地/AI)没落齐就做合成或产 MG,等 AI 片段回铺后避让必然错位、甚至盖住 AI 画面主体。版式窗口里的 B-roll 照常铺:合成会把它当槽位画进去。
|
|
344
344
|
|
|
345
345
|
> ⚠️ 旧序(MG ④ 在 AI 情景动画 ⑤ 之前、理由写「越往后叠得越上层」)**是把「工序次序」误当成了「图层次序」**。工序上 AI 片段必须先落位;图层上它本来就在底轨。
|
|
346
346
|
|
|
347
347
|
铺完**必须停下等用户在 opencut 里挑选/调整**(关键检查点),不要一口气往下冲。
|
|
348
348
|
|
|
349
|
-
**前置**:需要跑过 `gtrk split` 的产物目录(`split/dispatch.json`)。`film_broll` 空 = 本片没有影视/本地素材腿 → 跳过本步,看 AI 情景片段腿(`dispatch.ai_drama` 非空则交棒 `/gtrk-ai-drama`),两腿都空才直接进
|
|
349
|
+
**前置**:需要跑过 `gtrk split` 的产物目录(`split/dispatch.json`)。`film_broll` 空 = 本片没有影视/本地素材腿 → 跳过本步,看 AI 情景片段腿(`dispatch.ai_drama` 非空则交棒 `/gtrk-ai-drama`),两腿都空才直接进 ④ 全局抽帧检查。`gtrk` 找不到 → `npm i -g @gitruck/cli@latest`(外部 agent 的前置;内置 agent 已具备,跳过)。用户先在 opencut 手调过切点也不怕——命令每次都现场重投影 beat 窗口,微调口播轨不用重跑 `gtrk split`,只有拆分稿本身变了才要。
|
|
350
350
|
|
|
351
351
|
**业务分离**:本框架 skill 不硬编任何栏目审美。B-roll 的 `queries` 在 ② 拆分时已写进派单(不触发生产 skill);栏目只供检索偏好(`--column`,internal 口生效)。档位由命令自己探(结果 JSON `memberType`),external 口固定 real_shot + 可商用素材。
|
|
352
352
|
|
|
@@ -459,7 +459,7 @@ gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-
|
|
|
459
459
|
- **旧工程**(之前按黑底垫轨铺的)可能还有一条纯黑底轨(`struct_meta.broll.black_track`)——别误删;重铺时它会被换成新形态。用户的客户端太旧、打开后 B-roll 黑边处露口播 ⇒ 让他升级客户端,或本次加 `--black-bed`。
|
|
460
460
|
- 觉得填充有问题(太杂/太空/漏段)→ 回来找我调参重铺(配方 B 的理解裁定也在这时上场)。
|
|
461
461
|
|
|
462
|
-
**用户明确说「B-roll 就这样」之后**,才往下走——先看 AI 情景片段腿(同属 ③),三源齐了再进 ④
|
|
462
|
+
**用户明确说「B-roll 就这样」之后**,才往下走——先看 AI 情景片段腿(同属 ③),三源齐了再进 ④ 全局抽帧检查,过了才往 ⑤ 字幕 → ⑥ 合成 → ⑦ 铺 MG 走。详见末节「下一步」。
|
|
463
463
|
|
|
464
464
|
## 工程交给别的账号前:补检索授权码(`gtrk matrix grant`)
|
|
465
465
|
|
|
@@ -505,12 +505,12 @@ gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-
|
|
|
505
505
|
|
|
506
506
|
## 下一步(别停在铺完,也别直接跳去铺 MG)
|
|
507
507
|
|
|
508
|
-
用户确认你这条腿的 B-roll 满意后,**先看 AI 情景片段腿有没有活**——它与你同属 ③ B-roll 底轨阶段,MUST
|
|
508
|
+
用户确认你这条腿的 B-roll 满意后,**先看 AI 情景片段腿有没有活**——它与你同属 ③ B-roll 底轨阶段,MUST 在合成与 MG 之前落位:
|
|
509
509
|
|
|
510
|
-
- **`dispatch.ai_drama` 非空** → 交棒 `/gtrk-ai-drama`(产分镜稿 → 用户去外部平台出片 →
|
|
511
|
-
⚠️ **异步等待的口子**:外部平台抽卡可能数天,严格串行会把后续无限期卡住。故进
|
|
512
|
-
- **`dispatch.ai_drama` 为空** → 三源已齐,直接进 **④ 全局抽帧检查画面构图**:对最终底轨抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,**停下等用户确认构图无误**(这与刚才「挑选 B-roll
|
|
513
|
-
- `dispatch.mg`
|
|
510
|
+
- **`dispatch.ai_drama` 非空** → 交棒 `/gtrk-ai-drama`(产分镜稿 → 用户去外部平台出片 → `gtrk ai-drama lay` 回填,非标准平台才手动回铺)。一句话交代:「影视素材这腿定了,AI 情景片段还有 N 段要出,我把分镜稿产出来给你」。
|
|
511
|
+
⚠️ **异步等待的口子**:外部平台抽卡可能数天,严格串行会把后续无限期卡住。故进 ⑥ 合成与 ⑦ MG 的硬门是「**AI 片段已回铺 ∨ 用户明示先跳过**」。走「明示跳过」时 MUST 把**与 AI beat 相邻或重叠区间的 MG 颗粒**(合成窗口同理)标记为「AI 回铺后待复查构图」并在收口时复述该清单,**MUST NOT 静默跳过**。
|
|
512
|
+
- **`dispatch.ai_drama` 为空** → 三源已齐,直接进 **④ 全局抽帧检查画面构图**:对最终底轨抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,**停下等用户确认构图无误**(这与刚才「挑选 B-roll」那次确认是两次不同的确认),过了才往下:⑤ `gtrk subtitle lay` 上字幕 → ⑥ `/gtrk-composite`(`dispatch.composite` 非空时)→ ⑦ `/gtrk-mg`。
|
|
513
|
+
- `dispatch.composite` 与 `dispatch.mg` 都为空 → 没有版也没有叠,④ 检查、上完字幕后直接 `render` 收口。
|
|
514
514
|
### 逃生门:两种信号都要认(范围 + 节奏)
|
|
515
515
|
|
|
516
516
|
上面的往下走是**默认**,但**用户表达了范围保留或节奏保留时 SHALL 停在这一步、SHALL NOT 自动交棒**。
|
package/skills/gtrk-mg/SKILL.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gtrk-mg
|
|
3
|
-
description: MG
|
|
3
|
+
description: MG 叠层颗粒铺轨器——成片 SOP 第 ⑦ 步(叠层):B-roll 底轨三源(影视素材 / 本地素材 / AI 情景片段)全部铺齐、④ 全局抽帧检查构图通过、⑤ 字幕与 ⑥ 合成(含满屏卡)落位之后,把栏目的 html-particle 叠层颗粒(透明叠加、一颗点出一个对象)铺到已定稿的画面之上,被合成接管的槽位不产不铺;整幅纯排版的满屏卡已归合成(/gtrk-composite),旧派单里的满屏槽位照旧能做。先由栏目 MG 生产 skill 按派单各槽位产颗粒,再驱动 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 beat_track。当用户想「铺 MG 颗粒 / 上动态图 / 铺动效 / 给这段配动画铺进工程 / 把 MG 派单铺轨 / 消费 dispatch.mg」时使用本 skill。凡涉及把 MG 动态图颗粒铺进已剪好的成片工程,优先用本 skill 驱动 gtrk CLI,别让用户自己去终端敲 `gtrk mg`。
|
|
4
4
|
metadata:
|
|
5
5
|
in_app_agent: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# MG 动态图铺轨(gtrk-mg)
|
|
9
9
|
|
|
10
|
-
把 `gtrk split` 派好的 **MG 槽位**(`dispatch.mg`),先由**栏目的 MG 生产 skill** 产成 html-particle 动态图颗粒,再交给 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 `beat_track
|
|
10
|
+
把 `gtrk split` 派好的 **MG 槽位**(`dispatch.mg`),先由**栏目的 MG 生产 skill** 产成 html-particle 动态图颗粒,再交给 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 `beat_track`——**铺在已经定稿的画面之上(B-roll 三源全落齐、构图已核、合成已落位)**。**CLI 是手(lint / 铺轨 / 写回),你是脑(认 SOP 位置、驱动栏目生产 skill、管用户检查点、判 lint 该不该硬铺)。栏目生产 skill 只产纯净颗粒、不知 gtrk 命令,由你驱动。**
|
|
11
11
|
|
|
12
12
|
> **本 skill 已含你需要的全部信息**(SOP 位置、业务分离、逐槽位工作流、命令参数、lint 铁律、排错、交棒)。命令参数细节以 `gtrk mg --help` 为准;颗粒的视觉/内容规范**不在这里**——那是栏目资产,由栏目 MG 生产 skill 全权负责。
|
|
13
13
|
|
|
@@ -15,25 +15,26 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全序:
|
|
17
17
|
|
|
18
|
-
> ① `/gtrk-oralcut`(剪口播)→ ② `/gtrk-splitter`(拆分派单出 `dispatch.json
|
|
18
|
+
> ① `/gtrk-oralcut`(剪口播)→ ② `/gtrk-splitter`(拆分派单出 `dispatch.json`,含版式窗口)→ **③ B-roll 底轨全铺齐**(`/gtrk-matrix` 铺影视/本地素材 + `/gtrk-ai-drama` 产稿→外部出片→`gtrk ai-drama lay` 回填,**两条腿同一阶段**)→ **④ 全局抽帧检查画面构图(用户确认)** → **⑤ `gtrk subtitle lay` 上字幕** → **⑥ `/gtrk-composite` 合成(版,含满屏卡)** → **⑦ 本 skill:叠层(`gtrk mg`)** → `gtrk render` 收口(**会对未命中缓存的颗粒云渲、有计费**,见末节)。BGM 不受顺序约束。位次正本 `production-order`,口径见《成片型图纸公约》§二⁗「画面三层」。
|
|
19
19
|
|
|
20
|
-
**你是第
|
|
20
|
+
**你是第 ⑦ 步,在合成之后。** 你铺的是**叠层**(OV:透明、不碰主体、一颗点出一个对象)。整幅纯排版的**满屏卡**已并入合成(零槽位合成,⑥ `/gtrk-composite` 做、本机烘焙出片),新派单里没有满屏槽位;以前落地的派单里还有的,按下文「旧派单里的满屏槽位」照旧做。底下的底轨必须先定死(**三源全落齐**),否则你的排版避让是对着一个不完整的画面做的;合成先落位,**整段落在合成窗口里的槽位被合成接管,你不产也不铺**(`gtrk mg status` 的 `covered_by`,见下)。
|
|
21
21
|
|
|
22
|
-
> ⚠️ **AI 情景片段属于底轨 B-roll
|
|
22
|
+
> ⚠️ **AI 情景片段属于底轨 B-roll 画面家族,不是叠层**。先完成 AI 片段回铺,再依据最终底轨构图产出 MG,避免遮挡主体。
|
|
23
23
|
|
|
24
24
|
所以动手前先过前置硬门。
|
|
25
25
|
|
|
26
26
|
### 前置硬门(不满足就别铺,先回上一步)
|
|
27
27
|
|
|
28
28
|
1. **影视/本地素材 B-roll 已铺且用户已确认**:若 `dispatch.film_broll` 非空,必须 ③ 已跑过 `gtrk matrix` **且用户已在 opencut 里挑选/调整确认**。没确认 → **别铺 MG**,先回 ③。(为空 = 本片没这条腿,看下一门。)
|
|
29
|
-
2. ★ **AI 情景片段已回铺,或用户明示先跳过**:若 `dispatch.ai_drama`
|
|
29
|
+
2. ★ **AI 情景片段已回铺,或用户明示先跳过**:若 `dispatch.ai_drama` 非空,必须已回铺完(`gtrk ai-drama lay` 回填,或用户把外部平台出的片子拖进工程)**或**用户**明示**「先跳过 AI、先把 MG 铺上」。
|
|
30
30
|
- 外部平台抽卡可能数天,严格串行会把你无限期卡住,故留这个口子。
|
|
31
31
|
- **走跳过时你 MUST 付这个对价**:把**与 AI beat 相邻或重叠区间的 MG 颗粒**逐一标记为「**AI 回铺后待复查构图**」,并在交棒 `render` 时把该清单复述给用户。**MUST NOT 静默跳过** —— 用户得知道哪几颗将来可能要返工。
|
|
32
32
|
- (为空 = 本片没 AI 车道,此门自动通过。)
|
|
33
33
|
3. ★ **④ 全局抽帧检查已过、用户已确认构图**:对**三源合并后的最终底轨**抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,用户确认无误。**这与 ③ 那次「挑选 B-roll」的确认是两次不同的确认**,别拿前一次顶替。没做 → 先做 ④ 再回来。
|
|
34
34
|
4. **有 split 产物**:需要一个跑过 `gtrk split` 的产物目录(含 `split/dispatch.json` 与工程 `.gtrk`)。没有 → 先回 ② `/gtrk-splitter`。
|
|
35
|
-
5.
|
|
36
|
-
6.
|
|
35
|
+
5. ★ **字幕与合成已落位(或本片不做)**:拆分稿有版式窗口(`dispatch.composite` 非空)而合成还没做 → **先做 ⑥ `/gtrk-composite`**,别抢在合成前产叠层——窗口里的颗粒会白产。字幕按 ⑤ 已上好(合成要读它)。用户开工说了不要合成包装、或拆分写了 `layouts: []`,此门自动通过。
|
|
36
|
+
6. **`dispatch.mg` 非空**:为空 = 本片没有 MG 车道 → **别硬造**,直接 `gtrk render` 收口(见末节;无颗粒 = 零计费)。
|
|
37
|
+
7. **CLI 在**:`gtrk` 找不到 → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js;外部 agent 的前置;内置 agent 已具备,跳过)。
|
|
37
38
|
|
|
38
39
|
## 业务分离:谁产颗粒(栏目),谁铺轨(本 skill)
|
|
39
40
|
|
|
@@ -41,13 +42,15 @@ metadata:
|
|
|
41
42
|
|
|
42
43
|
**车道 → 栏目生产 skill 的解析(照此,别猜)**:读**有效栏目配置**的 `style.skills[]`(配置文件 `~/.gitruck/columns/<id>.json`;栏目 id 由 `--column <id>` 或 config `defaultColumn` 选取;零配置 = L0 内置默认栏目,**不携带 style 清单** → 必然走下方「无匹配」分支)。在 `style.skills[]` 里取 **`produces` 归一后(旧 `RRV_MG` → `MG`)等于 `MG`** 的条目 → 触发它 `ref` 指向的 skill 产颗粒。
|
|
43
44
|
- 命中多条 → 按栏目约定取其一(一般栏目只登记一个 MG 生产 skill)。
|
|
44
|
-
- 条目带 `routing:"none"
|
|
45
|
-
- **无匹配** = 本栏目没有 MG 生产 skill
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
- 条目带 `routing:"none"`(管线外、不被任何框架 skill 消费的条目,如退役或显式停用的登记)→ 跳过,不当 MG 生产 skill。封面条目由 `/gtrk-cover` 按 `produces:"cover"` 消费,活跃的封面条目不带它。
|
|
46
|
+
- **无匹配** = 本栏目没有 MG 生产 skill。**先看你是怎么被调起的**:
|
|
47
|
+
- **在成片图纸里**(`/gtrk-talking-head`、`/gtrk-narration` 等,快速成片与逐步推进都算)→ **不发问**,按《成片型图纸公约》§三「内容驱动的临场泛化」为这片定一套风格直接做;每颗的候选照下面「按 `visual_job` 路由」取。
|
|
48
|
+
- **用户在图纸之外单独调本 skill** → 别硬铺,给用户**四选一**(都不替他选):
|
|
49
|
+
1. **建栏目**:`/gtrk-style-maker` 沉淀自己的 MG 生产 skill(一次性,长期资产);
|
|
50
|
+
2. **换栏目**:`--column <id>` 指向已配置的栏目;
|
|
51
|
+
3. **用中性块**:Hyperframes registry 的中性颗粒骨架(`gtrk mg fetch`,见下节「中性块工作流」)——没建栏目也能当场出 MG,但**骨架不是成品**,内容与审美 MUST 改写。
|
|
52
|
+
4. **用文字模板**:同合云自家的文字特效模板库(`gtrk mg fetch --source text`,见下节「文字模板工作流」)。改字走 `gtrk mg compile`、改效果走 `gtrk mg edit --say`。
|
|
53
|
+
⚠️ **它的适用面由派单的 `visual_job` 决定,不由「省不省事」决定**(见下「按 visual_job 路由」)。
|
|
51
54
|
另可查推荐目录(公约 §三‴):`gtrk skills recommend --scene mg-explainer` 列第三方 MG 生产 skill,装完 `gtrk skills add <owner/repo> --produces MG` 登记即被本节解析到——本 skill 正文不点名任何仓、不点名任何块。
|
|
52
55
|
推荐目录另有一方**排版技法族**(`gtrk skills recommend --scene technique`):技法不是生产者、不登记为 MG 车道(`routing:none`),某槽位的内容形态命中某技法(如引用文献页 / 截图局部强调)时由你按槽位取用——内容与节奏按口播定、栏目色未定时用技法自带的中性底;本 skill 正文同样不点名仓。
|
|
53
56
|
- **有匹配时中性块与文字模板缺省都不用**:只当栏目 skill 明显不擅长某类(如数据图表 / 界面拟物 / 纯文字入场)时可**提议**「这一槽用中性块」或「这一槽用文字模板」,用户点头才用。技法族同理——槽位内容形态命中某技法时可**提议**「这一槽用技法」(`gtrk skills recommend --scene technique`),栏目色板与字体照栏目注入,用户点头才用。
|
|
@@ -55,14 +58,16 @@ metadata:
|
|
|
55
58
|
## ★ 按 `visual_job` 路由(不是按省事路由)
|
|
56
59
|
|
|
57
60
|
每个 MG 槽位的派单里都有一个必填的 `visual_job`(`gtrk split` 判的,四档)。
|
|
58
|
-
|
|
61
|
+
**它决定这一槽的候选集里有什么**,也说明这一槽归哪层(公约 §二⁗「叠层一颗一件事」):
|
|
59
62
|
|
|
60
|
-
| `visual_job` | 这段是什么 | 候选集 |
|
|
61
|
-
|
|
62
|
-
| `statement` | 单一陈述:一句话 / 一个词 / 一个标题 | 文字模板优先 |
|
|
63
|
-
| `relation` | 有关系:对比 / 并置 / 因果 / 包含 / 递进 / 聚合 / 循环 | **文字模板不在候选集里**——手做,或栏目 skill |
|
|
64
|
-
| `data` | 具体的量、步骤或拓扑 | 同上 |
|
|
65
|
-
| `decor` | 不承载信息(转场 / 角标) | 中性块 / 栏目 skill |
|
|
63
|
+
| `visual_job` | 这段是什么 | 候选集 | 归哪层 |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `statement` | 单一陈述:一句话 / 一个词 / 一个标题 | 文字模板优先 | 叠;整幅标题牌是版 |
|
|
66
|
+
| `relation` | 有关系:对比 / 并置 / 因果 / 包含 / 递进 / 聚合 / 循环 | **文字模板不在候选集里**——手做,或栏目 skill | 版:交合成(纯排版的是满屏卡,也归合成) |
|
|
67
|
+
| `data` | 具体的量、步骤或拓扑 | 同上 | 单个数是叠;多元素是版 |
|
|
68
|
+
| `decor` | 不承载信息(转场 / 角标) | 中性块 / 栏目 skill | 角标是叠;整幅转场卡是版 |
|
|
69
|
+
|
|
70
|
+
⚠️ **叠层一颗一件事**:`overlay` 槽位只点一个对象。派单里出现 `relation` 或多元素 `data` 的 overlay 槽位,说明拆分把一段「版」塞进了叠层——别硬做成浮在讲者身上的大面板,报给用户:这段该开版式窗口交合成,纯排版的写成零槽位窗口(满屏卡)(回 `/gtrk-splitter` 改稿)。
|
|
66
71
|
|
|
67
72
|
⚠️ **`relation` / `data` 两档,`gtrk mg lint` 会硬拒文字模板颗粒**(判据取产物内嵌的
|
|
68
73
|
`v:"text-v0"` IR,改名骗不过去)。这不是建议,是闸。
|
|
@@ -73,7 +78,7 @@ metadata:
|
|
|
73
78
|
|
|
74
79
|
### `relation` 档的手做样例(照着改,别去库里找)
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
一块面板,小标题 + 两行并置 + 落款:
|
|
77
82
|
|
|
78
83
|
```
|
|
79
84
|
┌─────────────────────────────┐
|
|
@@ -86,7 +91,7 @@ metadata:
|
|
|
86
91
|
└─────────────────────────────┘
|
|
87
92
|
```
|
|
88
93
|
|
|
89
|
-
**它是纯文字画的,但它表达的是一个关系**(语气 vs
|
|
94
|
+
**它是纯文字画的,但它表达的是一个关系**(语气 vs 立场的对照),所以它归**版**:整幅的做成满屏卡(零槽位合成,`/gtrk-composite` 照这个样子排),讲者同屏(讲者收进圆窗、面板占主画面)的做成带槽位的合成——都不在本 skill 做。旧派单里还挂着的满屏槽位按「旧派单里的满屏槽位」一节照这个样子做。
|
|
90
95
|
关系靠三样东西成立:**同基线的两列**、**把两列连起来的破折号**、**右列更重的字重**。
|
|
91
96
|
去掉任意一样,它就退回成四行不相干的字。
|
|
92
97
|
|
|
@@ -127,16 +132,8 @@ metadata:
|
|
|
127
132
|
- `--slot` 与 `--duration` **互斥**:派单模式的包络由 `track_st` / `track_ed` 定,显式给时长会与它打架;独立模式才用 `--duration`。
|
|
128
133
|
- 出参里的 `pinned` 写明改了什么(`id` 的 from→to、`duration` 的 from→to、被钉的层);两者都没改、且目标画幅就是模板的 1920×1080 时 `changed:false` 且**原字节落盘**(不重编)。
|
|
129
134
|
- **画幅也由命令定**(fix-text-template-canvas-not-compiled):派单模式按工程 `.gtrk` 的 `video_size` 编,出参 `canvas` / `canvas_from` 写明用了哪个画幅、从哪来;画幅不是 IR 改动,`pinned` 不记它。
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
⚠️ 派单模式下**通常不用你操心**:`dispatch.mg[].bg` 写了底色的话,取块时会自动钉进
|
|
133
|
-
`canvas.bg`,声明当场兑现。撞上这条红一般意味着**派单只声明了 `fullscreen` 却没给 `bg`** ——
|
|
134
|
-
两条出路:① 这颗本来就该是叠加 ⇒ 改派单的 `category` 为 `overlay`;
|
|
135
|
-
② 确实要盖住画面 ⇒ 给派单补 `bg`,或手动在 IR 里写 `canvas.bg`(编译器会产成根下第一个全幅子层)。
|
|
136
|
-
MUST NOT 靠「加一层 shape 当底」绕过:那种写法的覆盖面取决于祖先定位与 transform,
|
|
137
|
-
**静态判不出来**,`opaque` 登记不上(画出来了但成片按透明叠加处理)。
|
|
138
|
-
- 反方向(槽位派 `overlay`、颗粒却是实心)仍是**非致命**告警:那只是多盖了底轨,看得见、改得动,
|
|
139
|
-
不是「以为有其实没有」的静默落空。两个方向后果不对称,判据也就不对称。
|
|
135
|
+
- 槽位派 `overlay`、颗粒却是实心 ⇒ **非致命**告警:那只是多盖了底轨,看得见、改得动。
|
|
136
|
+
(旧派单里的满屏槽位反过来「声明满屏、产物没底」是**致命**的,见「旧派单里的满屏槽位」一节。)
|
|
140
137
|
3. **改字(L0,0 积分)**:把内嵌的 IR 存成 `<id>.ir.json`,改 `slots` 里的文字(也可改 `colors` / `font` / `stroke` / `shadow` / `canvas.duration`),然后 `gtrk mg compile <id>.ir.json --out <目录>`。竖屏 / 方形工程加 `--canvas <工程画幅>`(如 `--canvas 1080x1920`)——`.ir.json` 里不记画幅,不给就按 1920×1080 编;给颗粒 HTML 重置时缺省沿用那颗自己的画幅。
|
|
141
138
|
4. **改效果(6 积分/候选,前 200 个之后 8)**:`gtrk mg edit <particle.html> --say "打字机快一倍,副标改成青色" [--n 1|3]`。`--n` 只收 1 或 3,**它就是计费单位数**。返回的候选带 `scope`:`L1` = 在模板可调范围内,`L2` = 越界了、等于新生成(**不是失败**)。服务端说做不到时会给一句 `refusal`,**如实转述给用户**——他要的是「为什么不能」,不是一个没有解释的错误。
|
|
142
139
|
5. **lint → 铺**:同中性块,`gtrk mg lint` 过致命项 → `gtrk mg --project <目录>`。
|
|
@@ -158,7 +155,7 @@ metadata:
|
|
|
158
155
|
4. **lint → 铺**:`gtrk mg lint` 过致命项 → `gtrk mg --project <目录>`(与栏目产颗粒同门槛)。
|
|
159
156
|
5. **竖屏 / 方形工程**:registry 中性块只有 1920×1080 一种几何(块是手写 HTML、尺寸写死在块里,`--canvas` 给别的画幅会被拒),不适用。派单模式下工程 `video_size` 比例不是 16:9(容差 7%:4K 横屏与 DCI 17:9 照取)命令会**在下载前拒**、不落盘;改走 `--source text`(文字模板按工程画幅编,见上节)或栏目 skill 按工程画幅产颗粒,MUST NOT 拉伸。
|
|
160
157
|
|
|
161
|
-
独立模式(脱离派单补一颗):`gtrk mg fetch --pick <块名> --as <composition_id> --duration <坑位秒> [--category overlay
|
|
158
|
+
独立模式(脱离派单补一颗):`gtrk mg fetch --pick <块名> --as <composition_id> --duration <坑位秒> [--category overlay] [--out <目录>]`,随后同 `gtrk mg render` 的独立颗粒路。(独立路照样收得下满屏,回执会附一句「满屏卡建议做成零槽位合成」,见「旧派单里的满屏槽位」。)
|
|
162
159
|
|
|
163
160
|
> **生产 skill 是栏目的纯净资产**:它只懂本栏目的视觉语法、只产 html-particle 颗粒,**不知道 gtrk 命令、不知道产物落哪**。由本 skill 驱动它、并**由本 skill 负责让它以 `gtrk mg` 要读的路径为写入路径**:颗粒 SHALL **直接写到** `<产物目录>/mg/<composition_id>.html`,MUST NOT 先写 agent 自有目录再拷入(中转本身即违规,见上「产物落点纪律」第 5 条)。举例(仅示意解析机制,非硬编):`real-roam-guide` 栏目配置里 `style.skills` 有一条 `{produces:"MG", ref:"…/real-roam-viz"}` → 驱动它产颗粒;换个栏目、换个 ref,产颗粒的就是另一个生产 skill。**本 skill 正文里不绑死任何栏目的生产 skill。**
|
|
164
161
|
|
|
@@ -177,16 +174,18 @@ gtrk mg status --project "<split产物目录>" --json
|
|
|
177
174
|
```
|
|
178
175
|
|
|
179
176
|
- 汇总 MG 流水线:`dispatch.mg` beat 槽位总数 / 已产源 HTML 数 / 已铺进 `.gtrk` 数,并**逐 beat 标注**(缺 HTML / 已产未铺 / 已铺)。
|
|
177
|
+
- ★ **先看 `todo`,别看 `total`**:槽位(叠层与满屏同一判据)整段落在合成窗口里(`struct_meta.composite` 里状态不是 `rejected` / `trimmed` 的窗口,或 `dispatch.composite` 里还没导进合成的版式窗口)就带 `covered_by: <窗口 id>`——**被合成接管,不产**。判定不看场景的 `takeover`:出片时整段落在有效合成窗口里的颗粒一律不出画。顶层 `covered` = 被接管的槽位数,`todo` = 还没产且没被接管的槽位数,**这才是你要开工的颗数**(`total` / `authored` 与以前同义,`total − authored` 会把被接管的也算进去)。部分重叠不算接管,照常产。
|
|
180
178
|
- 每个槽位有 `composition_id`(主颗粒 = `<工程slug>-<beatId>`;`overlay` 叠层派生颗粒 = `<工程slug>-<beatId>-aux<n>`)与 `handoff`(`theme` / `duration_hint`(秒)/ `category` 等)。**这些是你交给栏目生产 skill 的产片订单。**
|
|
181
179
|
|
|
182
180
|
### 2. 逐槽位产颗粒(驱动栏目 MG 生产 skill)
|
|
183
181
|
|
|
184
|
-
对每个「缺 HTML
|
|
185
|
-
- **产前先抽帧看底轨(`overlay` 槽位必做,别只凭派单盲产)**:颗粒最终要叠在真实画面上,构图必须因势象形。对该槽位挂点截 1-2 帧时间线画面(`gtrk client frame --at <track_st> --project "<产物目录>"`——截的就是 B-roll 三源铺齐后的最终底轨:客户端开着该工程时与编辑器所见一致;没开时本地渲出一帧,零计费、不含 MG 颗粒;图缺省落 `$GTRK_FRAMES_DIR` 或系统临时目录,用完即删,**别落 cwd / agent 自有目录**。重铺时若客户端开着,截到的画面会带上已铺的旧颗粒——判底轨构图时忽略它们)看清三件事——①真人主体/人脸的位置(颗粒 bbox 避开,呼应栏目「不盖说话人」铁律);②该处是否已有烧入包装或 AI 画面(有 → 别铺这颗,报用户裁决——二次过毛片高发);③画面明暗基调(深底/浅底影响衬底与配色取舍)。把这些**连同抽帧图一起附进产片订单**交给栏目生产 skill
|
|
182
|
+
对每个「缺 HTML」且**没有 `covered_by`** 的槽位:把它的 `composition_id` + `handoff`(`theme` / `duration_hint` / `category`:`overlay` 透明叠加·不挡主体;旧派单里的满屏槽位见「旧派单里的满屏槽位」)+ beat 语义上下文,**交给第「业务分离」节解析出的栏目 MG 生产 skill 产一颗 html-particle**。产颗粒时 SHALL **直接以** `<产物目录>/mg/<composition_id>.html` **为写入路径**(MUST NOT 先在别处产再拷过来)(`gtrk mg` 就从这里读)。
|
|
183
|
+
- **产前先抽帧看底轨(`overlay` 槽位必做,别只凭派单盲产)**:颗粒最终要叠在真实画面上,构图必须因势象形。对该槽位挂点截 1-2 帧时间线画面(`gtrk client frame --at <track_st> --project "<产物目录>"`——截的就是 B-roll 三源铺齐后的最终底轨:客户端开着该工程时与编辑器所见一致;没开时本地渲出一帧,零计费、不含 MG 颗粒;图缺省落 `$GTRK_FRAMES_DIR` 或系统临时目录,用完即删,**别落 cwd / agent 自有目录**。重铺时若客户端开着,截到的画面会带上已铺的旧颗粒——判底轨构图时忽略它们)看清三件事——①真人主体/人脸的位置(颗粒 bbox 避开,呼应栏目「不盖说话人」铁律);②该处是否已有烧入包装或 AI 画面(有 → 别铺这颗,报用户裁决——二次过毛片高发);③画面明暗基调(深底/浅底影响衬底与配色取舍)。把这些**连同抽帧图一起附进产片订单**交给栏目生产 skill。
|
|
184
|
+
- **派给子代理 / 颗粒档时带上栏目硬规则原文**:产片订单交给另一个子代理或档位去做、订单里写了「不要再读 skill」「照订单做即可」这类话时,MUST 把栏目 MG 风格 skill 的**硬规则要点原文写进订单**——按栏目 skill 的实际条目逐条抄,通常包括:衬底(scrim)不透明度区间、不切两半、字号地板、字幕安全区(底部留给字幕的范围)、焦点色稀缺规则、单页语义色上限等。没抄进订单的规则,接单方就不知道,等于没有。❌ 反例:订单只写「按栏目风格做,不要再读 skill」,四颗叠层底板做到 0.8–0.96 不透明,还有一颗把左半屏铺成实色底板盖住画面。
|
|
186
185
|
- **产片订单必须附带坑位硬约束(gsap-emit v1 铁律⑦)**:颗粒 GSAP 时间线总长 ≥ **坑位时长**(该槽位 `track_ed − track_st` 包络,**不是** `duration_hint`)+ 0.3s 余量;`duration_hint` 只是动画主叙事节奏参考。主叙事播完后颗粒必须定格保持或有限循环驻留到坑位末尾;禁止全局渐隐、整体退场或清空画面。
|
|
187
186
|
- **`-aux<n>` 叠层颗粒同样处理**:`gtrk split` 若在某 beat 的 `aux_layers` 派了 `overlay`,会派生 `<beat>-aux<n>` 进 `dispatch.mg`(多为 B-roll 底轨之上叠透明概念图解)——照样产、照样存到对应 `composition_id.html`。
|
|
188
187
|
- **画幅 = 工程画布(竖屏 / 方形工程同样适用)**:颗粒根 `data-width` / `data-height` MUST 等于 `.gtrk` 的 `video_size`(竖屏 1080×1920、方形 1080×1080……),写进产片订单。`gtrk mg lint --dispatch` 与铺轨会按工程 `video_size` 比对颗粒声明的**比例**,跨比例判 `1-canvas-match` 致命、不铺(挂载是非等比缩放,铺进去就是拉伸);同比例不同尺寸(4K 工程里的 1920×1080 颗粒)放行。裸 `gtrk mg lint <file>` 不知道目标工程、只核正整数,所以仍要在订单里钉死。`gtrk render` / `gtrk project export` 的颗粒预渲按颗粒声明比例捕获(竖屏 720×1280,横屏照旧 1280×720);1.3.7 及更早的 CLI 一律按 1280×720 烤,竖屏颗粒会横胖竖扁,见到这种症状先 `gtrk upgrade`。客户端导出剪映 / PR 走客户端自己的颗粒预渲,客户端跟进前竖屏颗粒仍可能压扁,以 `gtrk project export` 的产物为准。
|
|
189
|
-
- **category 决定叠法**:`overlay` 颗粒背景透明、盖在 B-roll
|
|
188
|
+
- **category 决定叠法**:`overlay` 颗粒背景透明、盖在 B-roll 上不挡主体。最终透明度由颗粒 HTML 的 `background` 声明反推的 `opaque` 定,生产 skill 要让二者自洽(lint 会查);透明叠加颗粒在根写 `background:transparent`(正本条款是 `contracts/gsap-emit-v1.md` 铁律 4,本 skill 不复述,改了以契约为准)。派单槽位没写 `category`、产物却是满屏实心底 ⇒ lint 给非致命 `x-fullscreen-card-hint`:满屏卡该回拆分写成零槽位版式窗口交合成。
|
|
190
189
|
|
|
191
190
|
### 3. lint 门:铺之前先单测每颗(不过就退回生产 skill,别硬铺)
|
|
192
191
|
|
|
@@ -198,7 +197,8 @@ gtrk mg lint "<产物目录>/mg/<composition_id>.html" --dispatch "<产物目录
|
|
|
198
197
|
- **`1-cid-expect`(致命)——复制改名必查**:颗粒内部的 `data-composition-id` 必须等于期望 id(`--dispatch` 命中时 = 该条派单的 `composition_id`,否则 = 文件名)。**你从别的颗粒复制模板时最容易漏改内部 id**:那样铺出来的 clip 指向 A、文件注册的却是 `__timelines["B"]`,渲染必错,且两颗粒抢同一个 `[data-composition-id]` 样式作用域。改名的临时副本(`./tmp.html`)不比对,不会误伤。
|
|
199
198
|
- **`1-canvas-match`(致命)——画幅比例对不上**:给了 `--dispatch` / `--project` 时按工程 `.gtrk` 的 `video_size` 比对颗粒根声明的比例(容差 7%:DCI 4K 这类 17:9 工程里的 16:9 颗粒放行,接受 6.7% 横向拉伸),铺轨同一口径。横屏颗粒进竖屏工程就是这条。**回步骤 2 让生产 skill 按工程画幅重做**;文字模板在派单模式下重取即可(缺省就按工程画幅编)。工程缺 `.gtrk` 或 `video_size` 不合法时这条不跑,命令会明说「本次颗粒画幅未与工程比对」。
|
|
200
199
|
- **铁律④⑤「体积上限」两项**(正本条款 = `contracts/gsap-emit-v1.md` 铁律 4⑤;上限**同源自客户端颗粒运行时**,不是 CLI 的取舍):
|
|
201
|
-
- `4-html-size`(**致命,命中即短路、其余项不跑**):颗粒 HTML 超过 **2,000,000 字符**,客户端无法加载。文案会点名最大的一段 `data:` URI。处置:按实际显示尺寸裁剪缩放,不透明图改 JPEG/WebP
|
|
200
|
+
- `4-html-size`(**致命,命中即短路、其余项不跑**):颗粒 HTML 超过 **2,000,000 字符**,客户端无法加载。文案会点名最大的一段 `data:` URI。处置:按实际显示尺寸裁剪缩放,不透明图改 JPEG/WebP;仍超就把大图放图片素材轨,颗粒只留透明叠加层,或改做合成、图当槽位。云渲成功不代表客户端可加载。
|
|
201
|
+
- **大图不进颗粒**(公约 §二⁗「图片去处」):要看清内容的图(配图、论文页、新闻截图、照片)不该内联进叠层颗粒——它进合成的 `own` 槽位或底轨(运镜 / 静帧上轨);叠层只放图标、logo、小头像这类小图。别等撞上 `4-html-size` 才想起来。
|
|
202
202
|
- `4-html-size-heavy`(非致命):500,000~2,000,000 字符——客户端每次 seek 都把颗粒根节点的 outerHTML 整份快照回传,体积直接决定预览帧率。能缩就缩;**不拦铺轨**。
|
|
203
203
|
- **铁律④「实心底与透明度」两项恒非致命**(正本条款 = `contracts/gsap-emit-v1.md` 铁律 4;**本处只说看到该码怎么办,元素位置以契约为准**):
|
|
204
204
|
- `4-bg-on-root`:这颗把**实心底写在了根元素的 `style` 上**。**根元素的绘制属性会在子合成挂载时被丢弃**——那层底在成片里**一个像素都不落地**:前景照常渲出、底没了、底轨透出来,观感是「浮空面板」;而**本地播放器与客户端预览都看不出**(预览会按登记的 `opaque` 位自己给根盒打底,对这个问题结构性失明)。**报了要回步骤 2 让生产 skill 把实心底下沉为子层**——改法是机械的(把那条 `background` 声明整体搬到根下第一个全幅子层,根上改写 `background:transparent`)。⚠️ 它**不影响退出码、不拦铺轨**(避免存量颗粒一夜之间铺不进去),但**不是可以放着不管的噪音**:不改就是出片丢底。
|
|
@@ -250,7 +250,7 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
250
250
|
- **`laid`** = **本次**铺成数;**`track_total`** = **轨上现存**已铺数;**`kept`** = 其中**上轮遗留**(本次没重铺)的颗数。三个数一起读——只看 `laid` 会让「铺 1 颗、剥 20 颗」跟「补铺 1 颗」长得一模一样。恒有 `track_total = laid + kept`。
|
|
251
251
|
- **`kept_ids`** = 上轮遗留的 `composition_id` 清单。**要判断轨上某颗是不是这一轮的版本,看它在不在这里**——`kept > 0` 就意味着轨上内容与本次派单不完全对应(要全部刷新:去掉 `--only` 全量重铺)。
|
|
252
252
|
- **`removed`** = 本次被剥掉的旧自产颗粒数(= 上一轮已铺里没被保留下来的,含「剥了再铺」的那些)。
|
|
253
|
-
- **`skipped`** = 缺 HTML / lint 失败的 beat(不拦其余)——**回步骤 2
|
|
253
|
+
- **`skipped`** = 缺 HTML / lint 失败的 beat(不拦其余)——**回步骤 2 补产、重铺**,别当没看见。原因是 `covered_by_composite` 的条目(带 `window`)是**被合成接管、按设计不铺**的槽位:不算失败、不补产,也不剥离它们已铺的旧颗粒。没有照铺的开关——铺了出片也不出画;用户就是要在那段强调一个词时,交给 `/gtrk-composite` 写进合成场景本身。**注意它和 `kept_ids` 会重叠**:某颗这轮没铺成(进 `skipped`)、上一轮那条还留在轨上(进 `kept_ids`),画面在但不是新版本,跟用户说清楚。
|
|
254
254
|
- **`reason`** = 非全绿时的机读判据:`skipped`(部分没铺上)/ `empty_queue`(**拒写回**,工程未被改动)/ `no_project`(工程缺失未铺轨)。
|
|
255
255
|
- **`reprojection`** = 本次落轨时码的来源与漂移摘要(恒出,`--lint-only` 也有):`{ mode:"reprojected"|"dispatch_snapshot", degraded, reason?, drifted, max_offset, shrunk:[…], dropped:[…] }`。
|
|
256
256
|
**时码是现场重投影出来的**:命令每次都用 `transcript × 当刻 .gtrk` 重算每个 beat 的窗口(与 `gtrk split` 落地同一段代码),`dispatch.json` 里的时码只是投影那一刻的快照。**所以用户在 split 之后微调口播轨不用回去重跑 `gtrk split`**,只有**拆分稿本身**变了才要重跑。
|
|
@@ -274,7 +274,7 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
274
274
|
|
|
275
275
|
### 5. 循环到铺满
|
|
276
276
|
|
|
277
|
-
多 MG 槽位就**循环「产 → lint → 铺」直到 `dispatch.mg` 全部铺满**(`gtrk mg status`
|
|
277
|
+
多 MG 槽位就**循环「产 → lint → 铺」直到 `dispatch.mg` 全部铺满**(`gtrk mg status` 的 `todo` 归零、没被接管的槽位逐 beat 全标「已铺」、`gtrk mg` 的 `skipped` 除 `covered_by_composite` 外为空、`ok:true` 且退出码 0)。**循环中途 `skipped` 非空时命令按 `ok:false` + 非 0 退出如实上报**,那是「还没铺满」不是「命令失败」——照常补产重铺即可;`--lint-only` 同口径。
|
|
278
278
|
|
|
279
279
|
> **循环里别用 `--only` 逐颗铺**:`--only` 是增量的(安全,不会铲掉别的),但它**只刷新命中的那几颗**——轨上其余颗粒会一直停在上一轮的版本与上一轮的落轨位置(`kept_ids` 会如实点名)。循环的正确姿势是**每轮都全量重铺**:铺轨幂等,多铺几颗不花钱,而且顺带把全部颗粒按当刻时间线重投影一遍。`--only` 留给「已经铺满、只想改某一段」。
|
|
280
280
|
|
|
@@ -282,16 +282,30 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
282
282
|
|
|
283
283
|
## 读结果、给用户交代(别只说「铺好了」)
|
|
284
284
|
|
|
285
|
-
- **铺了哪些**:`laid[]` 的 `composition_id`,对应哪些 beat
|
|
285
|
+
- **铺了哪些**:`laid[]` 的 `composition_id`,对应哪些 beat;都是叠层(`overlay` 透明叠加,盖在 B-roll 上)——旧派单里的满屏槽位另说一句(见「旧派单里的满屏槽位」)。
|
|
286
|
+
- **迁移期**:`kept_superseded` 里的是「满屏卡还没做成、旧满屏颗粒先留着」的那几颗;`removed_superseded` 里的是「满屏卡已做成、旧满屏颗粒已剥」的那几颗——各说一句,别混进一般的保留 / 剥离。
|
|
286
287
|
- **没铺上的**:`skipped[]` + 原因(缺 HTML 还是 lint 失败 / 重投影后零存活)——如实说,别谎报全铺;已补产重铺的说清楚补了哪几颗。
|
|
288
|
+
- **被合成接管的**:`covered_by_composite` 的那几颗单独一句(哪几颗、被哪个窗口接管)——那段画面由合成重排,不是漏了。
|
|
287
289
|
- **落轨位置变了要说**:`reprojection.drifted > 0` 时报出「本次按当刻时间线重投影,N 个 beat 的位置与派单不同、最大偏移 X 秒」。这是对的(用户改过口播轨),但**必须让他看见**,别悄悄改掉。
|
|
288
290
|
- **报「已降级至派单快照时码」**(`reprojection.degraded:true`):不是故障、没拦你,是算不出当刻窗口、退回了可能已过期的快照。照 `reprojection.reason` 给出路——`transcript_missing` → 把 `transcript.json` 补回产物目录(`transcript/` 或 `json/` 下),或用新版 `gtrk oralcut` 重出产物;`no_project`/`gtrk_unreadable` → 把工程放回 `<产物目录>/gtrk/project.gtrk` 或 `--project` 指对目录;`no_material_clip` → 口播主轨被整条删了 / relink 换了素材 id / 拿了另一个工程的 dispatch。用户接受快照也行,但要如实说「这批位置按的是上一次投影的时间线」。
|
|
289
291
|
- **轨上有几颗不是这一轮的**:`kept > 0` 时点名 `kept_ids`——「这次只重铺了 N 颗,轨上另外 K 颗是上一轮的(位置和内容都还是旧版),要全刷新就全量重铺一次」。**别让「铺轨完成」读起来像轨上全是新的。**
|
|
290
292
|
- 想在 opencut 里精修颗粒(手调参数/时长)→ 提示用户可打开工程手调。**但要把话说全**:手调只在「这颗**没被**下一次重铺命中」时活得下来——`--only <别的 beat>` 或全量重铺时被 skip 掉的那几颗会原样保留(含手调);**一旦某次重铺真的铺到了这颗,CLI 自产的新 clip 会整条覆盖它,手调就没了**。要长期保留的手调,别放在 CLI 自产的 MG clip 上。
|
|
291
293
|
|
|
292
|
-
##
|
|
294
|
+
## 旧派单里的满屏槽位
|
|
295
|
+
|
|
296
|
+
满屏卡(标题牌、章节卡、数据卡、纯排版的并置面板)已并入合成:新拆分稿写成零槽位版式窗口,旧稿里的满屏 MG beat 在 `gtrk split` 落地时自动转成满屏卡,**新派单的 `dispatch.mg` 里没有满屏槽位**。本节只管**以前落地、没重跑拆分**的派单里还挂着的满屏槽位(`category` 为 `fullscreen` / `title`,或遗留 `mg-fullscreen` / `op-ed-title`):
|
|
297
|
+
|
|
298
|
+
- **照旧做,不拒不跳**:照旧产、照旧铺、出片照旧云渲(计费)。产片订单里写明它是不透明满屏:颗粒在根下第一个全幅子层写实心底(正本 `contracts/gsap-emit-v1.md` 铁律 4;写在根上会吃非致命 `4-bg-on-root`,成片里那层底不落地),派单有 `bg` 就用它;满屏不透明,产前抽帧可免。
|
|
299
|
+
- **声明满屏、产物没底 ⇒ 致命 `x-category-opaque`,拒落盘 / 不铺**(`gate-fullscreen-slot-needs-solid-bed`):判据只看产物有没有满屏实心底,不看它是不是模板颗粒。文字模板派单模式下 `dispatch.mg[].bg` 会自动钉进 `canvas.bg`;撞上这条红多半是派单只声明了满屏却没给 `bg`——两条出路:① 本来就该是叠加 ⇒ 派单 `category` 改 `overlay`;② 确实要盖住画面 ⇒ 补 `bg`,或在 IR 里写 `canvas.bg`。MUST NOT 靠「加一层 shape 当底」绕过(覆盖面静态判不出,`opaque` 登记不上)。
|
|
300
|
+
- **看板**:`gtrk mg status --json` 顶层 `legacy_fullscreen` = 这类槽位数(新派单为 0);大于 0 时人读看板提示迁移办法。
|
|
301
|
+
- **迁移办法 = 重跑 `gtrk split`**(拆分稿文件还在就能直接重跑):满屏 beat 转成满屏卡,再按 `/gtrk-composite` 的「满屏卡(零槽位合成)」一节做成合成——本机烘焙、不计费。派单 `layouts_declared: false` 时先 `--mode split` 做满屏卡、再 `--mode auto` 补其余窗口。
|
|
302
|
+
- **迁移期保留旧颗粒**:重跑拆分后,旧满屏颗粒(`<slug>-B07`)已不在派单里。全量铺轨时,派单里有它的转换窗口(`converted_from: "B07"`)而满屏卡还没做成合成 ⇒ 旧颗粒原样留着(回执 `kept_superseded`);满屏卡做成且在轨上之后再跑 `gtrk mg` ⇒ 旧颗粒照「计划变更」剥(回执 `removed_superseded`,不混进 `removed`)。`--only` 与 `--replace-all` 的行为不变。
|
|
303
|
+
- **独立路不封**:`gtrk mg fetch --category fullscreen` / `gtrk mg render` 照常可用,收到或推断出满屏时回执附一句「满屏卡建议做成零槽位合成」。`gtrk mg lint` 对没写 `category`、产物却有满屏实心底的派单槽位给非致命 `x-fullscreen-card-hint`(同一句话,不影响退出码)。
|
|
304
|
+
|
|
305
|
+
## 交棒 `render` 收口(你在链尾,别停在铺完)
|
|
293
306
|
|
|
294
|
-
`dispatch.mg` 全铺满、`gtrk mg status`
|
|
307
|
+
`dispatch.mg` 全铺满、`gtrk mg status` 的 `todo` 归零后**别收工**——你在链尾,顺势收口:字幕(⑤)与合成(⑥)按位次已在你之前做完,直接 `gtrk render` 出片。一句话交代即推进:「MG 颗粒已铺完,我接着出片」。
|
|
308
|
+
单独调本 skill、工程里还没上字幕时:快速成片先 `gtrk subtitle lay --project <目录>` 补上(样式取用户拍板值,没选用 default);工程里已有合成颗粒的,补完字幕那几颗会变「需重渲」,按 `/gtrk-composite` 重跑 `build → lint → lay` 再出片。
|
|
295
309
|
|
|
296
310
|
### ⚠️ `render` 收口会花钱
|
|
297
311
|
|
|
@@ -334,7 +348,7 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
334
348
|
### 逃生门:两种信号都要认(范围 + 节奏)
|
|
335
349
|
|
|
336
350
|
上面的「别收工、顺势收口」是**默认**,但**用户表达了范围保留或节奏保留时 SHALL 停在铺完这一步、
|
|
337
|
-
SHALL NOT
|
|
351
|
+
SHALL NOT 自动出片**(`gtrk render` 还是计费/耗时动作,更不能替他拍板)。
|
|
338
352
|
两者语义正交,认漏一个都会误冲:
|
|
339
353
|
|
|
340
354
|
- **范围信号 = 走多远**(我只要这一个产物):「只铺这一版 MG、暂不出片」「先不渲」「工程给我就行」。
|
|
@@ -346,8 +360,8 @@ SHALL NOT 自动上字幕出片**(`gtrk render` 还是计费/耗时动作,
|
|
|
346
360
|
特别注意「先 X **然后**我们逐步推进」:用户明说了还要往下,**范围**逃生门逐字不成立,
|
|
347
361
|
但**节奏**逃生门成立 ⇒ **停**。
|
|
348
362
|
|
|
349
|
-
停下时**必须交代下一步是什么、他说一声就继续**(例:「MG
|
|
350
|
-
|
|
363
|
+
停下时**必须交代下一步是什么、他说一声就继续**(例:「MG 颗粒已铺完。按你说的逐步来我先停在这,
|
|
364
|
+
下一步是 `gtrk render` 出片,你说一声我就接着做」),别退化成事事请示。
|
|
351
365
|
★ 上面那份「AI 回铺后待复查构图」清单**该复述照复述**——停下不等于不交代。
|
|
352
366
|
|
|
353
367
|
**没有这两类信号时不改默认**:仍按上文顺势收口。
|
|
@@ -372,7 +386,7 @@ SHALL NOT 自动上字幕出片**(`gtrk render` 还是计费/耗时动作,
|
|
|
372
386
|
|
|
373
387
|
动线(agent 替用户跑全程):
|
|
374
388
|
|
|
375
|
-
1. **现场组产片订单**:无 dispatch 可消费——按用户现场需求组订单(theme / 时长 /
|
|
389
|
+
1. **现场组产片订单**:无 dispatch 可消费——按用户现场需求组订单(theme / 时长 / 透明叠加还是盖满整幅;盖满整幅的照常做,回执会附「满屏卡建议做成零槽位合成」),驱动栏目 MG 生产 skill 产颗粒 HTML。时长问清楚:**它就是 `--duration` 的值**(独立模式没有坑位包络,这个数同时是 lint 包络、成片时长、计费时长)。
|
|
376
390
|
2. **lint**:`gtrk mg lint <颗粒.html>` 先过致命项,不过退回生产 skill 修(与铺轨同门槛,别硬渲)。
|
|
377
391
|
3. **渲**:`gtrk mg render <颗粒.html> --duration <sec> [--out <dir>]`——lint 前置 → **计费预估确认**(用户点头才提交;`--yes` 只在用户已明确授权时用)→ 云渲 qtrle → `<composition_id>.mov` 落盘(缺省 `./mg-render/<composition_id>/`,含 `task.json`/`result.json` 面包屑)。
|
|
378
392
|
4. **交付话术**:「透明 MOV 已出,直接拖进剪映即用(真透底)」。
|
|
@@ -15,7 +15,7 @@ metadata:
|
|
|
15
15
|
|
|
16
16
|
先跑 `gtrk doctor`:
|
|
17
17
|
- **`gtrk` 找不到 / command not found** → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js),再重试(外部 agent 的前置;内置 agent 已具备,跳过)。
|
|
18
|
-
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init`(一次性配 Key
|
|
18
|
+
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init`(一次性配 Key,交互式、需真终端,你别替他跑)(用户还没有 Key 就转告:打开 https://cloud.ai-mcn.tv/zh-CN ,点「注册 / 登录」,进入「仪表盘」复制 API Key;报错里也写着这句)。
|
|
19
19
|
- 全绿就往下走。
|
|
20
20
|
|
|
21
21
|
## 一条命令
|