@gitruck/cli 1.1.7 → 1.1.10

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/package.json CHANGED
@@ -1,68 +1,69 @@
1
- {
2
- "name": "@gitruck/cli",
3
- "version": "1.1.7",
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
- "CHANGELOG.md"
29
- ],
30
- "engines": {
31
- "node": ">=20.6"
32
- },
33
- "publishConfig": {
34
- "access": "public",
35
- "registry": "https://registry.npmjs.org/"
36
- },
37
- "keywords": [
38
- "gitruck",
39
- "同合云",
40
- "video",
41
- "oral-cut",
42
- "口播剪辑",
43
- "cli",
44
- "jianying",
45
- "剪映",
46
- "agent"
47
- ],
48
- "scripts": {
49
- "gtrk": "bun run src/index.ts",
50
- "build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
51
- "typecheck": "tsc --noEmit",
52
- "prepublishOnly": "npm run typecheck && npm test && bun run build",
53
- "test": "esbuild src/lib/compliance-notice.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.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/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/mg-render.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 src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-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/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.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/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-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/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-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\"",
54
- "test:linux": "node scripts/test-linux.mjs",
55
- "openspec:gate": "node openspec/gate.mjs"
56
- },
57
- "devDependencies": {
58
- "@xmldom/xmldom": "^0.9.6",
59
- "bun-types": "^1.1.0",
60
- "commander": "^12.1.0",
61
- "esbuild": "^0.28.1",
62
- "typescript": "^5.6.0"
63
- },
64
- "dependencies": {
65
- "hash-wasm": "^4.12.0",
66
- "jszip": "^3.10.1"
67
- }
68
- }
1
+ {
2
+ "name": "@gitruck/cli",
3
+ "version": "1.1.10",
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
+ "CHANGELOG.md"
29
+ ],
30
+ "engines": {
31
+ "node": ">=20.6"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "registry": "https://registry.npmjs.org/"
36
+ },
37
+ "keywords": [
38
+ "gitruck",
39
+ "同合云",
40
+ "video",
41
+ "oral-cut",
42
+ "口播剪辑",
43
+ "cli",
44
+ "jianying",
45
+ "剪映",
46
+ "agent"
47
+ ],
48
+ "scripts": {
49
+ "gtrk": "bun run src/index.ts",
50
+ "build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
51
+ "typecheck": "tsc --noEmit",
52
+ "prepublishOnly": "npm run typecheck && npm test && bun run build",
53
+ "test": "esbuild src/lib/compliance-notice.ts src/lib/config.ts src/lib/crash-report.ts src/lib/enum-catalog.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.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/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/third-party-catalog.ts src/lib/mg-adopt.ts src/lib/mg-registry.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/mg-render.ts src/lib/particle-qtrle.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 src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-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/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.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/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-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/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-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\"",
54
+ "test:linux": "node scripts/test-linux.mjs",
55
+ "openspec:gate": "node openspec/gate.mjs",
56
+ "mg-registry:snapshot": "node scripts/mg-registry-snapshot.mjs"
57
+ },
58
+ "devDependencies": {
59
+ "@xmldom/xmldom": "^0.9.6",
60
+ "bun-types": "^1.1.0",
61
+ "commander": "^12.1.0",
62
+ "esbuild": "^0.28.1",
63
+ "typescript": "^5.6.0"
64
+ },
65
+ "dependencies": {
66
+ "hash-wasm": "^4.12.0",
67
+ "jszip": "^3.10.1"
68
+ }
69
+ }
@@ -208,7 +208,7 @@ face / hair / eyes / wardrobe / signature prop + do-not-change + one line on how
208
208
  > **中性 Style Lock**:影视级自然主义画面,真实可信的光源(窗光 / 实用光 / 自然天光,不炫技),克制稳定的镜头语言(固定或缓慢推拉摇,无手持抖动 / 无广告级动态运镜 / 无无人机炫技),近单色到低饱和的克制调色(不追 HDR、不追霓虹),胶片颗粒质感。忌塑料 3D 渲染、忌动漫二次元、忌过度戏剧化打光。
209
209
  > **EN**: Cinematic naturalism, believable practical light sources (window / practical / natural daylight, no showing off), restrained stable camera language (locked or slow dolly/pan/tilt, no handheld shake, no ad-grade dynamic moves, no drone stunts), near-monochrome to low-saturation restrained grade (no HDR, no neon), visible film grain. Avoid plastic 3D render, anime, and over-dramatic lighting.
210
210
 
