@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/README.md
CHANGED
|
@@ -11,19 +11,22 @@
|
|
|
11
11
|
- **一条命令出三方工程**:上传口播毛片 → 云端智能剪辑(剪废话 / 重复 / 长停顿)→ 拉回**客户端(gtrk)+ 剪映 + PR/FCP** 三方工程文件 → 自动打开产物目录。
|
|
12
12
|
- **云端做重活、本地只装配**:识别、剪辑、对齐都在云端;本地只拿结果,**源视频不出本地**(路径写进工程、本地打开直接认素材)。
|
|
13
13
|
- **为 agent 而生**:配套 skill `/gtrk-oralcut`,在 Claude Code 等工具里一句「帮我剪个口播」就能发起,CLI 是手、agent 是脑。
|
|
14
|
-
-
|
|
14
|
+
- **通用工具箱**:单 binary + 平行子命令——每个 `gtrk <xyz>`(oralcut / split / mg / matrix / render…)都是一个**业务无关的通用驱动器/工具**,成片流程要哪个启哪个、用不到放着;后续可长更多驱动器。对标飞书 `lark-cli`。目前用它做人文社科视频,但设计上不绑任何栏目。
|
|
15
15
|
|
|
16
16
|
## 功能
|
|
17
17
|
|
|
18
18
|
| | 命令 | 做什么 |
|
|
19
19
|
|---|---|---|
|
|
20
20
|
| 🎬 | `gtrk oralcut <毛片>` | 智能口播剪辑闭环:一次出 gtrk + 剪映 + PR 三方工程,自动打开 |
|
|
21
|
-
| ✂️ | `gtrk split [拆分稿]` | 视觉拆分派单器:成片 × transcript 投影 → beat 分镜校验落地(`struct_meta.split` + `dispatch.json
|
|
21
|
+
| ✂️ | `gtrk split [拆分稿]` | 视觉拆分派单器:成片 × transcript 投影 → beat 分镜校验落地(`struct_meta.split` + `dispatch.json`),驱动四车道派单;`--column <id>` 按栏目词表校验 |
|
|
22
22
|
| ⚙️ | `gtrk init` | 引导式一次性配置(API Key + 剪映草稿目录),之后免管 |
|
|
23
23
|
| 🩺 | `gtrk doctor` | 体检:配置 / 云端连通 / 剪映目录 / 运行时一键自检 |
|
|
24
|
-
| 🤖 | `gtrk skills install` | 把
|
|
24
|
+
| 🤖 | `gtrk skills install` | 把 6 个 CLI 自带 skill(`/gtrk-oralcut`·`/gtrk-splitter`·`/gtrk-matrix`·`/gtrk-mg`·`/gtrk-ai-drama`·`/gtrk-style-maker`)装进 Claude Code |
|
|
25
25
|
| ⬆️ | `gtrk upgrade` | 升级 CLI 到最新版 + 刷新 skill(配置保留);`--check` 只查不装 |
|
|
26
|
-
|
|
|
26
|
+
| 🎞️ | `gtrk render` | 本地渲染 gtrk 工程(EDL)→ 成片 mp4(需 ffmpeg) |
|
|
27
|
+
| 🔎 | `gtrk matrix` | B-roll 检索+**候选铺轨**:消费 FILM_BROLL 派单 → 产候选清单 + 下载 preview 代理铺 N 条候选轨(`--lay N` 默认 1,opencut 打开即可用轨道小眼睛对比;`--lay 0` 只出清单);`matrix search "<词>"` 单条 ad-hoc |
|
|
28
|
+
| 🎨 | `gtrk mg` | MG 动态图颗粒铺轨:消费 MG 派单 → 把 html-particle 颗粒(透明叠加 / 满屏底层,由你栏目的 MG 生产 skill 所产)铺进 `.gtrk` 的 beat_track;`mg lint <颗粒.html>` 六铁律静态校验、`mg status --project <dir>` 编排看板(缺 HTML / 已产未铺 / 已铺);aux 叠层颗粒同段多铺(一 beat 派生主 + `-aux<n>`)。旧名 `gtrk rrv` 保留为弃用别名 |
|
|
29
|
+
| 🚧 | `struct` | (规划中)已有 gtrk 转三方工程 |
|
|
27
30
|
|
|
28
31
|
---
|
|
29
32
|
|
|
@@ -56,6 +59,42 @@ gtrk oralcut "D:/素材/某选题-原始口播.mp4" --script "D:/素材/某选
|
|
|
56
59
|
|
|
57
60
|
> **重复装不会重复填配置**:`gtrk install` / `gtrk init` 检测到已配好就默认保留、只刷新 skill;想改配置加 `--reconfigure`(Key / 剪映目录也都能回车沿用)。
|
|
58
61
|
|
|
62
|
+
## 操作地图:从零到成片
|
|
63
|
+
|
|
64
|
+
> **你只管对话,敲 CLI 的活交给 agent。** 下面是一条龙的走法——先做什么、后做什么、遇到情况怎么办。
|
|
65
|
+
|
|
66
|
+
**一次性准备(装一次,之后免管)**
|
|
67
|
+
|
|
68
|
+
1. **装 CLI**:`npm i -g @gitruck/cli@latest && gtrk install`(装 gtrk + skill + 填 API Key,一次配好)。
|
|
69
|
+
2. **(可选)建栏目风格**:想要自己的视觉调性 / 词表,对 agent 说「**建我栏目的风格体系**」(`/gtrk-style-maker` 访谈式帮你落成你自己的 skill 家族 + 栏目配置)。**不建就用默认厨房**,端到端照常跑。
|
|
70
|
+
|
|
71
|
+
**每片一条龙(有先后的 SOP,对 agent 说话、每步你可介入——不是一次性并行铺完)**
|
|
72
|
+
|
|
73
|
+
各车道**按次序铺、每步留检查点**:先铺 B-roll 定底层 → 你调好 → 再把 MG 叠上去 → 最后上 AI 再现。你对话推进每一步,agent 替你跑对应命令。
|
|
74
|
+
|
|
75
|
+
| 步 | 你对 agent 说 | agent 替你做 | 你可以介入 |
|
|
76
|
+
|:--:|---|---|---|
|
|
77
|
+
| ① | 「帮我把这条口播**剪一版**」 | `/gtrk-oralcut` → `gtrk oralcut` → 三方工程 + transcript | — |
|
|
78
|
+
| ② | 「接着**拆分镜派单**」 | `/gtrk-splitter` → `gtrk split` → `dispatch.json` 四车道 | 核对派单结果 |
|
|
79
|
+
| ③ | 「**先铺 B-roll**」 | `/gtrk-matrix` → `gtrk matrix` → 候选轨铺入 | **opencut 里挑选/调整 B-roll**(小眼睛切换对比) |
|
|
80
|
+
| ④ | 「B-roll 定了,**铺 MG**」 | `/gtrk-mg` → `gtrk mg` → MG 颗粒叠在 B-roll 之上 | 精修颗粒(opencut 手调) |
|
|
81
|
+
| ⑤ | 「**上 AI 再现**」 | `/gtrk-ai-drama`(skill,无命令)→ 四段描述稿(中英分块) | 外部平台出片、片段手动回铺 |
|
|
82
|
+
| ⑥ | 「**渲成片**」 | `gtrk render`(或 opencut 打开精修) | 成片 mp4 |
|
|
83
|
+
|
|
84
|
+
> 次序有理由:**MG 叠在 B-roll 之上**,要先把底层 B-roll 定下来、你满意了再铺 MG;AI 再现最后上。用不到的车道跳过(`dispatch` 里该队列为空就不铺)。
|
|
85
|
+
|
|
86
|
+
**遇到情况怎么办**
|
|
87
|
+
|
|
88
|
+
| 情况 | 怎么做(跟 agent 说,或 agent 自动) |
|
|
89
|
+
|---|---|
|
|
90
|
+
| 只想要剪辑工程、暂不做视觉 | 到「剪一版」就停:「先只要剪辑工程」 |
|
|
91
|
+
| 报告丢了 / 换台机器再拉产物 | 「用 taskId 取回上次的」→ `gtrk oralcut-result <taskId>`(跳过重跑云端) |
|
|
92
|
+
| 想在几个 B-roll 候选里挑 | 「B-roll 多铺几条候选」→ `gtrk matrix --lay N`,opencut 里用轨道小眼睛切换对比 |
|
|
93
|
+
| B-roll 填充太差 / 有空槽 | 调 `--score-floor` / `--top-k` 重跑,或「单独搜个词」→ `matrix search "<词>"` 补 |
|
|
94
|
+
| 画面 / 颗粒要逐帧精修 | opencut 打开工程手调(agent 铺好的是**可编辑工程**,不是死片) |
|
|
95
|
+
| 连不上 / 配置出问题 | 「体检一下」→ `gtrk doctor`(配置 / 云端 / 剪映目录 / 版本一键自检) |
|
|
96
|
+
| 有新版 | 「升级」→ `gtrk upgrade`(升 CLI + 刷 skill,配置保留) |
|
|
97
|
+
|
|
59
98
|
## 升级
|
|
60
99
|
|
|
61
100
|
**CLI + skill**(配置原样保留):
|
|
@@ -75,27 +114,68 @@ irm https://api.ai-mcn.tv:9000/broadcast/exe/install.ps1 | iex
|
|
|
75
114
|
|
|
76
115
|
## 给 AI Agent 用
|
|
77
116
|
|
|
78
|
-
`gtrk install` 已经把
|
|
117
|
+
`gtrk install` 已经把 6 个 CLI 自带 skill(`/gtrk-oralcut`·`/gtrk-splitter`·`/gtrk-matrix`·`/gtrk-mg`·`/gtrk-ai-drama`·`/gtrk-style-maker`)装进 `~/.claude/skills`(单独装用 `gtrk skills install`)。
|
|
79
118
|
|
|
80
119
|
然后在 Claude Code 里直接说「**帮我把这条口播剪一版**」或打 `/gtrk-oralcut`,agent 会问清毛片 / 文稿 / 节奏,调 `gtrk oralcut --json` 跑通闭环、验证产物、把三端打开方式回给你。完整可移植 playbook 见 [`AGENT.md`](./AGENT.md)。
|
|
81
120
|
|
|
82
|
-
|
|
121
|
+
**一条龙都交给 agent**:不止剪口播——接着说「拆个分镜」「铺 B-roll」「铺 MG 颗粒」「渲成片」,agent 会配合各车道生产 skill 调 `gtrk split` / `gtrk matrix` / `gtrk mg` / `gtrk render` 跑完整条 **成片管线**。**你只管对话、敲 CLI 的活交给 agent**——下面的「命令参考」是给 agent 查参数用的,不用你自己去终端敲。
|
|
83
122
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
123
|
+
### agent 能驱动的能力(skill 驱动命令)
|
|
124
|
+
|
|
125
|
+
**每个功能 = 一个 skill(脑,你触发、懂 SOP 位置与用户交互)驱动一个 gtrk 命令(手,确定性机械活)。** 成片是**有先后的 SOP、每步用户可介入**,不是一次性并行铺完——`/gtrk-X` skill 负责在对的时机、带着你的确认,去跑 `gtrk X`:
|
|
126
|
+
|
|
127
|
+
| SOP | 驱动 skill(你对 agent 说) | 底层命令(agent 跑) | 做什么 |
|
|
128
|
+
|:--:|---|---|---|
|
|
129
|
+
| ① | `/gtrk-oralcut` | `gtrk oralcut` | 智能剪口播 → 客户端/剪映/PR 三方工程 + transcript |
|
|
130
|
+
| ② | `/gtrk-splitter` | `gtrk split` | 拆分派单 → `dispatch.json`(A_ROLL/MG/AI_DRAMA/FILM_BROLL 四车道) |
|
|
131
|
+
| ③ | `/gtrk-matrix` | `gtrk matrix` | **先铺 B-roll** 候选轨 → **用户调整/挑选**(opencut 小眼睛切换) |
|
|
132
|
+
| ④ | `/gtrk-mg` | `gtrk mg` | **再铺 MG 颗粒**(叠在调好的 B-roll 之上) |
|
|
133
|
+
| ⑤ | `/gtrk-ai-drama` | (无命令,纯创作) | **最后上 AI 再现**:产四段描述稿(故事背景/角色/分镜/原文,中英分块)→ 任意外部平台出片、手动回铺(产物即描述文本、无机械尾巴,同 `/gtrk-style-maker` 只 skill 无命令) |
|
|
134
|
+
| — | `/gtrk-style-maker` | (无命令,建栏目) | 一次性访谈式建你栏目的风格体系(skill 家族 + 栏目配置,见下节) |
|
|
135
|
+
| — | (收口) | `gtrk render` | 本地渲染 gtrk 工程 → 成片 mp4 |
|
|
136
|
+
|
|
137
|
+
> **skill 与命令的区别**:`/gtrk-mg` 是**脑**——懂它在 SOP 第 ④ 步(B-roll 定了才铺 MG)、带用户确认、按栏目配置解析该产哪种颗粒;`gtrk mg` 是**手**——纯确定性 lint + 铺轨。你对话触发 skill,skill 替你跑命令。
|
|
138
|
+
> 上面 6 个 `/gtrk-X` 都是 **CLI 自带框架 skill**(`gtrk skills install` 装)——`/gtrk-matrix`·`/gtrk-mg` 各驱动一个 gtrk 命令,`/gtrk-ai-drama`·`/gtrk-style-maker` 是纯创作 skill(无命令)。栏目专属的**视觉风格/生产内容**另由你栏目的生产 skill(`/gtrk-style-maker` 产、经栏目配置 `style.skills` 绑定)供,不写死在这些框架 skill 里。
|
|
139
|
+
|
|
140
|
+
上面三个是 **CLI 自带的框架 skill**(`gtrk skills install` 装,业务无关)。
|
|
141
|
+
|
|
142
|
+
**各车道的具体视觉/内容怎么产**——MG 动态图长什么样、AI 再现什么调性——不写死在 CLI 里,而由**你自己栏目的生产 skill** 提供(用 `/gtrk-style-maker` 访谈式产出、留本地)。它们经**栏目配置 `style.skills[].produces`**(值 = 车道名)绑定,`gtrk mg` / `gtrk matrix` 等**通用驱动器**据此消费。**驱动方向 = CLI 驱动栏目 skill**:栏目 skill 只供风格/内容、不含任何「跑哪条命令」的编排职责;框架只认车道与管线接口,画面风格永远归你的栏目。不建栏目就用内置默认,端到端照常跑。
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 栏目与风格:两层结构
|
|
147
|
+
|
|
148
|
+
> **栏目配置是装修厨房,成片是每天做菜。你不会每做一道菜先重新装修一遍厨房,但每道菜确实都在你装修好的厨房里做。**
|
|
149
|
+
|
|
150
|
+
整个体系分两层,时间尺度完全不同:
|
|
151
|
+
|
|
152
|
+
**【栏目层 · 一次性/低频】= 建栏目(装修厨房)**
|
|
153
|
+
跑 `/gtrk-style-maker`(meta skill),它通过启发式访谈帮你想清楚**你自己的**视觉语法——不预设任何维度:不假设你有叙事结构、有主题系统、视觉分动画/实拍,你的维度和取值全部由你自己定义。产出:
|
|
154
|
+
|
|
155
|
+
- 你自己的可执行 skill 家族(落 `~/.claude/skills`,黑盒、留本地)
|
|
156
|
+
- 栏目内共享词表(家族各 skill 引用,防多处定义漂移)
|
|
157
|
+
- 栏目配置 `~/.gitruck/columns/<id>.json`(词表 vocab + B-roll 检索偏好 + style 引用清单)
|
|
158
|
+
|
|
159
|
+
**【成片层 · 每片跑】= 做菜(流程形状不变)**
|
|
160
|
+
剪口播 → 拆文稿 → 派单(B-roll 检索 / 动效 / 再现)→ 装配 → 渲染。每一步显式消费当前栏目配置:拆文稿按你的词表校验(`--column <id>` 或 config `defaultColumn`),B-roll 检索按你栏目的检索偏好(`broll.column_tag_ids` 栏目标签 / `material_class_policy` / facets),各车道走你自己的生产 skill。
|
|
161
|
+
|
|
162
|
+
**不建栏目?直接用默认"厨房"。** 零配置 = 内置默认栏目,端到端照常跑通,行为与配置化之前逐字节一致——栏目层是可选资产,不是必经关卡。
|
|
163
|
+
|
|
164
|
+
**管线契约**:框架对审美零预设、对管线接口全权威。产物要进渲染管线的 skill 须满足对应契约(见 [`contracts/`](./contracts/README.md),如 HTML 动画颗粒的 `gsap-emit v1`);契约只约束机器可判定的管线属性,画面长什么样永远归你。
|
|
87
165
|
|
|
88
166
|
---
|
|
89
167
|
|
|
90
168
|
## 配置
|
|
91
169
|
|
|
92
|
-
`gtrk init` 把配置写到 `~/.
|
|
170
|
+
`gtrk init` 把配置写到 `~/.gitruck/config.json`(用户级统一目录,config / 缓存 / ffmpeg / 栏目配置全在 `~/.gitruck/`)。读取优先级:**环境变量 / `.env` > `init` 持久配置 > 默认根地址**。
|
|
93
171
|
|
|
94
172
|
| 项 | 来源 | 说明 |
|
|
95
173
|
|---|---|---|
|
|
96
174
|
| `GITRUCK_API_KEY` | env / init | 鉴权 Header `Authorization` 的**裸值**(非 Bearer) |
|
|
97
175
|
| `GITRUCK_API_BASE` | env / init | API 根地址,默认 `https://api.ai-mcn.tv:10000` |
|
|
98
176
|
| 剪映草稿目录 | init / 自动探测 / `--jianying-draft-dir` | 决定剪映草稿落哪、能否直接打开 |
|
|
177
|
+
| `defaultColumn` | config.json 手填 | 缺省栏目配置 id(`gtrk split` 未传 `--column` 时用它;再缺省 = 内置默认栏目) |
|
|
178
|
+
| 栏目配置 | `~/.gitruck/columns/<id>.json` | 一栏目一文件;由 `/gtrk-style-maker` 生成登记,也可手写 |
|
|
99
179
|
|
|
100
180
|
非交互配置(脚本 / CI):
|
|
101
181
|
|
|
@@ -147,6 +227,60 @@ gtrk init --api-key <KEY> --jianying-draft-dir auto -y
|
|
|
147
227
|
|
|
148
228
|
> 取结果需用**提交该任务的同一账号** API Key(异账号 / 已删任务报 `TASK_NOT_FOUND`)。报告存于任务记录、长期可取;底层产物文件约 **60 天**后被清理,届时仍能取回报告、但产物下载会 404(命令会提示、并照常落盘报告)。
|
|
149
229
|
|
|
230
|
+
### `gtrk split [拆分稿]` — 视觉拆分派单器
|
|
231
|
+
|
|
232
|
+
成片 × transcript 投影 → beat 分镜。**无 positional = 导出投影视图**(把当前 `.gtrk` 时间线 × transcript 投影成 beat 视图,供拆分/校对,不写回);**带拆分稿 = 校验落地**(校验拆分稿机器契约 → 投影出 beat 时码 → 原子写回 `struct_meta.split` + 产 `split/dispatch.json` 派单清单,驱动 A_ROLL / MG / AI_DRAMA / FILM_BROLL 四车道)。时码永远归 CLI(拆分稿只描述「哪段做什么」、不写时码)。
|
|
233
|
+
|
|
234
|
+
| 参数 | 作用 | 缺省 |
|
|
235
|
+
|---|---|---|
|
|
236
|
+
| `--project <dir>` | oralcut 产物目录(自动定位 `gtrk/project.gtrk` 与 `transcript/transcript.json`) | — |
|
|
237
|
+
| `--gtrk <path>` / `--transcript <path>` | 显式指定工程 / transcript(非标准布局兜底) | 由 `--project` 推 |
|
|
238
|
+
| `--column <id>` | 栏目配置 id(按你栏目词表校验 lane / category / produces) | config `defaultColumn` → 内置默认栏目 |
|
|
239
|
+
| `--md` | 落地时额外渲染人读稿 `split/visual-split.md`(由 JSON 单向渲染) | 关 |
|
|
240
|
+
| `--words` | 视图模式附字级明细 | 只出句级 |
|
|
241
|
+
| `--json` | 机读:stdout 只输出结果 JSON | 关 |
|
|
242
|
+
|
|
243
|
+
> 落地产物 `dispatch.json` 三队列 → 下游消费:`mg`(MG 颗粒)→ `gtrk mg` 命令、`film_broll` → `gtrk matrix` 命令、`ai_drama` → `/gtrk-ai-drama` skill(产四段描述稿·中英分块,纯创作、无命令)。配套 skill `/gtrk-splitter` 产拆分稿。
|
|
244
|
+
|
|
245
|
+
### `gtrk matrix` — B-roll 检索 + 候选铺轨
|
|
246
|
+
|
|
247
|
+
**无 positional = 派单消费**:读 `split/dispatch.json` 的 `film_broll` 队列 → 双口检索 → 产候选清单 `split/broll-plan.json` + 下载 preview 代理、在工程里平铺 N 条候选轨(opencut 打开即可用轨道小眼睛对比挑选)。**`matrix search "<query>"` = 单条 ad-hoc 检索**(不依赖派单)。
|
|
248
|
+
|
|
249
|
+
| 参数 | 作用 | 缺省 |
|
|
250
|
+
|---|---|---|
|
|
251
|
+
| `--project <dir>` | oralcut 产物目录(定位 `split/dispatch.json` 与产物落点) | — |
|
|
252
|
+
| `--dispatch <path>` | 显式指定 `dispatch.json` | 由 `--project` 推 |
|
|
253
|
+
| `--column <id>` | 栏目配置 id(按你栏目 B-roll 检索偏好:标签 / material_class / facets) | config `defaultColumn` → 内置默认栏目 |
|
|
254
|
+
| `--lay <n>` | 候选铺轨数:平铺 N 条 B-roll 候选轨(`0` = 只出 plan 不铺轨) | `1` |
|
|
255
|
+
| `--top-k <n>` | 每 query 候选数上限(覆盖派单 shots;服务端上限 50) | 派单值 |
|
|
256
|
+
| `--material-class <c>` | 素材类型 `real_shot` \| `concept`(仅矩阵成员口;覆盖栏目策略) | 栏目策略 |
|
|
257
|
+
| `--score-floor <f>` | 填充置信度地板:segment score 低于此值不采纳、留空露主轨 | `0.2` |
|
|
258
|
+
| `--out <file>` | ad-hoc 模式结果落文件 | stdout |
|
|
259
|
+
| `--json` | 机读:stdout 只输出结果 JSON | 关 |
|
|
260
|
+
|
|
261
|
+
> preview 代理 url 约 24h 过期,重跑即重签。
|
|
262
|
+
|
|
263
|
+
### `gtrk mg` — MG 动态图颗粒(铺轨 / lint / status)
|
|
264
|
+
|
|
265
|
+
消费 `gtrk split` 落地的 `dispatch.mg` 派单,把**你栏目的 MG 生产 skill** 产的 html-particle 颗粒铺进 `.gtrk` 工程的 `beat_track`。三种模式按首个 positional 分派:**无参 = 铺轨**、`mg lint <file>` = 单文件校验、`mg status` = 编排看板。旧名 `gtrk rrv` 保留为弃用别名(会打提示,建议改用 `gtrk mg`)。
|
|
266
|
+
|
|
267
|
+
| 参数 | 作用 | 缺省 |
|
|
268
|
+
|---|---|---|
|
|
269
|
+
| `--project <dir>` | oralcut / split 产物目录(定位 `split/dispatch.json` 与工程 `.gtrk`) | — |
|
|
270
|
+
| `--dispatch <path>` | 显式指定 `dispatch.json`(非标准布局兜底) | 由 `--project` 推 |
|
|
271
|
+
| `--only <beat>` | 只跑单 beat(主 + 其 `-aux<n>` 叠层颗粒一并选) | 全部 |
|
|
272
|
+
| `--lint-only` | 只 lint 校验,不铺轨不写回 | 关 |
|
|
273
|
+
| `--json` | 机读:人读日志转 stderr,stdout 只输出结果 JSON | 关 |
|
|
274
|
+
|
|
275
|
+
- **铺轨**(`gtrk mg --project <dir>`):读 `dispatch.mg` → 逐 beat 从 `<project>/mg/<composition_id>.html` 取源颗粒 → lint → 铺进 `beat_track`,把 `struct_meta.mg` 原子写回 `.gtrk`(幂等登记自产轨 `lay_tracks`,重铺先剥旧自产物再 append、用户手加轨零连带)。「透明叠加 / 满屏底层」由颗粒 HTML 根 `background` 反推的 `opaque` 决定。缺 HTML / lint 失败的 beat 计入 `skipped`、不拦其余。
|
|
276
|
+
- **lint**(`gtrk mg lint <颗粒.html> [--dispatch <path>]`):纯本地静态校验颗粒 HTML 的六铁律机器可判定子集(`<template>` 包裹、`data-composition-id` + 1920×1080、`gsap.timeline({ paused: true })`、`window.__timelines` 注册、无 `Math.random` / `Date.now`、自包含无相对外链、根 `background` 与 `opaque` 自洽…);给 `--dispatch` 时校验 `composition_id` 命中派单。任一致命项非 0 退出并逐条报因。
|
|
277
|
+
- **status**(`gtrk mg status --project <dir>`):汇总 MG 流水线——`dispatch.mg` beat 总数 / 已产源 HTML 数 / 已铺进 `.gtrk` 数,并逐 beat 标注(缺 HTML / 已产未铺 / 已铺)。
|
|
278
|
+
|
|
279
|
+
`--json` 输出:`{ ok, mode:"lay"|"lint"|"status", … }`(各模式带对应字段,如铺轨的 `laid` / `skipped`、status 的逐 beat 状态)。
|
|
280
|
+
|
|
281
|
+
> **aux 叠层颗粒**:`gtrk split` 若在某 beat 的 `aux_layers` 派了 `overlay` 颗粒,会派生 `<beat>-aux<n>` 合成条目进 `dispatch.mg`——`gtrk mg` 一并铺,实现「同段既有底轨主视觉、又叠透明概念图解」。
|
|
282
|
+
> **双读兼容**:`dispatch.mg`(读旧 `rrv_mg`)、源目录 `mg/`(读旧 `rrv/`)、素材前缀 `mg-`(读旧 `rrv-`)——去品牌化前的既有工程零迁移。
|
|
283
|
+
|
|
150
284
|
### 其它
|
|
151
285
|
|
|
152
286
|
- `gtrk install [--api-key … -y --skills-dir …]` — 一条命令装全(skill + 配置 + 体检),对标飞书 `lark-cli install`。
|
|
@@ -173,7 +307,7 @@ gtrk init --api-key <KEY> --jianying-draft-dir auto -y
|
|
|
173
307
|
## 注意
|
|
174
308
|
|
|
175
309
|
- 剪映 / CapCut 草稿需 `draft_content.json` + `draft_meta_info.json` **成对**才被软件识别——要么 `gtrk init` 配好草稿目录、要么 `--jianying-draft-dir` 指定,否则只产 content、需手动导入。
|
|
176
|
-
- 多台机器盘符不同时,配置走 `~/.gtrk-cli
|
|
310
|
+
- 多台机器盘符不同时,配置走 `~/.gitruck/`(用户级;旧 `~/.gtrk-cli` 首次启动自动迁移),产物默认落毛片同目录。
|
|
177
311
|
- 节奏预设强度以云端为准;`--preset` 只选预设、不改源裁剪。
|
|
178
312
|
|
|
179
313
|
---
|
|
@@ -183,9 +317,10 @@ gtrk init --api-key <KEY> --jianying-draft-dir auto -y
|
|
|
183
317
|
```
|
|
184
318
|
gtrk-cli/
|
|
185
319
|
├── src/index.ts # commander 入口
|
|
186
|
-
├── src/commands/ # 子命令:install / init / oralcut / doctor / upgrade / skills
|
|
187
|
-
├── src/lib/ # cloud / config /
|
|
188
|
-
├── skills/gtrk-oralcut/
|
|
320
|
+
├── src/commands/ # 子命令:install / init / oralcut / split / doctor / upgrade / skills
|
|
321
|
+
├── src/lib/ # cloud / column-config / splitdoc / projection / user-config / jianying / …
|
|
322
|
+
├── skills/ # 打包的框架 skills:gtrk-oralcut / splitter / matrix / mg / ai-drama / style-maker
|
|
323
|
+
├── contracts/ # 框架契约库正本(gsap-emit v1 + handoff→契约映射表)
|
|
189
324
|
├── assets/ # 剪映草稿目录指引图
|
|
190
325
|
└── AGENT.md # 可移植 agent playbook(skill 底座)
|
|
191
326
|
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 框架契约库(handoff contracts)
|
|
2
|
+
|
|
3
|
+
同合云管线的 handoff 契约**正本**,随 `@gitruck/cli` npm 包分发。创作 skill 以「契约名 + 版本」引用(如 `gsap-emit v1`);`handoff-contracts.json` 是「handoff 类型 → 契约」映射表,消费方查表、不硬编码。
|
|
4
|
+
|
|
5
|
+
## 收录双轴边界(handoff-contract-library spec,扩项须走 change 过审)
|
|
6
|
+
|
|
7
|
+
- **轴一(管线性,审美零预设)**:契约只约束**机器可判定的管线消费属性**(封装/注册/确定性/依赖可达/产物格式)。**不得**规定颜色、字体、构图、红点数量等任何视觉取值或栏目词表词条;凡涉视觉取值处一律参数化/中性占位。「全片最多一个红点」这类审美铁律属栏目 skill 侧,**不入库**。
|
|
8
|
+
- **轴二(脱敏)**:只收**自有管线**的合规契约——渲染引擎合规、`.gtrk` 契约、派单格式(封闭列举)。外部供应商/外部平台适配内容(AI 视频平台差异、文生图平台参数等)**永不收录**,那属于用户自己的 skill。
|
|
9
|
+
|
|
10
|
+
## 现有契约
|
|
11
|
+
|
|
12
|
+
| 契约 | 版本 | 适用 handoff | 文档 |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| gsap-emit(HTML 动画颗粒逐帧 seek 合规) | v1 | MG(去品牌化前 RRV_MG,消费方查表前归一) | [gsap-emit-v1.md](gsap-emit-v1.md) |
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# GSAP-emit 契约 v1 · HTML 动画颗粒的逐帧 seek 渲染合规
|
|
2
|
+
|
|
3
|
+
> **契约版本**:gsap-emit v1(2026-07-10)。产 HTML 动画颗粒、经同合云渲染管线(html_animate_render)逐帧 seek 合成的 skill/工具,其产物 MUST 满足本契约。
|
|
4
|
+
> **边界**:本契约只约束**机器可判定的管线消费属性**(封装/注册/确定性/自包含/依赖可达/禁 var())。画面长什么样——颜色、字体、构图、节奏——**一律由调用方按其栏目自身规则决定**,本契约不置一词;文中示例取值均为中性占位。
|
|
5
|
+
|
|
6
|
+
## 原理(为什么不能用 CSS animation)
|
|
7
|
+
|
|
8
|
+
渲染引擎逐帧渲染时,靠调用每个子合成在 `window.__timelines` 注册的 GSAP 时间线的 `.seek(t)` 把画面定格到第 t 秒。GSAP `paused` 时间线 = 可被外部 seek 的虚拟时钟 → 逐帧正确;纯 CSS `animation-delay` 动画不在 `window.__timelines` 里,引擎 seek 不到 → 画面冻结(实测)。
|
|
9
|
+
|
|
10
|
+
## 六条铁律(违反任一条 → 整片渲染失败 / 颗粒冻结 / 全黑)
|
|
11
|
+
|
|
12
|
+
1. **`<template>` 包裹根元素**:`<template><div data-composition-id="<id>" data-width="1920" data-height="1080">…</div></template>`。编译器取的是 `<template>` 内容;裸 `<div>` 会被判 "empty or could not be parsed" 整片失败。(1920×1080 为**当前引擎版本约束**,分辨率参数化预留——升版时以本契约新版为准。)
|
|
13
|
+
2. **GSAP `paused` 时间线 + 注册**:`var tl = gsap.timeline({paused:true}); … window.__timelines = window.__timelines || {}; window.__timelines["<id>"] = tl;`。`<id>` 必须等于根的 `data-composition-id`。
|
|
14
|
+
3. **确定性**:禁用 `Math.random` / `Date.now` / 无参 `new Date()`(过不了引擎 StaticGuard)。要"随机感"用固定种子/解析式/递归生成(见「确定性配方」)。
|
|
15
|
+
4. **自包含 + 底色显式声明**:颗粒不依赖外部文件(除脚本 CDN)。**根底色透明与否必须显式声明**——全屏颗粒给根设明确 `background`(色值由调用方按栏目规则指定);叠加在底轨上的透明颗粒根**不设** background。不显式想清楚这一层,叠加合成必出错。
|
|
16
|
+
5. **脚本用渲染机可达的 CDN(编译期内联)**:`<script src="https://lib.baomitu.com/gsap/3.13.0/gsap.min.js"></script>` 或由渲染管线 vendor 本地。⚠️ jsdelivr 在渲染服务器不稳(实测 compile 期 `fetch failed` → GSAP 未加载 → 整片全黑)。编译器**只内联 http(s) CDN、不内联相对本地路径**(写 `src="gsap.min.js"` 运行时 404)。
|
|
17
|
+
6. **颜色/字体用字面值,禁 CSS `var()` 自定义变量**:编译器/挂载不可靠地解析 var()(字体映射把 `var(--font-body)` 当字面字体名;颜色 var() 不应用 → 整片全黑,实测)。直接写字面值(如 `#RRGGBB` / `'某字体名'`);SVG 属性里同样禁 var()。栏目级换色/换主题 = **生成期**替换字面值(查调用方自己的词表/token 注入),不是运行时变量。
|
|
18
|
+
|
|
19
|
+
## 颗粒骨架(中性模板)
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<template id="p">
|
|
23
|
+
<div data-composition-id="<id>" data-width="1920" data-height="1080"
|
|
24
|
+
style="position:absolute;inset:0;/* 底色显式声明:全屏颗粒填你栏目的底色,透明叠加则删除 background */background:<你的底色>;overflow:hidden;font-family:'<你的字体>',sans-serif;">
|
|
25
|
+
<style> [data-composition-id="<id>"] .xxx{ … } </style> <!-- 样式用属性选择器作用域,防跨颗粒污染 -->
|
|
26
|
+
<svg viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMid meet" style="position:absolute;inset:0;width:100%;height:100%;">…</svg>
|
|
27
|
+
<script src="https://lib.baomitu.com/gsap/3.13.0/gsap.min.js"></script>
|
|
28
|
+
<script>(function(){
|
|
29
|
+
var ROOT='[data-composition-id="<id>"]';
|
|
30
|
+
/* 1) 确定性构建静态结构 */
|
|
31
|
+
/* 2) gsap.set 初始态 */
|
|
32
|
+
/* 3) var tl = gsap.timeline({paused:true}); … 编排 … */
|
|
33
|
+
window.__timelines = window.__timelines || {};
|
|
34
|
+
window.__timelines["<id>"] = tl;
|
|
35
|
+
})();</script>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
缓动可用 CustomEase 精确还原你栏目自己的 cubic-bezier(缺插件时给近似回退)——bezier 数值属于栏目审美,本契约不规定。
|
|
41
|
+
|
|
42
|
+
## 确定性配方(替代 random)
|
|
43
|
+
|
|
44
|
+
- 递归结构:固定角度、比例、深度参数 → 完全确定。
|
|
45
|
+
- "噪声感":`Math.sin(i*0.18 + j*0.2)` 类解析式伪随机。
|
|
46
|
+
- 打散:用 index 派生(如 `i*137.5°` 黄金角),不要 `Math.random()`。
|
|
47
|
+
|
|
48
|
+
## 验证(交付前必做)
|
|
49
|
+
|
|
50
|
+
墙钟截图类工具驱动不了 paused 时间线(只看到 t=0),**不能**用来验收。必须真渲染引擎 seek 验证:
|
|
51
|
+
1. 颗粒放进最小 composition(root `index.html` 用 `data-composition-src` 引它);
|
|
52
|
+
2. 走渲染管线(html_animate_render)渲染;
|
|
53
|
+
3. 抽不同时间点的帧**比对应当不同**(相同=冻结=铁律没守住)。客观自检:根有 `<template>`、`window.__timelines["<id>"]` 已注册且 id 匹配、无 random/Date、tl 总长 ≥ 颗粒时长。
|
|
54
|
+
> ⚠️ 不要用「本地等价 seek 脚本 / Node 无头模拟」替代真引擎渲染——它不经真编译+挂载,测不出 var()-不解析、CDN-内联失败、StaticGuard 这类只在真引擎暴露的问题(实测教训:本地等价测试报 OK,真引擎全黑)。
|
|
55
|
+
|
|
56
|
+
## 专属坑
|
|
57
|
+
|
|
58
|
+
- **样式作用域**:颗粒与其他颗粒/根同处一个文档,全局类会撞——用 `[data-composition-id="<id>"] .xxx` 属性选择器作用域。
|
|
59
|
+
- **`<template>` 内的 `<script>` 默认不执行**——引擎把 template 内容克隆进文档后才执行;本地直接开浏览器不会跑,必须经引擎/player。
|
|
60
|
+
- **transform-origin(SVG)**:缩放 `<g>` 用 GSAP `svgOrigin:"x y"`(SVG 用户坐标),别用 CSS transform-origin。
|
|
61
|
+
- **时间线总长 ≥ beat 时长**:颗粒 tl 总时长 ≥ 它在成片里的 data-duration,否则 seek 越界。
|
|
62
|
+
- **别用 `requestAnimationFrame`/`setInterval` 驱动画面**——不被 seek,等于冻结。所有视觉变化必须挂在 tl 上。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"comment": "handoff 类型 → 契约映射表(handoff-contract-library spec)。消费方(含 gtrk-style-maker)查此表,不得硬编码映射;消费方查表前先将遗留品牌值(如 RRV_MG)归一为中性名(MG)。null = 暂无契约(产线可用,无合规绑定要求)。注册集当前 = 现行四车道(P2 注册表化前的过渡事实)。",
|
|
4
|
+
"mappings": {
|
|
5
|
+
"A_ROLL": null,
|
|
6
|
+
"MG": { "contract": "gsap-emit", "version": "v1", "doc": "gsap-emit-v1.md" },
|
|
7
|
+
"AI_DRAMA": null,
|
|
8
|
+
"FILM_BROLL": null
|
|
9
|
+
}
|
|
10
|
+
}
|