@gitruck/cli 0.2.4 → 0.2.7
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 +241 -241
- package/README.md +149 -14
- package/contracts/README.md +14 -0
- package/contracts/gsap-emit-v1.md +62 -0
- package/contracts/handoff-contracts.json +10 -0
- package/dist/index.js +2902 -1342
- package/package.json +62 -61
- package/skills/gtrk-ai-drama/SKILL.md +209 -0
- package/skills/gtrk-matrix/SKILL.md +111 -0
- package/skills/gtrk-mg/SKILL.md +97 -0
- package/skills/gtrk-oralcut/SKILL.md +6 -0
- package/skills/gtrk-splitter/SKILL.md +34 -12
- package/skills/gtrk-splitter/references/example-visual-split.json +6 -6
- package/skills/gtrk-splitter/references/example-visual-split.md +11 -11
- package/skills/gtrk-splitter/references/field-schema.md +47 -12
- package/skills/gtrk-style-maker/SKILL.md +94 -0
- package/skills/gtrk-style-maker/references/ammo.md +16 -0
- package/skills/gtrk-style-maker/references/contracts-ref.md +9 -0
- package/skills/gtrk-style-maker/references/craft-output-spec.md +46 -0
- package/skills/gtrk-style-maker/references/seeds/README.md +4 -0
- package/skills/gtrk-style-maker/references/seeds/seed-ecom-home-goods.md +37 -0
- package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +35 -0
package/package.json
CHANGED
|
@@ -1,61 +1,62 @@
|
|
|
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
|
-
"
|
|
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
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@gitruck/cli",
|
|
3
|
+
"version": "0.2.7",
|
|
4
|
+
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Gitruck (同合云)",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Gitruck/cli.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/Gitruck/cli#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/Gitruck/cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"bin": {
|
|
17
|
+
"gtrk": "dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"assets",
|
|
22
|
+
"skills",
|
|
23
|
+
"contracts",
|
|
24
|
+
"AGENT.md",
|
|
25
|
+
"README.md",
|
|
26
|
+
"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": "bun run build",
|
|
51
|
+
"test": "esbuild src/lib/chunk-upload.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/projection.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/mg-lint.ts src/lib/mg-lay.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 && node --test \"test/*.test.mjs\""
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"bun-types": "^1.1.0",
|
|
55
|
+
"commander": "^12.1.0",
|
|
56
|
+
"esbuild": "^0.28.1",
|
|
57
|
+
"typescript": "^5.6.0"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"hash-wasm": "^4.12.0"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gtrk-ai-drama
|
|
3
|
+
description: AI 再现分镜稿生成器——把成片 SOP 第⑤步分到 AI_DRAMA 车道的 beat,逐个产**四段朴素描述(故事背景 / 角色 / 分镜 / 原文文稿)+ 独立视觉基调段 + 时长预算**,中英双版,可直接拿去任意外部 AI 漫剧管线(可灵 / 即梦 / Vidu / Veo / Runway / LTX / 本地开源,或 LibTV / OiiOii / TapNow 这类成片 agent 平台)上手用。这是**纯创作 skill、无 gtrk 命令**(产物即描述文本、出片在外部平台、用户手动拼回,同 /gtrk-style-maker)。当用户想「上 AI 再现 / 做 AI 分镜 / AI 动画描述 / 把这段做成 AI 视频 / 给这段配 AI 再现 / 弗洛伊德这段怎么做视频」时使用本 skill。通用拆镜 craft(蒙太奇段分层 / 四段描述结构 / 中英双语 / 时长预算)由本 skill 自持;栏目视觉 DNA(Style Lock)从栏目配置 style.skills 里 produces==AI_DRAMA 的条目解析注入,绝不硬编某栏目风格。凡把口播派单里 AI_DRAMA 段落转成可出片的描述稿,优先用本 skill,别手搓。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AI 再现分镜稿生成器(gtrk-ai-drama)
|
|
7
|
+
|
|
8
|
+
把口播派单里分到 **`AI_DRAMA` 车道**的 beat,逐个拆成分镜、为每个 beat 产 **四段朴素描述 + 独立视觉基调 + 时长预算**(中英双版),落到 `<project>/ai-drama/<beat_id>.md`,再交棒用户拿去任意外部平台出片、手动拼回时间线。
|
|
9
|
+
|
|
10
|
+
> **这是纯创作 skill、没有 gtrk 命令**——AI_DRAMA 车道的产物就是**描述文本本身**,出片在外部生成平台、拼回时间线由用户手动做,没有确定性机械尾巴可下沉成 CLI 命令(性质同 `/gtrk-style-maker`)。所以「脑」是你(拆镜 + 注入栏目风格 + 管用户交互),「手」在外部平台和用户手里,不是 gtrk。别去找 `gtrk ai-drama` 这条命令,它不存在也不该存在。
|
|
11
|
+
|
|
12
|
+
## 为什么是「四段朴素描述」而不是「平台优化提示词」
|
|
13
|
+
|
|
14
|
+
因为**责权利要清**:无论用户拿去哪个管线,一致性的可移植载体是**角色/场景描述**,不是某平台的提示词语法("assets model-agnostic, prompts model-specific")。而且下游 agent 成片平台(LibTV / OiiOii / TapNow 等)拿到分镜稿会**自己重拆分镜、重写 prompt**,角色圣经(三视图)也在那些产品里生成——所以本 skill **不产平台优化提示词、不产角色圣经、不产参考图、不产成片**,只产四段可移植描述 + 视觉基调 + 时长,把「怎么出片、怎么保角色一致」交给下游平台,把「拼回时间线」交给用户。
|
|
15
|
+
|
|
16
|
+
## SOP 定位:第 ⑤ 步,最后上
|
|
17
|
+
|
|
18
|
+
成片是**有序 SOP + 用户检查点**,不是并行一把铺。次序(有理由:越往后叠得越上层):
|
|
19
|
+
|
|
20
|
+
> ① oralcut 剪口播 → ② split 视觉拆分派单 → ③ **matrix 先铺 B-roll(定底层)** → 用户 opencut 调整/挑选确认 → ④ **mg 铺 MG(叠在 B-roll 之上)** → ⑤ **本 skill 上 AI 再现(叠在最上层)** → `gtrk render` 收口
|
|
21
|
+
|
|
22
|
+
本 skill 是**第 ⑤ 步、最后一层视觉**。前面 B-roll、MG 都铺完、用户确认后才轮到它;它产完描述、用户拿去外部平台出片、AI 片段手动回铺齐,就该交给 `gtrk render` 出片——后面没有别的车道了。
|
|
23
|
+
|
|
24
|
+
## 三条铁律(先记死)
|
|
25
|
+
|
|
26
|
+
1. **业务分离:通用 craft 归本 skill,栏目风格从配置解析。** 本 skill 只持**对任何栏目都通用的拆镜工艺**(蒙太奇段分层、四段描述结构、中英双语、时长预算)。**栏目专属的视觉 DNA / Style Lock(底色、单点强调色、影视参考锚点、材质、禁令)从有效栏目配置解析注入**(见下节),**绝不硬编某栏目风格**——尤其别把《实在界漫游指南》那套「黑白二元 + 单点朱红」当默认塞给所有人,那是它的栏目资产,该从配置来。未绑 AI_DRAMA 风格资产的栏目 → 用本 skill 的**中性默认**兜底。
|
|
27
|
+
2. **只产描述,不产成片、不产角色圣经、不产参考图。** 本 skill 的交付物是四段可移植描述文本。出片(渲染成视频片段)、角色三视图/角色圣经、参考图,全在下游平台或用户手里。不要假装能帮他渲染或建角色资产。
|
|
28
|
+
3. **中英双版地位平等,不是主辅。** ①视觉基调、②故事背景、③角色、④分镜四段每一段都给完整的中文版 + 英文版(不是把中文翻一句了事)。中文喂可灵 / 即梦 / Vidu / 通义,英文喂 Veo / Runway / LTX / Luma,用户按目标平台选。**唯独 ⑤ 原文文稿是中文口播原文、不翻译**(它是源真相 + 手动拼接的对位锚,翻译反而失真)。
|
|
29
|
+
|
|
30
|
+
## 业务分离:栏目 Style Lock 从哪来(关键)
|
|
31
|
+
|
|
32
|
+
**视觉风格不是本 skill 预设的,是从栏目配置里解析出来的。** 解析链路(与 `gtrk-splitter` 的车道→生产 skill 解析同源):
|
|
33
|
+
|
|
34
|
+
1. **定位有效栏目**:用**与该工程 split 时相同的栏目**——用户 `--column <id>` 指定,或本地 config 的 `defaultColumn`;配置文件在 `~/.gitruck/columns/<id>.json`。本 skill 无 gtrk 命令,**直接读这个 JSON 文件**(同 `/gtrk-style-maker` 的做法)。
|
|
35
|
+
2. **取 AI_DRAMA 生产条目**:读 `style.skills[]`,逐条把 `produces` **归一**(历史别名如 `RRV_MG→MG` 等按归一规则处理),取 `produces == "AI_DRAMA"` 的条目。
|
|
36
|
+
- 命中 → 拿它的 `ref`(指向一个 skill 目录/资源)→ **读该 skill 的 Style Lock / 风格资产**(通常是它 `references/` 下的 style-lock、theme-accent、影视参考锚点等),把其中的**底色 / 单点强调色 / 影视参考 / 材质 / 栏目禁令**当作本次生成的视觉 DNA,注入 ①视觉基调段与各描述。
|
|
37
|
+
- 条目声明 `routing:"none"` → 跳过(显式管线外)。
|
|
38
|
+
- **无 AI_DRAMA 匹配条目 = 该栏目没绑 AI 再现风格资产** → 用下面「中性默认」。
|
|
39
|
+
3. **注入,不臆造**:读到什么风格资产就用什么;**没读到就用中性默认,绝不凭栏目名猜风格、绝不套用别的栏目的调性**。
|
|
40
|
+
|
|
41
|
+
> 举例(仅示意解析机制,非硬编):`real-roam-guide` 栏目配置里 `style.skills` 有一条 `{produces:"AI_DRAMA", ref:"…/ai-drama-prompter"}` → 解析到它 → 读它的 style-lock(黑白单红那套)注入。换个栏目、换个 ref,注入的就是另一套风格。**本 skill 正文里不写死任何一套具体风格。**
|
|
42
|
+
|
|
43
|
+
## 前置与输入
|
|
44
|
+
|
|
45
|
+
- **需要一个 split 落地过的工程目录**:里面有 `split/dispatch.json`(`gtrk split` 产物)。没有 → 先回 `/gtrk-splitter` 拆分派单。
|
|
46
|
+
- **消费 `dispatch.ai_drama[]`**:读 `<project>/split/dispatch.json` 的 `ai_drama` 数组。每条形如 `{beat, narrative?, theme?, emotion_stage?, platform?, shot_count?, track_st, track_ed}`:
|
|
47
|
+
- `narrative / theme / emotion_stage / platform / shot_count` **全可选**,缺则按文稿内容与位置**推断**(推断出的值在元信息处标注「推断」)。
|
|
48
|
+
- `track_st / track_ed` = 该 beat 在时间线上的起止秒,**给你时长预算**(据此定区间总时长、蒙太奇段数、各镜建议秒数;本 skill 不改时码、只读)。
|
|
49
|
+
- **也接单段直投**:用户直接甩一段文稿 + 「把这段做成 AI 视频」时,无需 dispatch,把这段当一个 beat 走同一套工艺即可(落用户指定处或 `<cwd>/ai-drama/<自拟标题>.md`)。
|
|
50
|
+
- **文稿内容从哪读**:dispatch 条目带 `beat` id,对应文稿去投影视图 / transcript 里按该 beat 的 span 读原文(读懂内容拆镜、并抄进 ⑤ 原文文稿区块)。用户直投时用他给的文本。
|
|
51
|
+
|
|
52
|
+
## 通用 craft(本 skill 自持,任何栏目通用)
|
|
53
|
+
|
|
54
|
+
### A. 蒙太奇段分层拆镜
|
|
55
|
+
|
|
56
|
+
1. **1 镜 = 1 情感颗粒**:同一个动作不切两镜;情绪转折必须切镜。
|
|
57
|
+
2. **每镜 3–8 秒**:短于 3 秒观众来不及呼吸;长于 8 秒 AI 视频模型会塌(人物表情 / 手部漂移)。
|
|
58
|
+
3. **长文段拆蒙太奇段**:一个 AI_DRAMA beat 可能覆盖很长一段文稿、含多个场景/情境。此时**先拆蒙太奇段**(每段锚一个场景/情境),**段内 3–6 镜**按情感颗粒切、**段间可换场**。镜数上限按**段级**判定,**不再因整段总镜数超 6 就回退 splitter**——长区间整段做 AI 再现是合法创作,不是拆分错误。
|
|
59
|
+
4. **切分触发器**(任一出现才考虑切):时间 / 空间改变、主体改变(例:理论家 → 当事人)、抽象概念登场(从「人物戏」切到「象征物戏」)、情绪转折(安静→刺点 / 爆发→凝滞)。**不要因一个句号、一个逗号就切。**
|
|
60
|
+
5. **控整体不控单镜**:你对**区间总时长**负责(各镜建议秒数之和量级贴合 `track_st→track_ed`),但不必把每一镜的秒数抠死——AI 平台交付本就不保证逐帧准,最终由用户手动拼时对齐区间。
|
|
61
|
+
|
|
62
|
+
### B. 视觉基调:独立成段 + 融入各描述(一源多处)
|
|
63
|
+
|
|
64
|
+
视觉基调**既独立成段(作权威源),又融入各描述(防漂)**:
|
|
65
|
+
|
|
66
|
+
- **① 独立段(权威源)**:把解析到的栏目 Style Lock 写成完整一段(底色 / 中性调 / 单点强调色 / 材质 / 影视参考 / 禁忌),60–120 字/词,CN + EN。这是权威源,供各分镜复述。
|
|
67
|
+
- **融入 ② 故事背景**:末句锁整段色调(「整段以……色彩与质感呈现」)。
|
|
68
|
+
- **融入 ③ 角色**:每角色一句质感落点(他在这套调子里长什么样、那点单点强调色落在哪个道具上——书脊 / 印章 / 丝带 / 封蜡,别做成环境光 / 滤镜 / 背景色)。
|
|
69
|
+
- **融入 ④ 分镜**:**每镜前缀复述一句**视觉基调(AI 视频模型健忘,不复述必漂色)。
|
|
70
|
+
|
|
71
|
+
### C. 中英双版结构(中英分离落盘 + EN 的强制调整)
|
|
72
|
+
|
|
73
|
+
**中英分块、不逐段交错**:产物分成两大块——先一整块**中文稿**(元信息 + ①②③④ 中文 + ⑤ 原文文稿),再一整块 **English Storyboard**(① Style Lock + ②③④ 英文)。这样用户按目标平台**整块复制**:中文平台(可灵 / 即梦 / Vidu / 通义)拷中文稿、英文平台(Veo / Runway / LTX / Luma)拷英文稿,不用逐行挑出中/英。**别在每个小节里 `【中文】…【EN】…` 交错**(那样复制粘贴要一句句抠)。
|
|
74
|
+
|
|
75
|
+
英文块不是直译,要做这些原生化:
|
|
76
|
+
- **摄影术语用英文原生词**:push-in / dolly-in、pull-back、tilt-up、lateral pan、rack focus、chiaroscuro、key/fill/rim light、practical light;景别 extreme close-up … extreme wide;焦段 35mm anamorphic / 50mm spherical / 85mm portrait。
|
|
77
|
+
- **年份用英文格式**:`Vienna, 1920`,不是 `1920 年维也纳`。
|
|
78
|
+
- **人名用英文原名**:`Sigmund Freud` / `Lacan`,不是拼音。
|
|
79
|
+
- **影视参考用英文片名**(斜体)。
|
|
80
|
+
- **⑤ 原文文稿只在中文稿里、不翻译**:逐句列中文口播原文即可,英文块不含它。
|
|
81
|
+
- **元信息只写一次**(放最前),中英两块不重复;每镜的「建议秒数 / 段 / 场景 / 角色 / 对应原文句」表头行在中/英两块各写各自语言的一份。
|
|
82
|
+
|
|
83
|
+
### D. 时长预算
|
|
84
|
+
|
|
85
|
+
- **元信息给区间总时长**:`track_ed - track_st`,据此定蒙太奇段数与建议分镜数。
|
|
86
|
+
- **④ 每镜给建议秒数**:各镜秒数之和量级贴合区间总时长。
|
|
87
|
+
- **定位:意图值,不是精确交付保证**。多数平台由参数控时且不保证逐帧精确(各平台 fps 也不一),提示里写死秒数无用;把时长放**元信息 + 每镜建议秒数**,最终对齐在用户手动拼接那一步完成。
|
|
88
|
+
- **时码只读不改**:本 skill 不写回 dispatch / struct_meta,只读 `track_st/track_ed`。
|
|
89
|
+
|
|
90
|
+
## 工作流
|
|
91
|
+
|
|
92
|
+
**Step 1 · 通读该 beat 文稿**:判有无历史/时代锚点(年份 / 地点 / 人物 / 事件)、主体是谁、情感落点在哪、叙事功能与阶段。dispatch 缺的参数在此推断并标注「推断」。
|
|
93
|
+
|
|
94
|
+
**Step 2 · 拆蒙太奇段与镜**:按 craft A 判是否长文段需分蒙太奇段,段内按情感颗粒切镜,定各段镜数(文稿长度 × track 时长双校准)。
|
|
95
|
+
|
|
96
|
+
**Step 3 · 锁风格**:按「业务分离」节解析栏目 Style Lock(读配置 → 取 produces==AI_DRAMA 条目 → 读其风格资产);无则取中性默认。组装成 60–120 字/词的 CN + EN 双语 ①视觉基调段。
|
|
97
|
+
|
|
98
|
+
**Step 4 · 写四段描述(中英分块)**:先出**中文稿**(② 故事背景末句锁调 → ③ 角色结构化 + 禁变项 + 质感落点,复现理论家 pin 复用同段文字 → ④ 分镜每镜前缀复述基调 + 建议秒数 + 对应原文句 + 蒙太奇级意图 → ⑤ 原文文稿中文逐句不翻译),再整块出 **English Storyboard**(① Style Lock + ②③④ 英文原生化,不含 ⑤)。中英**分两大块、不逐段交错**(craft C)。
|
|
99
|
+
|
|
100
|
+
**Step 5 · 落盘**:写到 `<project>/ai-drama/<beat_id>.md`(一 beat 一文件,靠 beat id 认得是哪段、互不覆盖)。用户直投单段时落到用户指定处或 `<cwd>/ai-drama/<自拟标题>.md`。
|
|
101
|
+
|
|
102
|
+
## 输出契约(落盘 Markdown 结构 · 中英分块)
|
|
103
|
+
|
|
104
|
+
顶部放一次责权利声明 + 元信息(不分语言);然后 **`## 一、中文稿`** 一整块、**`## 二、English Storyboard`** 一整块,用户整块复制。
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
# AI 再现分镜稿 · [自动标题](beat <beat_id>)
|
|
108
|
+
|
|
109
|
+
> [责权利声明:本稿只描述意图与时长;角色一致性依赖下游角色资产机制;出片/拼回在用户手里]
|
|
110
|
+
|
|
111
|
+
## 元信息
|
|
112
|
+
- 区间总时长:track_st→track_ed ≈ X 秒
|
|
113
|
+
- 建议分镜数:N 镜(含 M 个蒙太奇段)
|
|
114
|
+
- 复现角色:<角色名>(栏目级·pin 复用 / 本片新建)…
|
|
115
|
+
- 叙事功能 / 情感阶段:xxx(用户指定 / 推断)
|
|
116
|
+
- 目标平台:xxx(缺省 = 通用)
|
|
117
|
+
|
|
118
|
+
======================================================================
|
|
119
|
+
## 一、中文稿(喂可灵 / 即梦 / Vidu / 通义)
|
|
120
|
+
======================================================================
|
|
121
|
+
|
|
122
|
+
### ① 视觉基调(Style Lock)
|
|
123
|
+
> 权威源,供各分镜前缀复述。来源:<解析到的 ref skill> / 中性默认
|
|
124
|
+
[底色 / 中性调 / 单点强调色 / 材质 / 影视参考,60–120 字]
|
|
125
|
+
> 禁忌:[通用 AI slop 兜底 + 栏目专属禁令]
|
|
126
|
+
|
|
127
|
+
### ② 故事背景描述
|
|
128
|
+
[时代 / 地点 / 世界观 / 场景。末句锁调:整段以……色彩与质感呈现。]
|
|
129
|
+
|
|
130
|
+
### ③ 角色描述
|
|
131
|
+
#### <角色名>(栏目级·pin / 本片新建)
|
|
132
|
+
脸型 / 发型 / 瞳色 / 服装 / 标志物 + 禁变项(不留长发、不换西装…)+ 一句质感落点。
|
|
133
|
+
|
|
134
|
+
### ④ 分镜描述
|
|
135
|
+
#### 分镜 01 · [标题] |建议 ≈Xs |段:<蒙太奇段名> |场景:xxx |角色:xxx |对应原文:第 a–b 句
|
|
136
|
+
〔视觉基调前缀复述一句〕+ 主体在做什么具体动作 + 蒙太奇级镜头意图(不逐帧硬控)。
|
|
137
|
+
#### 分镜 02 · …
|
|
138
|
+
|
|
139
|
+
### ⑤ 原文文稿(本区间口播原文,不翻译)
|
|
140
|
+
1. [第一句中文原文]
|
|
141
|
+
2. [第二句中文原文]
|
|
142
|
+
…
|
|
143
|
+
|
|
144
|
+
======================================================================
|
|
145
|
+
## 二、English Storyboard (for Veo / Runway / LTX / Luma)
|
|
146
|
+
======================================================================
|
|
147
|
+
|
|
148
|
+
### ① Visual Tone (Style Lock)
|
|
149
|
+
> Authoritative source; restated as a prefix in every shot. Source: <resolved ref skill> / neutral default
|
|
150
|
+
[palette / neutrals / single accent / texture / film references]
|
|
151
|
+
> Avoid: [generic AI slop floor + column-specific bans]
|
|
152
|
+
|
|
153
|
+
### ② Background
|
|
154
|
+
[era / place / world / setting. Closing line locks palette & texture.]
|
|
155
|
+
|
|
156
|
+
### ③ Characters
|
|
157
|
+
#### <name> (column-pinned / new to this film)
|
|
158
|
+
face / hair / eyes / wardrobe / signature prop + do-not-change + one line on how they render in the tone.
|
|
159
|
+
|
|
160
|
+
### ④ Shots
|
|
161
|
+
#### Shot 01 · [title] |≈Xs |segment: <montage segment> |scene: xxx |cast: xxx |source lines: a–b
|
|
162
|
+
〔restate style prefix〕+ subject's concrete action + shot intent (montage-level, not frame-locked).
|
|
163
|
+
#### Shot 02 · …
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
> ⑤ 原文文稿只在中文稿里;English 块到 ④ Shots 为止。
|
|
167
|
+
|
|
168
|
+
## 中性默认(未绑 AI_DRAMA 风格资产时)
|
|
169
|
+
|
|
170
|
+
栏目配置里**没有 produces==AI_DRAMA 的条目**时,别停、别硬套别的栏目,用这套克制、通用、不特化任何栏目的兜底写 ①视觉基调段:
|
|
171
|
+
|
|
172
|
+
> **中性 Style Lock**:影视级自然主义画面,真实可信的光源(窗光 / 实用光 / 自然天光,不炫技),克制稳定的镜头语言(固定或缓慢推拉摇,无手持抖动 / 无广告级动态运镜 / 无无人机炫技),近单色到低饱和的克制调色(不追 HDR、不追霓虹),胶片颗粒质感。忌塑料 3D 渲染、忌动漫二次元、忌过度戏剧化打光。
|
|
173
|
+
> **EN**: Cinematic naturalism, believable practical light sources (window / practical / natural daylight, no showing off), restrained stable camera language (locked or slow dolly/pan/tilt, no handheld shake, no ad-grade dynamic moves, no drone stunts), near-monochrome to low-saturation restrained grade (no HDR, no neon), visible film grain. Avoid plastic 3D render, anime, and over-dramatic lighting.
|
|
174
|
+
|
|
175
|
+
中性默认下**不设单点强调色 / 不指定影视导演锚点**(那些是栏目资产)。用完顺带提醒用户:**想要这条栏目有自己的 AI 再现视觉 DNA,去 `/gtrk-style-maker` 沉淀一套 AI_DRAMA 风格资产并登记进 `style.skills`**,之后每次生成都会自动注入。
|
|
176
|
+
|
|
177
|
+
**禁忌行**(写进 ①)分两层:
|
|
178
|
+
- **通用 AI slop 兜底(本 skill 自带,任何栏目都写)**:glossy 3D render / plastic skin、HDR look / oversaturated、generic AI anime / saccharine、deformed face / extra fingers / mutated limbs、text overlay / captions / 字幕(字幕剪辑阶段另做)、heavy lens flare / chromatic aberration、cartoon / low-res / unfinished。
|
|
179
|
+
- **栏目专属禁令(从 Style Lock 追加)**:栏目风格资产里写明的禁令(如某栏目「禁多个红点 / 禁渐变 / 禁霓虹」)追加进来。无风格资产则只留通用兜底。
|
|
180
|
+
|
|
181
|
+
## 责权利边界声明(写进产物顶部或末尾)
|
|
182
|
+
|
|
183
|
+
产物要**显式声明责权利**,让用户拿去任何管线都心里有数:
|
|
184
|
+
|
|
185
|
+
> **本稿只描述意图与时长。** 角色一致性依赖**下游管线自带的角色资产 / 参考图机制**(角色圣经 / 三视图在下游产品里生成)——把本稿的角色描述喂给有角色资产库的平台(可灵主体库 / OiiOii 角色设定表 / LTX Elements / LibTV 三视图 等),一致性由它保。若喂给**没有角色资产机制的裸文生视频 API**,角色会逐镜漂脸——那是该管线的短板,不是本稿的责任。出片、拼回时间线,都在你手里。
|
|
186
|
+
|
|
187
|
+
## 交付前自检
|
|
188
|
+
|
|
189
|
+
- [ ] 五区块齐备(元信息 + ①视觉基调 + ②故事背景 + ③角色 + ④分镜 + ⑤原文文稿)?
|
|
190
|
+
- [ ] 每镜有**明确主语 + 明确动作**?(没有就退回)
|
|
191
|
+
- [ ] 是**真的按情感颗粒切镜**,不是按句号切?长文段拆了**蒙太奇段**、段内 3–6 镜、段划分合理?
|
|
192
|
+
- [ ] 视觉基调**独立成段(权威源)**,且**每镜前缀都复述**、②末句锁调、③每角色一句质感落点?
|
|
193
|
+
- [ ] 中英双版范围对:①②③④ 都双写、**⑤ 原文中文不翻译**?EN 做了原生化(术语 / 年份 / 人名 / 片名)?
|
|
194
|
+
- [ ] 底色 / 强调色 / 影视参考**取自栏目 Style Lock**(或明确用了中性默认),**没有硬编某栏目风格**?强调色**是道具化**(不是环境光 / 滤镜)?
|
|
195
|
+
- [ ] 时长预算入元信息(区间总时长 + 建议镜数)、每镜有**建议秒数**、各镜之和量级贴合区间?
|
|
196
|
+
- [ ] 禁忌行含**通用 slop 兜底**(无论栏目)+ 栏目专属禁令(有资产才加)?分镜区块内没有每镜独立负面词组?
|
|
197
|
+
- [ ] 复现的理论家标了 **pin·同段文字复用**、含**禁变项**?
|
|
198
|
+
- [ ] 缺省参数都**标了「推断」**、落盘文件名带 beat id、责权利边界声明在?
|
|
199
|
+
|
|
200
|
+
## 交棒下一步(SOP 收口,别停在交描述)
|
|
201
|
+
|
|
202
|
+
描述稿落盘后**别收工**,把接力讲清(但这一步的「手」在外部平台和用户手里、必须停下等用户):
|
|
203
|
+
|
|
204
|
+
1. **交代出片**:让用户拿 `<project>/ai-drama/<beat_id>.md` 里的描述,去任意外部平台出片——中文版喂可灵 / 即梦 / Vidu;英文版喂 Veo / Runway / LTX / Luma;本地开源(Wan / Hunyuan 等)或成片 agent 平台(LibTV / OiiOii / TapNow)皆可,按下游平台的角色资产机制上传角色描述保一致。
|
|
205
|
+
2. **回铺时间线**:出好的 AI 片段**由用户手动**拖回 opencut 的 **AI_DRAMA 车道**,对齐该 beat 的 `track_st→track_ed`(叠在 B-roll / MG 之上,最上层),按区间总时长裁齐。
|
|
206
|
+
3. **停下等用户**:AI 出片与拼回是**外部异步、用户驱动**的——本 skill 在此停,等所有 AI_DRAMA beat 的片段都回铺齐。这是 SOP 里的用户检查点,别替他假装出片 / 回轨完成。
|
|
207
|
+
4. **汇合后收口**:所有车道(B-roll / MG / AI 再现)铺齐、用户确认后,**交棒 `gtrk render`** 出成片——AI 再现是最后一层视觉,render 之后成片一条龙就到终点了。
|
|
208
|
+
|
|
209
|
+
> 原则:**agent 替用户跑 CLI / 接力 skill,用户只对话**。但 AI_DRAMA 车道天然有「用户去外部平台出片 + 手动拼回」的手工环节——那部分是外部的手,无法替跑;除此之外的解析、生成、落盘、交代,全由你(脑)一次做完,别让用户自己去拼描述。
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gtrk-matrix
|
|
3
|
+
description: B-roll 检索铺轨器——成片管线里第一个铺的车道(SOP ③)。消费拆分派单的 FILM_BROLL 队列(`dispatch.film_broll`),双口向量检索 + 下载 preview 代理,在工程里平铺 N 条候选 B-roll 轨,供用户在 opencut 里用轨道小眼睛切换对比、挑选/调整;确认后交棒 ④ 铺 MG。当用户想「铺 B-roll / 检索素材 / 找空镜 / 给空镜配画面 / 填 B-roll 候选 / 单独搜个词补个空槽」时使用本 skill。凡涉及把拆分派单里的影视素材段落检索并铺进工程,优先用本 skill 驱动 gtrk CLI 的 `matrix` 命令,别让用户自己去终端敲、也别手搓检索。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# B-roll 检索铺轨器(gtrk-matrix)
|
|
7
|
+
|
|
8
|
+
把拆分派单里的 **FILM_BROLL 队列**(`split/dispatch.json` 的 `film_broll`),用 `gtrk matrix` 跑通「双口向量检索 → 下载 preview 代理 → 在工程里平铺 N 条候选 B-roll 轨」,再**提示用户在 opencut 里挑选/调整**、确认后交棒下一步。**CLI 是手(检索/下载/铺轨/写回),你是脑(懂 SOP 位置、管用户检查点、遇差调参补空)。**
|
|
9
|
+
|
|
10
|
+
> **本 skill 已含你需要的全部信息**(SOP 位置、参数、执行、读结果、检查点、排错、交棒),照它做即可,不用也无法去查外部文档。(`gtrk matrix --help` 也随时列全部 flag。)
|
|
11
|
+
|
|
12
|
+
## 你在成片管线里的位置(SOP 第 ③ 步 · 第一个铺的车道)
|
|
13
|
+
|
|
14
|
+
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全链:
|
|
15
|
+
|
|
16
|
+
> ① `oralcut` 剪口播 → ② `split` 拆分派单出 `dispatch.json` → **③ `matrix` 先铺 B-roll(你在这)** → **用户 opencut 调整/挑选** → ④ `mg` 再铺 MG(叠在 B-roll 之上)→ ⑤ `ai-drama` 最后上 AI 再现 → `render` 收口。
|
|
17
|
+
|
|
18
|
+
**为什么 B-roll 第一个铺**:MG 颗粒是**叠在 B-roll 之上**的透明/满屏视觉,AI 再现最后上——所以要先把**底层 B-roll 定下来、用户满意了**,上面几层才有稳的地基。你这一步是整条视觉链的**打底**,铺完**必须停下等用户在 opencut 里挑选/调整**(关键检查点,见下文),不要一口气往 ④ 冲。
|
|
19
|
+
|
|
20
|
+
## 前置:确认派单 + CLI
|
|
21
|
+
|
|
22
|
+
- 需要一个**跑过 `gtrk split` 的产物目录**,里面有 `split/dispatch.json`。没有 → 先回到 ② 触发 `/gtrk-splitter` 产派单。
|
|
23
|
+
- 看 `dispatch.json` 的 `film_broll` 队列:**空 = 本片没有 B-roll 车道**(拆分时没有段落被判给 `FILM_BROLL`)→ 直接跳过本步、交棒 ④ 铺 MG,别空跑。非空才往下。
|
|
24
|
+
- `gtrk` 命令找不到 → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js)。
|
|
25
|
+
- 用户可以先在 opencut 里手调切点再保存——铺轨是往当前工程 append 候选轨,基于工程现状。
|
|
26
|
+
|
|
27
|
+
## 业务分离:B-roll 无栏目生产 skill,检索偏好由栏目配置供
|
|
28
|
+
|
|
29
|
+
**本框架 skill 不硬编任何栏目的审美/内容。** 但 B-roll 车道和 MG / AI 再现不同——
|
|
30
|
+
|
|
31
|
+
- **B-roll 没有「栏目生产 skill」**:检索用的 `queries`(英文长句场景描述)**在 ② 拆分时就由 splitter 写进派单**(`dispatch.film_broll[].queries`),是现成的机器输入。所以这一步**不触发任何生产 skill**,直接跑命令消费队列即可。(对照:④ MG / ⑤ AI 再现才需要栏目生产 skill 产内容;A_ROLL 就是口播本身。)
|
|
32
|
+
- **栏目只供「检索偏好」**:命中哪类素材、打什么标签、real_shot 还是 concept,走**栏目配置的 B-roll 偏好**(`~/.gitruck/columns/<id>.json` 的 `broll.column_tag_ids` / `material_class_policy` / `facet_defaults`)。用 `--column <id>` 选栏目,缺省取 config `defaultColumn`,再缺省内置默认栏目。**你不用手填这些**——`gtrk matrix` 读栏目配置自动注入;你只在用户明确要覆盖时才用 `--material-class` 等散参。
|
|
33
|
+
- **档位决定偏好是否生效**:命令先探身份档位——**internal(矩阵成员口)**才注入栏目检索偏好、支持 `concept`;**external(通用口)**服务端固定 `real_shot` + 有版权素材,栏目偏好与 `--material-class concept` 不适用(命令会警告或报错)。档位在结果 JSON 的 `memberType` 里,照它跟用户交代即可,别自己猜。
|
|
34
|
+
|
|
35
|
+
## 完整参数规格 —— 按需组合,没提就跑默认
|
|
36
|
+
|
|
37
|
+
**默认(`gtrk matrix --project <目录>`,`--lay 1`)已是给多数人调好的**:消费派单、检索、铺 1 条候选轨。只在用户有具体诉求时才加参数。名字/取值照下表用。
|
|
38
|
+
|
|
39
|
+
| 用户想要 | CLI 怎么传 | 取值 · 默认 | 说明 |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| 消费派单铺 B-roll(主路) | `gtrk matrix --project <目录>` | 目录 · — | 读 `<目录>/split/dispatch.json` 的 `film_broll`,产候选清单 + 铺轨 |
|
|
42
|
+
| 单独搜个词补空槽(ad-hoc) | `gtrk matrix search "<词>"` | 字符串 · — | 不依赖派单的单条检索;`--out <file>` 落盘或缺省 stdout |
|
|
43
|
+
| 显式指定派单文件 | `--dispatch <path>` | 路径 · 由 `--project` 推 | 非标准布局兜底 |
|
|
44
|
+
| 按某栏目的检索偏好 | `--column <id>` | 栏目 id · config `defaultColumn`→内置默认 | 注入该栏目 `broll` 标签/material_class/facets(仅 internal 口生效) |
|
|
45
|
+
| 多铺几条候选来对比 | `--lay <n>` | 非负整数 · `1`(`0`=只出 plan 不铺轨) | 平铺 N 条候选轨,opencut 里小眼睛切换对比挑选 |
|
|
46
|
+
| 每段多给几个候选 | `--top-k <n>` | 整数 · 派单 `shots` 值(服务端上限 50) | 覆盖派单里每 query 的候选数上限 |
|
|
47
|
+
| 指定素材类型 | `--material-class <c>` | `real_shot` \| `concept` · 栏目策略 | 仅 internal 矩阵成员口;external 固定 real_shot、传 concept 报错 |
|
|
48
|
+
| 填充太满/太差调门槛 | `--score-floor <f>` | 浮点 0–1 · `0.2` | segment score 低于此值不采纳、槽位留空露主轨 |
|
|
49
|
+
| ad-hoc 结果落文件 | `--out <file>` | 路径 · 缺省 stdout | 仅 `search` 模式 |
|
|
50
|
+
| 机读(你必带) | `--json` | 开关 · 关 | 人读日志转 stderr,stdout 只出一行结果 JSON |
|
|
51
|
+
|
|
52
|
+
> **因势象形举例**:「B-roll 多铺几条候选让我挑」→ `--lay 3`;「这段填得太杂、卡严点」→ `--score-floor 0.35`;「每段多给点候选」→ `--top-k 12`;「先只出清单别铺轨」→ `--lay 0`;「单独给『深夜地铁失神』搜一组」→ `gtrk matrix search "exhausted commuter staring blankly on a late night subway" --project <目录> --json`。
|
|
53
|
+
|
|
54
|
+
## 执行(每次都带 `--json`)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-k K] [--column <id>] --json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- `--json`:人读日志走 stderr,**成功时 stdout 只有一行结果 JSON**:
|
|
61
|
+
`{ ok, mode:"plan", memberType:"internal"|"external", columnId?, planPath, lay:{ laidTracks:[…], laidClips, downloads:{preview,raw,reused,failed} }, counts:{ beats, queries, results, errors } }`
|
|
62
|
+
(`--lay 0` 时无 `lay` 字段;ad-hoc `search` 模式则是 `{ ok, mode:"search", results:[…], counts, outPath? }`)
|
|
63
|
+
- 产物:候选清单 `<目录>/split/broll-plan.json`(只含引用不含素材,`cover_url` 可预览、签名 url 约 24h 过期,过期重跑即重签),铺轨则把候选轨写回工程 `gtrk/project.gtrk`。
|
|
64
|
+
- **命令失败**(缺 `--dispatch`/派单、鉴权失败、全部 query 检索失败、参数越界等)→ **进程非 0 退出、报错打到 stderr、stdout 无 JSON**。先看退出码,非 0 就把 stderr 的报错如实回给用户,别当成功。
|
|
65
|
+
- 检索是分钟级(逐 beat 逐 query + 下载代理),耐心等命令返回。
|
|
66
|
+
|
|
67
|
+
## 跑完读结果、给用户交代
|
|
68
|
+
|
|
69
|
+
读 stdout 那行结果 JSON(字段按需读、读前判空),别只回「铺好了」:
|
|
70
|
+
|
|
71
|
+
- `counts`:`beats` 个 beat、`queries` 条检索(`errors` 条失败)、`results` 条候选——一句话概括这次铺了多大盘子。
|
|
72
|
+
- `memberType`:`internal` = 矩阵成员口(栏目偏好/concept 生效);`external` = 通用口(固定 real_shot + 有版权素材)——档位影响命中类型,若用户期望 concept 却是 external,明说「当前身份只能出实拍有版权素材」。
|
|
73
|
+
- `lay.laidTracks` / `lay.laidClips`:铺了几条候选轨、共几个颗粒(`--lay 0` 时无此字段,只出了 plan)。
|
|
74
|
+
- `lay.downloads`:`preview` 代理数 / `raw` **原片回落**数(无 preview 代理的候选回落下原片、体积大,服务端 backfill 后重跑本命令可换回代理)/ `reused` 复用 / `failed` 掉的槽位——`raw`/`failed` 非零时提一句。
|
|
75
|
+
- **单 query 失败是局部化的**(`counts.errors > 0` 但 `ok:true`):个别检索失败不拖垮整盘,如实说哪几段没检到、其余照铺。只有**全部 query 都失败**才会整体非 0 退出。
|
|
76
|
+
- 工程缺失/非 v1 → 命令会**告警跳过铺轨但仍产 plan**(stderr 有提示)——这时 `lay` 字段缺失,告诉用户 plan 已出、可在有工程的目录重跑铺轨。
|
|
77
|
+
|
|
78
|
+
## 关键检查点:让用户在 opencut 里挑选/调整(别跳过)
|
|
79
|
+
|
|
80
|
+
**这是本步的核心,不是可选收尾。** 铺轨产出的是**多条并列的候选 B-roll 轨**(`--lay N` 就是 N 条),不是定死的成片——挑哪条、要不要下原片、切点微调,都由用户在 opencut 里定。铺完**必须**这样提示用户,并**停下等他确认**:
|
|
81
|
+
|
|
82
|
+
- **在同合云桌面客户端(opencut / OpenCut Gitruck Edition)里打开这个工程**,B-roll 候选轨已经铺好。
|
|
83
|
+
- **用轨道头的「小眼睛」开关逐条切换对比**:看哪条候选最贴这段口播的情绪/画面,留下满意的、关掉不要的。
|
|
84
|
+
- 候选默认是 preview 代理(轻量预览);**下载原片属挑选后的动作**(客户端挑选 UI),确认要哪条再拉原片。
|
|
85
|
+
- 觉得填充有问题(太杂/太空/漏段)先别急着往下——**回来告诉我**,我按下面「常见情况」调参重铺。
|
|
86
|
+
|
|
87
|
+
**用户明确说「B-roll 就这样、可以了」之后**,才交棒 ④。别自作主张替他拍板往下冲。
|
|
88
|
+
|
|
89
|
+
## 常见情况处置(据结果因势象形调整,同目录可反复重跑对比)
|
|
90
|
+
|
|
91
|
+
| 情况 | 怎么做 |
|
|
92
|
+
|---|---|
|
|
93
|
+
| 想在多个候选里挑 | `--lay N` 多铺几条候选轨,opencut 小眼睛切换对比(N 越大越占轨、挑完可删多余轨) |
|
|
94
|
+
| 填充太差 / 命中太杂 | 调 `--score-floor`(调高更严、露主轨;调低更满、可能杂)重跑 |
|
|
95
|
+
| 每段候选太少不够挑 | 调 `--top-k`(每 query 给更多候选)重跑 |
|
|
96
|
+
| 某段有空槽 / 漏检 / 想补个特定意象 | `gtrk matrix search "<英文长句场景描述>" --project <目录> --json` 单条 ad-hoc 补检,把中意的候选记下、在 opencut 里手动铺进那段 |
|
|
97
|
+
| 只想先看清单不铺轨 | `--lay 0`(只产 `broll-plan.json`,不动工程) |
|
|
98
|
+
| 代理过期看不了预览 | 直接重跑本命令即重签 preview url(约 24h 过期) |
|
|
99
|
+
| 出现 raw 原片回落 / 体积大 | 提示用户;服务端 backfill 后重跑可换回轻量代理 |
|
|
100
|
+
| 期望 concept 却报 external 限制 | 如实说明当前身份(`memberType:external`)只出 real_shot 有版权素材,concept 需矩阵成员口 |
|
|
101
|
+
|
|
102
|
+
> **搜词规范**(ad-hoc `search` 与理解派单 queries 通用):用**英文长句场景描述**(5–12 词,谁+在哪+做什么),一条只装一个场景意象,**避多义/字面强的动词**("pointing"/"hunting" 会召回特写/猎人,改用场景语义如 "giving suggestions in a meeting")。派单里的 queries 已按此校准,你补检时照此写。
|
|
103
|
+
|
|
104
|
+
## 下一步(交棒 ④,别停在铺完)
|
|
105
|
+
|
|
106
|
+
用户确认 B-roll 满意后,**别停下等他再开口**——顺势按 SOP 交棒 ④ 铺 MG:触发 `/gtrk-mg`(它读 `dispatch.mg`、由栏目 MG 生产 skill 产 html-particle 颗粒,再跑 `gtrk mg` 把 MG **叠在你刚定好的 B-roll 之上**)。一句话交代即推进:「B-roll 底层定了,我接着把 MG 颗粒叠上去」。
|
|
107
|
+
|
|
108
|
+
- `dispatch.mg` 为空 → 跳过 ④,直接看 ⑤ AI 再现(`dispatch.ai_drama` 非空则触发 `/gtrk-ai-drama`)。
|
|
109
|
+
- 用户表示暂时只要 B-roll、先不往下 → 停在这,尊重他的节奏。
|
|
110
|
+
|
|
111
|
+
> 原则:**agent 替用户跑 CLI / 接力 skill,用户只对话**——别让用户自己去终端敲下一条 gtrk 命令;但**关键检查点(尤其 B-roll 铺完这一处)务必停下等用户确认**再进下一步。
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gtrk-mg
|
|
3
|
+
description: MG 动态图颗粒铺轨器——成片 SOP 第 ④ 步,在 B-roll 定下来之后,把栏目的 html-particle 动态图颗粒(透明叠加 / 满屏底层)叠铺到 B-roll 之上。先由栏目 MG 生产 skill 按派单各槽位产颗粒,再驱动 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 beat_track。当用户想「铺 MG 颗粒 / 上动态图 / 铺动效 / 给这段配动画铺进工程 / 把 MG 派单铺轨 / 消费 dispatch.mg」时使用本 skill。凡涉及把 MG 动态图颗粒铺进已剪好的成片工程,优先用本 skill 驱动 gtrk CLI,别让用户自己去终端敲 `gtrk mg`。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MG 动态图铺轨(gtrk-mg)
|
|
7
|
+
|
|
8
|
+
把 `gtrk split` 派好的 **MG 槽位**(`dispatch.mg`),先由**栏目的 MG 生产 skill** 产成 html-particle 动态图颗粒,再交给 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 `beat_track`——**叠在已经定下来的 B-roll 之上**。**CLI 是手(lint / 铺轨 / 写回),你是脑(认 SOP 位置、驱动栏目生产 skill、管用户检查点、判 lint 该不该硬铺)。栏目生产 skill 只产纯净颗粒、不知 gtrk 命令,由你驱动。**
|
|
9
|
+
|
|
10
|
+
> **本 skill 已含你需要的全部信息**(SOP 位置、业务分离、逐槽位工作流、命令参数、lint 铁律、排错、交棒)。命令参数细节以 `gtrk mg --help` 为准;颗粒的视觉/内容规范**不在这里**——那是栏目资产,由栏目 MG 生产 skill 全权负责。
|
|
11
|
+
|
|
12
|
+
## 你在成片 SOP 的哪一步(先认位置,别抢跑)
|
|
13
|
+
|
|
14
|
+
成片是**有序 SOP + 用户检查点**,不是并行一次铺完。全序:
|
|
15
|
+
|
|
16
|
+
> ① `/gtrk-oralcut`(剪口播)→ ② `/gtrk-splitter`(拆分派单出 `dispatch.json`)→ **③ `/gtrk-matrix` 先铺 B-roll → 用户 opencut 挑选/调整确认** → **④ 本 skill:再铺 MG(叠在 B-roll 之上)** → ⑤ `/gtrk-ai-drama`(最后上 AI 再现)→ `gtrk render` 收口
|
|
17
|
+
|
|
18
|
+
**你是第 ④ 步。MG 颗粒是叠层——底下那层 B-roll 必须先定死,否则 MG 会盖在还没挑好的画面上白铺。** 所以动手前先过前置硬门。
|
|
19
|
+
|
|
20
|
+
### 前置硬门(不满足就别铺,先回上一步)
|
|
21
|
+
|
|
22
|
+
1. **B-roll 已铺且用户已确认**:若 `dispatch.film_broll` 非空,必须 ③ 已跑过 `gtrk matrix` **且用户已在 opencut 里挑选/调整确认**。用户没确认 → **别铺 MG**,先回 ③ 让用户定 B-roll,明确告诉他「B-roll 定了我再上 MG」。(`dispatch.film_broll` 为空 = 本片没 B-roll 底层,可直接进 ④。)
|
|
23
|
+
2. **有 split 产物**:需要一个跑过 `gtrk split` 的产物目录(含 `split/dispatch.json` 与工程 `.gtrk`)。没有 → 先回 ② `/gtrk-splitter`。
|
|
24
|
+
3. **`dispatch.mg` 非空**:为空 = 本片没有 MG 车道 → **别硬造**,直接交棒 ⑤(见末节)。
|
|
25
|
+
4. **CLI 在**:`gtrk` 找不到 → 让用户装 `npm i -g @gitruck/cli@latest`(需先有 Node.js)。
|
|
26
|
+
|
|
27
|
+
## 业务分离:谁产颗粒(栏目),谁铺轨(本 skill)
|
|
28
|
+
|
|
29
|
+
**本框架 skill 不硬编任何栏目的视觉风格/生产内容。** MG 颗粒长什么样、用什么视觉语法,全由**栏目的 MG 生产 skill** 决定;本 skill 只负责「在对的时候、按派单、驱动它产,然后把成品铺进工程」。
|
|
30
|
+
|
|
31
|
+
**车道 → 栏目生产 skill 的解析(照此,别猜)**:读**有效栏目配置**的 `style.skills[]`(配置文件 `~/.gitruck/columns/<id>.json`;栏目 id 由 `--column <id>` 或 config `defaultColumn` 选取,零配置 = 内置默认栏目 **real-roam-viz**)。在 `style.skills[]` 里取 **`produces` 归一后(旧 `RRV_MG` → `MG`)等于 `MG`** 的条目 → 触发它 `ref` 指向的 skill 产颗粒。
|
|
32
|
+
- 命中多条 → 按栏目约定取其一(一般栏目只登记一个 MG 生产 skill)。
|
|
33
|
+
- 条目带 `routing:"none"`(管线外产物,如封面)→ 跳过,不当 MG 生产 skill。
|
|
34
|
+
- **无匹配** = 本栏目没有 MG 生产 skill → 别硬铺;告诉用户「本栏目还没有 MG 生产 skill,先用 `/gtrk-style-maker` 建一个,或换个已配置的栏目(`--column`)」。
|
|
35
|
+
|
|
36
|
+
> **生产 skill 是栏目的纯净资产**:它只懂本栏目的视觉语法、只产 html-particle 颗粒,**不知道 gtrk 命令、不知道产物落哪**。由本 skill 驱动它、并**由本 skill 负责把它产出的颗粒存到 `gtrk mg` 要读的路径**:`<产物目录>/mg/<composition_id>.html`。默认栏目 real-roam-viz 的生产 skill 即 `real-roam-viz`(produces=MG)。
|
|
37
|
+
|
|
38
|
+
## 逐槽位工作流(产 → lint → 铺,循环到铺满)
|
|
39
|
+
|
|
40
|
+
### 1. 看板起手:先看 `dispatch.mg` 有哪些槽位、铺到哪了
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
gtrk mg status --project "<split产物目录>" --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- 汇总 MG 流水线:`dispatch.mg` beat 槽位总数 / 已产源 HTML 数 / 已铺进 `.gtrk` 数,并**逐 beat 标注**(缺 HTML / 已产未铺 / 已铺)。
|
|
47
|
+
- 每个槽位有 `composition_id`(主颗粒 = `<工程slug>-<beatId>`;`overlay` 叠层派生颗粒 = `<工程slug>-<beatId>-aux<n>`)与 `handoff`(`theme` / `duration_hint`(秒)/ `category` 等)。**这些是你交给栏目生产 skill 的产片订单。**
|
|
48
|
+
|
|
49
|
+
### 2. 逐槽位产颗粒(驱动栏目 MG 生产 skill)
|
|
50
|
+
|
|
51
|
+
对每个「缺 HTML」的槽位:把它的 `composition_id` + `handoff`(`theme` / `duration_hint` / `category`:`overlay` 透明叠加·不挡主体 / `fullscreen` 不透明满屏)+ beat 语义上下文,**交给第「业务分离」节解析出的栏目 MG 生产 skill 产一颗 html-particle**。产完把颗粒**存到 `<产物目录>/mg/<composition_id>.html`**(`gtrk mg` 就从这里读)。
|
|
52
|
+
- **`-aux<n>` 叠层颗粒同样处理**:`gtrk split` 若在某 beat 的 `aux_layers` 派了 `overlay`,会派生 `<beat>-aux<n>` 进 `dispatch.mg`(多为 B-roll 底轨之上叠透明概念图解)——照样产、照样存到对应 `composition_id.html`。
|
|
53
|
+
- **category 决定叠法**:`overlay` 颗粒背景透明、盖在 B-roll 上不挡主体;`fullscreen` 不透明满屏。最终透明度由颗粒 HTML 根 `background` 反推的 `opaque` 定,生产 skill 要让二者自洽(lint 会查)。
|
|
54
|
+
|
|
55
|
+
### 3. lint 门:铺之前先单测每颗(不过就退回生产 skill,别硬铺)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
gtrk mg lint "<产物目录>/mg/<composition_id>.html" --dispatch "<产物目录>/split/dispatch.json"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- 纯本地静态校验颗粒 HTML 的**六铁律机器可判定子集**:`<template>` 包裹、`data-composition-id` + 1920×1080、`gsap.timeline({ paused: true })`、`window.__timelines` 注册、无 `Math.random` / `Date.now`(可逐帧 seek 的确定性)、自包含无相对外链、根 `background` 与 `opaque` 自洽…;给 `--dispatch` 会额外校验 `composition_id` 命中派单。
|
|
62
|
+
- **不过(非 0 退出、逐条报因)→ 把报错原样丢回栏目 MG 生产 skill 修,重产重 lint,别硬铺**。铺一颗不合规颗粒会污染工程。
|
|
63
|
+
- 只想批量干校验不写回:`gtrk mg --project <dir> --lint-only`。
|
|
64
|
+
|
|
65
|
+
### 4. 铺轨:全槽位就绪后铺进工程(叠在 B-roll 之上)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
gtrk mg --project "<split产物目录>" --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- 读 `dispatch.mg` → 逐 beat 从 `<project>/mg/<composition_id>.html` 取源颗粒 → lint → 铺进 `.gtrk` 的 `beat_track`,把 `struct_meta.mg` 原子写回。**幂等**:重铺先剥旧自产轨再 append,用户在 opencut 手加的轨零连带。
|
|
72
|
+
- `--json` 输出:`{ ok, mode:"lay", laid:[…], skipped:[…], … }`。
|
|
73
|
+
- **`laid`** = 铺成的 `composition_id`。
|
|
74
|
+
- **`skipped`** = 缺 HTML / lint 失败的 beat(不拦其余)——**回步骤 2 补产、重铺**,别当没看见。
|
|
75
|
+
- **只铺单个 beat**:`--only <beatId>`(主颗粒 + 其 `-aux<n>` 叠层一并选),适合迭代改单段。
|
|
76
|
+
|
|
77
|
+
### 5. 循环到铺满
|
|
78
|
+
|
|
79
|
+
多 MG 槽位就**循环「产 → lint → 铺」直到 `dispatch.mg` 全部铺满**(`gtrk mg status` 逐 beat 全标「已铺」、`gtrk mg` 的 `skipped` 为空)。
|
|
80
|
+
|
|
81
|
+
> 旧名 `gtrk rrv` 是去品牌化前的弃用别名(仍能跑但会打提示)——**一律用 `gtrk mg`**。
|
|
82
|
+
|
|
83
|
+
## 读结果、给用户交代(别只说「铺好了」)
|
|
84
|
+
|
|
85
|
+
- **铺了哪些**:`laid[]` 的 `composition_id`,对应哪些 beat;其中哪些是 `overlay` 透明叠加(盖在 B-roll 上)、哪些是 `fullscreen` 满屏。
|
|
86
|
+
- **没铺上的**:`skipped[]` + 原因(缺 HTML 还是 lint 失败)——如实说,别谎报全铺;已补产重铺的说清楚补了哪几颗。
|
|
87
|
+
- 想在 opencut 里精修颗粒(手调参数/时长)→ 提示用户可打开工程手调;改完不影响本轨幂等重铺。
|
|
88
|
+
|
|
89
|
+
## 交棒 ⑤(别停在铺完)
|
|
90
|
+
|
|
91
|
+
`dispatch.mg` 全铺满、`gtrk mg status` 全绿后**别收工**——按 SOP 顺势接力到第 ⑤ 步 **AI 再现**:
|
|
92
|
+
- `dispatch.ai_drama` 非空 → 触发 `/gtrk-ai-drama`(持通用分镜 craft + 读栏目 style-lock 产风格化分镜提示词,用户去 Sora / Veo / 可灵等外部平台出片回铺;**此车道产物即提示词、无 gtrk 命令**)。一句话交代即推进:「MG 颗粒已叠铺完,我接着安排最后一步 AI 再现」。
|
|
93
|
+
- `dispatch.ai_drama` 为空 → 本片没有 AI 车道,可直接 `gtrk render` 收口成片。
|
|
94
|
+
|
|
95
|
+
除非用户表示只铺这一版 MG、暂不往下。
|
|
96
|
+
|
|
97
|
+
> 原则:**agent 替用户跑 CLI / 接力 skill、驱动栏目生产 skill,用户只对话**——别让用户自己去终端敲 `gtrk mg`,也别让用户手动去 call 栏目生产 skill。
|
|
@@ -121,3 +121,9 @@ gtrk oralcut "<毛片绝对路径>" [--script "<txt路径>"] [--preset steady|co
|
|
|
121
121
|
- **PR/FCP**:Premiere 里「文件 > 导入」`files.xml[0]`(…/xml/premiere.xml)。
|
|
122
122
|
|
|
123
123
|
产物目录名形如 `<毛片名>-video-project-<时间戳>`,靠文件名 + 时间认出是哪一次剪辑、互不覆盖。
|
|
124
|
+
|
|
125
|
+
## 下一步(自动接力,别停在交工)
|
|
126
|
+
|
|
127
|
+
口播工程剪好只是成片一条龙的第一站。确认 `ok=true`、`files.gtrk[0]` 与 transcript 就绪后,**别停下等用户开口**——顺势接力到视觉拆分:触发 `/gtrk-splitter`(把这条工程 + transcript 拆成 beat 级分镜派单,agent 再跑 `gtrk split` 产 `dispatch.json`),驱动后续各车道生产+铺轨。一句话交代即推进:「口播工程已就绪,我接着把它拆成分镜派单」,除非用户表示只要这版剪辑工程、暂不往下。
|
|
128
|
+
|
|
129
|
+
> 原则:**agent 替用户跑 CLI / 接力 skill,用户只对话**——别让用户自己去终端敲下一条 gtrk 命令。
|