@gitruck/cli 0.2.20 → 0.2.23
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 +1 -1
- package/README.md +526 -524
- package/contracts/gsap-emit-v1.md +42 -3
- package/dist/index.js +904 -235
- package/package.json +65 -65
- package/skills/gtrk-long2short/SKILL.md +8 -1
- package/skills/gtrk-tools/SKILL.md +22 -1
package/package.json
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@gitruck/cli",
|
|
3
|
-
"version": "0.2.
|
|
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
|
-
"LICENSE"
|
|
27
|
-
],
|
|
28
|
-
"engines": {
|
|
29
|
-
"node": ">=20.6"
|
|
30
|
-
},
|
|
31
|
-
"publishConfig": {
|
|
32
|
-
"access": "public",
|
|
33
|
-
"registry": "https://registry.npmjs.org/"
|
|
34
|
-
},
|
|
35
|
-
"keywords": [
|
|
36
|
-
"gitruck",
|
|
37
|
-
"同合云",
|
|
38
|
-
"video",
|
|
39
|
-
"oral-cut",
|
|
40
|
-
"口播剪辑",
|
|
41
|
-
"cli",
|
|
42
|
-
"jianying",
|
|
43
|
-
"剪映",
|
|
44
|
-
"agent"
|
|
45
|
-
],
|
|
46
|
-
"scripts": {
|
|
47
|
-
"gtrk": "bun run src/index.ts",
|
|
48
|
-
"build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
|
|
49
|
-
"typecheck": "tsc --noEmit",
|
|
50
|
-
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
51
|
-
"test": "esbuild 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/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/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 --bundle --platform=node --format=esm --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 --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 --test \"test/*.test.mjs\"",
|
|
52
|
-
"openspec:gate": "node openspec/gate.mjs"
|
|
53
|
-
},
|
|
54
|
-
"devDependencies": {
|
|
55
|
-
"@xmldom/xmldom": "^0.9.6",
|
|
56
|
-
"bun-types": "^1.1.0",
|
|
57
|
-
"commander": "^12.1.0",
|
|
58
|
-
"esbuild": "^0.28.1",
|
|
59
|
-
"typescript": "^5.6.0"
|
|
60
|
-
},
|
|
61
|
-
"dependencies": {
|
|
62
|
-
"hash-wasm": "^4.12.0",
|
|
63
|
-
"jszip": "^3.10.1"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@gitruck/cli",
|
|
3
|
+
"version": "0.2.23",
|
|
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
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.6"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public",
|
|
33
|
+
"registry": "https://registry.npmjs.org/"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"gitruck",
|
|
37
|
+
"同合云",
|
|
38
|
+
"video",
|
|
39
|
+
"oral-cut",
|
|
40
|
+
"口播剪辑",
|
|
41
|
+
"cli",
|
|
42
|
+
"jianying",
|
|
43
|
+
"剪映",
|
|
44
|
+
"agent"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"gtrk": "bun run src/index.ts",
|
|
48
|
+
"build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
51
|
+
"test": "esbuild 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/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 --bundle --platform=node --format=esm --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 --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 --test \"test/*.test.mjs\"",
|
|
52
|
+
"openspec:gate": "node openspec/gate.mjs"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@xmldom/xmldom": "^0.9.6",
|
|
56
|
+
"bun-types": "^1.1.0",
|
|
57
|
+
"commander": "^12.1.0",
|
|
58
|
+
"esbuild": "^0.28.1",
|
|
59
|
+
"typescript": "^5.6.0"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"hash-wasm": "^4.12.0",
|
|
63
|
+
"jszip": "^3.10.1"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -9,6 +9,11 @@ description: 长剪短闭环——把一条长视频(课程/直播/播客/访
|
|
|
9
9
|
|
|
10
10
|
> 与智能剪口播(gtrk-oralcut)同一心智模型;差异是**一次任务出 N 条短片**,各自一份工程组落 `clip{i}/` 子目录。
|
|
11
11
|
|
|
12
|
+
> **⚠️ 先确认用户要工程还是要成片。** 本 skill 是**粗剪**——出的是**可编辑工程**(gtrk + 剪映 + PR),
|
|
13
|
+
> 给人二次精修用,毛片不上传。如果用户只要**能直接发布的成片**、不打算再剪,那该走**精剪**:
|
|
14
|
+
> `gtrk tool video_long2short_pro`(走 `/gtrk-tools`,整片上传、云端渲染、计费约为粗剪两倍)。
|
|
15
|
+
> 判断句:**「剪完还要不要再动?」要动 → 留在这儿;不动 → 转精剪。** 选错一次要白花积分重来。
|
|
16
|
+
|
|
12
17
|
## 前置:CLI 装没装 + 体检
|
|
13
18
|
|
|
14
19
|
先跑 `gtrk doctor`:
|
|
@@ -51,11 +56,13 @@ gtrk long2short "D:/毛片/对谈.mp4" --language zh-CN --split-screen --split-o
|
|
|
51
56
|
## 产物(跑完把这些讲给用户)
|
|
52
57
|
|
|
53
58
|
- 产物根 `<毛片名>-long2short/`:`report.json`(选段报告)+ `result.json` + 逐 clip 子目录 `clip0/ clip1/ …`(各含 `gtrk/` 客户端工程、`jianying/` 草稿、`xml/` PR 工程)。
|
|
59
|
+
- **先看 `clips.md`**(产物根,人读总览):一张表列全部切片的标题/时长/评分/一句话简介 —— 用它给用户复述「出了哪几条、各讲什么、建议先精修哪条」,别让用户自己开工程猜。逐条的入选理由、跳剪说明、高光词在 `clip{i}/clip.md`。
|
|
54
60
|
- 开了 `--split-screen` 时:**分屏素材落在毛片旁的 `split_screen/` 子目录**(工程素材路径指向那里,别移动/删除,移动了工程会缺素材)——这点要提前告知用户。
|
|
55
|
-
- 剪映草稿已拷入草稿根(给了 `--jianying-draft-dir` 时),剪映里直接可见 `<产物根名>_clip{i}`。
|
|
61
|
+
- 剪映草稿已拷入草稿根(给了 `--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`。
|
|
56
62
|
|
|
57
63
|
## 排错
|
|
58
64
|
|
|
59
65
|
- **部分 clip 失败 / 个别分屏素材 404**:单点失败不连坐,`result.json` 的 `errors` 有明细;把失败项如实告诉用户,其余产物照常可用。
|
|
60
66
|
- **轮询超时/进程中断**:凭产物根 `task.json` 的 `task_id` 查询云端状态;任务在云端照常跑完,稍后可重取。
|
|
61
67
|
- **clips 为空**:说明内容里没有可成片的高光段(纯语义选段),把 `report.json` 摘要给用户看原因。
|
|
68
|
+
- **剪映里看不到草稿**:先看草稿目录里的**文件名**——必须是 `draft_content.json` + `draft_meta_info.json`,缺一件或带前缀剪映都不显示;`result.json` 里该 clip 的 `jianyingDraftPath` 为 `null` 即是此症。
|
|
@@ -33,8 +33,13 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
33
33
|
| `video_motion_cut` | 「运镜高光 / 提取运镜片段 / 找高光镜头」 | 单条本地视频 | 运镜/高光片段结构 `result-output.json`(非下载文件) | 运行前实时查询 | 已上线 |
|
|
34
34
|
| `video_speaker_detect` | 「谁在说话 / 说话人检测 / 检测画面里谁在何时开口」 | 单条本地视频;可选 `--language`、`--max-faces-per-frame`、`--detect-body`、`--track-sample-fps`。**重 GPU、按分钟计费较高,长片先想清楚** | 可见说话人结构 `result-output.json`(时间字段时基以服务端输出为准) | 运行前实时查询 | 已上线 |
|
|
35
35
|
| `video_split_screen` | 「分屏 / reaction 同框 / 对比视频 / 多画面合成」 | **2~16 段视频**(多 positional,顺序有语义);精确档 `--clips-json`:条目 `{input:0 起序号, begin_time_ms, end_time_ms, crop 归一化}`(**毫秒时基**、`input` 指第几个输入文件、同文件可多窗口);可选 `--layout-mode/--layout-id/--seed/--output-ratio/--quality/--fit-mode/--audio-mode/--gap-ratio/--background-color`。**成片时长对齐最短段** | 一条分屏成片视频 | 运行前实时查询 | 已上线 |
|
|
36
|
+
| `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`;润色细颗粒走 `--params-json` | 逐条成片 `clip{i}.mp4` + 人读报告 `clips.md`(含**润色降级明细**)+ `result-output.json` | 运行前实时查询(**约为粗剪两倍**) | 已上线 |
|
|
36
37
|
| `video_face_track` | 「人脸追踪 / 人物出场时间段 / 视频里有哪几个人」 | 单条本地视频;可选 `--sample-fps`、`--max-faces`、`--min-face-ratio`、`--enable-body-match`、`--similarity-threshold`;`time_ranges` 经 `--params-json` 传(**单位毫秒**,如 `{"begin_time":0,"end_time":30000}`)。**重 GPU、按分钟计费较高** | 人物 ID/时间段/轨迹结构 `result-output.json`(时基以服务端输出为准) | 运行前实时查询 | 已上线 |
|
|
37
|
-
| `video_ai_subtitle` | 「智能字幕 / 给视频加字幕 / 视频翻译字幕 / 烧录字幕 / 去原字幕」 | 单条视频或音频;**`--language <码>` 必填**;可选 `--translate-language`、`--need-render`(烧录)、`--need-pure`(去原字幕)、`--subtitle-type`、`--subtitle-color
|
|
38
|
+
| `video_ai_subtitle` | 「智能字幕 / 给视频加字幕 / 视频翻译字幕 / 烧录字幕 / 去原字幕」 | 单条视频或音频;**`--language <码>` 必填**;可选 `--translate-language`、`--need-render`(烧录)、`--need-pure`(去原字幕)、`--subtitle-type`、`--subtitle-color`。**默认只上传本地抽出的音频、毛片不出本地**(几何随请求回传,字幕按原片画布出) | `.ass` 字幕文件 + 可选烧录/去字幕 `.mp4` + `result-output.json`(LLM 摘要 + 字级时间轴) | 运行前实时查询 | 已上线 |
|
|
39
|
+
|
|
40
|
+
> **字幕这两条要提前讲给用户**(`video_ai_subtitle` 专属):
|
|
41
|
+
> - `--need-render`(烧录)**在本地跑 ffmpeg**,成片不从云端下行。字幕模板用 `思源黑体 CN Bold`,**本机没装就直接报错**(不拿替代字体顶——观感会与模板设计不符且用户难以察觉)。装上后重跑即可,字幕文件已落地、无需重新提交任务。4K/长片本地烧录要重编码,耗时可观,先跟用户打招呼。
|
|
42
|
+
> - `--need-pure`(去原字幕)是画面操作,**加了这个 flag 就会整片上传**(CLI 会打一行说明)。只要字幕文件时别加。
|
|
38
43
|
| `audio_separation` | 「分离人声和伴奏 / 提取人声 / 提取伴奏」 | 单条音频 | 人声与伴奏音频(按实际返回可为一项或两项) | 运行前实时查询 | 已上线 |
|
|
39
44
|
| `audio_speaker_split` | 「按说话人分轨 / 把不同人的声音分开 / 谁在什么时候说话」 | 单条音频;可选 `--only-struct` 只出结构 | 各说话人 `.wav` 分轨 + `spoken_list` 时间线(`result-output.json`) | 运行前实时查询 | 已上线 |
|
|
40
45
|
| `audio_stretch` | 「变调 / 变速 / 升降 key / 加快放慢音频」 | 单条音频;可选 `--semitones`、`--speed`(>0) | 变调变速音频 | 运行前实时查询 | 已上线 |
|
|
@@ -61,6 +66,22 @@ description: gtrk 单点工具与媒体转换能力的调用向导,覆盖 `gtr
|
|
|
61
66
|
- **可复现**:`--seed <n>` 固定选窗序列(同素材同种子同数据版本 → 同结果);`result.json` 记录 seed、数据版本、降级档位、选中技法清单。
|
|
62
67
|
- 常用:`gtrk tool mad ./素材 --bgm 歌.mp3 --duration 20 --json`。
|
|
63
68
|
|
|
69
|
+
### ⚠️ 长剪短有两条线,别选错(名字很像,产物完全不同)
|
|
70
|
+
|
|
71
|
+
用户说「把这条长视频剪成短片」时,**先问清他要工程还是要成片**——选错一次的代价是白花积分重来。
|
|
72
|
+
|
|
73
|
+
| | `gtrk long2short`(粗剪,**独立命令、不在本 skill**) | `gtrk tool video_long2short_pro`(精剪,本 skill) |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| 产物 | **可编辑工程**:gtrk(客户端)+ 剪映草稿 + PR xml,逐 clip 一套 | **直接出成片 mp4**,一条一个文件 |
|
|
76
|
+
| 上传 | 只传抽出音频 / 720p 代理,**毛片不出本地** | **整片上传**(云端要渲染) |
|
|
77
|
+
| 适合谁 | 要自己再剪、要调时间轴、要换素材 | 要能直接发布的成品,不打算二次编辑 |
|
|
78
|
+
| 计费 | 按分钟 | 按分钟,**约为粗剪两倍** |
|
|
79
|
+
| 驱动 skill | `/gtrk-long2short` | 本 skill |
|
|
80
|
+
|
|
81
|
+
判断句:**「剪完还要不要再动?」要动 → 粗剪;不动 → 精剪。**
|
|
82
|
+
|
|
83
|
+
精剪的润色(运镜 / 调速 / 接缝 / 分屏 / 字幕)都是 best-effort——**单项失败会降级,成片照出**。跑完 MUST 看一眼产物根的 `clips.md`,里面有「⚠️ 润色降级」小节点名哪条片的哪些效果没做成;有降级就如实告诉用户,别让他拿着不完整的效果去发布。
|
|
84
|
+
|
|
64
85
|
## 调用纪律(每次都照做)
|
|
65
86
|
|
|
66
87
|
> **产物落点纪律(MUST · 全文见随包 `AGENT.md` 同名一节)**:
|