@gitruck/cli 1.0.2 → 1.0.5
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 +44 -0
- package/README.en.md +111 -24
- package/README.md +94 -14
- package/dist/index.js +5674 -2252
- package/package.json +66 -66
- package/skills/gtrk-ai-drama/SKILL.md +1 -1
- package/skills/gtrk-long2short/SKILL.md +71 -68
- package/skills/gtrk-matrix/SKILL.md +40 -7
- package/skills/gtrk-mg/SKILL.md +10 -2
- package/skills/gtrk-splitter/SKILL.md +208 -187
- package/skills/gtrk-splitter/references/field-schema.md +138 -134
- package/skills/gtrk-tools/SKILL.md +132 -132
- package/skills/gtrk-transcript/SKILL.md +64 -58
- package/skills/gtrk-travel-recap/SKILL.md +212 -0
package/package.json
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@gitruck/cli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"author": "Gitruck (同合云)",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/Gitruck/cli.git"
|
|
10
|
-
},
|
|
11
|
-
"homepage": "https://github.com/Gitruck/cli#readme",
|
|
12
|
-
"bugs": {
|
|
13
|
-
"url": "https://github.com/Gitruck/cli/issues"
|
|
14
|
-
},
|
|
15
|
-
"type": "module",
|
|
16
|
-
"bin": {
|
|
17
|
-
"gtrk": "dist/index.js"
|
|
18
|
-
},
|
|
19
|
-
"files": [
|
|
20
|
-
"dist",
|
|
21
|
-
"assets",
|
|
22
|
-
"skills",
|
|
23
|
-
"contracts",
|
|
24
|
-
"AGENT.md",
|
|
25
|
-
"README.md",
|
|
26
|
-
"README.en.md",
|
|
27
|
-
"LICENSE"
|
|
28
|
-
],
|
|
29
|
-
"engines": {
|
|
30
|
-
"node": ">=20.6"
|
|
31
|
-
},
|
|
32
|
-
"publishConfig": {
|
|
33
|
-
"access": "public",
|
|
34
|
-
"registry": "https://registry.npmjs.org/"
|
|
35
|
-
},
|
|
36
|
-
"keywords": [
|
|
37
|
-
"gitruck",
|
|
38
|
-
"同合云",
|
|
39
|
-
"video",
|
|
40
|
-
"oral-cut",
|
|
41
|
-
"口播剪辑",
|
|
42
|
-
"cli",
|
|
43
|
-
"jianying",
|
|
44
|
-
"剪映",
|
|
45
|
-
"agent"
|
|
46
|
-
],
|
|
47
|
-
"scripts": {
|
|
48
|
-
"gtrk": "bun run src/index.ts",
|
|
49
|
-
"build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
|
|
50
|
-
"typecheck": "tsc --noEmit",
|
|
51
|
-
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
52
|
-
"test": "esbuild src/lib/compliance-notice.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-lay.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/local-index.ts src/lib/local-search.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
|
|
53
|
-
"openspec:gate": "node openspec/gate.mjs"
|
|
54
|
-
},
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"@xmldom/xmldom": "^0.9.6",
|
|
57
|
-
"bun-types": "^1.1.0",
|
|
58
|
-
"commander": "^12.1.0",
|
|
59
|
-
"esbuild": "^0.28.1",
|
|
60
|
-
"typescript": "^5.6.0"
|
|
61
|
-
},
|
|
62
|
-
"dependencies": {
|
|
63
|
-
"hash-wasm": "^4.12.0",
|
|
64
|
-
"jszip": "^3.10.1"
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@gitruck/cli",
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Gitruck (同合云)",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Gitruck/cli.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/Gitruck/cli#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/Gitruck/cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"bin": {
|
|
17
|
+
"gtrk": "dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"assets",
|
|
22
|
+
"skills",
|
|
23
|
+
"contracts",
|
|
24
|
+
"AGENT.md",
|
|
25
|
+
"README.md",
|
|
26
|
+
"README.en.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20.6"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"registry": "https://registry.npmjs.org/"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"gitruck",
|
|
38
|
+
"同合云",
|
|
39
|
+
"video",
|
|
40
|
+
"oral-cut",
|
|
41
|
+
"口播剪辑",
|
|
42
|
+
"cli",
|
|
43
|
+
"jianying",
|
|
44
|
+
"剪映",
|
|
45
|
+
"agent"
|
|
46
|
+
],
|
|
47
|
+
"scripts": {
|
|
48
|
+
"gtrk": "bun run src/index.ts",
|
|
49
|
+
"build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
|
|
50
|
+
"typecheck": "tsc --noEmit",
|
|
51
|
+
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
52
|
+
"test": "esbuild src/lib/compliance-notice.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-lay.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/local-index.ts src/lib/local-search.ts src/lib/qc.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/feedback.ts --bundle --platform=node --format=esm --outfile=.test-build/feedback-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
|
|
53
|
+
"openspec:gate": "node openspec/gate.mjs"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@xmldom/xmldom": "^0.9.6",
|
|
57
|
+
"bun-types": "^1.1.0",
|
|
58
|
+
"commander": "^12.1.0",
|
|
59
|
+
"esbuild": "^0.28.1",
|
|
60
|
+
"typescript": "^5.6.0"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"hash-wasm": "^4.12.0",
|
|
64
|
+
"jszip": "^3.10.1"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -17,7 +17,7 @@ description: AI 再现分镜稿生成器——把成片 SOP 第③步(B-roll
|
|
|
17
17
|
|
|
18
18
|
成片是**有序 SOP + 用户检查点**,不是并行一把铺。次序:
|
|
19
19
|
|
|
20
|
-
> ① oralcut 剪口播 → ② split 视觉拆分派单 → ③ **B-roll 底轨全铺齐**(`matrix` 铺影视/本地素材 + **本 skill 产稿→外部出片→用户手动回铺**,**两条腿同一阶段**)→ ④ **全局抽帧检查画面构图**(用户确认)→ ⑤ **mg 铺 MG(含 ov,最后叠上)** → `gtrk render` 收口
|
|
20
|
+
> ① oralcut 剪口播 → ② split 视觉拆分派单 → ③ **B-roll 底轨全铺齐**(`matrix` 铺影视/本地素材 + **本 skill 产稿→外部出片→用户手动回铺**,**两条腿同一阶段**)→ ④ **全局抽帧检查画面构图**(用户确认)→ ⑤ **mg 铺 MG(含 ov,最后叠上)** → `gtrk subtitle lay` 上字幕(快速成片模式必做)→ `gtrk render` 收口
|
|
21
21
|
|
|
22
22
|
**你与 `matrix` 同属第 ③ 步,MUST 在 MG 之前落位。** 理由:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——整条管线里唯一的叠加层是 MG(含 ov)。MG 的排版决策是「因势象形避主体」、**依赖底轨的最终画面构图**;若你的片段在 MG 之后才回铺,底轨构图就变了,先产的 MG 是对着「还没有 AI 画面的底轨」做的避让,你的片段落位后必然被避让错位、甚至被 MG 盖住画面主体。
|
|
23
23
|
|
|
@@ -1,68 +1,71 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gtrk-long2short
|
|
3
|
-
description: 长剪短闭环——把一条长视频(课程/直播/播客/访谈毛片)通过同合云选段跳剪成多条高光短片工程,一次产出逐 clip 的 gtrk+剪映+PR 三方工程(可选智能分屏)。当用户想「长剪短 / 长视频切高光 / 直播切片 / 课程切短视频 / 播客出短片 / 两小时的课切成几条精华」时使用本 skill。凡涉及把长视频拆成多条可精修的短片工程,优先用本 skill 驱动 gtrk CLI 的 `long2short` 命令,不要手搓 ffmpeg、不要人工挑时间码。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 长剪短(gtrk-long2short)
|
|
7
|
-
|
|
8
|
-
把用户的一条长视频,用 `gtrk` CLI 跑通「**本地抽音频/720p 代理(毛片永不上传)** → 云端语义选段+跳剪(可选分屏)→ 逐 clip 拉回 gtrk/剪映/PR 三方工程」,再把产物目录回给用户。**CLI 是手、你是脑。**
|
|
9
|
-
|
|
10
|
-
> 与智能剪口播(gtrk-oralcut)同一心智模型;差异是**一次任务出 N 条短片**,各自一份工程组落 `clip{i}/` 子目录。
|
|
11
|
-
|
|
12
|
-
> **⚠️ 先确认用户要工程还是要成片。** 本 skill 是**粗剪**——出的是**可编辑工程**(gtrk + 剪映 + PR),
|
|
13
|
-
> 给人二次精修用,毛片不上传。如果用户只要**能直接发布的成片**、不打算再剪,那该走**精剪**:
|
|
14
|
-
> `gtrk tool video_long2short_pro`(走 `/gtrk-tools`,整片上传、云端渲染、计费约为粗剪两倍)。
|
|
15
|
-
> 判断句:**「剪完还要不要再动?」要动 → 留在这儿;不动 → 转精剪。** 选错一次要白花积分重来。
|
|
16
|
-
|
|
17
|
-
## 前置:CLI 装没装 + 体检
|
|
18
|
-
|
|
19
|
-
先跑 `gtrk doctor`:
|
|
20
|
-
- **`gtrk` 找不到** → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js),再重试。
|
|
21
|
-
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init`(交互式、需真终端,你别替他跑)。
|
|
22
|
-
- 全绿就往下走。
|
|
23
|
-
|
|
24
|
-
## 一条命令
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
gtrk long2short "D:/毛片/课程.mp4" --language zh-CN --json
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
对谈/多人同框想要分屏:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
gtrk long2short "D:/毛片/对谈.mp4" --language zh-CN --split-screen --split-orientation tb --json
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 参数表
|
|
37
|
-
|
|
38
|
-
| 参数 | 说明 |
|
|
39
|
-
|---|---|
|
|
40
|
-
| `--language <code>` | **必填**,源语种(如 zh-CN;取值以服务端支持列表为准,传错服务端会报枚举) |
|
|
41
|
-
| `--split-screen` | 开启智能分屏:本地改传 **720p 代理**(否则只抽音频);云端检测多人同框段并烤 720p 分屏素材 |
|
|
42
|
-
| `--split-orientation <o>` | 分屏方向 `auto|lr|tb`(缺省 auto=按内容可复现随机) |
|
|
43
|
-
| `--main-topic <text>` | 主题引导,影响选段偏好 |
|
|
44
|
-
| `--duration-pref <p>` / `--max-clip-sec <n>` | 成片时长偏好 / 单条上限秒。**成片条数由内容语义决定,不能指定条数** |
|
|
45
|
-
| `--no-jump-cut` | 关闭跳剪(默认开:片内去水词冗余,只删不重排) |
|
|
46
|
-
| `--
|
|
47
|
-
|
|
|
48
|
-
| `--
|
|
49
|
-
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
1
|
+
---
|
|
2
|
+
name: gtrk-long2short
|
|
3
|
+
description: 长剪短闭环——把一条长视频(课程/直播/播客/访谈毛片)通过同合云选段跳剪成多条高光短片工程,一次产出逐 clip 的 gtrk+剪映+PR 三方工程(可选智能分屏)。当用户想「长剪短 / 长视频切高光 / 直播切片 / 课程切短视频 / 播客出短片 / 两小时的课切成几条精华」时使用本 skill。凡涉及把长视频拆成多条可精修的短片工程,优先用本 skill 驱动 gtrk CLI 的 `long2short` 命令,不要手搓 ffmpeg、不要人工挑时间码。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 长剪短(gtrk-long2short)
|
|
7
|
+
|
|
8
|
+
把用户的一条长视频,用 `gtrk` CLI 跑通「**本地抽音频/720p 代理(毛片永不上传)** → 云端语义选段+跳剪(可选分屏)→ 逐 clip 拉回 gtrk/剪映/PR 三方工程」,再把产物目录回给用户。**CLI 是手、你是脑。**
|
|
9
|
+
|
|
10
|
+
> 与智能剪口播(gtrk-oralcut)同一心智模型;差异是**一次任务出 N 条短片**,各自一份工程组落 `clip{i}/` 子目录。
|
|
11
|
+
|
|
12
|
+
> **⚠️ 先确认用户要工程还是要成片。** 本 skill 是**粗剪**——出的是**可编辑工程**(gtrk + 剪映 + PR),
|
|
13
|
+
> 给人二次精修用,毛片不上传。如果用户只要**能直接发布的成片**、不打算再剪,那该走**精剪**:
|
|
14
|
+
> `gtrk tool video_long2short_pro`(走 `/gtrk-tools`,整片上传、云端渲染、计费约为粗剪两倍)。
|
|
15
|
+
> 判断句:**「剪完还要不要再动?」要动 → 留在这儿;不动 → 转精剪。** 选错一次要白花积分重来。
|
|
16
|
+
|
|
17
|
+
## 前置:CLI 装没装 + 体检
|
|
18
|
+
|
|
19
|
+
先跑 `gtrk doctor`:
|
|
20
|
+
- **`gtrk` 找不到** → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js),再重试。
|
|
21
|
+
- 报「缺 API Key」→ 让用户先跑一次 `gtrk init`(交互式、需真终端,你别替他跑)。
|
|
22
|
+
- 全绿就往下走。
|
|
23
|
+
|
|
24
|
+
## 一条命令
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
gtrk long2short "D:/毛片/课程.mp4" --language zh-CN --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
对谈/多人同框想要分屏:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
gtrk long2short "D:/毛片/对谈.mp4" --language zh-CN --split-screen --split-orientation tb --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 参数表
|
|
37
|
+
|
|
38
|
+
| 参数 | 说明 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `--language <code>` | **必填**,源语种(如 zh-CN;取值以服务端支持列表为准,传错服务端会报枚举) |
|
|
41
|
+
| `--split-screen` | 开启智能分屏:本地改传 **720p 代理**(否则只抽音频);云端检测多人同框段并烤 720p 分屏素材 |
|
|
42
|
+
| `--split-orientation <o>` | 分屏方向 `auto|lr|tb`(缺省 auto=按内容可复现随机) |
|
|
43
|
+
| `--main-topic <text>` | 主题引导,影响选段偏好 |
|
|
44
|
+
| `--duration-pref <p>` / `--max-clip-sec <n>` | 成片时长偏好 / 单条上限秒。**成片条数由内容语义决定,不能指定条数** |
|
|
45
|
+
| `--no-jump-cut` | 关闭跳剪(默认开:片内去水词冗余,只删不重排) |
|
|
46
|
+
| `--subtitle-file <path>` | **现成单语字幕**(.srt/.ass)作转写来源,替代云端 ASR(用户手里有片源字幕/人工校对稿时用,省一次识别)。切点精度降为**字幕行边界**;双语/多层 .ass 会被拒;与 stt 类参数互斥 |
|
|
47
|
+
| `--subtitle-out` | 逐 clip 另产**单语 .srt 字幕**(按目标画布档位智能拆行:横屏约 20 字/行、竖屏约 13 字/行),落 `clip{i}/srt/` |
|
|
48
|
+
| `--keep-punctuation` | 字幕保留全部标点。缺省按统一口径去标点:逗号句号→空格、`?!` 等保留 |
|
|
49
|
+
| `--output-size <s>` | 画布 `9:16|16:9|1:1` 或 `WxH`(缺省 9:16 竖版) |
|
|
50
|
+
| `-f, --formats <list>` | 三方格式,缺省 `gtrk,jianying,xml`(云端逐 clip 直产;gtrk 恒有) |
|
|
51
|
+
| `--jianying-draft-dir <dir>` | 剪映草稿根(或 `auto`);各 clip 草稿落 `<草稿根>/<产物根名>_clip{i}` |
|
|
52
|
+
| `-o/--out`、`--no-open`、`--json`、`--reupload`、`--param/--params-json` | 与 oralcut 同口径 |
|
|
53
|
+
|
|
54
|
+
## 计费与跑前须知(每次都转述给用户)
|
|
55
|
+
|
|
56
|
+
- 运行时 CLI 自动查询实时价格并在跑前打印——**把计费提示原样转述**;按**上传物音频时长**计费(≈原片时长),**长片先向用户确认再跑**。
|
|
57
|
+
- 云端处理时长随片长涨(ASR+选段),CLI 轮询墙钟 60 分钟;超时不丢——产物根 `task.json` 里有 `task_id` 可恢复。
|
|
58
|
+
|
|
59
|
+
## 产物(跑完把这些讲给用户)
|
|
60
|
+
|
|
61
|
+
- 产物根 `<毛片名>-long2short/`:`report.json`(选段报告)+ `result.json` + 逐 clip 子目录 `clip0/ clip1/ …`(各含 `gtrk/` 客户端工程、`jianying/` 草稿、`xml/` PR 工程;开了 `--subtitle-out` 另有 `srt/clip{i}.srt` 单语字幕)。
|
|
62
|
+
- **先看 `clips.md`**(产物根,人读总览):一张表列全部切片的标题/时长/评分/一句话简介 —— 用它给用户复述「出了哪几条、各讲什么、建议先精修哪条」,别让用户自己开工程猜。逐条的入选理由、跳剪说明、高光词在 `clip{i}/clip.md`。
|
|
63
|
+
- 开了 `--split-screen` 时:**分屏素材落在毛片旁的 `split_screen/` 子目录**(工程素材路径指向那里,别移动/删除,移动了工程会缺素材)——这点要提前告知用户。
|
|
64
|
+
- 剪映草稿已拷入草稿根(给了 `--jianying-draft-dir` 时),剪映里直接可见 `<产物根名>_clip{i}`。**判据**:草稿目录里必须是 `draft_content.json` + `draft_meta_info.json` 两个精确文件名(云端产物侧的 `clip{i}_` 前缀在拷进草稿根这一跳被剥掉,产物目录 `clip{i}/jianying/` 里保留带前缀的归档原名)。CLI 日志按实际齐全条数报「N/M 条两件套齐全」,不齐的记进 `result.json` 的 `errors`、该 clip 的 `jianyingDraftPath` 为 `null`。
|
|
65
|
+
|
|
66
|
+
## 排错
|
|
67
|
+
|
|
68
|
+
- **部分 clip 失败 / 个别分屏素材 404**:单点失败不连坐,`result.json` 的 `errors` 有明细;把失败项如实告诉用户,其余产物照常可用。
|
|
69
|
+
- **轮询超时/进程中断**:凭产物根 `task.json` 的 `task_id` 查询云端状态;任务在云端照常跑完,稍后可重取。
|
|
70
|
+
- **clips 为空**:说明内容里没有可成片的高光段(纯语义选段),把 `report.json` 摘要给用户看原因。
|
|
71
|
+
- **剪映里看不到草稿**:先看草稿目录里的**文件名**——必须是 `draft_content.json` + `draft_meta_info.json`,缺一件或带前缀剪映都不显示;`result.json` 里该 clip 的 `jianyingDraftPath` 为 `null` 即是此症。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gtrk-matrix
|
|
3
|
-
description: B-roll 检索铺轨编排手册——成片管线里第一个铺的车道(SOP ③ B-roll 底轨阶段的影视/本地素材腿),也是素材智能铺轨「乐高架构」的裁定层指引。消费拆分派单的 FILM_BROLL 队列(`dispatch.film_broll`),双口向量检索 + 下载 preview 代理,在工程里平铺 N 条候选 B-roll 轨,供用户在 opencut 里用轨道小眼睛切换对比、挑选/调整;确认后交棒同阶段的 AI 情景片段腿(`/gtrk-ai-drama`,车道非空时),三源落齐再进 ④ 全局抽帧检查构图、⑤ 才铺 MG。另支持**本地素材模式**(`matrix index` 建免切片索引、`--local` 本地检索铺轨,素材本体不上云)、**按需理解零件**(`matrix describe`:VLM 描述/标签/质量分/可用性信号,plan 注入或素材直理解)、**源时间窗检索**(`--source-window
|
|
3
|
+
description: B-roll 检索铺轨编排手册——成片管线里第一个铺的车道(SOP ③ B-roll 底轨阶段的影视/本地素材腿),也是素材智能铺轨「乐高架构」的裁定层指引。消费拆分派单的 FILM_BROLL 队列(`dispatch.film_broll`),双口向量检索 + 下载 preview 代理,在工程里平铺 N 条候选 B-roll 轨,供用户在 opencut 里用轨道小眼睛切换对比、挑选/调整;确认后交棒同阶段的 AI 情景片段腿(`/gtrk-ai-drama`,车道非空时),三源落齐再进 ④ 全局抽帧检查构图、⑤ 才铺 MG。另支持**本地素材模式**(`matrix index` 建免切片索引、`--local` 本地检索铺轨,素材本体不上云)、**按需理解零件**(`matrix describe`:VLM 描述/标签/质量分/可用性信号,plan 注入或素材直理解)、**源时间窗检索**(`--source-window`,电影解说式逐段推进)、**通用三态素材检索**(`matrix material`:clip/image/audio 下载向整条素材,BGM/配图主场,2×2 身份路由下半行)与 **plan 可编辑通路**(agent 改 plan 后 `matrix lay` 消费)。当用户想「铺 B-roll / 检索素材 / 找空镜 / 给空镜配画面 / 填 B-roll 候选 / 单独搜个词补个空槽 / 找 BGM / 搜配乐 / 搜张配图 / 用我自己的素材铺 B-roll / 给素材文件夹建索引 / 理解一下这些素材能不能用 / 把这堆素材剪成片 / 影视解说配画面」时使用本 skill。凡涉及把素材检索并铺进工程,优先用本 skill 驱动 gtrk CLI 的 `matrix` 命令族,别让用户自己去终端敲、也别手搓检索。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# B-roll 检索铺轨编排手册(gtrk-matrix)
|
|
@@ -14,8 +14,8 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
14
14
|
```
|
|
15
15
|
裁定层(你):按题材/素材形态/文稿有无/用户偏好,选配方或自创编排
|
|
16
16
|
配方层(本手册 §配方库):原子命令的调用序列——只是起手式,可变奏可自创
|
|
17
|
-
原子层(gtrk CLI):index / search(--local/--source-window) / describe / matrix(plan) / lay / tool image_move
|
|
18
|
-
服务层(云端):embed 端点 / material_describe /
|
|
17
|
+
原子层(gtrk CLI):index / search(--local/--source-window) / material / describe / matrix(plan) / lay / tool image_move
|
|
18
|
+
服务层(云端):embed 端点 / material_describe / 检索 2×2 四口(剪辑向×通用三态 × 公开×成员) / image_move
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
1. **零件不裁定**:原子命令不猜用户意图,行为全由显式参数决定。`describe` 出的 `usable_flags`(水印/字幕/黑边/模糊)只是**给你的信号**——CLI 永远不会依据它自动剔除候选,剔不剔由你编辑 plan 裁定。
|
|
@@ -123,11 +123,40 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
123
123
|
| 每段多给几个候选 | `--top-k <n>` | 整数 · 派单 `shots` 值(服务端上限 50) | 每 query 候选数上限 |
|
|
124
124
|
| 指定素材类型 | `--material-class <c>` | `real_shot` \| `concept` · 栏目策略 | 仅 internal 矩阵成员口 |
|
|
125
125
|
| 填充门槛 | `--score-floor <f>` | 浮点 0–1 · `0.2` | 低于不采纳、槽位留空露黑底;调完必看空洞告警 |
|
|
126
|
+
| 切点对齐字幕句 | `--cut-align <r>` | 浮点 0–1 · `0.7`(`0`=关闭) | 三七开拍板:约七成字幕句起点恰逢镜头切点、三成有意错开;句级时码取 transcript 重投影(降级自动回旧节奏并告警);开启时结果 JSON `lay.cut_align` 报实测比例 |
|
|
127
|
+
| 主轨空洞填充 | `--gap-fill <m>` | `fast` \| `solid`(默认)\| `none` | **仅音频驱动工程主轨**(口播工程不适用零回归):fast=放宽地板随便填候选→延长相邻颗粒→黑片兜底;solid=黑片垫齐(精修一眼看出没匹配到);none=留 gap(客户端主轨磁吸会吸除 gap 致画面与配音错位,慎用);生效时结果 JSON `lay.gap_fill` 报明细 |
|
|
126
128
|
| 不要黑底垫轨 | `--no-black-bed` | 开关 · 默认铺 | 黑底按 beat 包络整条铺,B-roll 期间遮口播 |
|
|
127
129
|
| 已编辑轨强铺逃生门 | `--force-relay` | 开关 · 关 | 用户明确点头才带;raw 登记删除不可恢复 |
|
|
128
130
|
| 同素材彻底不二用 | `--dedup-scope material` | `scene`(默认)\| `material` | 收严会加剧空洞,先看 `lay.dedup.emptySlots` |
|
|
129
131
|
| 机读(你必带) | `--json` | 开关 · 关 | 人读日志转 stderr,stdout 只出结果 JSON |
|
|
130
132
|
|
|
133
|
+
**通用三态素材检索零件**(`gtrk matrix material`,云端素材库、**下载向**出参):
|
|
134
|
+
|
|
135
|
+
与上面那张表的剪辑向检索是**并列的第二条线**,出参契约独立(下载向直链 vs 剪辑向 segments),别混用:要 B-roll 段落走 `matrix search`/派单主路,要整条素材(BGM、配图、整条原片)走本零件。
|
|
136
|
+
|
|
137
|
+
> **2×2 路由矩阵**(身份自动判定,每次运行探一次、不降级不缓存):
|
|
138
|
+
>
|
|
139
|
+
> | | external 公开口 | internal 矩阵成员口 |
|
|
140
|
+
> |---|---|---|
|
|
141
|
+
> | 剪辑向 | `/task/video_clip_search` | `/task/custom/video_clip_search` |
|
|
142
|
+
> | 通用三态 | `/task/material_search` | `/task/custom/material_search` |
|
|
143
|
+
>
|
|
144
|
+
> 成员口搜**全库**(含非商用/概念素材)且 **0 积分**;公开口只含可商用实拍素材、**1 积分/次**。差距不是理论值:Artlist 全库 2397 条音乐 `is_copyright=0`,同一 query 公开口 0 条、成员口 5/5 命中。
|
|
145
|
+
|
|
146
|
+
| 用户想要 | CLI 怎么传 | 取值 · 默认 | 说明 |
|
|
147
|
+
|---|---|---|---|
|
|
148
|
+
| 搜整条素材(BGM 主场) | `gtrk matrix material "<词>"` | 字符串 · — | 单条检索;`--out <file>` 落盘或缺省 stdout |
|
|
149
|
+
| 指定素材形态 | `--scope <s>` | `clip` \| `image` \| `audio` · `audio` | 三态通用;clip 要的是**整条**原片直链(要段落用 `matrix search`) |
|
|
150
|
+
| 只要可商用 | `--commercial-only` | 开关 · 关(搜全库) | 成员口传 `copyright_scope=commercial`;公开口本就只含可商用,该档位会**显式提示**而非静默忽略 |
|
|
151
|
+
| 按成片时长挑 | `--min-duration <秒>` / `--max-duration <秒>` | 数字 · 不过滤 | 可单独或组合给;成员口透传服务端 `filters`,公开口无该入参(CLI 按结果 `duration` 本地过滤并提示);负数 / 上界小于下界=参数错误 |
|
|
152
|
+
| 多给几条候选 | `--top-k <n>` | 整数 · `5`(服务端上限 50) | BGM 推荐 3-5 首的量级 |
|
|
153
|
+
| 去同质化 | `--diversity` | 开关 · 关 | 避免返回雷同素材 |
|
|
154
|
+
| 机读(你必带) | `--json` | 开关 · 关 | `mode:"material"`,stdout 只出结果 JSON |
|
|
155
|
+
|
|
156
|
+
出参逐条:`{id, note, duration, audio_type, tags, score, download_url, cover_url}`;`audio_type`(`pure` 纯音乐 / `song` 歌曲)与 `accompaniment_url`(song 类现成伴奏直链,零处理成本)**两档通用**;**只有 `is_copyright`(及 clip 的 `material_class`)是成员口独有**——公开口**没有**这个字段,零件如实缺省不伪造,你也别把「没有该字段」读成「不可商用」。`download_url` 带 24h 签名(过期重跑即重签)。
|
|
157
|
+
|
|
158
|
+
**upsell 口径**:`--json` 出参可能带一个**独立顶层字段** `upsell`(人读模式则是末尾一行提示)——**当且仅当**公开口档位且结果不足(0 条或少于请求量一半)时才有,内容是「加入同和新媒体矩阵可免费搜全库」+ 链接。它**不在 `results` 里、不改写任何候选**:原样转述给用户,别把它当成一条素材。成员档恒无此字段。
|
|
159
|
+
|
|
131
160
|
**本地素材零件**(`matrix index` / `--local`):
|
|
132
161
|
|
|
133
162
|
| 用户想要 | CLI 怎么传 | 取值 · 默认 | 说明 |
|
|
@@ -138,7 +167,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
138
167
|
| **源时间窗过滤** | `--source-window <start,end>` | 秒,`start<end` · 不过滤 | 仅 `--local`:只返回与窗口**有交集**的命中段(段边界不裁剪);与其他过滤器 AND 叠加;图片候选自动排除;**空窗 = ok 空结果非错误**,扩窗是你的裁定 |
|
|
139
168
|
| 场景切分粒度 | `--scene-threshold <f>` | 浮点 (0,1) · `0.3` | 仅 index:镜头切换快调高、长镜头调低 |
|
|
140
169
|
| 固定机位判稳阈值 | `--stability-threshold <f>` | 浮点 (0,1) · `0.05` | 仅 index:场景内最大帧间变化低于此值判 stable,抽帧收敛为**中点 1 帧**(60s 固定机位从 30 帧省到 1 帧);summary 分列 stable/unstable 场景数与省帧数;误判 stable 丢检索粒度、误判 unstable 只是不省钱——**宁严勿松**;默认为保守值待标定 |
|
|
141
|
-
| 索引强制重建 | `--rebuild` | 开关 · 关 | 忽略指纹全部重算向量;**理解缓存(describes
|
|
170
|
+
| 索引强制重建 | `--rebuild` | 开关 · 关 | 忽略指纹全部重算向量;**理解缓存(describes)不清**。存量索引库(2026-08-19 闪帧修复之前建的)**没有切点全集**:铺轨消不到段内切点、消不掉 2~3 帧异景残片——用户报「成片有闪帧」且素材是高帧率长视频时,先带本开关重建一次索引 |
|
|
142
171
|
| 不要图片候选 | `--no-image-broll` | 开关 · 默认参与 | 检索与铺轨完全排除图片(零图片上云);pinned 也不豁免这条 |
|
|
143
172
|
| 跳过计费确认 | `--yes` | 开关 · 关 | 图片运镜 / describe >20 张两处护栏通用 |
|
|
144
173
|
|
|
@@ -159,7 +188,8 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
159
188
|
|---|---|---|---|
|
|
160
189
|
| 消费(编辑后的)plan 铺轨 | `gtrk matrix lay --project <目录>` | 目录 · — | 读 `<目录>/split/broll-plan.json`,白名单校验后按 **plan 现值**铺轨(不重新检索、零检索开销) |
|
|
161
190
|
| 显式指定 plan 文件 | `--plan <path>` | 路径 · 上述默认 | 配方 C 手工组的 plan 从这进 |
|
|
162
|
-
|
|
|
191
|
+
| 美观度参与排序 | `--mark-weight <w>` | 浮点 0–1 · `0`(关闭) | 仅 `matrix lay`:候选融合分 = `sim×(1-w)+(mark/100)×w`,mark 取 describe 理解缓存(素材内**就近帧**命中);无缓存候选**中性**(融合分=sim,不惩罚不加分、绝不变相剔除);score 地板仍只看原始 sim。**零件不裁定:默认关(0 时排序与产物逐字节零回归),开不开、开多大由配方/你裁定**——先 describe 过一轮才有 mark 可用(配方 B ② 之后开才有意义),开启时结果 JSON `lay` 含 `mark_weight/mark_hit/mark_neutral` |
|
|
192
|
+
| 其余铺轨参数 | `--lay/--score-floor/--cut-align/--gap-fill/--no-black-bed/--force-relay/--dedup-scope/--yes/--no-image-broll` | 同主命令 | 语义一致 |
|
|
163
193
|
|
|
164
194
|
## plan 编辑口径(法定通道的边界)
|
|
165
195
|
|
|
@@ -170,6 +200,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
170
200
|
- `segments` 数组:**删段**(某命中段不想要就删);
|
|
171
201
|
- `result.describe`:增删(describe 命令注入的,你也可以手写笔记进去);
|
|
172
202
|
- `result.pinned: true`:**钉选**——分配器优先满足(覆盖 score 排序、免 score 地板强制入选)。多个 pinned 冲突(同槽/供长不足)时**后到让位**,让位名单在结果 JSON `lay.pinned.yielded` 与告警里明示。注意 `--no-image-broll` 下图片候选连 pinned 也进不来(零图片上云是硬承诺)。
|
|
203
|
+
- beat 的 `anchors`:**关键词锚**(拆分稿圈定、plan 检索时内插 `at_sec`)——`[{keyword, utterance, at_sec, query}]`,lay 把锚 query 最高分命中钉在 `at_sec−0.5s`(时长 min(命中段, per_shot×2)),其余槽位在锚点分割的区间内序贯填充。可编辑:**挪 `at_sec`**(微调卡点时刻)、**换 `query`**(换锚画面)、**删锚**(整条删除);`at_sec:null`=内插失败态,lay 按降级普通槽处置。锚 query 池内有 pinned 候选时**用户钉选优先占锚槽**。
|
|
173
204
|
- beat 的 `per_shot_sec`/`requested_shots`(节奏锚,影响槽长档位)。
|
|
174
205
|
|
|
175
206
|
**不可编辑面**(动了会被 `matrix lay` 校验拒绝并指名字段):
|
|
@@ -185,6 +216,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
185
216
|
|---|---|---|---|---|
|
|
186
217
|
| embed(`matrix index` 抽帧图) | **0.1 积分/张** | **会话计量**:开跑前按抽帧计划预扣 `ceil(N×0.1)`,跑完按实际用量结算多退少不补(用量>0 最低 1 积分) | ✅ gc_member_type=internal 免会话零计费 | **文本 embed 免费**——`--local` 检索本身零积分 |
|
|
187
218
|
| describe(`matrix describe`) | **1 积分/张** | **异步任务**(提交预扣→完成结算,失败自动退款),无会话 | ✅ 同上(豁免时 >20 张护栏免确认仅提示) | 缓存命中零调用零计费;>20 张确认护栏(`--yes` 跳过) |
|
|
219
|
+
| 通用素材检索(`matrix material`) | 公开口 **1 积分/次**;矩阵成员口 **0 积分** | 同步返回按次计费(成员口 0 元也照留痕带 task_id) | 看的是 **matrix_member_type**(走哪个口就按哪个口计价,非 gc 豁免维度) | 云端检索双口;剪辑向 `matrix search` 同款口径(成员口 0 元、公开口 1 积分/次) |
|
|
188
220
|
| image_move(图片运镜入轨) | **2 积分/张** | 按任务计费 | **internal 不豁免、照常计费**(已查证:走标准任务计费链路无 gc_member_type 豁免;豁免只存在于 embed/describe 两个原子口) | 工程内同图同参恒复用不再扣费;铺轨前有预估确认(`--yes` 跳过,拒绝=整轮中止零调用) |
|
|
189
221
|
|
|
190
222
|
- 豁免看的是 **gc_member_type**(同合云内部成员),与检索档位 `matrix_member_type` 是两个维度——`memberType:"internal"`(检索口)≠ 计费豁免,别混。
|
|
@@ -194,7 +226,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
|
|
|
194
226
|
|
|
195
227
|
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全链:
|
|
196
228
|
|
|
197
|
-
> ① `oralcut` 剪口播 → ② `split` 拆分派单出 `dispatch.json` → **③ B-roll 底轨全铺齐**(**`matrix` 铺影视/本地素材(你在这)** + `/gtrk-ai-drama` 产稿→外部出片→用户手动回铺,**两条腿同一阶段**)→ **用户 opencut 调整/挑选** → ④ **全局抽帧检查画面构图** → ⑤ `mg` 铺 MG(含 ov,最后叠上)→ `render` 收口。
|
|
229
|
+
> ① `oralcut` 剪口播 → ② `split` 拆分派单出 `dispatch.json` → **③ B-roll 底轨全铺齐**(**`matrix` 铺影视/本地素材(你在这)** + `/gtrk-ai-drama` 产稿→外部出片→用户手动回铺,**两条腿同一阶段**)→ **用户 opencut 调整/挑选** → ④ **全局抽帧检查画面构图** → ⑤ `mg` 铺 MG(含 ov,最后叠上)→ `subtitle lay` 上字幕(快速成片模式必做——工程直接带好字幕)→ `render` 收口。
|
|
198
230
|
|
|
199
231
|
**为什么 B-roll 整个阶段最先**:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——叠加层只有 MG(含 ov)。MG 的排版决策是「因势象形避主体」,**依赖底轨的最终画面构图**;三源(影视/本地/AI)没落齐就产 MG,等 AI 片段回铺后避让必然错位、甚至盖住 AI 画面主体。
|
|
200
232
|
|
|
@@ -247,7 +279,7 @@ gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-
|
|
|
247
279
|
```
|
|
248
280
|
|
|
249
281
|
- `--json`:人读日志走 stderr,成功时 stdout 只有一行结果 JSON:
|
|
250
|
-
`{ ok, mode:"plan", memberType, columnId?, planPath, lay:{ refused, laidTracks:[…], laidClips, removedTracks:[…], keptEditedTracks:[…], blackTrack, blackBedHoleSec, blackBedHoles:[…], dedup:{scope,emptySlots,adjacentWaived}, pinned?:{requested,placedSlots,yielded}, downloads:{preview,raw,reused,failed} }, integrity:{…}, reprojection:{…}, counts:{ beats, queries, results, errors } }`
|
|
282
|
+
`{ ok, mode:"plan", memberType, columnId?, planPath, lay:{ refused, laidTracks:[…], laidClips, removedTracks:[…], keptEditedTracks:[…], blackTrack, blackBedHoleSec, blackBedHoles:[…], dedup:{scope,emptySlots,adjacentWaived}, pinned?:{requested,placedSlots,yielded}, anchors?:{planned,pinned,degraded}, anchor_details?:[{beat,keyword,at_sec,track_st,clip_id,status,reason?}], downloads:{preview,raw,reused,failed} }, integrity:{…}, reprojection:{…}, counts:{ beats, queries, results, errors } }`
|
|
251
283
|
(`--lay 0` 时无 `lay`;`search` 模式 `{ ok, mode:"search", results:[…], counts, outPath? }`;`matrix lay` 模式 `mode:"lay"` 且 `counts.queries` 恒 0——零检索;`matrix describe` 模式 `{ ok, mode:"describe", described, cached, called, failed, credits_estimated, exempt?, planPath?/items? }`)
|
|
252
284
|
- **拒铺结局**(候选轨已被用户编辑):stdout 出 `{ ok:false, refused:[…], reason:"tracks_edited", planReusable:true, … }` 且非 0 退出——不是命令失败,plan 已产出,处置见下表。
|
|
253
285
|
- **命令失败**(缺派单、鉴权失败、全部 query 失败、参数越界、坏 plan 被 lay 拒)→ 非 0 退出、报错在 stderr、stdout 无 JSON。先看退出码,把 stderr 报错如实回给用户。
|
|
@@ -265,6 +297,7 @@ gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-
|
|
|
265
297
|
- `lay.removedTracks` / `lay.keptEditedTracks`:剥了哪些旧自产轨 / 因「你编辑过」保留未剥的轨。删了什么必须跟用户说。
|
|
266
298
|
- `lay.dedup`:`emptySlots`(宁空不重复的空槽数——多了是该补料或走动线②的信号)、`adjacentWaived`。
|
|
267
299
|
- `lay.pinned`(有钉选才出现):`requested/placedSlots/yielded`——`yielded` 非空要指名哪些钉选让位了(stderr 也有告警)。
|
|
300
|
+
- `lay.anchors` / `lay.anchor_details`(拆分稿圈了关键词锚才出现):`planned` 钉位数 / `pinned` 用户钉选占锚槽数 / `degraded` 降级数——`degraded` 非零要按 `anchor_details` 指名哪个关键词没锚上及原因(无合格命中/文本漂移/窗口不足),提示用户该处「听到关键词看到画面」的卡点没兑现、可换 query 或补素材后重跑。
|
|
268
301
|
- `lay.downloads`:`raw` 原片回落 / `failed` 掉槽位非零时提一句。
|
|
269
302
|
- `integrity`(素材落盘自检,只在真写回过时出现):`dangling` 悬空引用全量清单;`danglingReferenced`(时间线上没素材可放)与 `danglingOrphan`(只挂在 materials 里)严重度差一个量级,**分开说**;`external` 绝对路径找不到文件另一档。告知不拦阻,别自己删素材。
|
|
270
303
|
- 单 query 失败是局部化的(`counts.errors>0` 但 `ok:true`):如实说哪几段没检到。
|
package/skills/gtrk-mg/SKILL.md
CHANGED
|
@@ -13,7 +13,7 @@ description: MG 动态图颗粒铺轨器——成片 SOP 第 ⑤ 步(**最后
|
|
|
13
13
|
|
|
14
14
|
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全序:
|
|
15
15
|
|
|
16
|
-
> ① `/gtrk-oralcut`(剪口播)→ ② `/gtrk-splitter`(拆分派单出 `dispatch.json`)→ **③ B-roll 底轨全铺齐**(`/gtrk-matrix` 铺影视/本地素材 + `/gtrk-ai-drama` 产稿→外部出片→用户手动回铺,**两条腿同一阶段**)→ **④ 全局抽帧检查画面构图(用户确认)** → **⑤ 本 skill:MG(含 ov)最后叠上** → `gtrk render` 收口
|
|
16
|
+
> ① `/gtrk-oralcut`(剪口播)→ ② `/gtrk-splitter`(拆分派单出 `dispatch.json`)→ **③ B-roll 底轨全铺齐**(`/gtrk-matrix` 铺影视/本地素材 + `/gtrk-ai-drama` 产稿→外部出片→用户手动回铺,**两条腿同一阶段**)→ **④ 全局抽帧检查画面构图(用户确认)** → **⑤ 本 skill:MG(含 ov)最后叠上** → `gtrk subtitle lay` 上字幕(快速成片模式必做)→ `gtrk render` 收口
|
|
17
17
|
|
|
18
18
|
**你是第 ⑤ 步、也是最后一层。** MG 颗粒是**唯一的叠加层**——底下那整层底轨必须先定死(**三源全落齐**),否则你的排版避让是对着一个不完整的画面做的。
|
|
19
19
|
|
|
@@ -165,10 +165,18 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
165
165
|
|
|
166
166
|
## 交棒 `render` 收口(你是最后一层,别停在铺完)
|
|
167
167
|
|
|
168
|
-
`dispatch.mg` 全铺满、`gtrk mg status`
|
|
168
|
+
`dispatch.mg` 全铺满、`gtrk mg status` 全绿后**别收工**——你已是最后一层,顺势收口。快速成片模式先 `gtrk subtitle lay --project <目录>` 把字幕上好(样式取用户拍板值,没选用 default)再 `gtrk render` 出片。一句话交代即推进:「MG 颗粒已叠铺完,我接着上字幕出片」。
|
|
169
169
|
|
|
170
170
|
★ **若你是走前置硬门 2 的「明示跳过 AI」进来的**:收口前 MUST 把那份「**AI 回铺后待复查构图**」清单复述给用户(哪几颗颗粒、对应哪几个 AI beat 区间),并说明「AI 片段回铺后这几颗可能要重产」。**MUST NOT 静默收口。**
|
|
171
171
|
|
|
172
172
|
除非用户表示只铺这一版 MG、暂不出片。
|
|
173
173
|
|
|
174
|
+
**渲完必看质检摘要**:`gtrk render` 收口后会自动扫一遍成片(闪帧 / 段内跳切 / 黑帧 / 冻结 / 爆音 / 静音 / 音画不同步),落 `<成片名>.qc.json` 并打摘要。**「严重」条目要如实转述给用户并给出路**,别把有缺陷的片子说成出好了:
|
|
175
|
+
|
|
176
|
+
- **过短镜头 / 段内跳切** → B-roll 颗粒窗口跨过了源素材的镜头切点。**先看严重级再决定要不要动**:报「严重」的是**我们剪出来的节奏断裂**(镜头有一端落在颗粒拼接处,长镜头之间突然插进半拍短镜头,最难受),让用户在 opencut 里微调那几颗的入出点或重铺该 beat;报「备注」的是**素材自身的快剪节奏**(整段落在同一颗粒内部,比如源片本来就是蒙太奇轮播),那是素材语言、**不必动**。若素材是 2026-08-19 之前建的本地索引,先 `gtrk matrix index --dirs <素材库> --rebuild` 重建再重铺。
|
|
177
|
+
- **音画不同步(`av_drift`)** → 画面与配音总长不一致。本地渲染的逐段帧对齐已按累计时间线修好(不再渐进失步),所以这一项**报出来就是异常**:先确认成片是不是旧版 CLI 渲的,再看工程时间线本身有没有轨间长度冲突。云渲成片在后端跟进帧对齐前仍可能报此项(已知过渡态)。
|
|
178
|
+
- **黑帧** → 对照黑底空洞告警:已登记的会自动降为「备注」,报成「提示」的是意料外的纯黑,值得回工程看一眼。
|
|
179
|
+
|
|
180
|
+
要单独复查某条成片:`gtrk qc <成片.mp4> --gtrk <工程.gtrk>`(带 `--gtrk` 才认得出段内跳切)。
|
|
181
|
+
|
|
174
182
|
> 原则:**agent 替用户跑 CLI / 接力 skill、驱动栏目生产 skill,用户只对话**——别让用户自己去终端敲 `gtrk mg`,也别让用户手动去 call 栏目生产 skill。
|