@gitruck/cli 1.2.3 → 1.2.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/CHANGELOG.md +118 -0
- package/README.en.md +67 -65
- package/README.md +70 -64
- package/contracts/gsap-emit-v1.md +29 -0
- package/dist/index.js +258 -248
- package/package.json +70 -67
- package/skills/gtrk-mg/SKILL.md +37 -2
- package/skills/gtrk-tools/SKILL.md +15 -1
package/package.json
CHANGED
|
@@ -1,69 +1,72 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
2
|
+
"name": "@gitruck/cli",
|
|
3
|
+
"version": "1.2.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
|
+
"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/mask-raster.ts src/lib/mg-lint.ts src/lib/mg-track-identity.ts src/lib/particle-identity.ts src/lib/text-ir/compile.ts src/lib/text-templates.ts src/lib/text-ir-client.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 src/lib/pip-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/lib/text-ir/compile.ts --bundle --platform=node --format=esm --outfile=.test-build/text-ir-compile.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/mg-text.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-text-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/techniques.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
|
+
"text-template:snapshot": "node scripts/text-template-snapshot.mjs",
|
|
58
|
+
"text-ir:parity": "node scripts/text-ir-parity.mjs",
|
|
59
|
+
"text-ir:sync": "node scripts/text-ir-sync.mjs"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@xmldom/xmldom": "^0.9.6",
|
|
63
|
+
"bun-types": "^1.1.0",
|
|
64
|
+
"commander": "^12.1.0",
|
|
65
|
+
"esbuild": "^0.28.1",
|
|
66
|
+
"typescript": "^5.6.0"
|
|
67
|
+
},
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"hash-wasm": "^4.12.0",
|
|
70
|
+
"jszip": "^3.10.1"
|
|
71
|
+
}
|
|
69
72
|
}
|
package/skills/gtrk-mg/SKILL.md
CHANGED
|
@@ -40,12 +40,45 @@ 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 →
|
|
43
|
+
- **无匹配** = 本栏目没有 MG 生产 skill → 别硬铺,给用户**四选一**(都不替他选):
|
|
44
44
|
1. **建栏目**:`/gtrk-style-maker` 沉淀自己的 MG 生产 skill(一次性,长期资产);
|
|
45
45
|
2. **换栏目**:`--column <id>` 指向已配置的栏目;
|
|
46
46
|
3. **用中性块**:Hyperframes registry 的中性颗粒骨架(`gtrk mg fetch`,见下节「中性块工作流」)——没建栏目也能当场出 MG,但**骨架不是成品**,内容与审美 MUST 改写。
|
|
47
|
+
4. **用文字模板**:同合云自家的文字特效模板库(`gtrk mg fetch --source text`,见下节「文字模板工作流」)——**开箱即成品**(配色与排版已做过),改字走 `gtrk mg compile`、改效果走 `gtrk mg edit --say`。派单槽位 `theme` 落在 `opening-hook` / 字卡 / 强调 / `caption` 这几类时,它通常比中性块更省事。
|
|
47
48
|
另可查推荐目录(公约 §三‴):`gtrk skills recommend --scene mg-explainer` 列第三方 MG 生产 skill,装完 `gtrk skills add <owner/repo> --produces MG` 登记即被本节解析到——本 skill 正文不点名任何仓、不点名任何块。
|
|
48
|
-
-
|
|
49
|
+
- **有匹配时中性块与文字模板缺省都不用**:只当栏目 skill 明显不擅长某类(如数据图表 / 界面拟物 / 纯文字入场)时可**提议**「这一槽用中性块」或「这一槽用文字模板」,用户点头才用。
|
|
50
|
+
|
|
51
|
+
## 文字模板工作流(同合云自家模板 → 改字/改效果 → lint → 铺)
|
|
52
|
+
|
|
53
|
+
> 与中性块是**两条路,别混**。中性块来自第三方、是骨架,要改字体换色板才合规(机械改写八条);
|
|
54
|
+
> 文字模板是我方 clean-room 重写的**成品**,**MUST NOT 做机械改写、MUST NOT 直接改 HTML**。
|
|
55
|
+
|
|
56
|
+
**为什么不能直接改 HTML**:每颗文字模板都内嵌了产生它的 IR 与两个哈希,颗粒因此自带
|
|
57
|
+
「我是由这份 IR 编出来的」的证明(三态:`ir` 可云调 / `detached` 已脱离 / `html` 普通颗粒)。
|
|
58
|
+
手改一个字节,它就从 `ir` 掉到 `detached`——`gtrk mg edit` 和客户端属性面板都会拒绝它,
|
|
59
|
+
云端再也调不动。`gtrk mg lint` 会报非致命的 `x-ir-detached` 提醒你这件事。
|
|
60
|
+
|
|
61
|
+
逐槽位:
|
|
62
|
+
|
|
63
|
+
1. **候选**:`gtrk mg fetch --source text "<检索词>" --top 3 --json`(中文词可用:开场 / 字卡 / 标题 / 字幕 / 强调 / 打字机 / 字条 / 引用 / 气泡 / 故障 / 竖排 / 闪光 / 清单 / 计数 …)。候选态**离线可用**;目录走远端择新、随包兜底,命令会明示这次用的是哪一版、从哪来的。
|
|
64
|
+
2. **取块**:`gtrk mg fetch --source text --pick <模板 id> --slot <beatId> --project <目录> --json`,或独立模式 `--as <composition_id> [--duration <坑位秒>] [--out <目录>]`。落盘即可铺,**不需要改写**。
|
|
65
|
+
- **落点与时长由命令钉定,你不用管**(fix-mg-fetch-text-slot-identity):派单模式的 `composition_id` 取自 `dispatch.mg` 那条(`<工程slug>-<beatId>`,**不是** `--slot` 收的 beat id),产物落 `<产物目录>/mg/<composition_id>.html`;颗粒内嵌 IR 的 `id` 与 `canvas.duration` 被一并钉到「期望 id」与「坑位包络 + 0.3s 余量」(铁律⑦),贴模板末尾的层跟着钉,然后走 `mg compile` 同一条本地编译链重编。产物因此仍是 `ir` 态(云端还能改),且 `mg lint --dispatch` 的 `1-cid-expect` 天然对得上。
|
|
66
|
+
- `--slot` 与 `--duration` **互斥**:派单模式的包络由 `track_st` / `track_ed` 定,显式给时长会与它打架;独立模式才用 `--duration`。
|
|
67
|
+
- 出参里的 `pinned` 写明改了什么(`id` 的 from→to、`duration` 的 from→to、被钉的层);两者都没改时 `changed:false` 且**原字节落盘**(不重编)。
|
|
68
|
+
- **满屏槽位拿不出实心底 ⇒ 致命 `x-category-opaque`,拒落盘**(`gate-fullscreen-slot-needs-solid-bed`)。
|
|
69
|
+
判据只看**产物**——「这颗有没有满屏实心底」,**不看它是不是模板颗粒**。
|
|
70
|
+
⚠️ 派单模式下**通常不用你操心**:`dispatch.mg[].bg` 写了底色的话,取块时会自动钉进
|
|
71
|
+
`canvas.bg`,声明当场兑现。撞上这条红一般意味着**派单只声明了 `fullscreen` 却没给 `bg`** ——
|
|
72
|
+
两条出路:① 这颗本来就该是叠加 ⇒ 改派单的 `category` 为 `overlay`;
|
|
73
|
+
② 确实要盖住画面 ⇒ 给派单补 `bg`,或手动在 IR 里写 `canvas.bg`(编译器会产成根下第一个全幅子层)。
|
|
74
|
+
MUST NOT 靠「加一层 shape 当底」绕过:那种写法的覆盖面取决于祖先定位与 transform,
|
|
75
|
+
**静态判不出来**,`opaque` 登记不上(画出来了但成片按透明叠加处理)。
|
|
76
|
+
- 反方向(槽位派 `overlay`、颗粒却是实心)仍是**非致命**告警:那只是多盖了底轨,看得见、改得动,
|
|
77
|
+
不是「以为有其实没有」的静默落空。两个方向后果不对称,判据也就不对称。
|
|
78
|
+
3. **改字(L0,0 积分)**:把内嵌的 IR 存成 `<id>.ir.json`,改 `slots` 里的文字(也可改 `colors` / `font` / `stroke` / `shadow` / `canvas.duration`),然后 `gtrk mg compile <id>.ir.json --out <目录>`。
|
|
79
|
+
4. **改效果(2 积分/候选)**:`gtrk mg edit <particle.html> --say "打字机快一倍,副标改成青色" [--n 1|3]`。`--n` 只收 1 或 3,**它就是计费单位数**。返回的候选带 `scope`:`L1` = 在模板可调范围内,`L2` = 越界了、等于新生成(**不是失败**)。服务端说做不到时会给一句 `refusal`,**如实转述给用户**——他要的是「为什么不能」,不是一个没有解释的错误。
|
|
80
|
+
5. **lint → 铺**:同中性块,`gtrk mg lint` 过致命项 → `gtrk mg --project <目录>`。
|
|
81
|
+
6. **竖屏工程**:同中性块,契约当前只收 1920×1080。
|
|
49
82
|
|
|
50
83
|
## 中性块工作流(registry 骨架 → 改内容审美 → lint → 铺)
|
|
51
84
|
|
|
@@ -131,6 +164,8 @@ gtrk mg --project "<split产物目录>" --json
|
|
|
131
164
|
```
|
|
132
165
|
|
|
133
166
|
- 读 `dispatch.mg` → 逐 beat 从 `<project>/mg/<composition_id>.html` 取源颗粒 → lint → 铺进 `.gtrk` 的 `beat_track`,把 `struct_meta.mg` 原子写回。**幂等**:重铺先剥旧自产轨再 append,用户在 opencut 手加的轨零连带。
|
|
167
|
+
- ⚠️ **「哪几条轨是我们的」按内容判,不按轨号判**(`fix-mg-lay-track-identity`)。工程被客户端打开保存过之后,`track_index` 会**整体重编**(客户端按当刻车道顺序现场发号,契约明写它会漂),而且一条 beat 轨可能被**劈成两条**(含物化颗粒视频的那些会单独成轨)。所以账本里记的号常常已经指不中了。
|
|
168
|
+
- 重铺前看结果里的**逐轨识别结论**(`tracks[]`:`self-produced` / `self-produced-edited` / `user-track` 各带一句依据)。`self-produced-edited` = 号漂了但内容对得上,**良性降级不是故障**;某条轨号在册却判成 `user-track`,说明重编号之后那个号撞上了别人的轨——**保留是对的**。
|
|
134
169
|
- **剥离面口径**(= 「本次会剥掉什么」,和「本次铺什么」是两件事):
|
|
135
170
|
- **`--only <beat>` = 只剥命中的那几颗**(真增量合并)——轨上其余已铺颗粒连同用户手调**原样保留**。
|
|
136
171
|
- **全量重铺 = 剥掉登记里的全部自产轨再整轨重建**,**唯一例外**:本次派单里有、却因缺 HTML / lint 未过 / 重投影后零存活而**没铺成**的那些(`skipped` 里那几颗),它们上一轮的 clip **留在轨上**——不会因为新的做坏了就把旧的也毁掉。反过来,**派单里已不存在**的已铺条目(你重跑过 `gtrk split`、这个 beat 不做 MG 了)仍照剥:那是计划变更,不是做坏了。
|
|
@@ -52,7 +52,7 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
52
52
|
| `image_classic_template` | 「做封面 / 智能拼图 / 标题配图出封面图」 | **多张图片**(可传多个路径,文件顺序即拼装顺序);**`--main-title <标题>` 必填**;可选 `--sub-title`、`--template-mode`、`--aspect`、`--quality`、`--output-pic-count`(服务端钳制 ≤20)、`--output-text-count`(≤20)、`--title-layout` | 封面/拼图成品(text/pic/render 三组、各组可空可多张) | 运行前实时查询 | 已上线 |
|
|
53
53
|
| `image_vertical_stitch` | 「拼长图 / 多图竖拼 / 截图接成一张长图」 | **多张图片**(可传多个路径,顺序=自上而下拼接顺序) | 一张垂直拼接长图 | 运行前实时查询 | 已上线 |
|
|
54
54
|
| `audio_tts_clone` | 「配音 / 文字转语音 / TTS / 用 xx 音色念这段 / 把这段稿子合成音频」 | **无文件**:`--text <短文本>` 或 `--text-file <txt>` 二选一(≤5000 字,服务端为真相)+ **`--speaker <音色代号>` 必填**(可用音色见官网文档,传错时报错会列出全部可用项);可选 `--text-lang`/`--output-format wav\|mp3`/`--speed`/`--split-method`/`--batch-size`/`--fragment-interval <秒>`(句间停顿,**仅自训音色**,云引擎音色传了会报错;speed/切分法缺省跟随该音色调好的参数)。**计量单位与单价以 `gtrk tool list` 实时显示为准 —— MUST NOT 在本文写死**(此处写死过一次「200 字/分钟」,服务端实为 240,且计量口径已改为千字符)** | 配音音频(wav/mp3) | 运行前实时查询 | 已上线 |
|
|
55
|
-
| `mad` | 「一键剪 MAD / 素材文件夹自动出卡点成片 / 自动选技法 / 给这堆素材出个 AE
|
|
55
|
+
| `mad` | 「一键剪 MAD / 素材文件夹自动出卡点成片 / 自动选技法 / 给这堆素材出个 AE 工程 / 我想要某某效果的卡点片」 | 一个素材文件夹(3~10 条视频)+ 可选 `--bgm 歌.mp3` + 可选 `--technique 技法名`;`--search <词>` 只查技法目录不要输入 | AE 母合成工程 `.jsx`(仅支持 AE) | 仅 `--bgm` 触发实时查价 | 已上线 |
|
|
56
56
|
|
|
57
57
|
> 清单随 CLI 版本增补。**动手前先跑 `gtrk tool list --json` 拿最新清单**,别凭记忆——新工具、状态变化都在那里。
|
|
58
58
|
|
|
@@ -66,6 +66,20 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
66
66
|
- **可复现**:`--seed <n>` 固定选窗序列(同素材同种子同数据版本 → 同结果);`result.json` 记录 seed、数据版本、降级档位、选中技法清单。
|
|
67
67
|
- 常用:`gtrk tool mad ./素材 --bgm 歌.mp3 --duration 20 --json`。
|
|
68
68
|
|
|
69
|
+
#### 用户描述了想要的效果时:你先查目录、再点名
|
|
70
|
+
|
|
71
|
+
不带技法参数时,选技法是纯规则抽样(类目轮转 + 频次加权),**用户说的「我要那种切到鼓点屏幕震一下的感觉」不会进到命令里**。想让效果对上用户的描述,走两步:
|
|
72
|
+
|
|
73
|
+
1. `gtrk tool mad --search <关键词> --json` —— 只查技法目录,不出片、不要素材文件夹、零计费不需 Key。回来的每条带 `name` / `cat` / `pid` / `n_seen`(该技法在图鉴收录工程里出现过多少次)/ `windows`(技法池里有几个可用窗口,**0 = 点了也用不上**)。
|
|
74
|
+
2. `gtrk tool mad ./素材 --technique <技法名[,技法名…]>` —— 只用点名的技法出片。取值接受技法名、别名或 `pid`。
|
|
75
|
+
|
|
76
|
+
**把用户的话翻译成关键词是你的活**,命令那头只做纯字符串包含匹配(无分词无模型)。「屏幕震一下」→ 搜「震屏」/「抖动」;「一闪一闪的」→ 搜「闪白」/「频闪」;「字一个个蹦出来」→ 搜「打字机」。搜不到就换更短的词,别硬塞整句。
|
|
77
|
+
|
|
78
|
+
三条要如实转述给用户,别替它圆场:
|
|
79
|
+
- 名字歧义(比如只写「卡点」命中一片)命令会**报错并列候选**,不会自己挑一个——把候选念给用户听,让他选。
|
|
80
|
+
- 点名的技法里有 `windows: 0` 的,命令会跳过它并说明原因,用剩下的继续出片;全是 0 才报错。
|
|
81
|
+
- 白名单里只有一两个技法时,成片会反复用同一个技法的**不同实例**(运动曲线不同),这是设计,不是 bug。
|
|
82
|
+
|
|
69
83
|
### ⚠️ 长剪短有两条线,别选错(名字很像,产物完全不同)
|
|
70
84
|
|
|
71
85
|
用户说「把这条长视频剪成短片」时,**开工先问两件事、一张表一次问完**(MUST NOT 碎问、MUST NOT 代猜):
|