@gitruck/cli 1.2.13 → 1.2.15

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.
@@ -0,0 +1,629 @@
1
+ # Agent、配置与命令参考
2
+
3
+ [返回首页](../README.md) · [工作流](workflow.md) · [English](reference.en.md)
4
+
5
+ ## 给 AI Agent 用
6
+
7
+ 装好后,在各家 Agent 里一句话就能调用 gtrk 的 skill:
8
+
9
+ | | |
10
+ |:--:|:--:|
11
+ | ![在 Agent 中调用 gtrk 示例 1](../assets/agent-example-1.png) | ![在 Agent 中调用 gtrk 示例 2](../assets/agent-example-2.png) |
12
+ | ![在 Agent 中调用 gtrk 示例 3](../assets/agent-example-3.png) | ![在 Agent 中调用 gtrk 示例 4](../assets/agent-example-4.png) |
13
+
14
+ `gtrk install` 会把 18 个 CLI 自带 skill(`gtrk-oralcut`·`gtrk-long2short`·`gtrk-splitter`·`gtrk-matrix`·`gtrk-mg`·`gtrk-ai-drama`·`gtrk-style-maker`·`gtrk-transcript`·`gtrk-tools`·`gtrk-music-visualizer`·`gtrk-cover`·`gtrk-travel-recap`·`gtrk-live-slicing`·`gtrk-talking-head`·`gtrk-narration`·`gtrk-voiceover`·`gtrk-food-recap`·`gtrk-vlog-docu`)装进本机检测到的 Agent。实现方式与 lark-cli 一致:gtrk 把本地 skill 源交给通用 `skills` CLI,由它维护 Agent 探测、目录映射及更新规则;gtrk 不再硬编码各家路径。
15
+
16
+ 默认使用 `~/.agents/skills` 作为统一正本,再链接到各 Agent 的兼容目录(Windows 使用 junction);链接不可用时适配器会回退复制。这样更新只有一份正本,不会让多份副本逐渐漂移。常用命令:
17
+
18
+ ```bash
19
+ # 自动探测已安装的 Agent(等价核心:npx -y skills add <gtrk包根>/skills -g -y)
20
+ gtrk skills install
21
+
22
+ # 只装指定宿主;这里使用通用 skills CLI 的 Agent ID
23
+ gtrk skills install --agents codex,cursor,gemini-cli,trae-cn
24
+
25
+ # 安装到适配器当前支持的全部 Agent(会创建较多宿主目录)
26
+ gtrk skills install --all
27
+
28
+ # 不使用链接,每个宿主各复制一份
29
+ gtrk skills install --copy
30
+ ```
31
+
32
+ > ⚠️ **升级 CLI 不会自动刷新已装的 skill。** `npm i -g @gitruck/cli@latest` 只换掉 CLI 包本体,
33
+ > 各 Agent 目录下那份 skill 仍是**上次装进去的快照** —— agent 会照着旧口径干活,**而且不报错**。
34
+ > 刷新走 `gtrk upgrade`(升 CLI + 刷 skill)或单独跑 `gtrk skills install`。
35
+ >
36
+ > 自 **1.1.3** 起这件事有信号了:需要 skill 的命令(`oralcut` / `long2short` / `split` / `matrix` /
37
+ > `mg` / `subtitle` / `project`)在检测到本机 skill 落后时,会往 **stderr** 提示一次并给出修复命令;
38
+ > 一致或判不出时**零输出**。随时自查跑 `gtrk doctor`,里面有一行「Skill 新鲜度」;
39
+ > 嫌吵用环境变量 `GTRK_SKILL_FRESHNESS=off` 整块关掉。
40
+
41
+ `--agents` 接受上游适配器和 gtrk 补充层的 Agent ID。国产 Agent 已覆盖 `trae`、`trae-cn`、`codebuddy`、`qoder`、`qoder-cn`、`qwen-code`、`kimi-code-cli`、`iflow-cli`、`codearts-agent`、`lingma`,并额外补充上游尚未登记的 `workbuddy`、`qoderwork`、`comate`。常见简写 `qwen`、`kimi`、`iflow`、`codearts`、`tongyi-lingma`、`qoder-work`、`baidu-comate` 也会自动映射。以后上游新增 Agent,gtrk 无须发版也能直接使用新 ID;已有脚本若必须写死一个目录,仍可用 `--dir <skills目录>` 走兼容复制模式。
42
+
43
+ 不同 Agent 的**输入 UI 不统一**:Claude 常把 skill 名放进 `/` 补全;Codex 的不同客户端可从 `$`、`/skills` 或 Skills 面板进入;TRAE 以 Skills 设置、显式点名或语义触发为主。因此没看到 Claude 风格的 `/gtrk-*` 下拉,不代表 skill 没安装。新 skill 没出现时,刷新窗口或新开会话。
44
+
45
+ 然后直接说「**帮我把这条口播剪一版**」,或在对应 Agent 的 Skills 入口显式选择 `gtrk-oralcut`,agent 会问清毛片 / 文稿 / 节奏,调 `gtrk oralcut --json` 跑通闭环、验证产物、把三端打开方式回给你。完整可移植 playbook 见 [`AGENT.md`](../AGENT.md)。
46
+
47
+ **一条龙都交给 agent**:不止剪口播——接着说「拆个分镜」「铺 B-roll」「铺 MG 颗粒」「渲成片」,agent 会配合各车道生产 skill 调 `gtrk split` / `gtrk matrix` / `gtrk mg` / `gtrk render` 跑完整条 **成片管线**。**你只管对话、敲 CLI 的活交给 agent**——下面的「命令参考」是给 agent 查参数用的,不用你自己去终端敲。
48
+
49
+ ### agent 能驱动的能力(skill 驱动命令)
50
+
51
+ **每个功能 = 一个 skill(脑,你触发、懂 SOP 位置与用户交互)驱动一个 gtrk 命令(手,确定性机械活)。** 成片是**有先后的 SOP、每步用户可介入**,不是一次性并行铺完——`/gtrk-X` skill 负责在对的时机、带着你的确认,去跑 `gtrk X`:
52
+
53
+ | SOP | 驱动 skill(你对 agent 说) | 底层命令(agent 跑) | 做什么 |
54
+ |:--:|---|---|---|
55
+ | ① | `/gtrk-oralcut` | `gtrk oralcut` | 智能剪口播 → 客户端/剪映/PR 三方工程 + transcript |
56
+ | ② | `/gtrk-splitter` | `gtrk split` | 拆分派单 → `dispatch.json`(A_ROLL/MG/AI_DRAMA/FILM_BROLL 四车道) |
57
+ | ③ | `/gtrk-matrix` | `gtrk matrix` | **B-roll 底轨·影视/本地素材腿**:铺候选轨 → **用户调整/挑选**(opencut 小眼睛切换) |
58
+ | ③ | `/gtrk-ai-drama` | (无命令,纯创作) | **B-roll 底轨·AI 情景片段腿(与 matrix 同阶段,不是最后)**:产四段描述稿(故事背景/角色/分镜/原文,中英分块)→ 任意外部平台出片、手动回铺(产物即描述文本、无机械尾巴,同 `/gtrk-style-maker` 只 skill 无命令) |
59
+ | ④ | (无 skill) | (无命令) | **全局抽帧检查画面构图**:对三源合并后的最终底轨抽帧,用户确认构图——这是 agent 纪律硬门,供 ⑤ 的排版避让决策使用 |
60
+ | ⑤ | `/gtrk-mg` | `gtrk mg` | **MG(含 ov)最后叠上**(叠在已定稿、构图已核的底轨之上) |
61
+ | — | `/gtrk-style-maker` | (无命令,建栏目) | 一次性访谈式建你栏目的风格体系(skill 家族 + 栏目配置,见下节) |
62
+ | ③′ | 「**屏录画中画**」 | `gtrk pip lay` | 把口播粗剪的切点镜像到同步录的屏录 / 第二机位,铺屏录满幅轨 + 人像画中画副本轨(圆 / 圆角方 / 爱心 / 菱形 / 星形蒙版,可圆角);纯本地零计费;低置信时产对齐工程让客户端拖齐后 `--resume` |
63
+ | — | (收口) | `gtrk render` | 本地渲染 gtrk 工程 → 成片 mp4(含 overlay 与 MG 颗粒;颗粒未命中缓存时云渲计费,`--no-particles` 可跳过) |
64
+ | ✂️ | `/gtrk-long2short` | `gtrk long2short` | 长剪短·粗剪:长视频语义选段+跳剪 → 逐 clip 出客户端/剪映/PR 三方工程(毛片不上传),**不在成片 SOP 序列内**、随时可独立用 |
65
+ | 📝 | `/gtrk-transcript` | `gtrk transcript` | 本地视频/配音音频 → 一个含 Agent 总结、时码记录和纯文本的 Markdown,**不在成片 SOP 序列内** |
66
+ | 🧰 | `/gtrk-tools` | `gtrk tool <name>` | 单点工具族(图转运镜 / 图片·视频抠像…)——单发单收,**不在成片 SOP 序列内**、随时可独立用 |
67
+ | 🎵 | `/gtrk-music-visualizer` | `gtrk music-visualizer` | 一首歌 → 频谱可视化成片(模板 + 可选背景/封面 + 配色样式),**不在成片 SOP 序列内**、独立引流用 |
68
+ | 🖼️ | `/gtrk-cover` | (无命令,纯创作) | 封面工作台两阶段:设计诊断 + 三尺寸中英双版文生图 Prompt → 用户外部平台抽图 → H5 排字工作台(拖拽/滚轮微调、一键导出多尺寸 PNG)。栏目封面审美经栏目配置 `style.skills`(`produces:"cover"`)注入;**不在成片 SOP 序列内**(投放配套的「第 0 阶段」) |
69
+ | 🧭 | `/gtrk-talking-head` | 编排 `gtrk audio` → `oralcut` → `split` → `matrix` → `mg` → `audio lay` → `subtitle lay` | **口播链图纸**:一条或一组真人出镜毛片 → 外录音轨对齐换轨、多段拼接、粗剪、拆分派单、B-roll/MG 字卡、BGM、字幕 → 客户端可出片工程 |
70
+ | 🧭 | `/gtrk-travel-recap` | 编排 `gtrk tool audio_tts_clone` → `project init` → `split` → `matrix` → `mg` → `audio lay` → `subtitle lay` | **旅拍解说图纸**:旅拍素材夹 → AI 理解素材、写三段式解说稿、一次确认 → 配音/建工程/拆分/B-roll/字卡/BGM/字幕全自动跑完 → 客户端可出片工程 |
71
+ | 🧭 | `/gtrk-live-slicing` | 编排 `gtrk long2short`(超长回放先分段) | **直播切片图纸**:数小时直播回放 → 分段(服务端 2h 硬闸)→ 选题清单确认 → 一批逐 clip 粗剪工程(gtrk + 剪映 + PR),按画面形态配分屏 |
72
+ | 🧭 | `/gtrk-narration` | 编排 `gtrk transcript` → `project init` → `split` → `matrix` → `mg` → `audio lay` → `subtitle lay` | **通用解说图纸(解说链正本)**:素材自带时序的长东西(影视长片/游戏实况/探店记录…)→ 提炼梗概与看点 → 精简叙述重讲成解说成片工程;旅拍解说与美食解说是它的垂类实例 |
73
+ | 🧭 | `/gtrk-voiceover` | 编排 `gtrk tool audio_tts_clone` → `project init` → `split` → `matrix` → `mg` → `audio lay` → `subtitle lay` | **配音链快速成片预设**:写好的稿(或 AI 代写)→ 配音 → 自动配画面 → 字卡/BGM/字幕 → 客户端可出片工程;适用科普/情感电台/观点/带货/盘点等无自带时序的题材 |
74
+ | 🧭 | `/gtrk-food-recap` | 沿 `/gtrk-narration` 链路 | **美食解说垂类图纸(解说链示例)**:探店/密着纪实长片或做饭流程记录 → 提炼看点重述成中文美食解说成片工程 |
75
+ | 🧭 | `/gtrk-vlog-docu` | 编排 `gtrk transcript` → `tool audio_tts_clone` → `split` → `matrix` → `mg` → `audio lay` → `subtitle lay` | **Vlog 纪实图纸**:一批现场素材 → 素材理解、选档写稿、一次拍板 → 同期声骨架 + 旁白配音 + B-roll + 字幕层 + BGM 全自动 → 客户端可出片工程;「现场同期声 × 后期旁白」双声道交替,区别于纯口播链与纯配音链 |
76
+
77
+ > **skill 与命令的区别**:`/gtrk-mg` 是**脑**——懂它在 SOP 第 ⑤ 步(B-roll 三源全齐、构图核过才铺 MG)、带用户确认、按栏目配置解析该产哪种颗粒;`gtrk mg` 是**手**——纯确定性 lint + 铺轨。你对话触发 skill,skill 替你跑命令。
78
+ > 上面 18 个 `/gtrk-X` 都是 **CLI 自带框架 skill**(`gtrk skills install` 装;名单与「给 AI Agent 用」一节、「结构」一节完全一致)——其中 🧭 标记的 7 张是**组合图纸**(一句话跑全链,只编排上面的单命令 skill、本身不新增命令);`/gtrk-long2short` 独立驱动长剪短,`/gtrk-transcript` 独立驱动视频/音频转文字稿,`/gtrk-tools` 只负责单点工具族,`/gtrk-cover` 管封面,四者都不属成片 SOP 序列;`/gtrk-ai-drama`·`/gtrk-style-maker`·`/gtrk-cover` 是纯创作 skill(无命令)。栏目专属的**视觉风格/生产内容**另由你栏目的生产 skill(`/gtrk-style-maker` 产、经栏目配置 `style.skills` 绑定)供,不写死在这些框架 skill 里。
79
+
80
+ **各车道的具体视觉/内容怎么产**——MG 动态图长什么样、AI 情景动画什么调性——不写死在 CLI 里,而由**你自己栏目的生产 skill** 提供(用 `/gtrk-style-maker` 访谈式产出、留本地)。它们经**栏目配置 `style.skills[].produces`**(值 = 车道名)绑定,`gtrk mg` / `gtrk matrix` 等**通用驱动器**据此消费。**驱动方向 = CLI 驱动栏目 skill**:栏目 skill 只供风格/内容、不含任何「跑哪条命令」的编排职责;框架只认车道与管线接口,画面风格永远归你的栏目。不建栏目就用内置默认,端到端照常跑。
81
+
82
+ ---
83
+
84
+ ## 栏目与风格:两层结构
85
+
86
+ > **栏目配置是装修厨房,成片是每天做菜。你不会每做一道菜先重新装修一遍厨房,但每道菜确实都在你装修好的厨房里做。**
87
+
88
+ 整个体系分两层,时间尺度完全不同:
89
+
90
+ **【栏目层 · 一次性/低频】= 建栏目(装修厨房)**
91
+ 跑 `/gtrk-style-maker`(meta skill),它通过启发式访谈帮你想清楚**你自己的**视觉语法——不预设任何维度:不假设你有叙事结构、有主题系统、视觉分动画/实拍,你的维度和取值全部由你自己定义。产出:
92
+
93
+ - 你自己的可执行 skill 家族(落到当前 Agent 的用户级 skills 目录,黑盒、留本地)
94
+ - 栏目内共享词表(家族各 skill 引用,防多处定义漂移)
95
+ - 栏目配置 `~/.gitruck/columns/<id>.json`(词表 vocab + B-roll 检索偏好 + style 引用清单)
96
+
97
+ **【成片层 · 每片跑】= 做菜(流程形状不变)**
98
+ 剪口播 → 拆文稿 → 派单(B-roll 检索 / 动效 / 情景动画)→ 装配 → 渲染。每一步显式消费当前栏目配置:拆文稿按你的词表校验(`--column <id>` 或 config `defaultColumn`),B-roll 检索按你栏目的检索偏好(`broll.column_tag_ids` 栏目标签 / `material_class_policy` / facets),各车道走你自己的生产 skill。
99
+
100
+ **不建栏目?直接用默认"厨房"。** 零配置 = 内置默认栏目,端到端照常跑通,行为与配置化之前逐字节一致——栏目层是可选资产,不是必经关卡。
101
+
102
+ **管线契约**:框架对审美零预设、对管线接口全权威。产物要进渲染管线的 skill 须满足对应契约(见 [`contracts/`](../contracts/README.md),如 HTML 动画颗粒的 `gsap-emit v1`);契约只约束机器可判定的管线属性,画面长什么样永远归你。
103
+
104
+ ---
105
+
106
+ ## 配置
107
+
108
+ `gtrk init` 把配置写到 `~/.gitruck/config.json`(用户级统一目录,config / 缓存 / ffmpeg / 栏目配置全在 `~/.gitruck/`)。读取优先级:**环境变量 / `.env` > `init` 持久配置 > 默认根地址**。
109
+
110
+ | 项 | 来源 | 说明 |
111
+ |---|---|---|
112
+ | `GITRUCK_API_KEY` | env / init | 鉴权 Header `Authorization` 的**裸值**(非 Bearer) |
113
+ | `GITRUCK_API_BASE` | env / init | API 根地址,默认 `https://api.ai-mcn.tv:10000` |
114
+ | 剪映草稿目录 | init / 自动探测 / `--jianying-draft-dir` | 决定剪映草稿落哪、能否直接打开 |
115
+ | `defaultColumn` | config.json 手填 | 缺省栏目配置 id(`gtrk split` 未传 `--column` 时用它;再缺省 = 内置默认栏目) |
116
+ | 栏目配置 | `~/.gitruck/columns/<id>.json` | 一栏目一文件;由 `/gtrk-style-maker` 生成登记,也可手写 |
117
+
118
+ 非交互配置(脚本 / CI):
119
+
120
+ ```bash
121
+ gtrk init --api-key <KEY> --jianying-draft-dir auto -y
122
+ ```
123
+
124
+ 随时 `gtrk doctor` 自检:
125
+
126
+ ```
127
+ ✅ 运行时:node v24.x
128
+ ✅ CLI 版本:v0.3.0(已是最新)
129
+ ✅ API Key:已配(gc_xxx…)
130
+ ✅ 云端连通 + 鉴权:可达,鉴权通过
131
+ ✅ 剪映草稿目录:C:\Users\…\com.lveditor.draft
132
+ ```
133
+
134
+ ### 枚举清单(`--refresh-catalog`)
135
+
136
+ `gtrk doctor` 里有一行「枚举清单」:CLI 从服务端拉一份**对外枚举的全集**(字幕样式与颜色、语种码、
137
+ 工程文件格式、节奏预设、任务可用性等),落在 `~/.gitruck/catalog.json`,24 小时自动刷新。
138
+
139
+ 有了它,`--subtitle-type` 这类参数传错时**在上传之前**就告诉你,并列出当前可用值;
140
+ 服务端新增一种样式,你不必升级 CLI 就能用上。
141
+
142
+ ```bash
143
+ gtrk doctor --refresh-catalog # 立刻重拉(无视 24 小时新鲜期)
144
+ ```
145
+
146
+ **拉不到清单不影响使用**:CLI 会沿用上一次的快照;完全没有快照时**跳过本地校验、直接提交**,
147
+ 由服务端裁决——服务端白名单永远是唯一真相源。要彻底关掉这次拉取,设 `GITRUCK_CATALOG_OFFLINE=1`。
148
+
149
+ ### 崩溃报告与关闭方式
150
+
151
+ gtrk 崩溃时(未捕获异常 / 未处理的 Promise 拒绝 / 顶层出口的程序缺陷)会自动上报一条报告,帮我们定位缺陷。**默认开启,首次配置时会告知一次。**
152
+
153
+ **发送的内容只有这些**:错误消息、错误堆栈、来源标识(`cli`)、CLI 版本号、本次累计发生次数,以及(仅当崩溃发生在一个云端任务过程中时)那个任务的 ID。
154
+
155
+ **明确不发送**:素材文件与内容、工程文件与路径列表、你的文稿、API Key(发送前会把 Key 的字面值与形如 `gc_…` 的 token 替换成 `<KEY>`)、设备标识、主机名、环境变量。
156
+
157
+ **只上报「崩溃」,不上报「预期内的失败」**:文件不存在、参数不合法、额度不足、命令用错——这些你看得懂的报错一条都不会发。
158
+
159
+ 三种关法(任选其一,都是即时生效):
160
+
161
+ ```bash
162
+ gtrk init --no-crash-report # 写进配置,永久关
163
+ ```
164
+
165
+ ```bash
166
+ GITRUCK_CRASH_REPORT=0 gtrk oralcut a.mp4 # 环境变量,临时关一次(优先级高于配置)
167
+ ```
168
+
169
+ 或直接在 `~/.gitruck/config.json` 里写 `"crashReport": false`。
170
+
171
+ 当前状态随时可查:`gtrk doctor` 的「崩溃自动上报」一行会写明开 / 关,以及关是被谁关的。关闭后崩溃的呈现与退出码**与开启时完全一致**——它只影响发不发那条报告。
172
+
173
+ ---
174
+
175
+ ## 命令参考
176
+
177
+ 常用流程入口:`gtrk oralcut` 剪口播、`gtrk long2short` 切高光、`gtrk transcript` 转文字稿、`gtrk project init` 从配音建工程。`oralcut` / `long2short` 单次源片不能超过 2 小时;超长直播先分段,见[工作流指南](workflow.md)。其余命令的最新参数也可用 `gtrk <命令> --help` 查询。
178
+
179
+ ### `gtrk long2short` / `gtrk pip` / `gtrk qc` — 常用补充
180
+
181
+ - `gtrk long2short <input>`:按话题选段并跳剪,逐 clip 输出 gtrk / 剪映 / XML 工程;`--split-screen` 使用 720p 代理做智能分屏;`--output-size` 选择画幅;`--subtitle-out` 另产逐 clip 字幕。每次只选一种画幅,横竖屏分别运行;成片条数由内容决定。完整参数见 `gtrk long2short --help`。
182
+ - `gtrk pip lay`:把同步录制的屏录或第二机位按口播剪点铺成画中画。两源需有可对齐的公共声音;低置信时先在客户端校准,再按提示恢复。运行 `gtrk pip lay --help` 查看输入、形状、位置和偏移参数。
183
+ - `gtrk qc <成片>`:检查闪帧、黑帧、冻结、音量和同步问题;用 `--gtrk` 提供工程上下文,`--fail-on` 控制管线门槛。检查结论供定位问题,不自动替你修片。
184
+
185
+ ### `gtrk matrix --online` — 当前源码的外部平台检索入口
186
+
187
+ 此入口来自当前开发工作区,安装版是否提供以 `gtrk matrix --help` 为准,云端可用性另行确认。
188
+
189
+ | 参数 | 用途与边界 |
190
+ | --- | --- |
191
+ | `--online` | 检索外部平台 B-roll,仅支持单条 search 或派单消费;与 `--local` 互斥。单条 search 必须给 `--out <结果.json>` 保存结果及断线恢复记录;派单消费需要 `--project` 或 `--dispatch`。这是云端任务,不能按纯本地工具理解 |
192
+ | `--platforms <list>` | 逗号分隔 `youtube,vimeo,tiktok,bilibili`,仅配合 `--online`;不指定时查询已登记的四个平台。实际结果仍取决于服务与来源可访问性 |
193
+ | `--online-session <name>` | 外部检索批次名,仅配合 `--online` 且不可为空;同批次续跑,换名称发起新搜索,可能产生新任务与费用 |
194
+
195
+ ### `gtrk transcript <本地视频|配音音频>`
196
+
197
+ 把本地视频或配音音频转为一个多层级的 Markdown 文字稿。只接受本地文件路径:视频在本机抽取、音频在本机转码为 16 kHz 单声道音频,只上传音频衍生物,原文件不会上传,也不支持 URL 或平台视频下载。
198
+
199
+ ```bash
200
+ gtrk transcript "D:/素材/采访视频.mp4"
201
+ gtrk transcript "D:/素材/采访视频.mp4" --lang zh-CN --out "D:/文字稿/采访.md" --json
202
+ ```
203
+
204
+ 缺省只生成 `D:/素材/采访视频-transcript.md`,内容固定为:
205
+
206
+ 1. `## 总结`:CLI 先标记为待完成,由 `/gtrk-transcript` 驱动 Agent 阅读全文后生成并写回;
207
+ 2. `## 文字记录`:以 `[00:01:23]` 开头的可读段落;
208
+ 3. `## 纯文本`:完整识别正文,便于整段复制。
209
+
210
+ 实时计费在运行前从官网价格表按 `asr` 查询,CLI 与文档不保存价格数字。`--json` 的 stdout 只输出 `{ok,taskId,fileId,output,transcriptJson,summaryPending}`,其中 `output` 指向这一个 Markdown;`summaryPending:true` 表示 `/gtrk-transcript` 驱动 Agent 还需生成语义总结、原地替换待总结标记,完成后仍只交付同一个文件。
211
+
212
+ > `--json` 时另在源文件旁产一份句级时码 `<名>-transcript.json`(`utterances[]{id,text,st,ed}` + `material_id` + `text_hash` + `duration`,与 `gtrk split` 的 transcript 结构逐字段对齐),可直接被 `gtrk project init --transcript` 兜底路消费。**TTS 合成的配音勿走本零件重跑 ASR**——`gtrk project init --tts-task` 直取服务端句级时码,零 ASR 零额外计费。
213
+
214
+ ### `gtrk oralcut <毛片>`
215
+
216
+ | 参数 | 作用 | 缺省 |
217
+ |---|---|---|
218
+ | `-s, --script <file>` | 文字稿 txt(有稿按稿剪、更准) | 探毛片同名 `.txt`;无则无稿智能重建 |
219
+ | `-p, --preset <p>` | 节奏 `steady`\|`concise`\|`compact`(松→紧) | `concise` |
220
+ | `-o, --out <dir>` | 自定义产物目录 | `<毛片名>-video-project-<时间戳>` |
221
+ | `-f, --formats <list>` | 三方格式逗号分隔 | `gtrk,jianying,xml` |
222
+ | `--jianying-draft-dir <dir>` | 剪映草稿根目录(或 `auto`) | 读 init 配置 / 自动探测 |
223
+ | `--reupload` | 强制重传,忽略上传缓存 | 关 |
224
+ | `--no-open` | 完成后不自动打开产物目录 | **默认自动打开** |
225
+ | `--json` | 机读:stdout 只输出结果 JSON(给 agent / 脚本) | 关 |
226
+
227
+ `--json` 输出(成功时 stdout 单行):`{ ok, outDir, files:{gtrk,jianying,xml}, jianyingDraftPath, rendered, report, errors, taskId, fileId }`;命令失败则进程非 0 退出、报错走 stderr、stdout 无 JSON。
228
+
229
+ > 每次跑批都会把这份结果**恒写一份 `result.json` 到产物目录**(不受 `--json` 约束);提交成功后还会落一份 `task.json` 面包屑。即便 stdout 丢了、或中途崩了,报告与 `taskId` 都在盘上,可用下面的 `oralcut-result` 秒级取回、无需重跑云端。
230
+
231
+ ### `gtrk oralcut-result <taskId> --out <目录>`
232
+
233
+ 按 `task_id` 从云端取回一个**已完成**任务的报告与三方工程产物(可选本地渲染成片),**跳过预处理 / 上传 / 提交 / 轮询**——报告丢了、或想换台机器再拉一次产物时用它,不重跑云端。
234
+
235
+ | 参数 | 作用 | 缺省 |
236
+ |---|---|---|
237
+ | `-o, --out <dir>` | 产物目录 | **必填**(2026-09-08 起无缺省;`--out .` = 当前目录本身) |
238
+ | `--render` | 额外本地渲染成片(需原毛片仍在 gtrk 内嵌路径 + ffmpeg) | 关 |
239
+ | `--jianying-draft-dir <dir>` | 剪映草稿根目录(或 `auto`) | 读 init 配置 / 自动探测 |
240
+ | `--no-open` / `--json` | 同 `oralcut` | — |
241
+
242
+ > 取结果需用**提交该任务的同一账号** API Key(异账号 / 已删任务报 `TASK_NOT_FOUND`)。报告存于任务记录、长期可取;底层产物文件约 **60 天**后被清理,届时仍能取回报告、但产物下载会 404(命令会提示、并照常落盘报告)。
243
+
244
+ ### `gtrk split [拆分稿]` — 视觉拆分派单器
245
+
246
+ 成片 × transcript 投影 → beat 分镜。**无 positional = 导出投影视图**(把当前 `.gtrk` 时间线 × transcript 投影成 beat 视图,供拆分/校对,不写回);**带拆分稿 = 校验落地**(校验拆分稿机器契约 → 投影出 beat 时码 → 原子写回 `struct_meta.split` + 产 `split/dispatch.json` 派单清单,驱动 A_ROLL / MG / AI_DRAMA / FILM_BROLL 四车道)。时码永远归 CLI(拆分稿只描述「哪段做什么」、不写时码)。
247
+
248
+ | 参数 | 作用 | 缺省 |
249
+ |---|---|---|
250
+ | `--project <dir>` | oralcut 产物目录(自动定位 `gtrk/project.gtrk` 与 `transcript/transcript.json`) | — |
251
+ | `--gtrk <path>` / `--transcript <path>` | 显式指定工程 / transcript(非标准布局兜底) | 由 `--project` 推 |
252
+ | `--column <id>` | 栏目配置 id(按你栏目词表校验 lane / category / produces) | config `defaultColumn` → 内置默认栏目 |
253
+ | `--md` | 落地时额外渲染人读稿 `split/visual-split.md`(由 JSON 单向渲染) | 关 |
254
+ | `--words` | 视图模式附字级明细 | 只出句级 |
255
+ | `--json` | 机读:stdout 只输出结果 JSON | 关 |
256
+
257
+ > 落地产物 `dispatch.json` 三队列 → 下游消费:`mg`(MG 颗粒)→ `gtrk mg` 命令、`film_broll` → `gtrk matrix` 命令、`ai_drama` → `/gtrk-ai-drama` skill(产四段描述稿·中英分块,纯创作、无命令)。配套 skill `/gtrk-splitter` 产拆分稿。
258
+ >
259
+ > **派单条目自带 `span:{from,to}`**(该条目对应的 utterance 区间;`overlay` aux 派生条目写 **aux 自己的** span,可为主 beat span 的子区间)。**`track_st/track_ed` 是投影时刻的快照**——`gtrk mg` / `gtrk matrix` 消费时会**现场重投影**(见下),所以改完口播轨**不必**回来重跑 `gtrk split`,只有拆分稿本身变了才要重跑。
260
+
261
+ ### `gtrk patch <move|trim|split|set>` — 元素级编辑(改工程唯一入口)
262
+
263
+ 改一个 clip / gap / 颗粒的时码或参数。**agent 勿裸手改 `.gtrk` JSON** —— 片段时码是两套并存的
264
+ (`clip_st`+`clip_ed` 与 `clip_st`+`duration`),改一份不改另一份是**静默失败**:客户端优先读 `clip_ed`,
265
+ 而后端不强校验它,于是没人报错、成片却用了陈旧出点。本命令负责恒等式同步 + 帧对齐 + 写前全档校验。
266
+
267
+ ```bash
268
+ gtrk patch move --project <dir> --clip c2 --to 5.0
269
+ gtrk patch trim --project <dir> --clip c2 --out -1s
270
+ gtrk patch split --project <dir> --clip c2 --cut 5.5
271
+ gtrk patch set --project <dir> --track audio:1 --at 3.0 --volume 0.5
272
+ ```
273
+
274
+ | 参数 | 作用 | 缺省 |
275
+ |---|---|---|
276
+ | `--project <dir>` / `--gtrk <path>` | 工程目录(自动定位 `gtrk/project.gtrk`)或直接给路径 | — |
277
+ | `--clip <clip_id>` | 按 id 寻址。命中 video/audio **镜像对**时视为一个编辑单元 | — |
278
+ | `--track <kind:idx> --at <sec>` | 按位置寻址(`track_st ≤ at < track_ed`)。与 `--clip` 互斥 | — |
279
+ | `--to <sec\|Nf>` | `move` 的落点 | — |
280
+ | `--in` / `--out` / `--set-in` / `--set-out` / `--slip` | `trim` 的五种语义(前两个相对、中两个绝对、`--slip` 只换源窗) | — |
281
+ | `--cut <sec\|Nf>` | `split` 的切点。⚠️ 与寻址用的 `--at` 是两个参数 | — |
282
+ | `--muted` / `--volume <gain>` / `--opaque` | `set` 的元素级参数(`--volume` 是线性增益不是 dB) | — |
283
+ | `--total <sec\|Nf\|max>` | `set` 的顶层总长(工程级 op,与元素寻址互斥) | — |
284
+ | `--ops <file\|->` | 批量事务:一次读、全算、全校验、一次写;任一条失败**零写** | 关 |
285
+ | `--dry-run` | 只算与校验、不写文件 | 关 |
286
+ | `--json` | 机读回执到 stdout(人读日志转 stderr) | 关 |
287
+
288
+ > 时码字面:秒(`3.5` / `3.5s`)或帧(`105f`);相对量带正负号(`-1s`)。
289
+ >
290
+ > 回执含 `ops[].resolved` 定位三元组 `{track, clip_id, track_st}` —— 下一轮据它复核「所指是否仍是同一元素」。
291
+ > `preexisting[]` 是**入档既存**的不变量问题(非本次造成,不阻断);本次改动造成违规则**零写非 0**。
292
+ >
293
+ > ⚠️ 空档(gap)不能用 `--clip ""` 寻址:契约允许多个 gap 共享该取值,它不构成地址;用 `--track/--at`。
294
+
295
+ ### `gtrk matrix` — B-roll 检索 + 候选铺轨
296
+
297
+ **无 positional = 派单消费**:读 `split/dispatch.json` 的 `film_broll` 队列 → 双口检索 → 产候选清单 `split/broll-plan.json` + 下载 preview 代理、在工程里平铺 N 条候选轨(opencut 打开即可用轨道小眼睛对比挑选)。**`matrix search "<query>"` = 单条 ad-hoc 检索**(不依赖派单)。**`matrix fetch <clip_id...>` = 精剪期拉原片**(脱离工程,见下)。
298
+
299
+ | 参数 | 作用 | 缺省 |
300
+ |---|---|---|
301
+ | `--project <dir>` | oralcut 产物目录(定位 `split/dispatch.json` 与产物落点) | — |
302
+ | `--dispatch <path>` | 显式指定 `dispatch.json` | 由 `--project` 推 |
303
+ | `--column <id>` | 栏目配置 id(按你栏目 B-roll 检索偏好:标签 / material_class / facets) | config `defaultColumn` → 内置默认栏目 |
304
+ | `--lay <n>` | 候选铺轨数:平铺 N 条 B-roll 候选轨(`0` = 只出 plan 不铺轨) | `1` |
305
+ | `--top-k <n>` | 每 query 候选数上限(覆盖派单 shots;服务端上限 50) | 派单值 |
306
+ | `--material-class <c>` | 素材类型 `real_shot` \| `concept`(仅矩阵成员口;覆盖栏目策略) | 栏目策略 |
307
+ | `--score-floor <f>` | 填充置信度地板:segment score 低于此值不采纳、槽位留空——留空处**露黑底垫轨**(默认铺;除非 `--no-black-bed` 才露主轨)。调高会收缩取材池,整段铺不满即纯黑压口播,调完先看空洞告警 | `0.2` |
308
+ | `--no-black-bed` | 不铺纯黑底垫轨(默认铺一条) | 默认铺 |
309
+ | `--force-relay` | 候选轨已被你在客户端编辑过时仍强剥重铺(缺省会拒铺并保留那条轨)——**会删掉已确认原片的 `broll-raw-*` 素材登记、盘上原片成孤儿** | 关 |
310
+ | `--arrange <m>` | **B-roll 编排取数路**,**按素材来源自动定档、一般不用传**:铺你自己电脑里的素材 → `cloud`(编排在云端做,按「编排量」计费,跑前报预估并征求确认,`--yes` 跳过);铺素材矩阵的素材 → `local`(编排仍在本机、不计费,逐字不动)。`shadow` 是观测档:本机照跑照铺轨、云端只对拍不采纳。⚠️ 本地素材路上 `--arrange local` 不受理(传了报参数错);云端拿不到产物时**直接报错**,不会悄悄换算法把活干完 | 按素材来源自动 |
311
+ | `--arrange-qc` | **编排期质检**(缺省关):落轨**之前**就查每个 beat 的卡点句「画面有没有给到稿子说的东西」,没给到就换候选重排,最多 2 轮,到限即交付并如实登记还差哪几句。全程零渲染——替代「铺完 → 渲 → 看 → 重铺 → 再渲」那两轮。⚠️ 判定走素材理解口、**按帧计费**(每个卡点句 1 帧/轮,命中判定缓存的不重复计费),跑前报预估并征求确认(`--yes` 跳过)。与 `--arrange` 正交:本机档与云端档都能开 | 关 |
312
+ | `--arrange-cost-cap <n>` | 云端编排单次编排量上限:超限服务端**前置拒绝**、零执行零计费(不是跑到一半掐断)。只在 `--arrange shadow\|cloud` 时有意义 | 不限 |
313
+ | `--dump-request <file>` | **排障用**:把**实际上行的**云端编排请求体逐字节写到该文件。服务端**不保存你的 plan**(只留规模摘要),所以出了问题只有这份文件能复现——把它发给我们即可。⚠️ **不能指向工程目录内**(工程会被打包、拷贝、同步出去,而这份文件里有你的 beat 名与检索词);开 `--arrange-qc` 时每轮各写一份,第 N 轮落在同名加 `.roundN`。机读回执在 `lay.arrange_run.dump_request` | 不写 |
314
+ | `--explain` | **外发调参仪表**:缺省的机读账面只给「留空槽数」`lay.dedup.emptySlots`(够判断素材池是不是不够用),其余调参用的细账(其中多少是窗口精修致空、跳剪避让枯竭放行几次、取用了几个高运动/模糊段)收在本开关后,人读日志同口径。不影响任何决策,工程产物逐字节不变 | 关 |
315
+ | `--arrange-estimate-only` | **只要预估不要执行**:走到云端编排的计价确认那一步就停,报出编排量后**成功**返回(`ok:true` + `estimateOnly:true`——那是「我在做决定」,不是「我拒绝了」),零云端调用、工程文件零改动。机读值在 `lay.arrange.units` / `lay.arrange.scale`。⚠️ 它省的是**云端那一次调用与其计费**(以及其后的候选下载与落轨),不是整条链:编排量的分母本来就要读工程、读 plan、做重投影才算得出。素材矩阵路报 `applicable:false` 而**不是 0**。与 `--yes` 同给时以本开关为准 | 关 |
316
+ | `--cut-align <ratio>` | 句界吸附目标比例 0..1:`0.7` ≈ 约七成字幕句起点恰逢镜头切点、三成有意错开(全对齐反而机械),`0` = 关闭、回旧节奏切槽。⚠️ 句级时码取 `transcript` 现场重投影(与关键词锚同源),**重投影降级时自动回旧行为并告警**——那一轮的吸附比例不作数 | `0.7` |
317
+ | `--gap-fill <mode>` | 音频驱动工程主轨的空洞怎么填:`fast` = **尽量不留黑**(放宽 score 地板从候选池填 → 耗尽则延长相邻颗粒 → 再耗尽跨 beat 借候选 → 短于最小镜头长的残洞也补真画面 → 补不满整段才垫黑片);`solid` = 一律黑片垫齐(精修时一眼看出「这里没匹配到」);`none` = 原样留 gap。⚠️ `fast` 借来的画面与本段稿子相关性弱、次地板槽是不到 1.2s 的快切,两者都会在日志里按 `kind` 报成 `borrowed` / `subfloor`——**如实告知,不是缺陷**;`none` 撞上客户端主轨磁吸会把 gap 吸掉,导致其后画面与配音**整体错位** | `solid` |
318
+ | `--highlight-weight <w>` | 仅 `matrix lay`:把「有没有看点」(信息量 / 戏剧性 / 情绪强度 / 稀缺性)融进候选排序,0..1。与 `--mark-weight`(画面好不好看)**正交**,两权之和钳到 1。⚠️ 看点分取 `describe` 的理解缓存,**没跑过 `describe` 就等于没开**——无缓存候选按中性处理,权重回吐给相似度 | `0`(关闭、零回归) |
319
+ | `--decode-path <mode>` | 仅 `matrix index`:场景检测的解码路 `auto` \| `gpu` \| `cpu` \| `full`。`auto` 自动探测硬解并**逐素材降级**(推荐);`gpu`/`cpu`/`full` 钉死某档且**失败不降级**(对照与排障用)。⚠️ 缺省仍是 `full`(旧行为),要提速得自己传 `auto` | `full` |
320
+ | `--proxy-width <n>` | 仅 `matrix index`:代理解码宽度。⚠️ 再往下保真度明显劣化,**勿随手调小** | `384` |
321
+ | `--proxy-scaler <name>` | 仅 `matrix index`:代理缩放算法。缺省 `neighbor`(点采样不滤波,实测比 `bicubic` 又快又准)。⚠️ 改它基本只有做对照实验才需要 | `neighbor` |
322
+ | `--exclude-recent <n>` | 仅 `matrix material --scope audio`:选曲避让最近 n 首用过的 BGM。历史由 `audio lay` 落轨**自动记账**,不用自己维护 | `12` |
323
+ | `--no-exclude-recent` | 关掉上一条的选曲避让,允许复用近期曲目 | 关(缺省避让) |
324
+ | `--out <file>` | ad-hoc 模式结果落文件;`matrix fetch` 原片落盘目录(绝不写剪映草稿目录) | stdout / `./matrix-fetch/` |
325
+ | `--json` | 机读:stdout 只输出结果 JSON | 关 |
326
+
327
+ **`matrix fetch <clip_id...>`(精剪期拉原片,脱离工程)**:对**计费检索过**(授予账本命中)的素材按 clip_id 免费重签新鲜下载直链并落盘 `<clip_id>.<ext>`——粗剪导剪映后想补一段 B-roll,不回客户端就能拉到本地直接拖进剪映。动线恒为**两段式**:`matrix search` 挑定 clip_id → `matrix fetch` 拉取(fetch 自身零计费、不发起检索、无确认闸)。**授予持久**:24h 过期签名不构成障碍,三天前 search 出的 clip 照样 fetch。未购项逐条报「未购授予」并给出路(对该词跑一次计费检索即获授予),不连坐其余;单批 ≤500。**首发只覆盖视频 clip 原片**(图片/音频素材重签面未开,进 missing 附提示)。产物不进 `.gtrk`、不写剪映草稿目录;在剪映里补的料不回流工程(导出单向)。
328
+
329
+ > **beat 窗口现场重投影**:派单消费模式在**发起第一次云端检索之前**,用「`transcript` × 当刻 `.gtrk`」重算每个 beat 的 `[track_st, track_ed]`,检索、`broll-plan.json` 与铺轨一律以重算值为准(`--lay 0` 同守;ad-hoc `search` 不受影响)。`dispatch.json` 里的时码只是**投影时刻快照**,仅在重投影不可行时兜底——**所以改完口播轨直接跑本命令即可,不必先重跑 `gtrk split`**。`--json` 恒出 `reprojection:{mode,degraded,reason?,drifted,max_offset,shrunk,dropped}`;重投影后**零存活**的 beat 会被跳过(不为它烧检索配额、也不铺)。重投影不可行(transcript 缺失 / 工程定位不到 / 主轨查不到口播素材)→ **降级用快照 + 告警 + `--json` 标注**,检索与 plan 照产、不硬崩;非 v1 工程的既有行为不变(plan 先落盘、随后版本门非 0 退出)。
330
+ >
331
+ > **云端编排(`--arrange`)**:B-roll 的**编排决策**(哪一颗放哪、切多长、从素材的哪一段取)可以交给云端跑。
332
+ > 适用面只有一条:**本地素材上轨铺排**。素材库 / 普通素材 / 概念素材那些的匹配与铺排原来什么样、以后还什么样,
333
+ > 一个字节都不变。
334
+ >
335
+ > **不带这个参数时按素材来源自动定档**:铺你自己电脑里的素材走 `cloud`,铺素材库那些走 `local`。
336
+ > 本地素材的编排算法只在服务端迭代——改进当天生效,你不必升级客户端。
337
+ >
338
+ > ⚠️ **代价先说在前面**:本地素材的编排**只在云端完成**。云端拿不到产物(连不上 / 被拒 /
339
+ > 产物不合规)就**直接报错**,不会悄悄改用另一套算法把活干完——那会给你一份和云端不同的结果
340
+ > 而你并不知情。这条路上 `--arrange local` 不受理(传了会报参数错)。
341
+ >
342
+ > 跑前的用量确认你要是说「不跑」,**这一步就不做**(整轮铺轨中止,工程一个字节没动、plan 照常可用,随时可改主意重跑),
343
+ > 而不是换个便宜办法替你做完。
344
+ >
345
+ > ⚠️ **它不是省钱开关**:用素材矩阵的素材同样要付检索费。**两条路都要花钱,只是花在不同环节**——
346
+ > 自己的素材付编排费,矩阵素材付检索费(矩阵成员的检索是 0)。
347
+ >
348
+ > `shadow` 是观测档:本机照跑照铺轨、云端只跑一遍做对拍(**不切流**,产物仍用本机的),它不受上面那条报错规则影响。
349
+ >
350
+ > 云端两档按新计量维度**编排量**计费——要配画面的段落越多、每段候选素材越多、铺的候选轨越多就越贵。
351
+ > 跑前会报预估并征求确认,`--yes` 跳过、`--arrange-cost-cap` 设本次上限(超限**前置拒绝**,零执行零计费)。
352
+ > 完整计费口径(含既有的额度包 / 余额、阶梯价与免费档)见 **[计费说明](https://hocassian.feishu.cn/docx/DtendXStMogAbJxAOEmcCyC7n3e)**。
353
+ > ⚠️ 预估值只供双端一致性校验,**实际计费恒以服务端复算值为准**;两值不一致时服务端会拒绝执行且不计费。
354
+ > 上行的只有决策要读的字段——素材绝对路径、签名 URL、画面描述文本、派单负词、口播原文整句一律**不出你的机器**。
355
+ >
356
+ > **服务端一行不留**:那份上行的 plan 我们**不保存**(留痕只有规模明细、口径版本与复算金额,
357
+ > 够独立核对一笔账,但翻不出你的素材结构)。代价是**出了问题我们这边没有可复现的东西**——
358
+ > 所以给了 `--dump-request <file>`:它把真上行的那串字节留在**你自己的机器上**,
359
+ > 排障时把那个文件发给我们即可。缺省不写,且**不许写进工程目录**(工程是要被打包拷走的)。
360
+ >
361
+ > 频率上有两层保护,命中都是 **429、零执行零计费**:一层按次数限流;另一层认「同一份 plan
362
+ > 被反复换参数重提」这种形态。传输失败的重试发的是**逐字节相同**的请求体,不会被算进去。
363
+ >
364
+ > 候选的 `preview_url`/`cover_url` **不带签名、不会过期**(本地代理落盘后一律复用);带签名约 24h 过期的是**原片 `url`**,由客户端「确认原片」链路重签——**不必为「重签」重跑本命令**。
365
+ >
366
+ > **重跑会剥旧重铺,但不碰你改过的轨**:候选轨的身份按「素材前缀 + 上一轮登记指纹」认,不再认轨号(客户端保存会把 overlay 轨整体重编号)。一旦某条候选轨被判定「你编辑过」(改过 clip,或在客户端确认过原片使 material 变成 `broll-raw-*`),本次**整体不铺**:不剥任何轨、不追加新轨、`.gtrk` 逐字节不变,`broll-plan.json` 照常产出,命令给出「哪条轨 / 什么证据 / 下一步」并以非 0 退出码结束(`--json` 出 `{ok:false, refused:[…]}`)。要强行重铺加 `--force-relay`。
367
+ >
368
+ > **机读账面:`counts.results` 是「去重前」口径**:`--json` 的 `counts.results` 恒是**逐 query 累加的检索响应条数**(既有口径不动)——15 条 query 各命中同一条素材时它就是 15,而 plan 落盘可能只有 8 行、只对应 1 个素材。要判「到底有多少料」读派单消费模式另出的三键:`counts.zero_yield`(**真·零产出**的 query 数,判据取**检索响应**为空,而非事后扫 plan 的 `results: []`——beat 内去重会把命中折进同 beat 的兄弟 query,折叠 ≠ 零产出)、`counts.plan_results`(plan **落盘后**的实际 result 行数,去重后)、`counts.distinct_clips`(plan 内 distinct `clip_id` 数)。这三键**只在派单消费模式**出现,ad-hoc `matrix search` 与 `matrix lay` 的 `counts` 逐字节不变(**缺席 = 没这个概念,不是「测出来是 0」**)。铺轨侧同理另出 `lay.beatsWithCandidates`(有候选的 beat 数)与 `lay.emptyBeats`(**零候选 beat 名单**——整段没有任何可铺的画面),两者恒满足 `beatsWithCandidates + emptyBeats.length = plan 的 beat 总数`。
369
+ >
370
+ > **素材落盘自检**:写回工程之后自动查一遍 `materials[].path` 是不是真的都落盘了(**只读、只报不动**)。相对路径恒以 **`.gtrk` 文件所在目录**(`<产物目录>/gtrk/`)为基准解析。`--json` 出 `integrity:{ checked, counts, dangling:[…], danglingReferenced, danglingOrphan, external:[…], noPathIds:[…] }`——`dangling` 是工程自带素材的**悬空引用**(登记在、文件不在)全量清单,每条标出**是否被时间线引用**及引用位置(被引用 = 那一段没素材可放,比孤儿严重得多);绝对路径缺失另计 `external`(外接盘没挂载也会这样,不混进主判);http(s) 素材只计数、**不发网络请求**。**这是告知不是拦阻**:查出悬空不改 `ok`、不改退出码、不删任何素材条目或文件。悬空多半是历史遗留(如客户端「确认原片」下载中断),修法是在客户端重新确认原片或删掉那条 clip。没写回的运行(`--lay 0` / 拒铺 / 工程缺失)**不出 `integrity` 字段**——缺席 = 本次没查,不是「查过且干净」。
371
+ >
372
+ > **纯黑底垫轨**:默认在全部候选轨之下、口播主轨之上垫一条纯黑底轨(`struct_meta.broll.black_track` 记其 `track_index`),按已落成的 beat 包络整条铺满,使 B-roll 期间(含候选轨留空处)不漏出底下的口播画面。**代价是「黑底空洞」**:候选轨没填满的地方就是纯黑压口播,铺轨会把它算出来——`--json` 恒出 `lay.blackBedHoleSec` 与逐段的 `lay.blackBedHoles`,单段 ≥ 3s 或单 beat 占比 ≥ 15% 时另出一条非致命告警(不改退出码、不阻断铺轨),可据此调 `--score-floor`、改用 `--no-black-bed`、或到客户端手动补片。字节落 `assets/builtin/solid-000000-<W>x<H>.png`,与客户端内置纯色素材同 id 命名空间、幂等复用。删候选轨时别误删它;换片请拖到候选轨颗粒上、**别拖到黑底条上**——客户端 0.2.10 起(2026-07-31 发版强更)**拖到黑底条上会被直接拒绝并提示**。若客户端仍是 0.2.10 之前旧版(强更未拉到),旧行为是静默新建一条 video 轨插入、落点在下半区时预览完全看不见(按一次 `Ctrl+Z` 可整条撤销)——先重启客户端吃到强更。不想要黑底加 `--no-black-bed` 重跑即剥净。
373
+
374
+ **本地素材模式(`matrix index` / `--local`)**:素材不必入云端素材库,用你本地的素材文件夹(视频+图片混合)直接检索铺轨:
375
+
376
+ ```bash
377
+ gtrk matrix index --dirs <素材夹或素材文件,...> # ① 免切片建索引:内容指纹增量、断点续传,素材改名/移动不重算
378
+ gtrk matrix --local --dirs <素材夹或素材文件,...> --project <目录> # ② 本地检索铺轨(--lay 0 = 只出 plan 不铺轨;传单个素材文件即把检索域收窄到它)
379
+ gtrk matrix lay --project <目录> [--plan <path>] # ③ 消费(可编辑后的)plan 铺轨,零检索开销
380
+ ```
381
+
382
+ - **路径里有英文半角逗号就重复传**:`--dirs` / `--materials` 缺省按半角逗号分隔;路径自带逗号时改成重复传(`--dirs "A" --dirs "B"`,**累加不覆盖**)。整串在盘上存在时会自动不拆,中文全角「,」从不参与拆分。**枚举报 `0/0` 时先看这一条**,其次看素材夹里有没有断链(失效的软链接)。
383
+ - **素材本体永不上云**:只把 512px 抽帧图送同合云自建 embed 端点向量化、即传即弃;产物以绝对路径直引本地原文件(免下载免代理)。索引按实际抽帧张数会话计量(跑前预扣、跑完多退少不补),文本检索零积分。
384
+ - **图片一视同仁**:图片可检索可铺轨;被选中时经云端 `image_move` 转 5 秒运镜视频入轨——**图片本体会上云**(2 积分/张,铺轨前汇总确认;同图同参恒复用不重复扣费)。零图片上云 → `--no-image-broll`。
385
+ - **同素材不二用**:单轮铺轨一个素材单元全局只用一次(本地视频按场景、图片按文件),候选枯竭宁空不重复;`--dedup-scope material` 收严到文件级。
386
+ - **含本地素材的工程不能云渲**:提交会被拒(`local_broll_cloud_render_rejected`)——走客户端本地出片或 `gtrk render`。
387
+ - **可选零件**:`matrix describe --plan <path> [--top-k N]` / `--materials <a,b>` 按需理解候选(VLM 描述/标签/质量分/水印·字幕·黑边·模糊信号,1 积分/张(**异步任务计费**:提交预扣→完成结算,失败自动退款;同合云内部成员豁免,跑时自动探测,`--json` 的 `credits_estimated` 即实耗、`credits_would_be` 为原价)、产物注入 plan 并本地缓存、缓存命中零计费、>20 张确认护栏)。**一条 describe 只代表一段**:`--plan` 形态每个候选只抽 `segments[0]` 的 best 一帧,产物带射程锚点 `describe.at_sec`(素材时基秒),跑完报「理解覆盖率 = 理解帧数 / 被理解候选携带的**段总数**」(`--json` 读 `describe_coverage`)——注入 N 条 ≠ 这 N 条候选都被看过;`--source-window <start,end>` 源时间窗过滤(仅 `--local`,影视解说式「第 N 段解说配影片第 N 段邻域画面」);`matrix lay --mark-weight <0..1>` 把 describe 的质量分融进候选排序(融合分 = sim×(1-w)+(mark/100)×w,只重排序不改准入,无缓存候选按中性处理)。
388
+ - **看点准则**:`--highlight-rubric <text|@file>`(describe 与 lay 同参,≤2000 字符,`@<路径>` 从文件读)给看点分(`--highlight-weight`)指定**评判基准**——垂类图纸各持一份(美食判分量对比/价格实物,旅拍判奇观地貌/极端天候)。**不传 = 整个字段不上行、服务端走领域无关缺省,与本参数引入前逐字节一致**。看点分按准则分桶缓存:换准则只重打分、客观描述缓存照常复用不被覆盖;`describe --plan` 会把本轮准则的 `rubric_hash` 钉进 plan,`lay` 据此自动取同一个桶(无需重复传参),两者不同源时**硬失败**而不是静默择一。⚠️ 换准则要重新打分就得重新看片(按张计费)——免看片的文本级重打分要等服务端轻通道,现在没有。
389
+ - **索引参数与量纲**:`--scene-threshold` 调场景切分粒度、`--stability-threshold` 固定机位判稳收敛抽帧、`--rebuild` 强制重建(理解缓存不清);索引跨机不可移植(键=绝对路径,换机重跑 index 即可)。本地 score 量纲与云端不同(完美命中可低至 ~0.25),`--score-floor` 别按云端直觉调高。
390
+
391
+ **`gtrk matrix material "<词>"`(通用三态素材检索)**:与上面的 B-roll 检索并列的第二条线,出**整条素材**的下载直链(不是段落)——`--scope clip|image|audio`(缺省 `audio`,BGM 主场)、`--commercial-only` 只搜可商用(**按需收紧的显式开关,缺省不带**)、`--min-duration/--max-duration` 按成片时长挑、`--top-k`(缺省 5,服务端上限 50)、`--diversity` 去同质、`--json` 机读、`--out` 落盘。
392
+
393
+ > ⚠️ **`is_copyright` 读作「能不能商用」,不是「有没有被版权保护」**:`true` = **可商用**(自有 ∪ 已授权),`false` = **不可商用**。
394
+ >
395
+ > **`false` 不要读成「无版权、可以随便用」——它恰恰相反。** 决定性反证:他人版权的概念素材入库固定写 `is_copyright=0`;这个字段若真是「是否受版权保护」,那批必须是 1。
396
+ >
397
+ > 这条警示是真机踩出来的:2026-09-02 有 AI 执行方连着两轮**特意去挑 `false`** 当「安全选择」,把不可商用素材铺进了 5 个工程,而唯一安全的 `true` 反倒被主动避开。所以 `--json` 里 CLI 会逐条**派生一个人话标签 `copyright_label`**(`"可商用"` / `"不可商用"`)——它由 `is_copyright` 推出、与之恒同向、缺席同缺席,判读认这两个键之一即可,别靠字段名去猜。
398
+ >
399
+ > 该字段**只有矩阵成员口才有**:公开口没有它不是「不可商用」,而是服务端在源头就只放可商用素材(缺席即无需判,CLI 如实缺省、绝不补假值)。
400
+ >
401
+ > **缺省口径(⟲ 2026-09-06)**:矩阵成员档**缺省搜全库**(`copyright_scope=all`,含非商用/概念素材)——那正是成员身份买到的东西,命令不会替你收紧,随包 skill 也不许「保险起见」自行剔掉 `is_copyright:false` 的候选(但会**逐条如实标注**版权状态)。只要可商用时,自己加 `--commercial-only`。
402
+
403
+ 编排配方(纯匹配 / 先理解后铺 / 时间窗 / 素材先行编剧 / 三层层叠)与 plan 编辑口径见随包 skill `/gtrk-matrix`。
404
+
405
+ ### `gtrk mg` — MG 动态图颗粒(铺轨 / lint / status / render)
406
+
407
+ 消费 `gtrk split` 落地的 `dispatch.mg` 派单,把**你栏目的 MG 生产 skill** 产的 html-particle 颗粒铺进 `.gtrk` 工程的 `beat_track`。六种模式按首个 positional 分派:**无参 = 铺轨**、`mg lint <file>` = 单文件校验、`mg status` = 编排看板、`mg render <file>` = 独立颗粒云渲(脱离工程,精剪补给口)、`mg compile <ir.json>` = 改 IR 重编译文字模板、`mg edit <file> --say` = 自然语言改写文字模板。旧名 `gtrk rrv` 保留为弃用别名(会打提示,建议改用 `gtrk mg`)。
408
+
409
+ | 参数 | 作用 | 缺省 |
410
+ |---|---|---|
411
+ | `--project <dir>` | oralcut / split 产物目录(定位 `split/dispatch.json` 与工程 `.gtrk`) | — |
412
+ | `--dispatch <path>` | 显式指定 `dispatch.json`(非标准布局兜底) | 由 `--project` 推 |
413
+ | `--only <beat>` | 只跑单 beat(收 **beat id** 如 `B12`、非 `composition_id`;主 + 其 `-aux<n>` 叠层颗粒一并选)。**真增量合并**:只重铺命中的那几颗,轨上其余已铺颗粒(连同手调)原样保留 | 全部 |
414
+ | `--lint-only` | 只 lint 校验,不铺轨不写回 | 关 |
415
+ | `--replace-all` | 显式授权**重置整轨**:不走增量保留、整轨剥掉重铺——**会删掉轨上其余已铺颗粒** | 关 |
416
+ | `--duration <sec>` | **render 模式必填**:显式时长锚(秒)——独立模式无坑位包络,它同时是 lint 包络、成片时长与计费时长 | — |
417
+ | `--format <fmt>` | render 模式产物格式:首发仅 `qtrle`(剪映可读透明 MOV;`webm` 剪映不吃、明确拒绝) | `qtrle` |
418
+ | `--out <dir>` | render 模式落盘目录(绝不写剪映草稿目录——拖入剪映由你做) | `./mg-render/<composition_id>/` |
419
+ | `--yes` | render 模式:跳过计费预估确认 | 关 |
420
+ | `--json` | 机读:人读日志转 stderr,stdout 只输出结果 JSON | 关 |
421
+
422
+ - **铺轨**(`gtrk mg --project <dir>`):读 `dispatch.mg` → 逐 beat 从 `<project>/mg/<composition_id>.html` 取源颗粒 → lint → 铺进 `beat_track`,把 `struct_meta.mg` 原子写回 `.gtrk`(幂等登记自产轨 `lay_tracks`,重铺先剥旧自产物再 append、用户手加轨零连带)。「透明叠加 / 满屏底层」由颗粒 HTML 根 `background` 反推的 `opaque` 决定。缺 HTML / lint 失败的 beat 计入 `skipped`、不拦其余。
423
+ - **剥离面 ≠ 「本次铺什么」,也 ≠ 「登记轨全集」**:`--only <beat>` **只剥命中的那几颗**(真增量合并)——轨上其余已铺颗粒的 clip / 素材 / 登记条目**原样保留**,连同用户在 opencut 对它们的手调(保留的是既有 clip 原件,非照登记重建,故透明度 `opaque` 不会丢);这些保留条目**不重新 lint、不重新复制源 HTML**(工程自包含,`<project>/mg/` 下源文件删了也不影响)。全量重铺仍是「剥净再整轨重建」,**唯一例外**是本次派单里有、却因缺 HTML / lint 未过 / 重投影后零存活而**没铺成**的那几颗——它们上一轮的 clip 保留在轨上(不因为新的做坏了就把旧的也毁掉);反之**派单里已不存在**的已铺条目仍照剥(计划变更 ≠ 做坏了)。要连其余已铺颗粒一起剥掉重来:`--replace-all` 显式授权。
424
+ - **素材表不囤积**:素材的剥离键按「**自产身份 × 零引用**」判(自产 = `mg-`/`rrv-` 前缀 **或** 落在 CLI 独占的 `assets/mg/` 下且文件名在自产登记里),**不认客户端可改写的 `html_material` 前缀**——所以在 opencut 里编辑过工程之后重铺,旧素材照样剥得掉,`mg-` 素材数**恒等于轨上颗粒数**,历史遗留的重复 / 孤儿条目一并清掉。**非自产素材零连带**(`broll-*` / `ex-solid-*` / 你自加的,哪怕零引用也不碰);仍被存活 clip 引用的自产素材也不剥(不会剥出失联 clip);盘上 `assets/mg/` 的 html 副本从不删。
425
+ - **「一条都没定位到」不是清空指令**:`--only` 打空、`dispatch.mg` 为空/缺失、或本次条目全被 skip,**而轨上已有已铺颗粒**时,同样拒绝写回(那是派单或选择器出问题的信号)。确要清空加 `--replace-all`。首次铺轨(轨上本就没有已铺条目)不受此限,照常走完报 `laid=0`。
426
+ - **槽位窗口现场重投影**:铺轨与 lint 之前先用「`transcript` × 当刻 `.gtrk`」重算每条队列条目的 `[track_st, track_ed]`,之后 lint 的坑位包络(铁律⑦)与落轨 clip 时长一律以重算值为准(`--only` 同守;aux 派生颗粒按**自己的** span 重投影,不与主 beat 窗口混同)。`dispatch.mg` 里的时码只是**投影时刻快照**,仅在重投影不可行时兜底——**改完口播轨直接铺即可,不必先重跑 `gtrk split`**。`--json` 恒出 `reprojection:{mode,degraded,reason?,drifted,max_offset,shrunk,dropped}`(`--lint-only` 也有)。重投影后**零存活**的条目 skip 并计入 `skipped`(不复制 HTML、不按快照铺回去);重投影不可行(transcript 缺失 / 工程定位不到 / 主轨查不到口播素材)→ 降级用快照 + 告警 + `--json` 标注,退出码不变;工程**非 v1** 的既有行为不变(铺轨路径版本门非 0 退出、`--lint-only` 照旧出报告)。铺轨成功会把本次时码来源(`timecode_source` / `reprojected_at`)纯追加登记进 `struct_meta.mg`。
427
+ - **lint**(`gtrk mg lint <颗粒.html> [--dispatch <path>]`):纯本地静态校验颗粒 HTML 的铁律机器可判定子集(`<template>` 包裹、`data-composition-id` + 1920×1080、`gsap.timeline({ paused: true })`、`window.__timelines` 注册、无 `Math.random` / `Date.now`、自包含无相对外链、根 `background` 与 `opaque` 自洽…);给 `--dispatch` 时校验 `composition_id` 命中派单。任一致命项非 0 退出并逐条报因。
428
+ - **期望 id 一致性**(`1-cid-expect`,**致命**):HTML 内 `data-composition-id` 必须等于期望 id(铺轨=该条派单的 `composition_id`;`mg lint`=文件名,仅当它命中派单或形如 `…-B<数字>[-aux<n>]` 时比对,`./tmp.html` 这类改过名的副本不比对)。防的是「复制 `<id>.html` 改名时漏改内部 id」——落轨会写出以文件名命名的 clip/material,而文件注册的是另一个 `__timelines` 键、还与同名颗粒抢同一个样式作用域。
429
+ - **铁律⑦ tl 总长估长**(`7-fill-slot` / `7-no-estimate` / `7-infinite-repeat`,**恒非致命、不拦铺轨**):已知坑位包络时(铺轨逐颗;`mg lint --dispatch` 命中派单条目)对 GSAP 时间线做**静态下界估算**——逐调用降级,能解析的计入(`duration×(repeat+1) + repeatDelay×repeat`,`yoyo` 不加时长),表达式 position / 非字面量 duration 那条**跳过不计**(忽略若干调用仍是合法下界)。估长 < 包络 → 告警;一条都算不出 → 显式提示「无法静态估长,铁律⑦未校验,须真引擎 seek 验收」(**不静默**,「算不出」与「算过且通过」在输出上可区分);含 `repeat:-1` → 告警「无限循环令总长 Infinity、铁律⑦不可静态验证,请改按坑位算死的有限 repeat」。真判据永远是渲染引擎逐帧,本项只做提醒层。
430
+ - **铁律⑧重复图元合并**(`8-primitive-merge`,**恒非致命、不拦铺轨**):识别「循环体内创建,或由循环调用具名工厂创建;落到同一父节点;且没有逐元素动画驱动」的可合并 `line` / `rect` / `path` / `polyline` / `polygon` 批次。同一父节点的纯数字循环 trip count 累加后 **≥ 8** 才报数;边界含 `.length` / 具名常量而算不出时仍报「条数未知」,不做常量折叠;逐元素 `gsap.set` / tween 或被 tween 首实参使用的元素数组会被排除。本项只提示「这里有一批可**无损**合并的重复图元,合并后画面逐像素不变」,**不是风险判定**:命中不代表该颗粒会复现缺陷,未命中也不代表安全,真判据仍是真渲染出片抽帧。
431
+ - **回调与 seek 语义**(`x-callback-driven` / `x-engine-api-override` / `x-raf-interval`,**恒非致命、不拦铺轨**):对齐契约同名一节(2026-07-26 增补)。GSAP `seek(t)` 默认抑制回调 → 补间属性照常插值、但 `onUpdate` 里的 DOM 写入不执行,翻车形态是**画面定在初始态而非黑屏**。契约把保证压在**引擎侧**(定帧 MUST 用 `seek(t,false)` / `time(t)` / `progress(p)`),故颗粒**用回调驱动画面是合规写法**;lint 这三项只是**哨兵**:`x-callback-driven` = 回调写 DOM 且无任何 seek 兜底(有兜底则沉默,避免重复提醒);`x-engine-api-override` = 颗粒运行时覆写 `tl.seek` 或把 `__timelines[…]` 换成包装对象(会推翻引擎显式传的 `seek(t,true)`,且引擎改走 `time()`/`progress()` 即失效,属过渡态);`x-raf-interval` = 含 `requestAnimationFrame(` / `setInterval(`(自有时钟不被 seek,等于冻结)。三项 MUST NOT 致命——「用回调驱动画面」不是违规。
432
+ - **status**(`gtrk mg status --project <dir>`):汇总 MG 流水线——`dispatch.mg` beat 总数 / 已产源 HTML 数 / 已铺进 `.gtrk` 数,并逐 beat 标注(缺 HTML / 已产未铺 / 已铺)。
433
+ - **render**(`gtrk mg render <颗粒.html> --duration <sec> [--out <dir>] [--yes]`):**脱离工程**把单颗颗粒云渲成剪映可读的 qtrle 透明 alpha MOV(精剪补给口——粗剪导剪映后缺一颗动态图,不回客户端就能补)。链路 = lint 前置(包络 = `--duration`,任一致命项本地拦截、零提交零计费)→ **计费预估确认**(实时查价;CLI 无本地 HTML 渲染引擎,独立颗粒唯一路 = 云渲计费任务,`--yes` 跳过确认)→ 内联提交云端 → `<composition_id>.mov` 落盘 + `task.json`/`result.json` 面包屑(崩溃可凭 task_id 恢复)。**射程**:首发只出 qtrle(`--format webm` 明确拒绝,剪映不吃 VP8-alpha)、只收 1920×1080 颗粒(契约未开竖屏/异形口)、`--duration` 必填。产物不进 `.gtrk`、不写剪映草稿目录;qtrle 无损体积偏大,适合秒级颗粒。注意与 `gtrk render`(整片成片渲染)同词不同物。
434
+ - **fetch**(`gtrk mg fetch <检索词|块名> [--top 3] [--all]` / `gtrk mg fetch --pick <块名> --slot <beat> --project <dir>` / `--pick <块名> --as <composition_id> --duration <sec> [--out <dir>]`):**registry 中性颗粒源**——没建栏目也能出 MG。候选态**离线**(快照随包、钉死来源 commit)按检索词列 2–3 件(含 compat 标记与海报链接);取块态按三源顺序取块(我方镜像优先、jsdelivr、GitHub raw,每源 5 s,**逐源 sha256 强校验**,三源皆败零落盘)→ 机械改写八条(`<template>` 包裹 / 改 id / 去 data-start 贴坑位 / 实心底下沉子层 / GSAP 源换契约 CDN / 字体换运行时镜像可证的 CJK 字体 / 时长贴坑位 / 信箱缩放不拉伸)→ `gtrk mg lint` 致命项不过不落盘 → 落 `<project>/mg/<composition_id>.html`。**骨架不是成品**:返回的 `editable`(文案 / 数值数组 / 色值)MUST 按 beat 与栏目改写后再铺。契约当前只收 1920×1080 颗粒,其它画布拒绝;`excluded` 件拒取,`review` 件(canvas / 铁律 8 高危形态)可取但须真渲验收。`GITRUCK_MG_REGISTRY_BASE` 可整体覆盖取块前缀。
435
+ - **fetch --source text**(`gtrk mg fetch --source text <检索词> [--top 3] [--offline]` / `--pick <模板 id> --slot <beat> --project <dir>` / `--pick <模板 id> --as <composition_id> [--out <dir>]`):**同合云自家的文字特效模板库**——与中性块是两条路。模板是我方 clean-room 重写的**成品**(配色与排版已做过),**不做机械改写、MUST NOT 直接改 HTML**。每颗内嵌产生它的 IR 与双哈希,颗粒因此自带出身证明(三态 `ir` / `detached` / `html`);手改一个字节就掉成 `detached`,云端改写会拒绝它(`gtrk mg lint` 报非致命的 `x-ir-detached`)。目录走**远端择新、随包兜底**:优先取镜像上的 `catalog.json` 按 `version` 择新并缓存 24h,三源皆不可达时回落随包那份并**明示**(候选态因此永远离线可用)。取块仍逐源 sha256 强校验,三源皆败零落盘。`GITRUCK_TEXT_TEMPLATE_BASE` 可整体覆盖取块与目录前缀。
436
+ **落点与时长由命令钉定**:派单模式的 `composition_id` 取自 `dispatch.mg` 那条(`<工程slug>-<beatId>`,不是 `--slot` 收的 beat id),颗粒内嵌 IR 的 `id` 与 `canvas.duration` 被钉到「期望 id」与「坑位包络 + 0.3s 余量」(铁律⑦,贴模板末尾的层跟着钉),再走 `mg compile` 同一条本地编译链重编——产物仍是 `ir` 态,`1-cid-expect` 天然对得上。独立模式 `--as` 同样改写颗粒内部 id,`--duration` 钉时长;`--slot` 与 `--duration` 互斥。两者都没改时原字节落盘。
437
+ - **compile**(`gtrk mg compile <ir.json> [--out <dir>]`):把 IR 交给云端**确定性编译**成颗粒(**0 积分**)。改字、换色、改字号描边阴影、改时长都走它——改 IR 再编,比手改 HTML 干净,且颗粒保持 `ir` 态(云端还能继续调)。**本地没有编译器**是有意的:第二份编译器意味着第二套产物字节,而三态身份判的就是字节。
438
+ - **edit**(`gtrk mg edit <颗粒.html> --say "<一句话>" [--n 1|3] [--pick <k>] [--yes]`):自然语言改写文字模板颗粒,经云端模型链出候选。`--n` 只收 1 或 3,**它就是计费单位数**(2 积分/候选,首次与改写同价、无免费次数)。`detached` / 无内嵌 IR 的颗粒**本地就拒**,不提交云任务、不花钱。候选带 `scope`:`L1` = 在模板可调范围内、`L2` = 越界即新生成(**不是失败**);服务端说做不到时给一句 `refusal`,命令如实转述并以非 0 退出码区分于网络错误。不给 `--pick` 就只落候选不动原文件;给了才替换并留 `<cid>.bak.html`。
439
+
440
+ `--json` 输出:`{ ok, mode:"lay"|"lint"|"status", … }`(各模式带对应字段,如铺轨的 `laid` / `skipped`、status 的逐 beat 状态)。铺轨模式另带 **`track_total`**(轨上现存已铺数)、**`kept`** / **`kept_ids`**(其中**上轮遗留**、本次没重铺的颗数与 `composition_id` 清单)与 **`removed`**(本次被剥的旧自产颗粒数)——`laid`(本次)、`track_total`(轨上共)与 `kept`(上轮遗留)**要一起读**,恒有 `track_total = laid + kept`;只看 `laid` 会让「铺 1 颗、剥 20 颗」跟「补铺 1 颗」长得一模一样,只看前两个又会漏掉「轨上那几颗不是这一轮的版本」这条代价(`kept_ids` 与 `skipped` 会重叠:这轮没铺成、上一轮那条还在轨上)。非全绿时另带机读 **`reason`**:`skipped`(部分没铺上)/ `empty_queue`(**拒写回**,工程未被改动,另带 `refused:true` 与 `blocked[]`)/ `no_project`(工程缺失未铺轨)。真写回过的运行另带 **`integrity`**(素材落盘自检,与 `gtrk matrix` 同名同形,口径见上节)。
441
+
442
+ > **退出码**:铺轨与 `--lint-only` 的 `ok:false` **一律连带非 0 退出**(含「有 beat 被 skip」这种循环中途的正常态)。agent 别把非 0 读成「命令崩了」——按 `reason` / `skipped` 判断即可。
443
+
444
+ > **aux 叠层颗粒**:`gtrk split` 若在某 beat 的 `aux_layers` 派了 `overlay` 颗粒,会派生 `<beat>-aux<n>` 合成条目进 `dispatch.mg`——`gtrk mg` 一并铺,实现「同段既有底轨主视觉、又叠透明概念图解」。
445
+ > **双读兼容**:`dispatch.mg`(读旧 `rrv_mg`)、源目录 `mg/`(读旧 `rrv/`)、素材前缀 `mg-`(读旧 `rrv-`)——去品牌化前的既有工程零迁移。
446
+
447
+ ### `gtrk project init` / `gtrk audio lay` / `gtrk audio tighten` — 音频驱动工程零件(配音先行)
448
+
449
+ 不从口播毛片、而从**一条配音**起盘的工程入口:先有配音(TTS 合成或自己录的),`project init` 建好 `.gtrk` 工程,之后 `gtrk split --project` 投影拆分照常接成片流水线;`audio lay` 则给任意工程补音频轨(BGM/配乐);`audio tighten` 收紧配音的句间停顿。
450
+
451
+ | 命令 | 作用 |
452
+ |---|---|
453
+ | `gtrk project init --tts-task <task_id>` | **主路**:引用一个已完成的 `audio_tts_clone` 配音任务——服务端直取产物音频与句级时码(零 ASR、零额外计费),音频下载落工程 `audio/` |
454
+ | `gtrk project init --audio <配音> --transcript <transcript.json>` | **兜底路**:自备配音音频 + 句级时码稿成对给(时码稿由 `gtrk transcript <配音音频> --json` 产出;TTS 合成的配音请走主路,别重跑 ASR) |
455
+ | `gtrk audio lay --project <目录> --file <bgm.mp3>` | 往工程追加一条音频轨;**同源幂等替换**(同一来源重跑替换不堆轨、零引用保护剥旧);`--volume <0..1>`(默认 0.1 垫底音量——契约 volume 只写线性增益、不写 dB;客户端音量面板显示 -20.0,两侧同一标尺)、`--offset <ms>` 定入点 |
456
+ | `gtrk audio lay … --beat-align` | **高潮点锚定**(`audio_music_analyze`,计费一次):把 BGM 的情绪峰值 `H`(服务端 `highlight.time`)压到成片高潮点 `A` 上,映射恒为 `轨秒 = A + (BGM 秒 − H)`;**两侧都够长就零平铺**(恰好 1 个 clip),不够长才按小节线平铺补齐、接缝吸附 downbeat(轨的两个硬边界处的截断不吸附)。`A` 取自 `struct_meta.split.beats` 的判据链:升华段 → 容器转折 → 回扣段 → `0.75×全片`兜底,**命中哪一档 CLI 如实报出,兜底档会明示是猜的**。无 Key / 分析失败 / 曲子缺高潮点一律降级为不锚定,命令不失败 |
457
+ | `gtrk audio lay … --beat-align --climax <轨秒>` | 高潮点**逃生门**:一律覆盖上面那条判据链。越界(≤ `--offset` 或 ≥ 工程末尾)或非数**直接报错**,不静默回落 —— 显式给错了值要当场知道。须与 `--beat-align` 同用 |
458
+ | `gtrk audio lay … --no-loop` | 不平铺补齐:开了 `--beat-align` 时只放锚点那一段、头尾留白(**留白秒数如实报出**);未开 `--beat-align` 时保留单次、不循环叠满至工程末尾 |
459
+ | `gtrk audio tighten --project <目录>` | 收紧配音轨的**句间**停顿(**纯本地、零计费**):只压跨句界的静音,**句内换气与原声引用段不动**,出参如实报「跳过句内换气 N 处」。`--keep <秒>` 收紧后保留的静音、`--min-silence <秒>` 短于此不动、`--boundary-tol <秒>` 判「贴着句界」的容差、`--dry-run` 只报会压几处共几秒、不写盘。三个缺省值见 `gtrk audio tighten --help`(实测认可值,换题材/音色可调) |
460
+
461
+ `project init` 另有 `--canvas <WxH>`(默认 1080x1920)、`-o/--out`、`--reupload`、`--no-open`、`--json`,语义与 `oralcut` 一致;两命令 `--json` 恒出单行结果 JSON(人读日志走 stderr)。
462
+
463
+ > ⚠️ **`--beat-align` 的语义在 2026-09-02 整套换过**(change `redesign-beat-align-climax-anchor`,主理人拍板)。旧实现是「把整条 BGM 后推 `firstDownbeat` 秒」—— 分析的是 **BGM 自己的时间轴**,工程时间轴里根本没有它的消费方,净效果只是**付一次云端分析的钱换来片头一段等长静音**。
464
+ > ⇒ **开过 `--beat-align` 的旧产物不再逐字节可复现**;没开这个 flag 的缺省路径产物**字节零变化**。
465
+
466
+ > **`tighten` 该在铺轨之前跑**:它会改配音轨时长,`gtrk split` / `gtrk matrix` 的 beat 时码按当刻工程重投影——先收紧再铺轨,省一次返工。想要合成时就对,自训音色可在 TTS 阶段直接传 `--fragment-interval`(见下节 `audio_tts_clone`);云引擎音色不支持该参数,才用本命令在合成之后收。
467
+
468
+ ### `gtrk tool <name> [输入...]` — 单点工具族
469
+
470
+ 单发单收的独立能力,与成片管线的车道命令(`oralcut`/`split`/`matrix`/`mg`)分家。**顶层命令 + 首个 positional 词分派**(不用父子命令):`gtrk tool <name> [输入...]` 跑工具(多文件图片工具可传多个路径,顺序即拼装顺序),`gtrk tool list` 查全部。一个工具 = 一个薄 descriptor(输入类别 / payload 拼装 / 产物映射 / 计费 / 可用门),共享 runner 跑「校验 → 上传(指纹缓存、≥256MiB 自动分片)→ 提交 → 轮询 → 流式下载落地 → `task.json`/`result.json` 面包屑」——接新工具只加一个 descriptor、不写编排。
471
+
472
+ **产物目录口径**:有输入文件的工具缺省落**输入同目录**下 `<输入名>-<工具名>/`;`input=none` 的工具(如 `audio_tts_clone`)缺省落**当前目录**下 `<工具名>-<时间戳>/`。两者都可用 `--out <dir>` 覆盖。缺省名撞上已有目录时自动带 `-2`/`-3` 序号后缀,同一目录内产物文件撞名时带 taskId 后 6 位后缀——**一律以回执的 `outDir` / `files` 为准,别按名字硬拼**(`--out` 显式落点不派生序号,重跑同一输入是幂等覆盖)。
473
+
474
+ | 工具 | 输入 | 产物 | 计费 | 状态 |
475
+ |---|---|---|---|---|
476
+ | `image_move` | 单张图片;可选 `--motion` 指定 26 种运镜之一 | 运镜视频(几何按原图朝向推导:横 1920×1080 / 竖 1080×1920) | 运行前实时查询 | 已上线 |
477
+ | `image_matting` | 单张图片 | 透明背景 png(可 `--param` 请求背景底板) | 运行前实时查询 | 已上线 |
478
+ | `image_blackborder_remove` | 单张本地图片 | 去黑边图片 | 运行前实时查询 | 已上线 |
479
+ | `image_canvas_adapt` | 单张本地图片;可选目标宽高与 `normal` / `rectangle` / `square` | 比例适配图片 | 运行前实时查询 | 已上线 |
480
+ | `image_purify` | 单张本地图片;可选 `full_screen` / `region` 与区域框(仅处理你有权处理的素材) | 清理水印、Logo 或叠加元素后的净化图片 | 运行前实时查询 | 已上线 |
481
+ | `video_matting` | 单条视频(**≤10 分钟**,原片直传不压代理) | 透明背景 webm | 运行前实时查询 | 已上线 |
482
+ | `video_blackborder_remove` | 单条本地视频 | 去黑边视频 | 运行前实时查询 | 已上线 |
483
+ | `video_canvas_adapt` | 单条本地视频;可选目标宽高、片段、画布模式和无音轨输出 | 比例适配视频 | 运行前实时查询 | 已上线 |
484
+ | `video_stabilizer` | 单条本地视频;可选 `fast` / `exp` / `turbo` | 防抖视频 | 运行前实时查询 | 已上线 |
485
+ | `video_vaporwave` | 单条本地视频;滤镜使用精确预设名称 | 蒸汽波滤镜视频 | 运行前实时查询 | 已上线 |
486
+ | `video_purify` | 单条本地视频;单点模式支持 `full_screen` / `subtitle` / `custom` / `region`;Agent 编排请用顶层 `gtrk purify detect/edit/apply`,审阅最终区域后执行 | 一条净化视频,或检测 JSON + 净化视频 | 运行前实时查询 | 已上线 |
487
+ | `video_upscale` | 单条本地视频(**≤1 分钟**);可选 `2` / `3` / `4` 倍与 `Reality` / `Anime` | 一条超分视频 | 运行前实时查询 | 已上线 |
488
+ | `video_interpolate` | 单条本地视频;可选 `2` / `3` / `4` 倍,不附加 1 分钟限制 | 一条插帧视频 | 运行前实时查询 | 已上线 |
489
+ | `video_segment` | 单条本地视频;可选 `--detector content\|adaptive`、`--threshold` | 分镜区间结构 `result-output.json`(结构化数据,非下载文件) | 运行前实时查询 | 已上线 |
490
+ | `video_ai_segment` | 单条本地视频;可选 `--segment-mode scene\|shot_type\|narrative\|subject` | 语义分镜结构 `result-output.json`(结构化数据,非下载文件) | 运行前实时查询 | 已上线 |
491
+ | `video_motion_cut` | 单条本地视频 | 运镜/高光片段结构 `result-output.json`(结构化数据,非下载文件) | 运行前实时查询 | 已上线 |
492
+ | `video_speaker_detect` | 单条本地视频;可选 `--language`/`--max-faces-per-frame`/`--detect-body`/`--track-sample-fps`(重 GPU) | 可见说话人结构 `result-output.json`(时基以服务端输出为准) | 运行前实时查询 | 已上线 |
493
+ | `video_face_track` | 单条本地视频;可选 `--sample-fps`/`--max-faces`/`--min-face-ratio`/`--enable-body-match`/`--similarity-threshold`;`time_ranges` 走 `--params-json`(重 GPU) | 人物 ID/时间段/轨迹结构 `result-output.json`(时基以服务端输出为准) | 运行前实时查询 | 已上线 |
494
+ | `video_character_cut` | 单条本地视频;角色名、身份种子窗;多人时加 `--seed-bbox x,y,w,h`;本地镜头清单 + ≤720p/12fps 代理 | v2 原片半开毫秒时间戳、核心/上下文证据及待复核项,不下载视频 | 运行前实时查询 | v2 重构验证中,未部署 |
495
+ | `audio_tts_clone` | **无文件**:`--text`/`--text-file` 二选一(≤5000 字)+ `--speaker` 必填;可选语言/格式/语速/切分法/字幕/**句间停顿**(`--fragment-interval <秒>`,**仅自训音色**;云引擎音色传了会**报错**而非静默忽略,合法区间由服务端校验并在报错里给出) | 配音音频 wav/mp3(+ 可选字幕);按文本字符数计费,计量单位与单价以 `gtrk tool list` 实时显示为准 | 运行前实时查询 | 已上线 |
496
+ | `video_ai_subtitle` | 单条视频或音频;`--language <码>` 必填;可选 `--translate-language`、`--need-render`、`--need-pure`、`--subtitle-type`、`--subtitle-color`。默认只传本地抽出的音频(毛片不上传) | `.ass` 字幕 + 可选烧录/去字幕 `.mp4` + `result-output.json`(摘要 + 字级时间轴) | 运行前实时查询 | 已上线 |
497
+ | `subtitle_translate` | 单个**字幕文件** `.ass` / `.srt`;`--language <码>` 与 `--translate-language <码>` **双必填**;可选 `--output-format`、`--line-mode`、`--bilingual`、`--subtitle-type`、`--subtitle-color`、`--canvas <WxH>`。不含语音识别 | 译文字幕 `.ass` 或 `.srt` + `result-output.json`(条数统计 + 降级标记) | 运行前实时查询 | 已上线 |
498
+ | `video_translate_dub` | 单条视频或音频(**≤120 分钟**,整片上传);`--language <源语种>`、`--translate-language <目标语种>`、`--speaker <clone 或音色代号>` **三项必填**;可选 `--ref <参考音频或视频>`(仅 `clone`;克隆别人的声音须先取得本人同意)、`--ref-lang`、`--no-keep-bgm`、`--fit-policy`、`--speed-band <最小,最大>`、`--subtitle-mode`、`--subtitle-type`、`--project-formats <逗号分隔>`(缺省只出 `.gtrk`;要剪映草稿写 `gtrk,jianying`,草稿自动放进剪映草稿目录)、`--jianying-draft-dir`;取值以服务端为准。只换音轨、画面保持原样(不做口型同步),长片耗时十几分钟起 | 配音成片 `<输入名>-dub.mp4`(音频输入为 `.mp3`)+ `dub.wav` / `bgm.wav` + 字幕 `.srt` + `transcript.json` + 工程文件按格式分目录(`gtrk/`、`jianying/` …)+ `result-output.json`(配音对齐报告;附带产物缺项时含 `errors`,不判失败) | 运行前实时查询 | 已上线 |
499
+ | `video_long2short_pro` | 单条长视频(整片上传);`--language <码>` 必填;可选 `--output-language`、`--main-topic`、`--output-size`、`--no-jump-cut`、`--duration-pref`、`--max-clip-sec`、`--split-screen`、`--split-orientation`、`--speed-factor`、`--no-camera-move`、`--no-subtitle`、`--subtitle-translate-language` | 逐条成片 `clip{i}.mp4` + 人读报告 `clips.md`(含润色降级明细) + `result-output.json` | 运行前实时查询 | 已上线 |
500
+ | `audio_separation` | 单条音频;可选 `--mode fast\|turbo` | 人声与伴奏音频(按实际返回可为一项或两项) | 运行前实时查询 | 已上线 |
501
+ | `audio_speaker_split` | 单条音频;可选 `--only-struct` | 各说话人 `.wav` 分轨 + `spoken_list` 时间线(`result-output.json`) | 运行前实时查询 | 已上线 |
502
+ | `audio_stretch` | 单条音频;可选 `--semitones <n>`、`--speed <n>`(>0) | 变调变速音频 | 运行前实时查询 | 已上线 |
503
+ | `audio_noise_reduce` | 单条音频或视频;可选 `--prop-decrease 0..1` | 降噪后的音频 | 运行前实时查询 | 已上线 |
504
+ | `audio_silence_remove` | 单条音频;可选静音阈值与保留时长 | 去静音音频 | 运行前实时查询 | 已上线 |
505
+ | `piano_audio_to_midi` | 单条音频 | MIDI 文件 `.mid` | 运行前实时查询 | 已上线 |
506
+ | `piano_audio_enhance` | 单条音频 | 高质量 WAV + 配套 MIDI(双产物) | 运行前实时查询 | 已上线 |
507
+ | `image_to_square` | 单张图片;可选 `--max-line <px>`(≤20000) | 方形图片 | 运行前实时查询 | 已上线 |
508
+ | `image_to_live` | 单张图片 | 约 4 秒短视频 `.mp4`(无声);或安卓动态照片 `.jpg` + 附带同一条 `.mp4` | 运行前实时查询 | 已上线 |
509
+ | `image_classic_template` | **多张图片** + `--main-title` 必填;可选副标题/模式/比例/质量/数量/版式 | 封面/拼图成品(text/pic/render 三组、可多张) | 运行前实时查询 | 已上线 |
510
+ | `image_vertical_stitch` | **多张图片**(顺序=自上而下拼接顺序) | 一张垂直拼接长图 | 运行前实时查询 | 已上线 |
511
+ | `video_split_screen` | **2~16 段视频**(多 positional);精确档 `--clips-json`(条目 `{input:0 起序号, begin_time_ms, end_time_ms, crop}`,毫秒时基);九个可选布局/画幅/音频参数 | 一条分屏成片(成片时长对齐最短段) | 运行前实时查询 | 已上线 |
512
+ | `mad` | 一个素材文件夹(3~10 条视频)+ 可选 `--bgm` | AE 母合成成片工程 `.jsx`(仅支持 AE) | 仅 `--bgm` 触发实时查价 | 已上线 |
513
+
514
+ > 价格以 `gtrk tool list --json` 和执行前 stderr 的匿名实时查询为准,README 不保存价格快照。`video_matting` 上传前 ffprobe 探时长,> 10 分钟直接拒绝(不上传不提交、请先裁剪)。
515
+ > `mad` 是族内首个 **local 型「纯本地工具、可选云端加料」**:无 Key 可跑且不触发计费任务(技法数据经云端 manifest 下发 + `~/.gitruck/mad-cache` 缓存,**首拉联网、缓存后离线可跑**),`--bgm` 卡点才需 Key 并触发一次云端节拍分析;三级降级(有 Key 卡点 / 无 Key 或坏 BGM 固定节奏 / 云端失败降级)全程不崩。仅产 `.jsx`/仅支持 AE。
516
+
517
+ 去黑边、比例转换、防抖、蒸汽波、净化、超分、插帧七个公共视频工具只接受服务端当前 `video_ext`:`.mp4`、`.avi`、`.mpg`、`.mov`、`.flv`、`.mxf`、`.mpeg`、`.ogg`、`.3gp`、`.wmv`、`.h264`、`.m4v`、`.ts`;`.mkv` 与 `.webm` 会在本地拒绝。输入必须是本地文件路径,CLI 不负责下载远端视频。
518
+
519
+ - `gtrk tool list [--json]` — 列全部工具(名称/说明/输入/产物/实时价格/状态);`--json` 出单行机读数组(含动态 `billingHint`/`pricing`)。**无 API Key 也能跑**;价格通过公开接口匿名查询,失败仍列完整清单并标记暂不可用。
520
+ - `gtrk tool image_move ./photo.jpg [--motion zoom_in_center] [--json]` — 图转运镜;产物落 `photo-image_move/`。`--motion` 显式指定运镜方式(26 值:平移 8 `up_to_down`/`down_to_up`/`left_to_right`/`right_to_left` 及四对角线、放大锚点 9 `zoom_in_{up,down,left,right,left_up,right_up,left_down,right_down,center}`、缩小锚点 9 `zoom_out_` 同九方位),未传由云端自动选择;`--param width=1080 --param height=1920` 覆盖推导几何。
521
+ - `gtrk tool image_matting ./portrait.jpg` / `gtrk tool video_matting ./clip.mp4` — 图片/视频抠像。
522
+ - `gtrk tool image_blackborder_remove ./photo.jpg [--json]` — 自动裁去单张图片四周黑边。
523
+ - `gtrk tool image_canvas_adapt ./photo.jpg --canvas-width 1080 --canvas-height 1920 --canvas-type rectangle [--json]` — 图片比例转换;省略画布参数时沿用服务端默认。画布模式按实际运行时契约只接受 `normal`、`rectangle`、`square`,不接受旧文档中的 `fit`。
524
+ - `gtrk tool image_purify ./photo.jpg [--json]` — 清理你有权处理的图片中的水印、Logo 或叠加元素。
525
+ - `gtrk tool image_purify ./photo.jpg --purify-scope region --purify-region 0.02,0.02,0.15,0.08 [--json]` — 按框直接去除:不做识别,**框内全部内容都会被处理**;框越小、越贴近要去除的元素效果越好。
526
+ - `gtrk tool video_blackborder_remove ./clip.mp4 [--json]` — 自动裁去单条视频四周黑边并保留原音轨。
527
+ - `gtrk tool video_canvas_adapt ./clip.mp4 --canvas-width 1080 --canvas-height 1920 --canvas-type rectangle --clip-start 12 --clip-end 60 --without-audio [--json]` — 视频比例转换;`--clip-start/--clip-end` 是起止帧序号,省略字段时沿用服务端默认,画布模式只接受 `normal`、`rectangle`、`square`。
528
+ - `gtrk tool video_stabilizer ./clip.mp4 --stabilizer-method turbo [--json]` — 视频防抖;支持 `fast`、`exp`、`turbo`,其中 `exp` 为实验方式,产物观感需自行检查。
529
+ - `gtrk tool video_vaporwave ./clip.mp4 --vaporwave-filter "灼熱苦夏" [--json]` — 使用精确预设名称添加蒸汽波滤镜;省略时显式使用 `愈漸升溫`。
530
+ 视频去水印必须先问用户选快速(ffmpeg:基础模糊,可能留痕)还是精细(raft:较慢的内容修复,通常更自然、可接近无痕,不保证无损还原)。没有默认模式;`<用户选定模式>` 必须替换为用户已选择的 ffmpeg 或 raft,失败后不得自行降档。只检测、编辑和空清单不要求选择。旧运行记录尚未建处理任务时,resume 也须补显式模式;已建单继续原任务。
531
+
532
+ - `gtrk tool video_purify ./clip.mp4 --purify-scope custom --purify-method <用户选定模式> --purify-roi 0,0.78,1,0.2 [--json]` — 净化用户有权修改的视频;ROI 为归一化 `x,y,w,h` 且只和 `custom` 同用。`raft` 仅支持 20 分钟以内视频,`ffmpeg` 不套用该限制;不承诺还原被遮挡内容。
533
+ - `gtrk purify detect ./clip.mp4 --out ./purify-work --json` — 只检测,返回待审清单、摘要与代表时间。
534
+ - `gtrk purify edit ./purify-work/detect-xxx-final.json --select-roi 0,0.7,1,0.3 --out ./purify-work/final.json` — 本地筛选;还支持 --delete-id / --watermark-region / --protect-region。
535
+ - `gtrk purify run ./clip.mp4 --purify-func-type <用户选定模式> --detect-scope subtitle --watermark-region 0.8,0.02,0.18,0.08 --json` — 明确范围的自动组合;full_screen 必须显式指定。
536
+ - `gtrk purify ./clip.mp4 --purify-func-type <用户选定模式> --no-detect --watermark-region 0.8,0.02,0.18,0.08,0,5 --out ./purify-work --json` — 只处理给定角标框的前 5 秒,跳过文字检测;省略时间则覆盖全片。框为画面归一化 `x,y,w,h`,每条视频分别定位,不能直接套用另一条视频的选区。
537
+ - `gtrk purify apply ./purify-work/final.json --purify-func-type <用户选定模式> --json` — 最终清单唯一权威;空清单不建单。
538
+ - `gtrk purify resume ./purify-work/run-xxx.json --json` — 恢复已有任务和下载,不重复计费建单。保护区域需新版后端;ffmpeg 为模糊,raft 为内容修复。
539
+
540
+ 上述 `detect-xxx-final.json` 和 `run-xxx.json` 仅示意:实际路径以命令回执中的 `finalRegionsJson` 和 `journal` 为准。检测与处理各建一次任务、分别计费;`edit` 只在本地编辑。用户明确要求直接采用检测结果时可用 `run`,仅按框去角标则用 `--no-detect`。`resume` 用于已有任务或下载中断;云端明确失败时保留任务 ID 排查,不把重复提交当成恢复。
541
+
542
+ - `gtrk tool video_upscale ./clip.mp4 --upscale-times 3 --upscale-type Anime [--json]` — 实验性视频超分;输入最多 60 秒,放大后任一边不得超过 4000 px,支持 `2`、`3`、`4` 倍和 `Reality`、`Anime`。
543
+ - `gtrk tool video_interpolate ./clip.mp4 --interpolate-multiplier 3 [--json]` — 视频插帧;支持 `2`、`3`、`4` 倍,不套用旧文档中的 1 分钟限制,原视频任一边不得超过 4000 px。
544
+ - `gtrk tool video_segment ./clip.mp4 [--detector adaptive] [--threshold 27] [--json]` — 机械分镜;产**结构化** `result-output.json`(`scene_list` 各段起止/时长),非下载文件。
545
+ - `gtrk tool video_ai_segment ./clip.mp4 [--segment-mode shot_type] [--json]` — 智能语义分镜;产 `result-output.json`(`categories[].shots[]` 含景别/标签/描述/秒级时码)。
546
+ - `gtrk tool video_motion_cut ./clip.mp4 [--json]` — 运镜/高光片段;产 `result-output.json`(`cut_points[]` 含帧号、秒级时码与运动特征)。
547
+ - `gtrk tool video_ai_subtitle ./clip.mp4 --language zh [--translate-language en] [--need-render] [--subtitle-color 湖蓝]` — 智能字幕:`--language` 必填,产 `.ass` 字幕 + `result-output.json`(LLM 摘要 + 字级时间轴)。**默认只上传本地抽出的音频**(毛片不出本地,几何随请求回传);`--need-render` 改由**本地 ffmpeg 烧录**(缺 `思源黑体 CN Bold` 直接报错,不用替代字体顶);`--need-pure` 需要画面,加了会整片上传。`subtitle_type`/`subtitle_color` 枚举与 `content` 详见云端 API 文档,`--params-json '{"content":{...}}'` 可透传。
548
+ - `gtrk tool subtitle_translate ./movie.ass --language zh-CN --translate-language en-US [--bilingual] [--canvas 1080x1920]` — 智能字幕**翻译**:把已有字幕换个语种,**两个语种参数都必填**。**与 `video_ai_subtitle` 的分界是输入形态**:从音视频里认出字幕走 `video_ai_subtitle`,把已有 `.ass`/`.srt` 换语种走本条(不重跑 ASR,也不覆盖已有校对)。`--line-mode keep` 让时码与输入逐条一致(可直接替换原字幕轨),缺省 `resegment` 译文更通顺但会改行数与时码;`.srt` 里没有画布信息,**竖屏务必传 `--canvas`**,否则按横屏折行可能出血。样式类参数仅 `ass` 输出有效,`srt` 输出叠样式会被服务端在扣费前拒。
549
+ - `gtrk tool video_long2short_pro ./talk.mp4 --language zh-CN [--split-screen] [--speed-factor 1.1]` — 长剪短·**精剪**:一键出成片,逐条 `clip{i}.mp4` + 人读报告 `clips.md`(含润色降级明细)。**与 `gtrk long2short`(粗剪)分工**:粗剪出可编辑工程(gtrk/剪映/PR)、毛片不上传、给人再剪;精剪只出成片、整片上传、计费约为粗剪两倍。判断句:剪完还要不要再动?要动走粗剪,不动走精剪。
550
+ - 上面三个是**分析型工具**:产物是结构化数据 `result-output.json`(非下载媒体),`result.json` 的 `resultFile` 指向它、`files` 为空且 `ok=true` 属正常。
551
+ - `gtrk tool audio_separation ./song.mp3 [--mode turbo]` — 人声伴奏分离;`--param need_vocals=false` 等低频字段仍可透传。
552
+ - `gtrk tool audio_speaker_split ./meeting.mp3 [--only-struct]` — 按说话人分轨:默认产各说话人 `.wav` + `result-output.json`(`spoken_list` 时间线);`--only-struct` 只出结构不切文件。
553
+ - `gtrk tool audio_stretch ./song.mp3 [--semitones -3] [--speed 1.5]` — 变调变速;音高与速度独立,`--speed` 必须 > 0。
554
+ - `gtrk tool audio_noise_reduce ./interview.mp4 [--prop-decrease 0.5]` — 音频或视频均可输入,统一输出降噪音频。
555
+ - `gtrk tool audio_silence_remove ./talk.mp3 [--min-silence-len 800] [--desired-silence-len 200]` — 移除过长静音,只落处理后的音频。
556
+ - `gtrk tool piano_audio_to_midi ./piano.mp3` — 钢琴音频扒谱为 `.mid`。
557
+ - `gtrk tool piano_audio_enhance ./piano.mp3` — 钢琴录音修复增强,产高质量 WAV 主产物 + 配套 MIDI 副产物。
558
+ - `gtrk tool image_to_square ./long.jpg [--max-line 8000]` — 长图转方图;`--max-line` 默认 4000、上限 20000。
559
+ - `gtrk tool image_to_live ./photo.jpg [--output-format motion_photo]` — 让静态照片动起来。缺省产出约 4 秒的 `.mp4` 短视频(无声);`--output-format motion_photo` 改为直出**安卓动态照片**(单个 `.jpg`,静图末尾内嵌该视频,相册里长按即播),并附带同一条 `.mp4`,两种格式同价。兼容边界:支持该标准的安卓相册可识别并播放;**iOS 不识别**,表现为普通静态图片;少数安卓机型可能只显示静图。
560
+ - `gtrk tool image_classic_template a.jpg b.jpg c.jpg --main-title "新品速览"` — 标题+多图出封面/拼图;`--output-pic-count`/`--output-text-count` 由服务端钳制 ≤20。
561
+ - `gtrk tool image_vertical_stitch top.png mid.png bottom.png` — 多图按传入顺序竖拼成一张长图。
562
+ - `gtrk tool video_split_screen a.mp4 b.mp4 --output-ratio 16:9` — 简单档:整段视频自动布局分屏(reaction/对比同框)。
563
+ - `gtrk tool video_split_screen a.mp4 b.mp4 --clips-json '[{"input":0,"begin_time_ms":0,"end_time_ms":5000},{"input":1,"crop":{"x":0.1,"y":0,"width":0.8,"height":1}}]'` — 精确档:按 0 起索引指定每段毫秒区间与归一化裁剪框;同一文件可多条目出多窗口。
564
+ - `gtrk tool video_speaker_detect ./talk.mp4 --language zh-CN` — 检测画面里谁在何时说话,出结构化 JSON(重 GPU)。
565
+ - `gtrk tool video_face_track ./talk.mp4 --params-json '{"time_ranges":[{"begin_time":0,"end_time":30000}]}'` — 人脸追踪/身份聚类,可限定时间段(**单位毫秒**;重 GPU)。
566
+ - `gtrk tool video_character_cut "./movie.mkv" --character "智代" --seed-range "00:12:27.500,00:12:29.500" --json` — 角色 Cut 检索(v2 尚待部署);全片逐镜头分析,视觉种子确认身份,只上传分析代理。多人种子加 `--seed-bbox "0.445,0.36,0.16,0.5"`。结果 `cuts` 为有视觉证据的镜头及相关上下文,`review_candidates` 为身份未知镜头,`context_review` 为待复核关系;`partial` 必须展示缺口,`identity_unresolved` 要求换种子或框选。稀疏采样仅声明镜头含目标,不代表角色在整个区间逐帧可见。
567
+ - `gtrk tool audio_tts_clone --text "欢迎收听本期节目" --speaker narrator` — 文字转配音音频(音色列表见官网文档)。
568
+ - `gtrk tool audio_tts_clone --text-file 稿子.txt --speaker sweet_female --output-format mp3` — 长文合成,缺省跟随音色调好的语速与切分参数。
569
+ - `gtrk tool mad ./素材 [--bgm 歌.mp3] [--duration 20] [--seed 42] [--technique 技法名,…] [--refresh] [--json]` — 一键剪 MAD:扫素材文件夹 → 选技法 → 单一 `.jsx`(AE 2020+ 跑一遍出母合成成片工程)。`--seed` 可复现;`result.json` 记 seed/数据版本/降级档位/选中技法。
570
+ - `gtrk tool mad --technique <技法名 | 别名 | pid,…>` — 只用点名的技法出片(不点名则按规则抽样)。名字歧义或不存在时报错列候选、零落盘;点到技法池里没有窗口的技法会说明原因并用剩下的继续。
571
+ - `gtrk tool mad --search <关键词> [--json]` — 只查技法目录不出片:按技法名/别名/类目做包含匹配,列出技法名、类目、`pid`、收录次数与池内窗口数。与 `--technique` 互斥;两者都零计费、不需 API Key。
572
+ - 通用:`--out <dir>` 覆盖产物目录、`--param k=v`(可重复)/`--params-json '<对象>'` 透传云端参数、`--reupload` 忽略上传缓存、`--json` 机读、`--ffmpeg-path <dir>` 指定 ffmpeg 目录。
573
+ - cloud 型工具缺 Key → 报错引导 `gtrk init`。产物下载失败(如链接过期 404)→ `result.json` 记 `errors`、`ok=false`、`task.json` 保留可凭 `taskId` 恢复。
574
+ - 净化、超分、插帧为长耗时 GPU 任务,描述器最多轮询 4 小时。等待超时不代表任务取消;保留 `task.json` / `result.json` 并按 `taskId` 恢复,不要直接重跑造成重复计费。
575
+
576
+ 配套 skill `/gtrk-tools`(一个 skill 覆盖整个工具族)。
577
+
578
+ ### `gtrk render <工程.gtrk>` — 本地渲染成片
579
+
580
+ ```
581
+ gtrk render <gtrk> [-o <out.mp4>] [--crf <n>] [--codec <c>] [--ffmpeg-path <dir>]
582
+ [--no-qc] [--no-particles] [--particle-concurrency <n>] [-y|--yes]
583
+ [--no-open] [--json]
584
+ ```
585
+
586
+ 把 `.gtrk` 当 EDL 用本地 ffmpeg 出成片。**素材一律取本地原片**(`materials[].path`),云端不产成片。
587
+
588
+ **合成什么**:底轨(`track_index` 最小的非黑底垫轨)+ 全部音源,再按契约 z 序(`track_index` **升序**,越大越靠前)叠**全部可见叠加层**——overlay 视频轨(B-roll 候选 / AI 情景动画回铺)与 `beat_track` 的 MG 颗粒。
589
+
590
+ - **可见性只读 `hidden` 字段**(客户端的「小眼睛」):关掉的轨整条不进片,如实计数告知。渲染器**不猜**哪条该叠。
591
+ - **多条候选轨都可见时成片取最上层**(= 客户端预览所见)。要换,在客户端关小眼睛或删轨。
592
+ - overlay 素材本地缺失(如 B-roll 代理没下全)**只降级不阻断**:该 clip 不叠 + 告警,片子照出。
593
+
594
+ **颗粒那一段有计费**(本命令唯一的云端出口):
595
+
596
+ | 事 | 口径 |
597
+ |---|---|
598
+ | 为什么要上云 | CLI 无 HTML 渲染引擎,颗粒像素权威在同合云 Hyperframes;上行的只有**颗粒 HTML 文本**,素材本体不上行 |
599
+ | 计量 | **唯一颗粒数 × 未命中缓存数**(`html_render_simple`,按分钟)。同一颗粒在轨上出现 N 次只烤一次 |
600
+ | 缓存 | `<工程目录>/.tonghe-cache/particles/<sha256>.mov`,与**客户端导出剪映**那条链**同键同落点** ⇒ 任一端烤过,另一端直接命中 |
601
+ | 确认 | 有未命中即先出预估(总数 / 唯一 / 未命中 / 计费分钟)并要确认;`--yes` 跳过。**全命中不弹确认**(零计费不该有摩擦) |
602
+ | `--json` | 有未命中且未给 `--yes` ⇒ **硬拒**(机读模式没有 stdin,不静默提交计费任务) |
603
+ | 逃生舱 | `--no-particles` 零计费出无颗粒版;overlay 视频轨**照常合成**(那部分纯本地) |
604
+ | 拒绝确认 | 零云端调用、零文件写入退出 |
605
+
606
+ `--particle-concurrency <n>`(1–8,默认 6)调颗粒云渲并发。
607
+
608
+ `--json` 结果含 `particles: {total,unique,cached,rendered,billedMinutes,skipped[]}` 与
609
+ `overlay: {layers,particles,hiddenSkipped,missingMaterialSkipped,particleUnavailable}`——
610
+ **跳过了什么都有机读通路**,不会出现「铺了 65 颗、成片一颗没有、退出码 0」。
611
+
612
+ 渲完自动质检并落 `.qc.json`(`--no-qc` 跳过);质检结论只呈现、不改渲染退出语义(硬门控走 `gtrk qc --fail-on`)。
613
+
614
+ ### 其它
615
+
616
+ - `gtrk install [--api-key … -y --skill-agents codex,cursor --all-agents --copy-skills --skills-dir …]` — 一条命令装全(skill + 配置 + 体检),对标飞书 `lark-cli install`。
617
+ - `gtrk init [--api-key … --api-base … --jianying-draft-dir … -y]` — 仅配置(交互 / 非交互)。
618
+ - `gtrk doctor` — 体检(含 CLI 版本 / 有无新版)。
619
+ - `gtrk deps status` — 查 ffmpeg/ffprobe 与渲染字体的**当前来源**(`--ffmpeg-path` / `~/.gitruck` / 系统 / 缺失)、版本、授权与源码地址。
620
+ - `gtrk deps install [--ffmpeg] [--font] [--force]` — 从同合云镜像安装运行时资产,**已存在则跳过**。
621
+ - **不会静默自动下载**:任何缺失路径只报错并指向本命令(包体 30–90 MB,且分发物涉及授权,须由用户/agent 显式触发)。
622
+ - 下载一律 https + **sha256 强校验**,校验不过即丢弃、不落地;解包调**系统 tar**(Win10+/macOS/Linux 自带),不引第三方解压依赖。
623
+ - 定位优先级不变:`--ffmpeg-path` → `~/.gitruck/ffmpeg` → 系统 PATH。镜像只填中间那一格,**不越过你自己装的 ffmpeg**。
624
+ - 字体落 `~/.gitruck/fonts`,烧录时经 ffmpeg `ass` 滤镜的 `fontsdir` 供给——**不装进系统字体表、不写注册表、不要管理员权限**。
625
+ - 分发的 ffmpeg 为 GPLv3 构建,对应源码与二进制同处提供(见分发点 `SOURCE.md`);**下载不附加任何使用限制**。
626
+ - `gtrk upgrade [--check]` — 升级 CLI 到最新版 + 刷新 skill(配置保留);`--check` 只查不装。
627
+ - `gtrk skills install [--agents codex,workbuddy,comate,…] [--all] [--copy] [--dir <skills 目录>]` — 单独安装/刷新 Agent Skills;缺省由通用适配器与 gtrk 补充层自动检测。
628
+ - `gtrk skills recommend [--scene <id>] [--json]` — 第三方 skill 推荐目录:不带 `--scene` 列十个场景(hook / mg-explainer / kinetic-text / data-viz / map / ai-drama / collage / caption / principles / technique),带场景按 tier 给条目(用途 / 安装命令 / 许可与依赖 / 登记命令)。**只推荐不打包**:目录随包分发、带快照日期、不联网不留痕;star 与许可以仓库页为准,装不装是你的选择。GPL / AGPL / 非商用 / 无许可证 / 只能经 MCP-SaaS 运行的不入目录。目录也收同合云一方的 MG 排版技法族(`--scene technique`,条目 `origin: first-party`):技法不当车道生产者,由 agent 在 MG 步按槽位取用。
629
+ - `gtrk skills add <owner/repo> [--skill <name>]... [--produces MG|AI_DRAMA|FILM_BROLL|script|none] [--column <id>] [--agents ...] [--all] [--copy]` — 透传通用 `skills` 适配器安装第三方 skill,成功后把 `{id, ref: "<owner/repo>#<skill>", produces, status: "third-party"}`(一方条目 `status: "first-party"`)**追加**进栏目配置 `style.skills`(同 ref 幂等、失败不登记;`--produces` 缺省取目录值,目录外仓登记为 `routing:"none"`),之后 `gtrk mg` / `/gtrk-ai-drama` 按 `produces` 即可解析到它。