211
- 中性默认下**不设单点强调色 / 不指定影视导演锚点**(那些是栏目资产)。用完顺带提醒用户:**想要这条栏目有自己的 AI 再现视觉 DNA,去 `/gtrk-style-maker` 沉淀一套 AI_DRAMA 风格资产并登记进 `style.skills`**,之后每次生成都会自动注入。
211
+ 中性默认下**不设单点强调色 / 不指定影视导演锚点**(那些是栏目资产)。用完顺带提醒用户:**想要这条栏目有自己的 AI 再现视觉 DNA,去 `/gtrk-style-maker` 沉淀一套 AI_DRAMA 风格资产并登记进 `style.skills`**,之后每次生成都会自动注入。分镜稿与提示词层也可查推荐目录(公约 §三‴):`gtrk skills recommend --scene ai-drama`,装完用 `gtrk skills add <owner/repo>` 登记;本 skill 正文不点名任何仓。
212
212
 
213
213
  **禁忌行**(写进 ①)分两层:
214
214
  - **通用 AI slop 兜底(本 skill 自带,任何栏目都写)**:glossy 3D render / plastic skin、HDR look / oversaturated、generic AI anime / saccharine、deformed face / extra fingers / mutated limbs、text overlay / captions / 字幕(字幕剪辑阶段另做)、heavy lens flare / chromatic aberration、cartoon / low-res / unfinished。
@@ -19,7 +19,7 @@ description: 美食解说垂类图纸(解说链示例)——把探店/密着
19
19
  | **探店 · 密着** | 一条纪实长片(二创;带字幕文件的直接当台词锚,无则转写)或自拍探店素材夹 | 软窗档缺省:进店→点单→出品→吃→人的故事,流程线单调、允许蒙太奇跳 |
20
20
  | **做饭流程** | 一条做饭记录或素材夹 | 软窗档且**步骤线忠实**:工序 MUST NOT 乱序重排(先炸后腌是事故) |
21
21
 
22
- 稿源与声音基座随正本开工问询(AI 代写/自备稿;TTS/自己念)。**MUST NOT 执行任何网络下载**;二创长片是第三方作品——版权与平台二创规则责任归用户,开工先说。
22
+ 稿源与声音基座随正本开工问询(AI 代写/自备稿;TTS/自己念)。⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。**MUST NOT 执行任何网络下载**;二创长片是第三方作品——版权与平台二创规则责任归用户,开工先说。
23
23
 
24
24
  ## 二、美食要素层(写稿规约,叠在通用框架层之上)
25
25
 
@@ -39,6 +39,10 @@ description: 直播切片图纸——把一场数小时的直播回放,拆成
39
39
  > **②④ MUST 问用户、MUST NOT 代猜。** ②猜错的代价是白跑一轮分屏(几十分钟 + 积分);
40
40
  > ④缺省是**不叠**——用户没要就零 MG 动作,MUST NOT 硬塞。
41
41
  > **③ 的取证目的只是「告知」,不是「处置」**——看到贴片不要动手,见定位铁律。
42
+ > ② 与 `/gtrk-long2short`、`/gtrk-tools` 精剪开工的「多人同框」一问同口径:是就开、不确定按否;
43
+ > 分屏单段最长 8 秒、每条最多 3 处。
44
+
45
+ > ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
42
46
 
43
47
  ## 二、分段规约(本图纸的骨干)
44
48
 
