@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/AGENT.md
CHANGED
|
@@ -19,6 +19,19 @@
|
|
|
19
19
|
- 临时文件(抽帧图 / 中间物等)一律放系统 temp 且**用完即删**(含中断 / 失败路径也要清干净)。
|
|
20
20
|
- 违反本条的直观后果:用户系统盘被静默吃满——这是真机发生过的事故,不是假设。
|
|
21
21
|
|
|
22
|
+
**在 gtrk-cli 仓库自身里跑真机走查时,追加一条(2026-08-23 立):**
|
|
23
|
+
|
|
24
|
+
- **仓根不落任何产物**。工作区一律 `--out .runs/<名字>`;命令回执与日志一律重定向进
|
|
25
|
+
`.runs/_receipts-<日期>/`,例如
|
|
26
|
+
`gtrk audio lay ... > .runs/_receipts-260823/audio-lay-out.json 2> .runs/_receipts-260823/audio-lay-stderr.log`。
|
|
27
|
+
- **MUST NOT** 使用 `> foo-out.json 2> foo-stderr.log` 这类**落在仓根**的重定向,
|
|
28
|
+
也 **MUST NOT** 让 `--out` 缺省落到仓根。
|
|
29
|
+
- 直观后果:这是**公开 GitHub 仓**。仓根散落的 `*-out.json` 正文里带素材绝对路径与本机目录结构,
|
|
30
|
+
一次 `git add -A` 就提上去了。2026-08-06 泄漏后历史已被 filter-repo 重写过一次,代价极高。
|
|
31
|
+
`.gitignore` 里的 `/.runs/` 与 `/*-out.json` 只是兜底;第一道闸是落点纪律本身。
|
|
32
|
+
- 历史积压已于 2026-08-23 清空:14 个走查工作区(2.0G)+ 13 个回执统一归入 `.runs/`,
|
|
33
|
+
搬迁时同步改写了工程文件里 110 处绝对路径(含跨目录借用音频的交叉引用)。
|
|
34
|
+
|
|
22
35
|
---
|
|
23
36
|
|
|
24
37
|
## 0. 一句话流程
|
|
@@ -293,6 +306,37 @@ gtrk oralcut "D:/素材/某条.mp4" --params-json '{"punctuation_breaks":{"。":
|
|
|
293
306
|
|
|
294
307
|
---
|
|
295
308
|
|
|
309
|
+
## 6.5 反馈通道:`gtrk feedback` —— **告知协议,不是普通确认框**
|
|
310
|
+
|
|
311
|
+
用户抱怨用得不顺手、或者你自己发现把事情办砸了/绕了远路,都可以上报一条。
|
|
312
|
+
但这条通道有一条**协议要求**,与本 playbook 里其它 `-y` 场景**性质不同**:
|
|
313
|
+
|
|
314
|
+
> **你替用户提交之前,MUST 先把将要发出的内容原样念给用户,得到同意,再加 `--disclosed` 重跑。**
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
gtrk feedback "<一句话说清哪里不顺手>" --command <命令名> [--category <类别>] [--quote "<用户原话>"]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
- **不带 `--disclosed` 且不在真终端里 ⇒ 命令直接拒发**,零网络往返、非零退出,
|
|
321
|
+
并把「要念给用户的那段全文」打到 stderr(`--json` 时也在机读面的 `notice` 字段里)。
|
|
322
|
+
照着念、得到同意,再加 `--disclosed` 重跑即可。
|
|
323
|
+
- ⚠️ **`-y` 不能替代那句声明。** `-y` 在别处的意思是「跳过交互提示」,
|
|
324
|
+
而这里缺的不是「有没有人按回车」,是「有没有告知过用户」——两件事。
|
|
325
|
+
加了 `-y` 结果**逐项相同**(有单测钉着)。
|
|
326
|
+
- `--command` **必填**,只写命令名(可带至多两级子命令),**不要带参数**——参数里必然带路径。
|
|
327
|
+
- 类别七档:`complaint`(抱怨吐槽)/ `env_unstable`(环境不稳)/ `confused`(用法困惑)/
|
|
328
|
+
`blocked`(使用受阻)/ `agent_self_detected`(**你自己搞砸了的自首**)/
|
|
329
|
+
`feature_request`(功能诉求)/ `other`。缺省 `other`。
|
|
330
|
+
|
|
331
|
+
**MUST NOT**:
|
|
332
|
+
- 把本机绝对路径、API Key、任何配置项塞进 `--context`(白名单只认那几个中性维度,
|
|
333
|
+
塞别的会被本地直接拒,不会静默丢弃);
|
|
334
|
+
- 因为「本地已经脱敏了」就认为内容安全 —— 脱敏的判据在服务端,本地那一遍只为让
|
|
335
|
+
**你念给用户的内容 = 实际发出的内容**;
|
|
336
|
+
- 用 `-y` 或任何别的旗标去绕那道声明。
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
296
340
|
## 7. 扩展(给改 CLI 的 agent)
|
|
297
341
|
|
|
298
342
|
新增命令 = 写 `src/commands/<name>.ts` 的 `register<Name>(program)` + 在 `src/index.ts` 注册一行。
|
package/README.en.md
CHANGED
|
@@ -27,18 +27,22 @@
|
|
|
27
27
|
|---|---|---|
|
|
28
28
|
| 🎬 | `gtrk oralcut <raw>` | Full talking-head editing loop: emits gtrk + Jianying + Premiere projects in one pass and opens the output folder |
|
|
29
29
|
| ✂️ | `gtrk long2short <raw>` | Long-to-short loop: semantic segment selection + jump cuts on a long video (optional 720p-proxy smart split-screen) → per-clip gtrk + Jianying + Premiere projects (the raw file is never uploaded). **If you only want a finished cut and will not edit further, use fine-cut** `gtrk tool video_long2short_pro` |
|
|
30
|
-
| 📝 | `gtrk transcript <local video>` | Video to transcript: the original
|
|
30
|
+
| 📝 | `gtrk transcript <local video\|voice-over audio>` | Video/audio to transcript: the original file is not uploaded, only the locally extracted (or, for audio input, transcoded) 16 kHz audio derivative, producing one Markdown file with a summary, timecoded record and plain text; with `--json` it also emits a sentence-timecoded `transcript.json` (the input for the `gtrk project init` fallback path) |
|
|
31
31
|
| 🎵 | `gtrk music-visualizer <audio>` | Music visualization: one song → a spectrum-visualizer video (`--template` required, optional background/cover and template/color styling), with the companion driver skill `gtrk-music-visualizer` |
|
|
32
32
|
| ✂️ | `gtrk split [split doc]` | Visual split dispatcher: finished cut × transcript projection → validated beat storyboard (`struct_meta.split` + `dispatch.json`), driving four lanes; `--column <id>` validates against your show's vocabulary |
|
|
33
33
|
| ⚙️ | `gtrk init` | Guided one-time setup (API key + Jianying draft folder), then forget about it |
|
|
34
34
|
| 🩺 | `gtrk doctor` | Health check: config / cloud connectivity / Jianying folder / runtime in one shot |
|
|
35
35
|
| 📦 | `gtrk deps` | Runtime assets: `status` shows where ffmpeg/fonts come from and under which licence, `install` fetches them from the Gitruck Cloud mirror (**must be triggered explicitly — never a silent auto-download**) |
|
|
36
|
-
| 🤖 | `gtrk skills install` | Installs the
|
|
36
|
+
| 🤖 | `gtrk skills install` | Installs the 12 bundled CLI skills into the agents detected on this machine, via the generic `skills` adapter plus a gtrk supplement layer; `--all` covers every registered host |
|
|
37
37
|
| ⬆️ | `gtrk upgrade` | Upgrade the CLI to the latest version + refresh skills (config preserved); `--check` only reports |
|
|
38
|
-
| 🎞️ | `gtrk render` | Render a gtrk project (EDL) locally → finished mp4 (requires ffmpeg) |
|
|
39
|
-
|
|
|
38
|
+
| 🎞️ | `gtrk render` | Render a gtrk project (EDL) locally → finished mp4 (requires ffmpeg); output frames are allocated against the **cumulative** timeline (per-clip rounding never accumulates, so the picture cannot drift away from the voiceover); runs a QC pass afterwards and writes `.qc.json` (`--no-qc` skips it) |
|
|
39
|
+
| 🔬 | `gtrk qc <cut>` | Final-cut QC: one decoding pass over the whole file for flash frames, black/frozen frames, clipping, silence and audio/video drift, each with a timecode; `--gtrk <project>` enables project-aware detection of **intra-clip cuts**, `--fail-on error\|warn\|never` gates pipelines via the exit code |
|
|
40
|
+
| 🔎 | `gtrk matrix` | B-roll retrieval + **candidate track laying**: consumes the FILM_BROLL dispatch → produces a candidate list + downloads preview proxies and lays N candidate tracks (`--lay N`, default 1; open it in opencut and toggle track visibility to compare; `--lay 0` produces the list only); `matrix search "<query>"` is a one-off ad-hoc search; **local-footage mode**: `matrix index --dirs <folders>` builds a slice-free index → `--local --dirs` retrieves and lays tracks (**your footage never leaves your machine**) → `matrix lay` consumes the (editable) plan; `matrix describe` understands candidates on demand |
|
|
40
41
|
| 🎨 | `gtrk mg` | MG motion-graphics particle laying: consumes the MG dispatch → lays html-particle assets (transparent overlay / full-screen bed, produced by your show's MG skill) into the `.gtrk` `beat_track`; `mg lint <particle.html>` runs the statically checkable subset of the house rules, `mg status --project <dir>` is an orchestration dashboard; aux overlay particles can be layered on the same span (one beat derives a main particle plus `-aux<n>`). The old name `gtrk rrv` remains as a deprecated alias |
|
|
42
|
+
| 🎙️ | `gtrk project init` | Audio-first project bootstrap: build a `.gtrk` project from a voice-over — main path `--tts-task <task_id>` references a completed TTS task (fetches the audio plus sentence timecodes directly, zero ASR); fallback path `--audio`+`--transcript` takes your own voice-over as a pair. Once landed, `gtrk split --project` continues the production pipeline as usual |
|
|
43
|
+
| 🎼 | `gtrk audio lay` | Audio-track atom: appends an audio track to a `.gtrk` project (BGM/score; idempotent same-source replacement, no track pile-up); `--beat-align` runs cloud beat analysis and snaps the in-point to the nearest downbeat (billed once; degrades gracefully without a key or on failure) |
|
|
41
44
|
| 🧰 | `gtrk tool <name>` | Single-shot tool family: image-to-camera-move, image/video matting, image black-border removal / aspect adaptation / cleanup / square conversion / LivePhoto, smart collage covers and vertical stitching (multi-image input), video black-border removal / aspect adaptation / stabilization / vaporwave filter / mechanical & semantic shot segmentation / motion highlights / AI subtitles, vocal-accompaniment separation / speaker diarization / pitch-and-tempo shift, piano-to-MIDI and piano restoration, audio denoising, silence removal, MAD, and more; `gtrk tool list` shows every input/output/live price/status. Single request, single result, shared runner — adding a tool means adding one descriptor |
|
|
45
|
+
| 💬 | `gtrk feedback` | Tell us what feels wrong: `gtrk feedback "<one line>" --command <command>`. **Disclosed submission** — when an assistant files it for you it must first read the exact content back to you and only add `--disclosed` once you agree; in a pipe or any non-interactive environment, sending without that declaration is refused outright. Content is redacted before it leaves your machine (local paths, credentials, e-mail addresses, phone numbers and the like are replaced by shape), so what you are shown is exactly what gets sent |
|
|
42
46
|
| 🚧 | `struct` | (planned) convert an existing gtrk project into the three formats |
|
|
43
47
|
|
|
44
48
|
---
|
|
@@ -88,18 +92,64 @@ The output folder is named `<raw-name>-video-project-<YYMMDD-HHMMSS>/` and conta
|
|
|
88
92
|
|
|
89
93
|
**Per video (an ordered SOP with checkpoints — you talk to the agent, and it is not a one-shot parallel fan-out)**
|
|
90
94
|
|
|
91
|
-
Lanes are laid **in order, with a checkpoint at every step**:
|
|
95
|
+
Lanes are laid **in order, with a checkpoint at every step**: first fill the B-roll base layer from all three sources (film footage / your local footage / AI scene clips) → you adjust it → sample frames to check the final composition → only then stack MG (incl. ov) on top. You drive each step by conversation and the agent runs the matching command.
|
|
96
|
+
|
|
97
|
+
**Three entry chains, one merge point.** What your material looks like decides which chain you take; once you hold a project plus its transcript, all three are identical:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
① 口播链 你对着镜头讲的一条口播 gtrk oralcut
|
|
101
|
+
短视频口播 / 人文社科杂谈 照稿剪掉重来·口误·长停顿
|
|
102
|
+
↓
|
|
103
|
+
② 配音链 你写的一段稿子 → AI 配音 gtrk project init
|
|
104
|
+
电影解说 / 美食解说 先把配音调舒服,再建工程
|
|
105
|
+
↓
|
|
106
|
+
③ 长剪短 一条几十分钟的长素材 gtrk long2short
|
|
107
|
+
播客·圆桌·脱口秀·访谈·直播回放 挑出值得单发的,逐条出工程
|
|
108
|
+
↓
|
|
109
|
+
══════════ 工程 + 文稿 ══════════ ← 汇合点:往下三条链一样
|
|
110
|
+
↓
|
|
111
|
+
┌───────────────────────┴───────────────────────┐
|
|
112
|
+
│ │
|
|
113
|
+
配画面(可选,次序不能跳) 只想快点出片
|
|
114
|
+
│ │
|
|
115
|
+
gtrk split 把文稿分段派活 │
|
|
116
|
+
↓ │
|
|
117
|
+
gtrk matrix 按文稿铺 B-roll │
|
|
118
|
+
↓ │
|
|
119
|
+
AI 再现(可选) 外部平台出片 → 手动回铺 │
|
|
120
|
+
↓ │
|
|
121
|
+
客户端挑选 抽帧核构图 ← 底轨定稿前别往下走 │
|
|
122
|
+
↓ │
|
|
123
|
+
gtrk mg MG 主颗粒 + OV 叠层,最后才叠 │
|
|
124
|
+
↓ │
|
|
125
|
+
gtrk audio lay 全片加 BGM(可选) │
|
|
126
|
+
│ │
|
|
127
|
+
└───────────────────────┬───────────────────────┘
|
|
128
|
+
↓
|
|
129
|
+
客户端:上字幕 → 出片
|
|
130
|
+
(或导出剪映草稿 / PR 工程)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Chain names above: *口播链* = talking-head (you shot yourself: short-form monologue, humanities commentary) · *配音链* = voice-over (you wrote a script: film recaps, food recaps) · *长剪短* = long-to-short (podcasts, roundtables, stand-up, interviews, stream VODs).
|
|
134
|
+
|
|
135
|
+
**Two things to remember**: (1) **lay the bottom first, stack the top last** — B-roll and AI scene clips are both base-layer picture (two legs of one stage), while motion graphics (MG main particles + OV transparent overlays) are the only overlay layer, so stacking before the base is final is wasted work; (2) the final render always happens in the desktop client or your own NLE — the CLI only fills the project.
|
|
136
|
+
|
|
137
|
+
> Full walkthroughs for each chain (artifacts per step, troubleshooting) live in the tutorial's sub-pages.
|
|
92
138
|
|
|
93
139
|
| Step | What you say to the agent | What the agent does | Where you step in |
|
|
94
140
|
|:--:|---|---|---|
|
|
95
141
|
| ① | "**cut a version** of this talking-head" | `/gtrk-oralcut` → `gtrk oralcut` → three projects + transcript | — |
|
|
96
142
|
| ② | "now **split it into a storyboard dispatch**" | `/gtrk-splitter` → `gtrk split` → `dispatch.json` with four lanes | review the dispatch |
|
|
97
|
-
| ③ | "**lay the B-roll
|
|
98
|
-
| ④ | "B-roll is settled, **
|
|
99
|
-
| ⑤ | "**
|
|
143
|
+
| ③ | "**lay the B-roll base**" (two legs, one stage) | `/gtrk-matrix` → `gtrk matrix` → film/local-footage candidate tracks laid; `/gtrk-ai-drama` (skill, no command) → four-part description docs (Chinese/English blocks) | **pick/adjust B-roll in opencut** (toggle track visibility to compare); generate AI clips on an external platform and **drop them back in by hand** |
|
|
144
|
+
| ④ | "B-roll is settled, **check the composition**" | samples frames from the **merged three-source base layer** (an agent discipline, no dedicated command) | **confirm the composition** (subject position / safe areas / facing / brightness) |
|
|
145
|
+
| ⑤ | "composition looks good, **lay the MG**" | `/gtrk-mg` → `gtrk mg` → MG (incl. ov) stacked on the settled base layer | fine-tune particles (by hand in opencut) |
|
|
100
146
|
| ⑥ | "**produce the final cut**" | the desktop client's production chain (multi-lane compositing + cloud particle rendering / export to Jianying); `gtrk render` only produces a **main-track snapshot preview** | final polish inside the client |
|
|
101
147
|
|
|
102
|
-
> The order exists for a reason: **
|
|
148
|
+
> The order exists for a reason: **AI scene clips belong to the base-layer B-roll family, not to an overlay layer** — the only overlay layer in the pipeline is MG (incl. ov). MG placement shapes itself around the picture and **depends on the final composition of the base layer**, so all three sources (film / local / AI) must land and the composition must be checked before MG goes on. Skip lanes you do not need (an empty queue in `dispatch` simply lays nothing).
|
|
149
|
+
>
|
|
150
|
+
> ⚠️ **Older docs said "④ lay MG → ⑤ AI re-enactment last", reasoning "the later it comes, the higher it stacks" — that mistook work order for layer order, corrected on 2026-08-17.** If your installed skills predate this, run `gtrk upgrade` to pick up the new order.
|
|
151
|
+
>
|
|
152
|
+
> **AI generation is asynchronous**: external platforms can take days of rerolls, and strict serialization would block ④⑤ indefinitely. The gate into ⑤ is therefore "**AI clips are back in ∨ you explicitly say skip for now**"; when you skip, the agent marks the MG particles adjacent to or overlapping the AI spans as "recheck composition once AI clips land" and repeats that list at wrap-up.
|
|
103
153
|
>
|
|
104
154
|
> ③④⑤⑥ all require **going back to the desktop client** to select, polish, re-insert and produce — the CLI lays material into `.gtrk`, and the client turns `.gtrk` into a finished video. See the "**CLI × desktop client**" section below.
|
|
105
155
|
|
|
@@ -111,6 +161,7 @@ Lanes are laid **in order, with a checkpoint at every step**: lay B-roll first t
|
|
|
111
161
|
| Lost the report / want the artifacts on another machine | "fetch the previous one by taskId" → `gtrk oralcut-result <taskId>` (skips the cloud re-run) |
|
|
112
162
|
| You want to choose between several B-roll candidates | "lay a few more B-roll candidates" → `gtrk matrix --lay N`, then toggle track visibility in opencut |
|
|
113
163
|
| B-roll fill is poor / there are empty slots | Adjust `--score-floor` / `--top-k` and re-run, or "search a single query" → `matrix search "<query>"` to patch it |
|
|
164
|
+
| You want to lay B-roll from your own footage | "use my local footage" → `gtrk matrix index --dirs <folders>` to build the index, then `gtrk matrix --local --dirs … --project …` (**your footage never leaves your machine**; see the matrix section in the command reference) |
|
|
114
165
|
| Picture / particles need frame-level polish | Open the project in opencut and adjust by hand (what the agent laid is an **editable project**, not a flattened render) |
|
|
115
166
|
| Cannot connect / config problems | "run a health check" → `gtrk doctor` (config / cloud / Jianying folder / version in one shot) |
|
|
116
167
|
| A new version is out | "upgrade" → `gtrk upgrade` (upgrades the CLI + refreshes skills, config preserved) |
|
|
@@ -137,7 +188,7 @@ CLI 写 .gtrk ─▶ 客户端打开(自动感知外部改动、先存脏改再
|
|
|
137
188
|
| **Choosing B-roll candidates** | `gtrk matrix` lays N candidate tracks; you toggle each track's visibility to compare, pick one, and delete the rest — an aesthetic call only a person in the client can make |
|
|
138
189
|
| **MG / particle polish** | The client renders html-particles as **live transparent previews** with frame-level Transform/Blending/Effects tuning |
|
|
139
190
|
| **Talking-head fine cut** | Magnetic main-track ripple editing, manual nudging of cut points / pauses / split-screens |
|
|
140
|
-
| **Re-inserting AI re-enactment** | AI clips generated on external platforms are **dragged into the AI_DRAMA lane by hand** and aligned to their spans (`/gtrk-ai-drama` only emits description docs; the footage is produced externally — see SOP
|
|
191
|
+
| **Re-inserting AI re-enactment** | AI clips generated on external platforms are **dragged into the AI_DRAMA lane by hand** and aligned to their spans (`/gtrk-ai-drama` only emits description docs; the footage is produced externally — see SOP ③: it belongs to the base-layer stage, and MG waits until it has landed) |
|
|
141
192
|
| **Final production** | Multi-lane compositing (overlay / MG / cloud-rendered particles stacked) plus Jianying draft export both live in the client's production chain |
|
|
142
193
|
|
|
143
194
|
> **`gtrk render` ≠ the final cut.** `gtrk render` is a local ffmpeg **snapshot preview of the main track (the rough talking-head cut)** — it merges only the main video and audio tracks and **does not composite overlays (B-roll candidates) / MG particles / AI re-enactment**. For a **real multi-lane finished video** (all lanes stacked, particles cloud-rendered, Jianying draft exported), use the **client's production chain**. In one line: **the CLI puts material into the project; the client turns the project into a video.**
|
|
@@ -168,7 +219,7 @@ Once installed, a single sentence in any agent invokes a gtrk skill:
|
|
|
168
219
|
|  |  |
|
|
169
220
|
|  |  |
|
|
170
221
|
|
|
171
|
-
`gtrk install` installs the
|
|
222
|
+
`gtrk install` installs the 12 bundled CLI skills (`gtrk-oralcut`·`gtrk-long2short`·`gtrk-splitter`·`gtrk-matrix`·`gtrk-mg`·`gtrk-ai-drama`·`gtrk-style-maker`·`gtrk-transcript`·`gtrk-tools`·`gtrk-music-visualizer`·`gtrk-cover`·`gtrk-travel-recap`) into the agents detected on this machine. The mechanism matches lark-cli: gtrk hands its local skill sources to the generic `skills` CLI, which owns agent detection, directory mapping and update rules; gtrk no longer hardcodes per-vendor paths.
|
|
172
223
|
|
|
173
224
|
By default `~/.agents/skills` is the single source of truth, linked into each agent's compatible directory (junctions on Windows); where linking is unavailable the adapter falls back to copying. That way updates touch one canonical copy instead of letting duplicates drift apart. Common commands:
|
|
174
225
|
|
|
@@ -202,18 +253,20 @@ Then just say "**cut a version of this talking-head**", or explicitly pick `gtrk
|
|
|
202
253
|
|:--:|---|---|---|
|
|
203
254
|
| ① | `/gtrk-oralcut` | `gtrk oralcut` | Smart talking-head cut → desktop client / Jianying / Premiere projects + transcript |
|
|
204
255
|
| ② | `/gtrk-splitter` | `gtrk split` | Storyboard dispatch → `dispatch.json` (A_ROLL/MG/AI_DRAMA/FILM_BROLL, four lanes) |
|
|
205
|
-
| ③ | `/gtrk-matrix` | `gtrk matrix` | **
|
|
206
|
-
|
|
|
207
|
-
|
|
|
256
|
+
| ③ | `/gtrk-matrix` | `gtrk matrix` | **B-roll base · film/local-footage leg**: lays candidate tracks → **you adjust/choose** (toggle visibility in opencut) |
|
|
257
|
+
| ③ | `/gtrk-ai-drama` | (no command, pure authoring) | **B-roll base · AI scene-clip leg (same stage as matrix, not last)**: emits four-part description docs (backstory / characters / shots / source text, in Chinese and English blocks) → generate on any external platform and re-insert by hand (the artifact is description text with no mechanical tail, same as `/gtrk-style-maker`: skill only, no command) |
|
|
258
|
+
| ④ | (no skill) | (no command) | **Global frame-sampling composition check**: sample frames from the merged three-source base layer and have the user confirm the composition — a hard agent-discipline gate feeding ⑤'s placement decisions |
|
|
259
|
+
| ⑤ | `/gtrk-mg` | `gtrk mg` | **MG (incl. ov) goes on last** (stacked on the settled, composition-checked base layer) |
|
|
208
260
|
| — | `/gtrk-style-maker` | (no command, builds a show) | A one-time interview that builds your show's style system (skill family + show config, see next section) |
|
|
209
261
|
| — | (wrap-up) | `gtrk render` | Render a gtrk project locally → finished mp4 |
|
|
210
|
-
|
|
|
262
|
+
| ✂️ | `/gtrk-long2short` | `gtrk long2short` | Long-to-short rough cut: semantic segment selection + jump cuts → per-clip client/Jianying/Premiere projects (the raw file is never uploaded); **not part of the production SOP**, usable standalone at any time |
|
|
263
|
+
| 📝 | `/gtrk-transcript` | `gtrk transcript` | Local video / voice-over audio → one Markdown file with an agent-written summary, timecoded record and plain text; **not part of the production SOP** |
|
|
211
264
|
| 🧰 | `/gtrk-tools` | `gtrk tool <name>` | The single-shot tool family (image-to-camera-move / image & video matting …) — single request, single result, **not part of the production SOP**, usable standalone at any time |
|
|
212
265
|
| 🎵 | `/gtrk-music-visualizer` | `gtrk music-visualizer` | One song → a spectrum-visualizer video (template + optional background/cover + colour styling), **not part of the production SOP**, used standalone for audience acquisition |
|
|
213
266
|
| 🖼️ | `/gtrk-cover` | (no command, pure authoring) | The two-stage cover workbench: design diagnosis + text-to-image prompts in three sizes and two languages → you generate images on an external platform → an HTML5 typesetting workbench (drag/scroll fine-tuning, one-click export to multiple PNG sizes). Show-specific cover aesthetics are injected through the show config's `style.skills` (`produces:"cover"`); **not part of the production SOP** (it is the "stage zero" companion to distribution) |
|
|
214
267
|
|
|
215
|
-
> **Skill vs command**: `/gtrk-mg` is the **brain** — it knows it belongs at SOP step
|
|
216
|
-
> The
|
|
268
|
+
> **Skill vs command**: `/gtrk-mg` is the **brain** — it knows it belongs at SOP step ⑤ (MG only after all three B-roll sources have landed and the composition is checked), asks for your confirmation, and resolves which particle type to produce from the show config; `gtrk mg` is the **hands** — purely deterministic lint + track laying. You trigger the skill by talking, and the skill runs the command for you.
|
|
269
|
+
> The 12 `/gtrk-X` skills above are **framework skills bundled with the CLI** (installed by `gtrk skills install`) — `/gtrk-long2short` independently drives long-to-short, `/gtrk-transcript` independently drives video/audio-to-transcript, `/gtrk-tools` covers only the single-shot tool family, `/gtrk-cover` handles covers, and none of the four belong to the production SOP; `/gtrk-ai-drama`·`/gtrk-style-maker`·`/gtrk-cover` are pure authoring skills (no command). Show-specific **visual style and content** come instead from your own show's production skills (created by `/gtrk-style-maker`, bound through the show config's `style.skills`) and are never hardcoded into these framework skills.
|
|
217
270
|
|
|
218
271
|
**How each lane's actual visuals/content get produced** — what the MG looks like, what tone the AI re-enactment has — is not hardcoded into the CLI. It comes from **your own show's production skills** (created interactively with `/gtrk-style-maker`, kept locally). They are bound through the show config's **`style.skills[].produces`** (the value is the lane name), and **general-purpose drivers** such as `gtrk mg` / `gtrk matrix` consume them accordingly. **The direction is: the CLI drives the show skills** — show skills only supply style/content and carry no "which command to run" orchestration; the framework only knows lanes and pipeline interfaces, and the look always belongs to your show. Without a show, the built-in defaults are used and everything still runs end to end.
|
|
219
272
|
|
|
@@ -273,9 +326,9 @@ Run `gtrk doctor` any time for a self-check:
|
|
|
273
326
|
|
|
274
327
|
## Command reference
|
|
275
328
|
|
|
276
|
-
### `gtrk transcript <local video>`
|
|
329
|
+
### `gtrk transcript <local video|voice-over audio>`
|
|
277
330
|
|
|
278
|
-
Turns a local video into a multi-level Markdown transcript. It accepts local
|
|
331
|
+
Turns a local video or voice-over audio file into a multi-level Markdown transcript. It accepts local file paths only: video is extracted — and audio input transcoded — to 16 kHz mono audio on your machine, and only that derivative is uploaded. The original file is never uploaded, and URLs or platform video downloads are not supported.
|
|
279
332
|
|
|
280
333
|
```bash
|
|
281
334
|
gtrk transcript "D:/素材/采访视频.mp4"
|
|
@@ -288,7 +341,9 @@ By default it produces only `D:/素材/采访视频-transcript.md`, whose struct
|
|
|
288
341
|
2. `## 文字记录` (Transcript record): readable paragraphs each starting with `[00:01:23]`;
|
|
289
342
|
3. `## 纯文本` (Plain text): the complete recognized text, easy to copy in one go.
|
|
290
343
|
|
|
291
|
-
Live pricing is queried from the website's price table under `asr` before the run; neither the CLI nor the docs store price numbers. With `--json`, stdout contains only `{ok,taskId,fileId,output,summaryPending}`, where `output` points at that single Markdown file; `summaryPending:true` means `/gtrk-transcript` still needs the agent to write the semantic summary and replace the pending marker in place — the deliverable remains the same single file.
|
|
344
|
+
Live pricing is queried from the website's price table under `asr` before the run; neither the CLI nor the docs store price numbers. With `--json`, stdout contains only `{ok,taskId,fileId,output,transcriptJson,summaryPending}`, where `output` points at that single Markdown file; `summaryPending:true` means `/gtrk-transcript` still needs the agent to write the semantic summary and replace the pending marker in place — the deliverable remains the same single file.
|
|
345
|
+
|
|
346
|
+
> With `--json` it additionally drops a sentence-timecoded `<name>-transcript.json` next to the source file (`utterances[]{id,text,st,ed}` + `material_id` + `text_hash` + `duration`, field-for-field aligned with the transcript structure `gtrk split` consumes), which the `gtrk project init --transcript` fallback path can consume directly. **Do not re-run ASR here on TTS-synthesized voice-overs** — `gtrk project init --tts-task` fetches the server-side sentence timecodes directly, zero ASR and zero extra billing.
|
|
292
347
|
|
|
293
348
|
### `gtrk oralcut <raw>`
|
|
294
349
|
|
|
@@ -365,6 +420,23 @@ Finished cut × transcript projection → beat storyboard. **No positional argum
|
|
|
365
420
|
>
|
|
366
421
|
> **The solid black bed track**: by default a solid black track is laid beneath all candidate tracks and above the talking-head main track (`struct_meta.broll.black_track` records its `track_index`), covering the full landed beat envelope so that during B-roll (including the empty spots on candidate tracks) the talking-head picture underneath is not exposed. **The cost is "black holes"**: wherever candidate tracks are not filled, pure black covers the talking-head, and track laying computes exactly that — `--json` always emits `lay.blackBedHoleSec` plus per-span `lay.blackBedHoles`, and a non-fatal warning is added when a single span is ≥ 3 s or a single beat's ratio is ≥ 15 % (it does not change the exit code or block laying). Use it to adjust `--score-floor`, switch to `--no-black-bed`, or patch by hand in the client. The bytes land at `assets/builtin/solid-000000-<W>x<H>.png`, sharing an id namespace with the client's built-in solid material and reused idempotently. Do not delete it by accident when removing candidate tracks; to swap footage, drag onto a candidate track's clip and **not onto the black bed** — since client 0.2.10 (force-updated release on 2026-07-31) **dropping onto the black bed is rejected outright with a message**. On clients older than 0.2.10 (force update not yet pulled) the old behaviour silently creates a new video track and inserts there; if it lands in the lower half you cannot see it in the preview at all (one `Ctrl+Z` undoes the whole thing) — restart the client first to pick up the force update. If you do not want the black bed, re-run with `--no-black-bed` and it is stripped clean.
|
|
367
422
|
|
|
423
|
+
**Local-footage mode (`matrix index` / `--local`)**: footage does not have to live in the cloud library — retrieve and lay tracks straight from your local footage folders (video and images mixed):
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
gtrk matrix index --dirs <folder1,folder2> # ① build a slice-free index: content-fingerprint incremental, resumable; renames/moves are not recomputed
|
|
427
|
+
gtrk matrix --local --dirs <folder1,folder2> --project <dir> # ② local retrieval + track laying (--lay 0 = plan only, no laying)
|
|
428
|
+
gtrk matrix lay --project <dir> [--plan <path>] # ③ consume the (edited) plan and lay tracks, zero retrieval cost
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
- **Your footage never leaves your machine**: only 512px sampled frames are sent to Gitruck Cloud's own embed endpoint for vectorization, discarded on arrival; results reference your local originals by absolute path (no downloads, no proxies). Indexing is metered by frames actually sampled (pre-held before the run, settled to actual usage afterwards); text-side retrieval costs zero credits.
|
|
432
|
+
- **Images are first-class**: images are indexed, retrievable and layable; when selected, an image goes through cloud `image_move` and lands as a 5-second camera-move video — **the image itself does go to the cloud** (2 credits per image, summarized for confirmation before laying; same image + same params is reused forever, never re-billed). Zero images to the cloud → `--no-image-broll`.
|
|
433
|
+
- **No material reuse**: within one laying round each material unit is used once globally (local video per scene, images per file); when candidates run dry, slots stay empty rather than repeat; `--dedup-scope material` tightens to file level.
|
|
434
|
+
- **Projects containing local footage cannot cloud-render**: submission is rejected (`local_broll_cloud_render_rejected`) — produce locally in the desktop client or via `gtrk render`.
|
|
435
|
+
- **Optional atoms**: `matrix describe --plan <path> [--top-k N]` / `--materials <a,b>` understands candidates on demand (VLM description / tags / quality mark / watermark·subtitle·black-border·blur signals; 1 credit per frame, results injected into the plan and cached locally, cache hits are free, >20 frames triggers a confirmation guard); `--source-window <start,end>` filters by source-time window (only with `--local`; the film-commentary pattern "segment N of the narration gets footage from around segment N of the film"); `matrix lay --mark-weight <0..1>` blends describe's quality mark into candidate ranking (fused score = sim×(1-w)+(mark/100)×w; reorders only, never changes admission; candidates without a cached mark are treated as neutral).
|
|
436
|
+
- **Index knobs and score scale**: `--scene-threshold` tunes scene-split granularity, `--stability-threshold` collapses static-camera scenes to fewer sampled frames, `--rebuild` forces a rebuild (describe caches are kept); the index is not portable across machines (keys are absolute paths — just re-run `index` on the new machine). Local score scale differs from the cloud's (a perfect hit can score as low as ~0.25), so do not raise `--score-floor` on cloud instincts.
|
|
437
|
+
|
|
438
|
+
Orchestration recipes (pure matching / describe-then-lay / time-window / footage-first scripting / three-layer stacking) and the plan-editing contract live in the bundled skill `/gtrk-matrix`.
|
|
439
|
+
|
|
368
440
|
### `gtrk mg` — MG motion-graphics particles (lay / lint / status)
|
|
369
441
|
|
|
370
442
|
Consumes the `dispatch.mg` dispatch landed by `gtrk split`, laying html-particle assets produced by **your show's MG skill** into the `.gtrk` project's `beat_track`. Three modes are dispatched by the first positional word: **no argument = lay**, `mg lint <file>` = single-file validation, `mg status` = orchestration dashboard. The old name `gtrk rrv` remains a deprecated alias (it prints a notice; prefer `gtrk mg`).
|
|
@@ -397,6 +469,19 @@ Consumes the `dispatch.mg` dispatch landed by `gtrk split`, laying html-particle
|
|
|
397
469
|
> **Aux overlay particles**: if `gtrk split` dispatched an `overlay` particle in some beat's `aux_layers`, it derives a `<beat>-aux<n>` composition entry into `dispatch.mg` — `gtrk mg` lays it too, giving you "a main visual on the base track plus a transparent conceptual diagram stacked on the same span".
|
|
398
470
|
> **Dual-read compatibility**: `dispatch.mg` (also reads the old `rrv_mg`), the source directory `mg/` (also reads the old `rrv/`), the material prefix `mg-` (also reads the old `rrv-`) — projects created before the de-branding need zero migration.
|
|
399
471
|
|
|
472
|
+
### `gtrk project init` / `gtrk audio lay` — audio-first project atoms (voice-over first)
|
|
473
|
+
|
|
474
|
+
Project entry points that start from **a voice-over** instead of a talking-head raw: with the voice-over in hand (TTS-synthesized or self-recorded), `project init` builds the `.gtrk` project, and `gtrk split --project` continues the production pipeline as usual; `audio lay` adds an audio track (BGM/score) to any project.
|
|
475
|
+
|
|
476
|
+
| Command | What it does |
|
|
477
|
+
|---|---|
|
|
478
|
+
| `gtrk project init --tts-task <task_id>` | **Main path**: references a completed `audio_tts_clone` task — the server hands over the audio and sentence timecodes directly (zero ASR, zero extra billing); the audio download lands in the project's `audio/` |
|
|
479
|
+
| `gtrk project init --audio <voice-over> --transcript <transcript.json>` | **Fallback path**: your own voice-over audio plus its sentence-timecoded transcript as a pair (produced by `gtrk transcript <voice-over> --json`; for TTS-synthesized voice-overs take the main path instead of re-running ASR) |
|
|
480
|
+
| `gtrk audio lay --project <dir> --file <bgm.mp3>` | Appends an audio track to the project; **idempotent same-source replacement** (re-running with the same source replaces instead of piling up tracks; zero-reference protection when stripping the old one); `--volume <0..1>` (default 0.3, bed volume), `--offset <ms>` sets the in-point |
|
|
481
|
+
| `gtrk audio lay … --beat-align` | Cloud beat analysis (`audio_music_analyze`, billed once) snaps the in-point to the nearest downbeat; without a key / on analysis failure / out of range it degrades to no alignment — the command never fails over it |
|
|
482
|
+
|
|
483
|
+
`project init` also takes `--canvas <WxH>` (default 1080x1920), `-o/--out`, `--reupload`, `--no-open` and `--json` with the same semantics as `oralcut`; with `--json` both commands emit a single-line result JSON on stdout (human logs go to stderr).
|
|
484
|
+
|
|
400
485
|
### `gtrk tool <name> [inputs...]` — the single-shot tool family
|
|
401
486
|
|
|
402
487
|
Standalone single-request capabilities, kept separate from the pipeline's lane commands (`oralcut`/`split`/`matrix`/`mg`). **A top-level command dispatched by the first positional word** (no parent/child commands): `gtrk tool <name> [inputs...]` runs a tool (multi-file image tools accept several paths, and the order is the assembly order), `gtrk tool list` lists them all. One tool = one thin descriptor (input category / payload assembly / artifact mapping / billing / availability gate), sharing a runner that performs "validate → upload (fingerprint cache, auto-chunked ≥ 256 MiB) → submit → poll → stream-download to disk → `task.json`/`result.json` breadcrumbs" — adding a tool means adding one descriptor, never writing orchestration.
|
|
@@ -421,8 +506,9 @@ Standalone single-request capabilities, kept separate from the pipeline's lane c
|
|
|
421
506
|
| `video_motion_cut` | One local video | Camera-move / highlight segment structure in `result-output.json` (structured data, not a downloadable file) | Queried live before the run | Live |
|
|
422
507
|
| `video_speaker_detect` | One local video; optional `--language`/`--max-faces-per-frame`/`--detect-body`/`--track-sample-fps` (GPU heavy) | Visible-speaker structure in `result-output.json` (the time base follows the server output) | Queried live before the run | Live |
|
|
423
508
|
| `video_face_track` | One local video; optional `--sample-fps`/`--max-faces`/`--min-face-ratio`/`--enable-body-match`/`--similarity-threshold`; `time_ranges` goes through `--params-json` (GPU heavy) | Person id / time span / trajectory structure in `result-output.json` (the time base follows the server output) | Queried live before the run | Live |
|
|
424
|
-
| `audio_tts_clone` | **No file**: one of `--text`/`--text-file` (≤
|
|
509
|
+
| `audio_tts_clone` | **No file**: one of `--text`/`--text-file` (≤ 5000 characters) plus a required `--speaker`; optional language/format/speed/segmentation/subtitles | Voice-over audio wav/mp3 (plus optional subtitles); billed by character count — the unit and unit price come from what `gtrk tool list` shows live | Queried live before the run | Live |
|
|
425
510
|
| `video_ai_subtitle` | One video or audio file; `--language <code>` required; optional `--translate-language`, `--need-render`, `--need-pure`, `--subtitle-type`, `--subtitle-color`. By default only locally extracted audio is uploaded (the raw file never leaves your machine) | `.ass` subtitles + optional burned-in / subtitle-stripped `.mp4` + `result-output.json` (summary + word-level timeline) | Queried live before the run | Live |
|
|
511
|
+
| `subtitle_translate` | One **subtitle file** `.ass` / `.srt`; **both** `--language <code>` and `--translate-language <code>` are required; optional `--output-format`, `--line-mode`, `--bilingual`, `--subtitle-type`, `--subtitle-color`, `--canvas <WxH>`. No speech recognition | Translated subtitles `.ass` or `.srt` + `result-output.json` (entry counts + degradation flags) | Queried live before the run | Live |
|
|
426
512
|
| `video_long2short_pro` | One long video (uploaded whole); `--language <code>` required; optional `--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` | Finished clips `clip{i}.mp4` + the human-readable report `clips.md` (including polish-degradation details) + `result-output.json` | Queried live before the run | Live |
|
|
427
513
|
| `audio_separation` | One audio file; optional `--mode fast\|turbo` | Vocal and accompaniment audio (one or two items, depending on what is returned) | Queried live before the run | Live |
|
|
428
514
|
| `audio_speaker_split` | One audio file; optional `--only-struct` | Per-speaker `.wav` stems + a `spoken_list` timeline (`result-output.json`) | Queried live before the run | Live |
|
|
@@ -432,7 +518,7 @@ Standalone single-request capabilities, kept separate from the pipeline's lane c
|
|
|
432
518
|
| `piano_audio_to_midi` | One audio file | A MIDI file `.mid` | Queried live before the run | Live |
|
|
433
519
|
| `piano_audio_enhance` | One audio file | High-quality WAV + accompanying MIDI (two artifacts) | Queried live before the run | Live |
|
|
434
520
|
| `image_to_square` | One image; optional `--max-line <px>` (≤ 20000) | Square image | Queried live before the run | Live |
|
|
435
|
-
| `image_to_live` | One image |
|
|
521
|
+
| `image_to_live` | One image | A short video of about 4 seconds `.mp4` (silent; the artifact is a video) | Queried live before the run | Live |
|
|
436
522
|
| `image_classic_template` | **Several images** + a required `--main-title`; optional subtitle/mode/ratio/quality/count/layout | Finished cover/collage (text/pic/render groups, possibly several images) | Queried live before the run | Live |
|
|
437
523
|
| `image_vertical_stitch` | **Several images** (order = top-to-bottom stitching order) | One vertically stitched long image | Queried live before the run | Live |
|
|
438
524
|
| `video_split_screen` | **2–16 video segments** (multiple positionals); the precise tier uses `--clips-json` (entries `{input:0-based index, begin_time_ms, end_time_ms, crop}`, millisecond time base); nine optional layout/aspect/audio parameters | One split-screen video (its length matches the shortest segment) | Queried live before the run | Live |
|
|
@@ -460,6 +546,7 @@ The seven shared video tools — black-border removal, aspect adaptation, stabil
|
|
|
460
546
|
- `gtrk tool video_ai_segment ./clip.mp4 [--segment-mode shot_type] [--json]` — semantic shot segmentation; produces `result-output.json` (`categories[].shots[]` with shot size, tags, descriptions and second-level timecodes).
|
|
461
547
|
- `gtrk tool video_motion_cut ./clip.mp4 [--json]` — camera-move / highlight segments; produces `result-output.json` (`cut_points[]` with frame numbers, second-level timecodes and motion features).
|
|
462
548
|
- `gtrk tool video_ai_subtitle ./clip.mp4 --language zh [--translate-language en] [--need-render] [--subtitle-color 湖蓝]` — AI subtitles: `--language` is required, and it produces `.ass` subtitles + `result-output.json` (LLM summary + word-level timeline). **By default only locally extracted audio is uploaded** (the raw file never leaves your machine, and the geometry is sent along with the request); `--need-render` switches to **burning in locally with ffmpeg** (it errors out if `思源黑体 CN Bold` (Source Han Sans CN Bold) is missing rather than substituting another font); `--need-pure` needs the picture, so adding it uploads the whole video. The `subtitle_type`/`subtitle_color` enums and `content` are documented in the cloud API docs, and `--params-json '{"content":{...}}'` passes them through.
|
|
549
|
+
- `gtrk tool subtitle_translate ./movie.ass --language zh-CN --translate-language en-US [--bilingual] [--canvas 1080x1920]` — AI subtitle **translation**: move existing subtitles into another language; **both language parameters are required**. **The line between this and `video_ai_subtitle` is the input shape**: to recognize subtitles from audio or video use `video_ai_subtitle`; to move an existing `.ass`/`.srt` into another language use this one (no ASR re-run, and your existing proofreading is preserved). `--line-mode keep` keeps the timeline line for line with the input (so the track can directly replace the original), while the default `resegment` reads more naturally but changes line counts and timecodes. `.srt` files carry no canvas information, so **always pass `--canvas` for portrait output**, otherwise lines are wrapped for landscape and may run past the edge. Style options only apply to `ass` output; combining them with `srt` output is rejected server-side before any charge.
|
|
463
550
|
- `gtrk tool video_long2short_pro ./talk.mp4 --language zh-CN [--split-screen] [--speed-factor 1.1]` — long-to-short **fine cut**: finished clips in one shot, one `clip{i}.mp4` each plus the human-readable report `clips.md` (including polish-degradation details). **Division of labour with `gtrk long2short` (rough cut)**: the rough cut produces editable projects (gtrk/Jianying/Premiere), never uploads the raw file, and hands the result to a human for further editing; the fine cut produces only finished videos, uploads the whole file, and costs roughly twice as much. The deciding question: will you edit it afterwards? If yes, rough cut; if no, fine cut.
|
|
464
551
|
- The three above are **analysis-type tools**: their artifact is structured data in `result-output.json` (not downloadable media), so `result.json`'s `resultFile` points at it while `files` is empty and `ok=true` — that is normal.
|
|
465
552
|
- `gtrk tool audio_separation ./song.mp3 [--mode turbo]` — vocal/accompaniment separation; low-frequency fields such as `--param need_vocals=false` can still be passed through.
|
|
@@ -470,7 +557,7 @@ The seven shared video tools — black-border removal, aspect adaptation, stabil
|
|
|
470
557
|
- `gtrk tool piano_audio_to_midi ./piano.mp3` — transcribe piano audio into `.mid`.
|
|
471
558
|
- `gtrk tool piano_audio_enhance ./piano.mp3` — piano recording restoration, producing a high-quality WAV as the main artifact plus a companion MIDI.
|
|
472
559
|
- `gtrk tool image_to_square ./long.jpg [--max-line 8000]` — long image to square; `--max-line` defaults to 4000 and caps at 20000.
|
|
473
|
-
- `gtrk tool image_to_live ./photo.jpg` —
|
|
560
|
+
- `gtrk tool image_to_live ./photo.jpg` — bring a still photo to life; the artifact is a silent `.mp4` video of about 4 seconds.
|
|
474
561
|
- `gtrk tool image_classic_template a.jpg b.jpg c.jpg --main-title "新品速览"` — title + several images into a cover/collage; `--output-pic-count`/`--output-text-count` are clamped to ≤ 20 by the server.
|
|
475
562
|
- `gtrk tool image_vertical_stitch top.png mid.png bottom.png` — stitch several images vertically in the order given.
|
|
476
563
|
- `gtrk tool video_split_screen a.mp4 b.mp4 --output-ratio 16:9` — simple tier: automatic split-screen layout over the whole clips (reaction / side-by-side comparison).
|
|
@@ -529,7 +616,7 @@ The companion skill is `/gtrk-tools` (one skill covering the whole tool family).
|
|
|
529
616
|
```
|
|
530
617
|
gtrk-cli/
|
|
531
618
|
├── src/index.ts # commander 入口
|
|
532
|
-
├── src/commands/ #
|
|
619
|
+
├── src/commands/ # subcommands: install / init / oralcut / long2short / transcript / split / matrix / mg / project / audio / tool / render / doctor / upgrade / skills / …
|
|
533
620
|
├── src/lib/ # cloud / column-config / splitdoc / projection / user-config / jianying / …
|
|
534
621
|
├── skills/ # 打包的框架 skills:oralcut / splitter / matrix / mg / ai-drama / style-maker / transcript / tools / music-visualizer / cover
|
|
535
622
|
├── contracts/ # 框架契约库正本(gsap-emit v1 + handoff→契约映射表)
|