@gitruck/cli 1.1.6 → 1.1.9
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 +15 -0
- package/README.en.md +39 -3
- package/README.md +37 -2
- package/dist/index.js +219 -184
- package/package.json +68 -67
- package/skills/gtrk-cover/SKILL.md +3 -3
- package/skills/gtrk-cover/assets/workbench-template.html +1088 -955
- package/skills/gtrk-cover/references/checklist.md +82 -81
- package/skills/gtrk-cover/references/workbench-guide.md +128 -99
- package/skills/gtrk-food-recap/SKILL.md +122 -104
- package/skills/gtrk-live-slicing/SKILL.md +2 -0
- package/skills/gtrk-long2short/SKILL.md +8 -1
- package/skills/gtrk-matrix/SKILL.md +9 -1
- package/skills/gtrk-mg/SKILL.md +14 -0
- package/skills/gtrk-style-maker/SKILL.md +6 -0
- package/skills/gtrk-tools/SKILL.md +10 -1
- package/skills/gtrk-travel-recap/SKILL.md +15 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## 未发布
|
|
4
4
|
|
|
5
|
+
### `gtrk` 装完即可敲:install 自持全局副本 + Windows 用户级 PATH + doctor「命令可达」+ upgrade 沿自己的通道升级(add-gtrk-command-availability)
|
|
6
|
+
|
|
7
|
+
此前 `npx @gitruck/cli@latest install`(官网默认路线、全套 `install.ps1` 第三步)只装 skill 与配置,**从不安装 gtrk 本体**——npx 跑完把包丢掉,新开终端敲 `gtrk` 不是命令;`npm i -g` 路线则要靠 npm 全局目录恰好在 PATH 上。
|
|
8
|
+
现在 `gtrk install` 先做第 ⓪ 步:运行中的自己若不是持久 PATH 能解析到的那份(npx 临时态 / 未 link 的本地检出),先 `npm i -g @gitruck/cli@<运行中版本>` 自持(钉运行版、已有更高版本不动);随后按**持久** PATH(Windows 读注册表 HKLM+HKCU,不是启动它的终端给的 PATH)核对启动器目录,不在就追加到 HKCU 用户 PATH **尾部**(保留 `REG_EXPAND_SZ`、原值 `%…%` 不展开、不去重不重排、幂等)并广播 `WM_SETTINGCHANGE`;写被拒只给可读原因与手工指引、不让 install 退非零。macOS/Linux 不改任何 rc 文件,不可达时打一行 `export PATH=…`。
|
|
9
|
+
`gtrk doctor` 新增「命令可达」行:持久 PATH 解析到且版本一致为绿,解析不到为红并指向 `gtrk install`,敲到另一版为黄。`gtrk upgrade` 按 `process.execPath` 是否在 `~/.gitruck/node/` 之下判定通道:私有运行时(桌面端自举落位)用私有 node + 私有 npm + `--prefix ~/.gitruck/npm` 升级并复核启动器,**不去找系统 npm**;npm 全局通道维持现状。
|
|
10
|
+
规格:新立 `gtrk-command-availability`;`ffmpeg-runtime` 的「用户环境零侵入」条款收窄射程为 ffmpeg/字体等运行时资产(gtrk 自身启动器目录进用户 PATH 是明确例外);`gitruck-home` 登记 `node/` `npm/` `bin/` 三目录(客户端自举的私有运行时布局)。与 opencut 仓 `add-cli-bootstrap-runtime` 联动:本版先发,客户端再发。
|
|
11
|
+
|
|
12
|
+
### 封面工作台:T1 字体读用户本机、描边缺省 0(add-cover-workbench-font-switcher)
|
|
13
|
+
|
|
14
|
+
`gtrk-cover` 排字工作台右栏新增「字体」下拉与「字重」档位(400 / 700 / 900):下拉首项恒为 skill 注入的当期默认字(`T1_DEFAULT_FONT`,仍是 skill 按栏目封面风格资产或中性默认做的审美决策),
|
|
15
|
+
其余项来自**用户本机已装字体**,三级取数、任一级成功即可用——打开即按内置候选表(约 70 款常见中文字体,中英文名两写法)做 canvas `measureText` 已安装探测;Chrome / Edge 点「读取本机字体」经 Local Font Access API 取全量(需授权一次,结果与探测结果取并集、当前选中项恒保留,接口返回空按失败退化并解释);
|
|
16
|
+
两条都没列出的在输入框敲 family 名回车应用。三级全失败不阻塞。导出走本机 `html2canvas`,本机字体天然可用;与 MG 颗粒「字体名 MUST 命中服务端注册表」是两条线,guide §10 已写明分界。
|
|
17
|
+
T1 描边缺省由 2 改 0:思源黑 / 宋这类重叠轮廓的特黑字体加 `text-stroke` 会把部件内部轮廓描成镂空积木(缩略预览看不出、导出才炸),托底改用暗色双层 `text-shadow`,滑杆保留。
|
|
18
|
+
引擎层(拖拽 / 方向键 / 滚轮 / 导出 / 舞台缩放)零改动。同批:SKILL.md 铁律 3 暴露面加「T1 字体与字重档位」、中性默认「描边不加」,checklist ⑥ 补描边与切字体后可读性。
|
|
19
|
+
|
|
5
20
|
### 锚点金样入册(fix-anchor-top-hit-guarantee §5):决策 pin v5 的金样清单 53 → 57、哈希重登记不升 v6
|
|
6
21
|
|
|
7
22
|
`test/fixtures/broll-arrange/cases/` 新增 `44-anchor-sim-order-real-q1`(真机复刻 Q1/B04 两刀合璧:锚槽按原始 sim 取校门段而非融合分顶上来的广告牌,B02 泛化槽让位转次优)/
|
package/README.en.md
CHANGED
|
@@ -66,9 +66,12 @@ The CLI calls Gitruck Cloud capabilities, so you need an API key first (it looks
|
|
|
66
66
|
Requires Node.js ≥ 20.6 (check with `node -v`).
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
# 1)
|
|
70
|
-
|
|
71
|
-
#
|
|
69
|
+
# 1) One command installs everything: the gtrk CLI + the /gtrk-oralcut skill + config (API Key, Jianying dir)
|
|
70
|
+
# Open a NEW terminal afterwards and `gtrk` responds: the installer keeps a global copy and, on Windows,
|
|
71
|
+
# adds its directory to your user PATH
|
|
72
|
+
npx @gitruck/cli@latest install
|
|
73
|
+
# Equivalent: npm i -g @gitruck/cli@latest && gtrk install
|
|
74
|
+
# `gtrk` not found in a new terminal? Run `gtrk doctor` and read the "命令可达" row
|
|
72
75
|
|
|
73
76
|
# 2) 剪一条(剪完自动打开产物目录)
|
|
74
77
|
gtrk oralcut "D:/素材/某选题-原始口播.mp4" --script "D:/素材/某选题-文字稿.txt"
|
|
@@ -331,6 +334,30 @@ Run `gtrk doctor` any time for a self-check:
|
|
|
331
334
|
✅ 剪映草稿目录:C:\Users\…\com.lveditor.draft
|
|
332
335
|
```
|
|
333
336
|
|
|
337
|
+
### Crash reports, and how to turn them off
|
|
338
|
+
|
|
339
|
+
When gtrk crashes (uncaught exception / unhandled promise rejection / a program defect reaching the top-level exit) it automatically sends one report so we can locate the defect. **On by default; you are told once, when you first configure the CLI.**
|
|
340
|
+
|
|
341
|
+
**What is sent, in full**: the error message, the error stack, a source tag (`cli`), the CLI version, how many times this crash accumulated, and — only when the crash happened during a cloud task — that task's ID.
|
|
342
|
+
|
|
343
|
+
**What is never sent**: your media files or their contents, project files and path listings, your scripts, your API key (the key's literal value and any `gc_…`-shaped token are replaced with `<KEY>` before sending), device identifiers, hostname, environment variables.
|
|
344
|
+
|
|
345
|
+
**Only crashes are reported, never expected failures**: missing file, invalid argument, insufficient credits, wrong command usage — none of the errors you can read and act on are ever sent.
|
|
346
|
+
|
|
347
|
+
Three ways to turn it off (any one of them, effective immediately):
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
gtrk init --no-crash-report # persisted in config, off for good
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
GITRUCK_CRASH_REPORT=0 gtrk oralcut a.mp4 # environment variable, off for one run (takes precedence over config)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Or set `"crashReport": false` directly in `~/.gitruck/config.json`.
|
|
358
|
+
|
|
359
|
+
You can check the current state any time: the “崩溃自动上报” row in `gtrk doctor` shows on / off, and which of the two turned it off. With reporting off, the crash presentation and exit code are **exactly the same** as with it on — the switch only controls whether that one report is sent.
|
|
360
|
+
|
|
334
361
|
---
|
|
335
362
|
|
|
336
363
|
## Command reference
|
|
@@ -462,6 +489,14 @@ gtrk patch set --project <dir> --track audio:1 --at 3.0 --volume 0.5
|
|
|
462
489
|
| `--dump-request <file>` | **For troubleshooting**: write the **exact bytes actually sent** for the cloud arrangement request to this file. The server **does not keep your plan** (only a size summary), so when something goes wrong this file is the only thing that can reproduce the call — just send it to us. ⚠️ It **must not point inside the project directory** (projects get zipped, copied and synced around, and this file contains your beat names and search queries); with `--arrange-qc` each round writes its own file, round N landing at the same name plus `.roundN`. The machine-readable receipt is `lay.arrange_run.dump_request` | not written |
|
|
463
490
|
| `--explain` | **Emit the tuning gauges**: by default the machine-readable accounting gives only the empty-slot count `lay.dedup.emptySlots` (enough to tell whether your material pool is too thin); the rest of the tuning detail (how many of those were caused by window refinement, how many jump-cut waivers were exhausted, how many high-motion / blurry segments were used) sits behind this flag, and the human-readable log follows the same rule. It changes no decision — the project output is byte-for-byte identical | off |
|
|
464
491
|
| `--arrange-estimate-only` | **Estimate only, do not execute**: stop right at the cloud-arrangement billing confirmation, report the arrangement volume and return **successfully** (`ok:true` + `estimateOnly:true` — that is "I am deciding", not "I declined"). Zero cloud calls, zero changes to the project file. Machine-readable values live in `lay.arrange.units` / `lay.arrange.scale`. ⚠️ What it saves is **that one cloud call and its charge** (plus the candidate downloads and laying that follow), not the whole chain: the denominators of the arrangement volume still require reading the project, the plan, and re-projection. On the asset-matrix route it reports `applicable:false` rather than **0**. When given together with `--yes`, this flag wins | off |
|
|
492
|
+
| `--cut-align <ratio>` | Sentence-boundary snapping target ratio 0..1: `0.7` ≈ about seven in ten subtitle sentence starts land exactly on a shot cut, three in ten deliberately off (snapping all of them reads mechanical); `0` = off, back to the old rhythm-slot cutting. ⚠️ Sentence-level timecodes come from live `transcript` re-projection (same source as the keyword anchors), and **when re-projection degrades it silently falls back to the old behaviour and warns** — the snapping ratio does not hold for that run | `0.7` |
|
|
493
|
+
| `--gap-fill <mode>` | How holes in the main track of an audio-driven project get filled: `fast` = **leave as little black as possible** (relax the score floor and fill from the candidate pool → then extend neighbouring grains → then borrow unconsumed candidates across beats → then fill residual holes shorter than the minimum shot length with real footage → only pad black when a whole segment cannot be filled); `solid` = pad everything with black (so in fine-cut you can see at a glance "nothing matched here"); `none` = leave the gap as is. ⚠️ Under `fast`, borrowed footage is weakly related to that segment's script and sub-floor slots are quick cuts under 1.2s; both are reported in the log with `kind` `borrowed` / `subfloor` — **that is honest disclosure, not a defect**. `none` combined with main-track magnetic snapping in the client will swallow the gap and shift everything after it **out of sync with the voiceover** | `solid` |
|
|
494
|
+
| `--highlight-weight <w>` | `matrix lay` only: fold "is there anything worth watching" (information density / drama / emotional intensity / rarity) into candidate ranking, 0..1. **Orthogonal** to `--mark-weight` (how good the frame looks); the two weights are clamped to sum to 1. ⚠️ The highlight score reads the `describe` understanding cache, so **without a prior `describe` run this flag does nothing** — uncached candidates are treated as neutral and the weight is returned to similarity | `0` (off, zero regression) |
|
|
495
|
+
| `--decode-path <mode>` | `matrix index` only: decode path for scene detection, `auto` \| `gpu` \| `cpu` \| `full`. `auto` probes for hardware decoding and **degrades per asset** (recommended); `gpu`/`cpu`/`full` pin one tier and **do not degrade on failure** (for A/B comparison and troubleshooting). ⚠️ The default is still `full` (legacy behaviour) — you have to pass `auto` yourself to get the speedup | `full` |
|
|
496
|
+
| `--proxy-width <n>` | `matrix index` only: proxy decode width. ⚠️ Below this, fidelity degrades noticeably — **do not shrink it casually** | `384` |
|
|
497
|
+
| `--proxy-scaler <name>` | `matrix index` only: proxy scaling algorithm. Defaults to `neighbor` (point sampling, no filtering; measured faster *and* more accurate than `bicubic`). ⚠️ You basically only need to change this to run a comparison experiment | `neighbor` |
|
|
498
|
+
| `--exclude-recent <n>` | `matrix material --scope audio` only: avoid the last n BGM tracks already used. The history is **booked automatically** when `audio lay` writes to the track — you do not maintain it | `12` |
|
|
499
|
+
| `--no-exclude-recent` | Turn off the BGM avoidance above, allowing recent tracks to be reused | off (avoidance is the default) |
|
|
465
500
|
|
|
466
501
|
**`matrix fetch <clip_id...>` (pull raw footage during the fine cut, project-independent)**: for materials you have **searched with billing** (hits in the grant ledger), re-signs fresh download links for free by clip_id and lands them as `<clip_id>.<ext>` — when the rough cut is already exported to Jianying and one more B-roll is needed, you can pull the raw file locally and drag it straight in without going back to the client app. The flow is always **two-step**: pick clip_ids from `matrix search` → `matrix fetch` to pull (fetch itself is free of charge, performs no search, and has no confirmation gate). **Grants are persistent**: the 24h-expiring signature is no obstacle — a clip searched three days ago still fetches fine. Ungranted items are reported one by one as "not granted" with the way out (run one billed search for that keyword to obtain the grant) and never block the rest; one batch ≤ 500. **The initial scope covers video clip raws only** (the re-sign surface for image/audio materials is not open yet; such ids land in missing with a hint). Outputs never enter `.gtrk` and never land in the Jianying draft folder; material added inside Jianying does not flow back into the project (export is one-way).
|
|
467
502
|
| `--json` | Machine-readable: stdout carries only the result JSON | off |
|
|
@@ -495,6 +530,7 @@ gtrk matrix lay --project <dir> [--plan <path>] # ③ consume the
|
|
|
495
530
|
- **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.
|
|
496
531
|
- **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`.
|
|
497
532
|
- **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 (**async task billing**: pre-deducted on submit → settled on completion, auto-refunded on failure; Gitruck internal members are exempt, detected automatically at run time — with `--json`, `credits_estimated` is the actual charge and `credits_would_be` the list price), results injected into the plan and cached locally, cache hits are free, >20 frames triggers a confirmation guard). **One describe speaks for one segment, not the whole candidate**: in `--plan` mode each candidate is sampled at a single frame (`segments[0].best`), the result carries the scope anchor `describe.at_sec` (seconds on the material timebase), and the run reports "describe coverage = frames understood / total **segments** carried by the understood candidates" (`describe_coverage` in `--json`) — injecting N entries does not mean those N candidates were all looked at; `--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).
|
|
533
|
+
- **Highlight rubric**: `--highlight-rubric <text|@file>` (same flag on `describe` and `lay`; ≤2000 characters; `@<path>` reads from a file, which is the main form since a rubric is multi-line). It tells the highlight score (`--highlight-weight`) **what to judge by** — each vertical blueprint carries its own (food judges portion contrast and visible prices, travel judges rare landforms and extreme weather). **Omit it and the field is not sent at all**: the server falls back to its own domain-agnostic default, byte-for-byte identical to behaviour before this flag existed. Highlight scores are cached in **per-rubric buckets**: switching rubric rescores without invalidating or overwriting the objective description cache. `describe --plan` pins the run's `rubric_hash` into the plan and `lay` reads that same bucket automatically (no need to pass it twice); if the two disagree `lay` **fails hard** instead of silently picking one — scoring against the wrong rubric is undetectable after the fact. ⚠️ Rescoring under a new rubric still re-sends the frames (billed per frame): a text-only rescore channel needs server support and does not exist yet.
|
|
498
534
|
- **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.
|
|
499
535
|
|
|
500
536
|
**`gtrk matrix material "<query>"` (general tri-state material search)**: the second line alongside the B-roll search above, returning a download link for the **whole material** (not a segment) — `--scope clip|image|audio` (default `audio`, the BGM use case), `--commercial-only` searches commercially usable material only (**an explicit opt-in switch — off by default**), `--min-duration/--max-duration` picks by finished-cut length, `--top-k` (default 5, server cap 50), `--diversity`, `--json` for machine reading, `--out` to write a file.
|
package/README.md
CHANGED
|
@@ -67,8 +67,10 @@ CLI 要调用同合云云端能力,需先拿一个 API Key(形如 `gc_xxxxxx
|
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
69
|
# 1) 一条命令装全:命令行 gtrk + /gtrk-oralcut skill + 配置(填 API Key、自动扫剪映目录)
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
# 装完新开一个终端敲 gtrk 就有响:安装器会自持一份全局副本,Windows 上还会把它所在目录加进用户 PATH
|
|
71
|
+
npx @gitruck/cli@latest install
|
|
72
|
+
# 等价写法:npm i -g @gitruck/cli@latest && gtrk install
|
|
73
|
+
# 新终端敲不到 gtrk?跑 gtrk doctor 看「命令可达」那一行
|
|
72
74
|
|
|
73
75
|
# 2) 剪一条(剪完自动打开产物目录)
|
|
74
76
|
gtrk oralcut "D:/素材/某选题-原始口播.mp4" --script "D:/素材/某选题-文字稿.txt"
|
|
@@ -327,6 +329,30 @@ gtrk init --api-key <KEY> --jianying-draft-dir auto -y
|
|
|
327
329
|
✅ 剪映草稿目录:C:\Users\…\com.lveditor.draft
|
|
328
330
|
```
|
|
329
331
|
|
|
332
|
+
### 崩溃报告与关闭方式
|
|
333
|
+
|
|
334
|
+
gtrk 崩溃时(未捕获异常 / 未处理的 Promise 拒绝 / 顶层出口的程序缺陷)会自动上报一条报告,帮我们定位缺陷。**默认开启,首次配置时会告知一次。**
|
|
335
|
+
|
|
336
|
+
**发送的内容只有这些**:错误消息、错误堆栈、来源标识(`cli`)、CLI 版本号、本次累计发生次数,以及(仅当崩溃发生在一个云端任务过程中时)那个任务的 ID。
|
|
337
|
+
|
|
338
|
+
**明确不发送**:素材文件与内容、工程文件与路径列表、你的文稿、API Key(发送前会把 Key 的字面值与形如 `gc_…` 的 token 替换成 `<KEY>`)、设备标识、主机名、环境变量。
|
|
339
|
+
|
|
340
|
+
**只上报「崩溃」,不上报「预期内的失败」**:文件不存在、参数不合法、额度不足、命令用错——这些你看得懂的报错一条都不会发。
|
|
341
|
+
|
|
342
|
+
三种关法(任选其一,都是即时生效):
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
gtrk init --no-crash-report # 写进配置,永久关
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
GITRUCK_CRASH_REPORT=0 gtrk oralcut a.mp4 # 环境变量,临时关一次(优先级高于配置)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
或直接在 `~/.gitruck/config.json` 里写 `"crashReport": false`。
|
|
353
|
+
|
|
354
|
+
当前状态随时可查:`gtrk doctor` 的「崩溃自动上报」一行会写明开 / 关,以及关是被谁关的。关闭后崩溃的呈现与退出码**与开启时完全一致**——它只影响发不发那条报告。
|
|
355
|
+
|
|
330
356
|
---
|
|
331
357
|
|
|
332
358
|
## 命令参考
|
|
@@ -452,6 +478,14 @@ gtrk patch set --project <dir> --track audio:1 --at 3.0 --volume 0.5
|
|
|
452
478
|
| `--dump-request <file>` | **排障用**:把**实际上行的**云端编排请求体逐字节写到该文件。服务端**不保存你的 plan**(只留规模摘要),所以出了问题只有这份文件能复现——把它发给我们即可。⚠️ **不能指向工程目录内**(工程会被打包、拷贝、同步出去,而这份文件里有你的 beat 名与检索词);开 `--arrange-qc` 时每轮各写一份,第 N 轮落在同名加 `.roundN`。机读回执在 `lay.arrange_run.dump_request` | 不写 |
|
|
453
479
|
| `--explain` | **外发调参仪表**:缺省的机读账面只给「留空槽数」`lay.dedup.emptySlots`(够判断素材池是不是不够用),其余调参用的细账(其中多少是窗口精修致空、跳剪避让枯竭放行几次、取用了几个高运动/模糊段)收在本开关后,人读日志同口径。不影响任何决策,工程产物逐字节不变 | 关 |
|
|
454
480
|
| `--arrange-estimate-only` | **只要预估不要执行**:走到云端编排的计价确认那一步就停,报出编排量后**成功**返回(`ok:true` + `estimateOnly:true`——那是「我在做决定」,不是「我拒绝了」),零云端调用、工程文件零改动。机读值在 `lay.arrange.units` / `lay.arrange.scale`。⚠️ 它省的是**云端那一次调用与其计费**(以及其后的候选下载与落轨),不是整条链:编排量的分母本来就要读工程、读 plan、做重投影才算得出。素材矩阵路报 `applicable:false` 而**不是 0**。与 `--yes` 同给时以本开关为准 | 关 |
|
|
481
|
+
| `--cut-align <ratio>` | 句界吸附目标比例 0..1:`0.7` ≈ 约七成字幕句起点恰逢镜头切点、三成有意错开(全对齐反而机械),`0` = 关闭、回旧节奏切槽。⚠️ 句级时码取 `transcript` 现场重投影(与关键词锚同源),**重投影降级时自动回旧行为并告警**——那一轮的吸附比例不作数 | `0.7` |
|
|
482
|
+
| `--gap-fill <mode>` | 音频驱动工程主轨的空洞怎么填:`fast` = **尽量不留黑**(放宽 score 地板从候选池填 → 耗尽则延长相邻颗粒 → 再耗尽跨 beat 借候选 → 短于最小镜头长的残洞也补真画面 → 补不满整段才垫黑片);`solid` = 一律黑片垫齐(精修时一眼看出「这里没匹配到」);`none` = 原样留 gap。⚠️ `fast` 借来的画面与本段稿子相关性弱、次地板槽是不到 1.2s 的快切,两者都会在日志里按 `kind` 报成 `borrowed` / `subfloor`——**如实告知,不是缺陷**;`none` 撞上客户端主轨磁吸会把 gap 吸掉,导致其后画面与配音**整体错位** | `solid` |
|
|
483
|
+
| `--highlight-weight <w>` | 仅 `matrix lay`:把「有没有看点」(信息量 / 戏剧性 / 情绪强度 / 稀缺性)融进候选排序,0..1。与 `--mark-weight`(画面好不好看)**正交**,两权之和钳到 1。⚠️ 看点分取 `describe` 的理解缓存,**没跑过 `describe` 就等于没开**——无缓存候选按中性处理,权重回吐给相似度 | `0`(关闭、零回归) |
|
|
484
|
+
| `--decode-path <mode>` | 仅 `matrix index`:场景检测的解码路 `auto` \| `gpu` \| `cpu` \| `full`。`auto` 自动探测硬解并**逐素材降级**(推荐);`gpu`/`cpu`/`full` 钉死某档且**失败不降级**(对照与排障用)。⚠️ 缺省仍是 `full`(旧行为),要提速得自己传 `auto` | `full` |
|
|
485
|
+
| `--proxy-width <n>` | 仅 `matrix index`:代理解码宽度。⚠️ 再往下保真度明显劣化,**勿随手调小** | `384` |
|
|
486
|
+
| `--proxy-scaler <name>` | 仅 `matrix index`:代理缩放算法。缺省 `neighbor`(点采样不滤波,实测比 `bicubic` 又快又准)。⚠️ 改它基本只有做对照实验才需要 | `neighbor` |
|
|
487
|
+
| `--exclude-recent <n>` | 仅 `matrix material --scope audio`:选曲避让最近 n 首用过的 BGM。历史由 `audio lay` 落轨**自动记账**,不用自己维护 | `12` |
|
|
488
|
+
| `--no-exclude-recent` | 关掉上一条的选曲避让,允许复用近期曲目 | 关(缺省避让) |
|
|
455
489
|
| `--out <file>` | ad-hoc 模式结果落文件;`matrix fetch` 原片落盘目录(绝不写剪映草稿目录) | stdout / `./matrix-fetch/` |
|
|
456
490
|
| `--json` | 机读:stdout 只输出结果 JSON | 关 |
|
|
457
491
|
|
|
@@ -515,6 +549,7 @@ gtrk matrix lay --project <目录> [--plan <path>] # ③ 消费(
|
|
|
515
549
|
- **同素材不二用**:单轮铺轨一个素材单元全局只用一次(本地视频按场景、图片按文件),候选枯竭宁空不重复;`--dedup-scope material` 收严到文件级。
|
|
516
550
|
- **含本地素材的工程不能云渲**:提交会被拒(`local_broll_cloud_render_rejected`)——走客户端本地出片或 `gtrk render`。
|
|
517
551
|
- **可选零件**:`matrix describe --plan <path> [--top-k N]` / `--materials <a,b>` 按需理解候选(VLM 描述/标签/质量分/水印·字幕·黑边·模糊信号,1 积分/张(**异步任务计费**:提交预扣→完成结算,失败自动退款;同合云内部成员豁免,跑时自动探测,`--json` 的 `credits_estimated` 即实耗、`credits_would_be` 为原价)、产物注入 plan 并本地缓存、缓存命中零计费、>20 张确认护栏)。**一条 describe 只代表一段**:`--plan` 形态每个候选只抽 `segments[0]` 的 best 一帧,产物带射程锚点 `describe.at_sec`(素材时基秒),跑完报「理解覆盖率 = 理解帧数 / 被理解候选携带的**段总数**」(`--json` 读 `describe_coverage`)——注入 N 条 ≠ 这 N 条候选都被看过;`--source-window <start,end>` 源时间窗过滤(仅 `--local`,影视解说式「第 N 段解说配影片第 N 段邻域画面」);`matrix lay --mark-weight <0..1>` 把 describe 的质量分融进候选排序(融合分 = sim×(1-w)+(mark/100)×w,只重排序不改准入,无缓存候选按中性处理)。
|
|
552
|
+
- **看点准则**:`--highlight-rubric <text|@file>`(describe 与 lay 同参,≤2000 字符,`@<路径>` 从文件读)给看点分(`--highlight-weight`)指定**评判基准**——垂类图纸各持一份(美食判分量对比/价格实物,旅拍判奇观地貌/极端天候)。**不传 = 整个字段不上行、服务端走领域无关缺省,与本参数引入前逐字节一致**。看点分按准则分桶缓存:换准则只重打分、客观描述缓存照常复用不被覆盖;`describe --plan` 会把本轮准则的 `rubric_hash` 钉进 plan,`lay` 据此自动取同一个桶(无需重复传参),两者不同源时**硬失败**而不是静默择一。⚠️ 换准则要重新打分就得重新看片(按张计费)——免看片的文本级重打分要等服务端轻通道,现在没有。
|
|
518
553
|
- **索引参数与量纲**:`--scene-threshold` 调场景切分粒度、`--stability-threshold` 固定机位判稳收敛抽帧、`--rebuild` 强制重建(理解缓存不清);索引跨机不可移植(键=绝对路径,换机重跑 index 即可)。本地 score 量纲与云端不同(完美命中可低至 ~0.25),`--score-floor` 别按云端直觉调高。
|
|
519
554
|
|
|
520
555
|
**`gtrk matrix material "<词>"`(通用三态素材检索)**:与上面的 B-roll 检索并列的第二条线,出**整条素材**的下载直链(不是段落)——`--scope clip|image|audio`(缺省 `audio`,BGM 主场)、`--commercial-only` 只搜可商用(**按需收紧的显式开关,缺省不带**)、`--min-duration/--max-duration` 按成片时长挑、`--top-k`(缺省 5,服务端上限 50)、`--diversity` 去同质、`--json` 机读、`--out` 落盘。
|