@@ -19,6 +19,13 @@ description: 长剪短闭环——把一条长视频(课程/直播/播客/访
19
19
  > `gtrk tool video_long2short_pro`(走 `/gtrk-tools`,整片上传、云端渲染、计费约为粗剪两倍)。
20
20
  > 判断句:**「剪完还要不要再动?」要动 → 留在这儿;不动 → 转精剪。** 选错一次要白花积分重来。
21
21
 
22
+ > **⚠️ 开工再问一句:素材是不是多人同框(对谈 / 访谈 / 多人直播)?** 与 `/gtrk-tools` 精剪同一问、同一措辞,
23
+ > 和上一问**一起问、一次答完**,MUST NOT 代猜。
24
+ > 答「是」⇒ 带 `--split-screen`,**并在同一句里告知**:本地会改传一份压过的 720p 代理(否则只传抽出的音频、
25
+ > 毛片不出本地),处理时间明显变长(实测 0.09× → 0.53× 源时长);分屏素材落毛片旁 `split_screen/`。
26
+ > 答「否 / 不确定」⇒ 不带(「不确定」按「否」)。分屏是点缀:单段最长 8 秒、每条最多 3 处,落在子轨、
27
+ > 不合心意在客户端隐藏该段即回退原片。
28
+
22
29
  ## 前置:CLI 装没装 + 体检
23
30
 
24
31
  先跑 `gtrk doctor`:
@@ -32,7 +39,7 @@ description: 长剪短闭环——把一条长视频(课程/直播/播客/访
32
39
  gtrk long2short "D:/毛片/课程.mp4" --language zh-CN --json
33
40
  ```
34
41
 
35
- 对谈/多人同框想要分屏:
42
+ 开工问「多人同框」答「是」时(对谈 / 访谈 / 多人直播):
36
43
 
37
44
  ```bash
38
45
  gtrk long2short "D:/毛片/对谈.mp4" --language zh-CN --split-screen --split-orientation tb --json
@@ -229,7 +229,7 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
229
229
  | **源时间窗过滤** | `--source-window <start,end>` | 秒,`start<end` · 不过滤 | 仅 `--local`:只返回与窗口**有交集**的命中段(段边界不裁剪);与其他过滤器 AND 叠加;图片候选自动排除;**空窗 = ok 空结果非错误**,扩窗是你的裁定 |
230
230
  | 场景切分粒度 | `--scene-threshold <f>` | 浮点 (0,1) · `0.3` | 仅 index:镜头切换快调高、长镜头调低 |
231
231
  | 固定机位判稳阈值 | `--stability-threshold <f>` | 浮点 (0,1) · `0.05` | 仅 index:场景内最大帧间变化低于此值判 stable,抽帧收敛为**中点 1 帧**(60s 固定机位从 30 帧省到 1 帧);summary 分列 stable/unstable 场景数与省帧数;误判 stable 丢检索粒度、误判 unstable 只是不省钱——**宁严勿松**;默认为保守值待标定 |
232
- | 索引强制重建 | `--rebuild` | 开关 · 关 | 忽略指纹全部重算向量;**理解缓存(describes)不清**。存量索引库(2026-08-19 闪帧修复之前建的)**没有切点全集**:铺轨消不到段内切点、消不掉 2~3 帧异景残片——用户报「成片有闪帧」且素材是高帧率长视频时,先带本开关重建一次索引 |
232
+ | 索引强制重建 | `--rebuild` | 开关 · 关 | 忽略指纹全部重算向量;**理解缓存(describes)不清**。存量索引库(2026-08-19 闪帧修复之前建的)**没有切点全集**:铺轨消不到段内切点、消不掉 2~3 帧异景残片——用户报「成片有闪帧」且素材是高帧率长视频时,先带本开关重建一次索引。⟲ 2026-09-10 起多一条重建理由:**倍帧素材的假切点治法**与**段级运动量信号**都只在重建时落库(见「本地素材检索模式要点」) |
233
233
  | 不要图片候选 | `--no-image-broll` | 开关 · 默认参与 | 检索与铺轨完全排除图片(零图片上云);pinned 也不豁免这条 |
234
234
  | 跳过计费确认 | `--yes` | 开关 · 关 | 图片运镜 / describe >20 张两处护栏通用 |
235
235
 
@@ -314,6 +314,14 @@ description: B-roll 检索铺轨编排手册——成片管线里第一个铺的
314
314
  - 两步走:`gtrk matrix index --dirs <a,b> --json` 建索引(增量零重算)→ `gtrk matrix --local --dirs <a,b> --project <目录> --json` 检索铺轨。
315
315
  - **score 地板观察(重要)**:本地域 score 量纲与云端不同,完美命中可低至 0.246——默认 `0.2` 是松地板,排名靠查询内相对顺序。**别按云端直觉调高**(0.3 可能把正确命中砍光)。
316
316
  - 索引跨机不可移植(键=绝对路径):换机重跑 `matrix index` 即可(分钟级);素材改名/移动身份不变(内容哈希)。
317
+ - **段带运动量,据此换段(`add-material-motion-signal`)**:重建过索引的素材,检索结果的每个 `segments[]` 会多带一个可选 `motion`(去重后帧间跳变分位 `p50`/`p90` + 样本数 + 有效帧率)。它答的是**「这段抖不抖」**,与 `score`(像不像)正交:`p50` 超 `0.05` 视为高运动,铺轨排序时降权 0.02 分(**只降权、不排除**——候选稀疏时宁可用高运动段也不留空,留空的观感代价更大)。用户报「这段画面晃得看不清 / 想换一段」时,`motion.p50` 就是挑替补的依据:同 beat 里挑 `p50` 更低的段。
318
+ - ⚠️ **缺席 = 不可判,不是「平稳」**。存量索引库(本能力上线前建的)没有这份信号,段上整键无 `motion`;此时高运动降权对该素材**不生效**,不是「它很稳」。要拿到信号得 `gtrk matrix index --dirs <夹> --rebuild` 重建一次。
319
+ - ⚠️ **样本不足也报缺席**:长静止镜头去重后可能只剩个位数帧,分位不可信,`p50`/`p90` 如实为 `null`(`samples` 仍照报)。同样 MUST NOT 读成「平稳」。
320
+ - **倍帧素材(30fps 内容装进 60fps 容器)**:这类素材每隔一帧就是上一帧的复制。索引会认出来并落**有效帧率**(`motion.effective_fps`,如容器 60 而实际 30)。判据取近零帧的**连续长度**而非占比——倍帧运动段呈单帧交替(连零 ≤2),静止镜头是长串连零(实测 15–118 帧),两者近零帧都多、只有连零长度分得开。
321
+ - 见到 `effective_fps` 明显低于容器帧率时,**如实告诉用户这条素材是倍帧的**(画面实际流畅度只有标称的一半,不是铺轨铺坏了)。
322
+ - **假切点已在索引侧治掉**(2026-09-10):倍帧会让快摇镜头的帧间分被顶过切点阈值,从而在**单一镜头内**吐出一串假切点(实测某段 0.43s 内记了 11 个)。现在切点判定在**去重后的帧序列**上进行——持续快摇在去重序列上是一条连续高分串、整串不算刀,真实一刀仍是孤立尖峰、照留。非倍帧素材的判定一字未动。
323
+ - ⚠️ **存量索引里的假切点不会自己消失**:这条修法只在**重建索引**时生效。素材被判 `doubled` 且某段 `cuts` 密得离谱(零点几秒里十几刀)时,多半是本能力上线前建的库 ⇒ `gtrk matrix index --dirs <夹> --rebuild` 重建一次;重建前别把那些切点当真。
324
+ - ⚠️ **一个已知取舍**:倍帧区里**紧挨着**的两刀(去重后相邻)会被判成持续运动而漏掉。它们在信号上与「快摇的头两帧」不可分——宁可漏这一对,也好过把十几个假切点放进去。
317
325
  - 含本地 B-roll 的工程云渲会被提交口直接拒绝(`local_broll_cloud_render_rejected`)——走客户端本地出片或 `gtrk render`。
318
326
  - embed 端点连不通(`embed_endpoint_unreachable`):查 `~/.gitruck` config `embedUrl` / env `GITRUCK_EMBED_URL`;describe 端点同理(`describe_endpoint_unreachable`,`describeUrl` / `GITRUCK_DESCRIBE_URL`);CLI 绝不回落第三方端点。会话失效(6033)重跑即自动重开续跑。
319
327
 
@@ -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 subtitle lay` 上字幕(快速成片模式必做)→ `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
 
@@ -30,7 +30,7 @@ description: MG 动态图颗粒铺轨器——成片 SOP 第 ⑤ 步(**最后
30
30
  - (为空 = 本片没 AI 车道,此门自动通过。)
31
31
  3. ★ **④ 全局抽帧检查已过、用户已确认构图**:对**三源合并后的最终底轨**抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,用户确认无误。**这与 ③ 那次「挑选 B-roll」的确认是两次不同的确认**,别拿前一次顶替。没做 → 先做 ④ 再回来。
32
32
  4. **有 split 产物**:需要一个跑过 `gtrk split` 的产物目录(含 `split/dispatch.json` 与工程 `.gtrk`)。没有 → 先回 ② `/gtrk-splitter`。
33
- 5. **`dispatch.mg` 非空**:为空 = 本片没有 MG 车道 → **别硬造**,直接 `gtrk render` 收口(见末节)。
33
+ 5. **`dispatch.mg` 非空**:为空 = 本片没有 MG 车道 → **别硬造**,直接 `gtrk render` 收口(见末节;无颗粒 = 零计费)。
34
34
  6. **CLI 在**:`gtrk` 找不到 → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js)。
35
35
 
36
36
  ## 业务分离:谁产颗粒(栏目),谁铺轨(本 skill)
@@ -40,7 +40,26 @@ description: MG 动态图颗粒铺轨器——成片 SOP 第 ⑤ 步(**最后
40
40
  **车道 → 栏目生产 skill 的解析(照此,别猜)**:读**有效栏目配置**的 `style.skills[]`(配置文件 `~/.gitruck/columns/<id>.json`;栏目 id 由 `--column <id>` 或 config `defaultColumn` 选取;零配置 = L0 内置默认栏目,**不携带 style 清单** → 必然走下方「无匹配」分支)。在 `style.skills[]` 里取 **`produces` 归一后(旧 `RRV_MG` → `MG`)等于 `MG`** 的条目 → 触发它 `ref` 指向的 skill 产颗粒。
41
41
  - 命中多条 → 按栏目约定取其一(一般栏目只登记一个 MG 生产 skill)。
42
42
  - 条目带 `routing:"none"`(管线外产物,如封面)→ 跳过,不当 MG 生产 skill。
43
- - **无匹配** = 本栏目没有 MG 生产 skill → 别硬铺;告诉用户「本栏目还没有 MG 生产 skill,先用 `/gtrk-style-maker` 建一个,或换个已配置的栏目(`--column`)」。
43
+ - **无匹配** = 本栏目没有 MG 生产 skill → 别硬铺,给用户**三选一**(都不替他选):
44
+ 1. **建栏目**:`/gtrk-style-maker` 沉淀自己的 MG 生产 skill(一次性,长期资产);
45
+ 2. **换栏目**:`--column <id>` 指向已配置的栏目;
46
+ 3. **用中性块**:Hyperframes registry 的中性颗粒骨架(`gtrk mg fetch`,见下节「中性块工作流」)——没建栏目也能当场出 MG,但**骨架不是成品**,内容与审美 MUST 改写。
47
+ 另可查推荐目录(公约 §三‴):`gtrk skills recommend --scene mg-explainer` 列第三方 MG 生产 skill,装完 `gtrk skills add <owner/repo> --produces MG` 登记即被本节解析到——本 skill 正文不点名任何仓、不点名任何块。
48
+ - **有匹配时中性块缺省不用**:只当栏目 skill 明显不擅长某类(如数据图表 / 界面拟物)时可**提议**「这一槽用中性块」,用户点头才用。
49
+
50
+ ## 中性块工作流(registry 骨架 → 改内容审美 → lint → 铺)
51
+
52
+ > 快照随包(钉 commit,候选态离线可用);取块走三源(我方镜像优先,大陆可达)并校 sha256;改写八条是机械活(template 包裹 / 改 id / 去 data-start 贴坑位 / 实心底下沉 / GSAP 源 / 字体 / 时长贴坑位 / 信箱缩放),**内容与审美不在机械活里**。
53
+
54
+ 逐槽位:
55
+
56
+ 1. **候选**:`gtrk mg fetch "<按 handoff.theme 与 beat 语义组的检索词>" --top 3 --json`(中文词可用:数据 / 图表 / 标题 / 字幕 / 转场 / 通知 / 代码 / 地图 / 手写 / 卡片 / 片头 …)。把 2–3 件候选连**海报链接**给用户选(**候选选择是检查点**,形状同 matrix 的 B-roll 候选);快速成片模式取首选、铺完在抽帧检查里一并给用户看。`[review]` 件可选但 MUST 真渲验收(多为 canvas / 铁律 8 高危形态);`[excluded]` 不在可取范围,命令会拒。
57
+ 2. **取块改写**:`gtrk mg fetch --pick <块名> --slot <beatId> --project <目录> --json`——从派单取 composition_id / 坑位包络 / category,产物直接落 `<产物目录>/mg/<composition_id>.html`。返回里的 `editable`(文案 / 数值数组 / 色值)就是你下一步要改的地方。
58
+ 3. **改内容与审美(你的活,MUST 做)**:按 beat 语义改文案与数据;色板与字体——有栏目 skill 按栏目的,没有按公约 §三「内容驱动的临场泛化」全片自洽一套;**MUST NOT 把块的示例文案 / 示例数据 / 默认色板原样铺进成片**。字体缺省已换成运行时镜像可证的 CJK 字体,要换用 `--font`。
59
+ 4. **lint → 铺**:`gtrk mg lint` 过致命项 → `gtrk mg --project <目录>`(与栏目产颗粒同门槛)。
60
+ 5. **竖屏工程**:契约当前只收 1920×1080 颗粒(lint 铁律 1),中性块不适用;提示用户走栏目 skill,MUST NOT 拉伸。
61
+
62
+ 独立模式(脱离派单补一颗):`gtrk mg fetch --pick <块名> --as <composition_id> --duration <坑位秒> [--category overlay|fullscreen] [--out <目录>]`,随后同 `gtrk mg render` 的独立颗粒路。
44
63
 
45
64
  > **生产 skill 是栏目的纯净资产**:它只懂本栏目的视觉语法、只产 html-particle 颗粒,**不知道 gtrk 命令、不知道产物落哪**。由本 skill 驱动它、并**由本 skill 负责让它以 `gtrk mg` 要读的路径为写入路径**:颗粒 SHALL **直接写到** `<产物目录>/mg/<composition_id>.html`,MUST NOT 先写 agent 自有目录再拷入(中转本身即违规,见上「产物落点纪律」第 5 条)。举例(仅示意解析机制,非硬编):`real-roam-guide` 栏目配置里 `style.skills` 有一条 `{produces:"MG", ref:"…/real-roam-viz"}` → 驱动它产颗粒;换个栏目、换个 ref,产颗粒的就是另一个生产 skill。**本 skill 正文里不绑死任何栏目的生产 skill。**
46
65
 
@@ -168,8 +187,35 @@ gtrk mg --project "<split产物目录>" --json
168
187
 
169
188
  `dispatch.mg` 全铺满、`gtrk mg status` 全绿后**别收工**——你已是最后一层,顺势收口。快速成片模式先 `gtrk subtitle lay --project <目录>` 把字幕上好(样式取用户拍板值,没选用 default)再 `gtrk render` 出片。一句话交代即推进:「MG 颗粒已叠铺完,我接着上字幕出片」。
170
189
 
190
+ ### ⚠️ `render` 收口会花钱(2026-09-09 起,add-render-overlay-compositing)
191
+
192
+ `gtrk render` 现在**会把 MG 颗粒真的渲进成片**——做法是把每颗颗粒送去同合云烤成透明 MOV,再本地叠。于是这条命令**不再是零计费**:
193
+
194
+ - **计量 = 唯一颗粒数 × 未命中缓存数**(按分钟)。同一颗粒在轨上出现 N 次只烤一次。
195
+ - **第二次渲染全命中缓存 ⇒ 零计费**;用户先在客户端导出过剪映的工程,CLI 首渲即全命中(两端共用同一份工程目录缓存)。
196
+ - 未命中时 CLI **会先出预估并要确认**。`--yes` 跳过确认;`--json` 模式下**必须**显式 `--yes`,否则硬拒。
197
+ - 不想花钱:`--no-particles` 出无颗粒版(B-roll 等 overlay 轨照常合成,那部分零计费)。
198
+
199
+ **MUST 在推进前把这件事说给用户**(一句话即可:「渲这条会对 N 颗未命中缓存的颗粒云渲、约 X 分钟计费;不想花钱可以先出无颗粒版」),**MUST NOT** 一声不吭替他确认。
200
+
201
+ 另一条路仍在:**客户端出片**(opencut 打开工程 → 云渲)同样能出带颗粒的成片,且与 CLI 共用缓存。两条路选哪条由用户定。
202
+
171
203
  ★ **若你是走前置硬门 2 的「明示跳过 AI」进来的**:收口前 MUST 把那份「**AI 回铺后待复查构图**」清单复述给用户(哪几颗颗粒、对应哪几个 AI beat 区间),并说明「AI 片段回铺后这几颗可能要重产」。**MUST NOT 静默收口。**
172
204
 
205
+
206
+ ### 出片后 QC 报了缺陷:怎么落回 plan 重铺(闭环,别原地调参)
207
+
208
+ `gtrk render` 出片后跑 `gtrk qc <成片> --gtrk <工程> --json`。它报的缺陷**带工程坐标**(`beat` / 槽位序号 / `clip_id` / 源窗),不是一串光秃秃的成片时码——所以「换哪一段」是可答的,闭环走法:
209
+
210
+ 1. **读缺陷的坐标**,定位到是哪个 beat 的第几槽、用的哪条 `clip_id` 的哪个源窗。
211
+ 2. **读它给的排序备选**:同 beat 里未被采用的候选段,按「稳」排序(运动量升序 → 段内切点数升序 → score 降序)。索引无运动信号时退回单维排序,回执会标注**口径受限**——那时别把第一名当定论。
212
+ 3. **改 plan 换段**(`split/broll-plan.json`),把该槽位换成备选里的第一名。⚠️ 改的时候把候选条目**原样搬**,别自己重写 `segments`——`cuts` / `motion` 就住在里面,重写即丢(详见 `/gtrk-matrix` 的 plan 编辑口径)。
213
+ 4. **`gtrk matrix lay --project <目录> --plan <path>`** 消费改过的 plan 重铺 B-roll ⇒ 本 skill 的 MG 颗粒**按增量重铺受影响的那几颗**(`--only <beat>`)⇒ 重渲 ⇒ 再 QC 复核那条缺陷是否消失。
214
+
215
+ 🔴 **这是「换素材」而不是「调参数」**:QC 报的多数画面级缺陷(晃、糊、闪)根子在选中的那一段本身,调 `--score-floor` / 阈值只会连带影响全片其它槽位。先换段,换不动再谈调参。
216
+
217
+ ⚠️ **QC 是只读诊断**:常规扫描零写库。只有显式带回流开关时才会把确认的切点补录进本地索引(治检测阈值漏网),无法唯一映射的会跳过并报数——**别把「跳过 N 条」读成失败**。
218
+
173
219
  ### 逃生门:两种信号都要认(范围 + 节奏)
174
220
 
175
221
  上面的「别收工、顺势收口」是**默认**,但**用户表达了范围保留或节奏保留时 SHALL 停在铺完这一步、
@@ -37,6 +37,7 @@ description: 通用解说视频创作图纸(解说链正本)——把「一
37
37
  | ⑦ | **源片语种 / 方言** | **问用户**:听一段 / 看片内有无内嵌字幕 / 看素材出处 | `gtrk transcript --lang`(`zh-CN` 普通话 / **`zh-HK` 粤语** / `en-US` / `ja-JP`…);素材通篇无对白答「无对白 / 不转写」即闭合,MUST NOT 因缺这个答案阻塞开工 |
38
38
 
39
39
  > ②③④⑤⑦ MUST 问用户、MUST NOT 代猜;一张表一次问完,不碎问。
40
+ > ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
40
41
  >
41
42
  > ⟲ **2026-09-02 六问补为七问(新增 ⑦ 语种)**:260902 真机一条**粤语对白**的片子按缺省 `zh-CN`
42
43
  > 静默转写跑完,整条链上无一处问过语种。⑦ MUST 早于 ① 的转写发起:转写是计费动作且在检查点①**之前**,
@@ -31,6 +31,8 @@ description: 通用口播视频创作图纸(口播链)——把一条或一
31
31
  | ④ | 毛片几何 | ffprobe | 画幅随片(**非拍板项**,与旅拍不同——那边是无中生有须拍板画幅);非标帧率会被吸附到标准值,属预期 |
32
32
  | ⑤ | **B-roll 素材来源**(主理人 2026-08-27 真机挑刺拍板) | **问用户,MUST NOT 硬塞**:有没有本地素材文件夹(要路径)?要不要用云端素材填充? | §五 matrix 走法三选一:本地(`--local --dirs`)/ 云端 / **都不要 = 不铺 B-roll**(纯 A_ROLL + MG 字卡也是完整成片形态) |
33
33
 
34
+ > ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
35
+
34
36
  ## 二、双轨收音:对轨 → 换轨(本图纸最大的新东西)
35
37
 
36
38
  真实口播几乎都是**双轨收音**:相机内录只是参考声,领夹麦/录音笔的外录才是成片要用的。而粗剪链吃的是视频文件里的音轨 ⇒ **先把外录换进去,转写和成片就都是外录声**。
@@ -93,8 +95,9 @@ gtrk oralcut "<inputs/…_full.mp4>" --lang zh-CN [--script 稿.txt] [--preset c
93
95
  1. **粗剪回执走查**:时长压缩比是否合理(口播毛片通常剪去 20–50%)、report 剪除项抽查 2–3 处是否真是废话。**剪错了真内容** → 换 `--preset steady` 或开 `--visual-assist` 重跑,MUST NOT 带着错误粗剪往下铺。
94
96
  2. **BGM 拍板(双来源,推荐必附试听链接)**:用户自带音乐 → 问是否 `audio_separation` 分离取伴奏;没带 → 素材矩阵按内容基调搜 3–5 首附试听直链。
95
97
  3. **字幕样式拍板**:给样式候选,用户没选用 default。
98
+ 4. **前六秒方案拍板**(公约 §三⁗ 执行文本,引用不复制):粗剪回执到手后、检查点①之前由你产——基于粗剪转写**首段**改写**钩子文案三候选**(五型任选,每条一行,只改开口方式、MUST NOT 改动用户的事实与数据)+ **画面层建议**(A_ROLL / MG 字卡 / 拼贴或 AI 片段三选一)+ **字卡节奏**(屏字与出现时机按公约口径)。与前三项同屏一次拍板;用户答「开场照原样」= 零动作、后续不再提。先给自持方案,再一句轻提「要更多变体也可以看第三方钩子 skill」(推荐面 §三‴ 的 `hook` 场景,不列名)。拍了 MG 字卡 ⇒ §五 拆分稿里开场 beat 的 MG `handoff.theme` 写 `"opening-hook|屏字:<拍板文案>"`;拍了 A_ROLL ⇒ 开场不派辅助层。
96
99
 
97
- 以上三项一次确认完 = 检查点①收口。
100
+ 以上四项一次确认完 = 检查点①收口。
98
101
 
99
102
  ## 五、拆分与铺轨:三车道,无 AI 再现
100
103
 
@@ -68,7 +68,16 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
68
68
 
69
69
  ### ⚠️ 长剪短有两条线,别选错(名字很像,产物完全不同)
70
70
 
71
- 用户说「把这条长视频剪成短片」时,**先问清他要工程还是要成片**——选错一次的代价是白花积分重来。
71
+ 用户说「把这条长视频剪成短片」时,**开工先问两件事、一张表一次问完**(MUST NOT 碎问、MUST NOT 代猜):
72
+
73
+ | # | 问 | 决定什么 |
74
+ |---|---|---|
75
+ | ① | 要**可编辑工程**还是**直接成片**? | 走粗剪 `gtrk long2short` 还是本 skill 的精剪——选错一次的代价是白花积分重来 |
76
+ | ② | 素材是不是**多人同框**(对谈 / 访谈 / 多人直播)? | 答「是」⇒ 命令带 `--split-screen`、不再追问;答「否 / 不确定」⇒ 不带。**「不确定」按「否」**:开错是分屏烧进成片不可回退 + 一段检测等待,不开只是少个点缀、看片后补一句重跑即可 |
77
+
78
+ > 分屏是**点缀不是主体**:只挑多人同框段做,单段最长 8 秒、每条最多 3 处,不会整条变分屏。
79
+ > 单人素材开了也不会出现分屏画面,但仍会多付一段说话人检测的等待——**不是零副作用**,别这么跟用户说。
80
+ > 跑完 `clips.md` 头部会回显「分屏:开/关」(只是请求态,报告不知道实际做了几处)。
72
81
 
73
82
  | | `gtrk long2short`(粗剪,**独立命令、不在本 skill**) | `gtrk tool video_long2short_pro`(精剪,本 skill) |
74
83
  |---|---|---|
@@ -43,6 +43,8 @@ description: 旅拍解说一站式成片图纸——输入一个旅拍素材文
43
43
  | 声音怎么来 | **TTS 配音**(缺省,检查点①挑音色)/ **用户自己念**——拿念稿毛片先走 `gtrk oralcut` 粗剪(带稿最准;外录收音先 `gtrk audio align` 对轨),产出的粗剪工程即时间基座,§五 的「配音④→建工程⑤」两步跳过,从拆分⑥接入,后续铺排/字卡/BGM/字幕照旧 |
44
44
  | **源片语种 / 方言** | 取证=**听一段 / 看片内有无内嵌字幕 / 看素材出处**;答案定 §五 ① 的 `gtrk transcript --lang`(`zh-CN` 普通话 / **`zh-HK` 粤语** / `en-US` / `ja-JP`…)。**MUST 问用户、MUST NOT 代猜、MUST NOT 以缺省 `zh-CN` 静默开跑转写**——转写是计费动作**且早于检查点①**:**非中文素材**(`en-US` / `ja-JP`…)语种传错,用户在检查点①拿到的稿子就是坏的、重来要再付一次 ASR(真机实证)。**中文这一档(`zh-CN` ↔ `zh-HK`)不在此列**:粤语 **SHOULD** 如实填 `zh-HK`(元数据诚实 + 备将来链路切换),但当前实现下该参数**对粤语无影响**——两种写法发出的请求逐字段相同,详见 §五 ① 注。素材无对白:答「无对白 / 不转写」即闭合 |
45
45
 
46
+ > ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
47
+
46
48
  ## 一′、素材适配闸(写稿前必过 · ★ 2026-09-02 真机事故立)
47
49
 
48
50
  > **事故形态**:三条素材里有一条是**有剧情、有台词、有摆拍的学生短片**,本图纸从头到尾跑完(含 TTS 计费步骤)、**零提示**。
@@ -28,10 +28,12 @@ description: 通用配音视频创作图纸(配音链快速成片预设)—
28
28
 
29
29
  一张表一次问完;**未经检查点①确认 MUST NOT 发起 TTS 计费动作**。
30
30
 
31
+ > ⟲ **推荐面(公约 §三‴)**:问答收口时多问一句「要不要看看第三方 skill?」,不列名;题材命中场景触发词才多 1–2 句定向推(`gtrk skills recommend --scene <id> --json` 取 tier 最高者,各给一句为什么),用户追问才展开完整块;轻提加定向合计不超三句、同会话同场景只推一次、答「不要」零动作。
32
+
31
33
  ## 二、快速成片编排
32
34
 
33
35
  ```bash
34
- # ①② 写稿(三段式通用框架层 + 文风铁律自校验)→ 检查点①拍板
36
+ # ①② 写稿(三段式通用框架层 + 文风铁律自校验)→ 产前六秒方案(公约 §三⁗:基于稿件首段改写钩子文案三候选 + 画面层建议 + 字卡节奏,只改开口不改事实)→ 检查点①拍板
35
37
  gtrk matrix material "<情绪 调性 检索词>" --scope audio --top-k 5 --json # BGM 候选附试听
36
38
  # ⚠️ is_copyright:1/true=可商用、0/false=**不可商用**(反直觉,MUST NOT 读成「无版权、可随便用」)。
37
39
  # ⟲ 260906 拍板:矩阵成员档**缺省搜全库**,MUST NOT 默认加 --commercial-only、也 MUST NOT 擅自剔掉
@@ -60,7 +62,7 @@ gtrk subtitle lay --project "<工程>" --style <样式> --color <色> --json
60
62
 
61
63
  ## 三、检查点①(必停一次)
62
64
 
63
- 稿件全文 + 画幅 + 音色(试听)+ BGM(试听)+ 字幕样式,一屏给齐一次拍板。改稿在这站改到满意——配音之前全部免费。
65
+ 稿件全文 + **前六秒方案**(公约 §三⁗ 执行文本,引用不复制:钩子文案三候选各一行 + 画面层 A_ROLL / MG 字卡 / 拼贴或 AI 片段三选一 + 字卡节奏;只改开口方式、MUST NOT 改动用户的事实与数据;答「开场照原样」= 零动作、后续不再提;先给自持方案,再一句轻提「要更多变体也可以看第三方钩子 skill」,推荐面 §三‴ 的 `hook` 场景、不列名)+ 画幅 + 音色(试听)+ BGM(试听)+ 字幕样式,一屏给齐一次拍板。改稿在这站改到满意——配音之前全部免费。拍了 MG 字卡 ⇒ §二 ④ 拆分稿里开场 beat 的 MG `handoff.theme` 写 `"opening-hook|屏字:<拍板文案>"`;拍了拼贴或 AI 片段 ⇒ 开场 beat 派 AI_DRAMA;拍了 A_ROLL ⇒ 开场不派辅助层。
64
66
 
65
67
  ## 四、MG 风格(公约 §三 执行文本)
66
68