@gitruck/cli 1.0.2 → 1.0.3

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.
Files changed (32) hide show
  1. package/AGENT.md +13 -0
  2. package/LICENSE +21 -21
  3. package/README.en.md +626 -540
  4. package/README.md +624 -545
  5. package/contracts/README.md +14 -14
  6. package/contracts/handoff-contracts.json +10 -10
  7. package/dist/index.js +5170 -2033
  8. package/package.json +2 -2
  9. package/skills/gtrk-ai-drama/SKILL.md +1 -1
  10. package/skills/gtrk-cover/SKILL.md +93 -93
  11. package/skills/gtrk-cover/assets/workbench-template.html +955 -955
  12. package/skills/gtrk-cover/references/checklist.md +81 -81
  13. package/skills/gtrk-cover/references/layout-recipes.md +337 -337
  14. package/skills/gtrk-cover/references/prompt-templates.md +119 -119
  15. package/skills/gtrk-cover/references/workbench-guide.md +99 -99
  16. package/skills/gtrk-long2short/SKILL.md +71 -68
  17. package/skills/gtrk-matrix/SKILL.md +40 -7
  18. package/skills/gtrk-mg/SKILL.md +10 -2
  19. package/skills/gtrk-music-visualizer/SKILL.md +76 -76
  20. package/skills/gtrk-splitter/SKILL.md +208 -187
  21. package/skills/gtrk-splitter/references/example-visual-split.json +638 -638
  22. package/skills/gtrk-splitter/references/example-visual-split.md +439 -439
  23. package/skills/gtrk-splitter/references/field-schema.md +138 -134
  24. package/skills/gtrk-style-maker/references/ammo.md +16 -16
  25. package/skills/gtrk-style-maker/references/contracts-ref.md +9 -9
  26. package/skills/gtrk-style-maker/references/seeds/README.md +4 -4
  27. package/skills/gtrk-style-maker/references/seeds/seed-ecom-home-goods.md +37 -37
  28. package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +35 -35
  29. package/skills/gtrk-tools/SKILL.md +132 -132
  30. package/skills/gtrk-transcript/SKILL.md +64 -58
  31. package/skills/gtrk-transcript/agents/openai.yaml +4 -4
  32. package/skills/gtrk-travel-recap/SKILL.md +212 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitruck/cli",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
5
5
  "license": "MIT",
6
6
  "author": "Gitruck (同合云)",
@@ -49,7 +49,7 @@
49
49
  "build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
50
50
  "typecheck": "tsc --noEmit",
51
51
  "prepublishOnly": "npm run typecheck && npm test && bun run build",
52
- "test": "esbuild src/lib/compliance-notice.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-lay.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/local-index.ts src/lib/local-search.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts --bundle --platform=node --format=esm --external:bun:sqlite --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 --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
52
+ "test": "esbuild src/lib/compliance-notice.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-lay.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/local-index.ts src/lib/local-search.ts src/lib/qc.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mg-lint.ts src/lib/mg-lay.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --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 --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
53
53
  "openspec:gate": "node openspec/gate.mjs"
54
54
  },
55
55
  "devDependencies": {
@@ -17,7 +17,7 @@ description: AI 再现分镜稿生成器——把成片 SOP 第③步(B-roll
17
17
 
18
18
  成片是**有序 SOP + 用户检查点**,不是并行一把铺。次序:
19
19
 
20
- > ① oralcut 剪口播 → ② split 视觉拆分派单 → ③ **B-roll 底轨全铺齐**(`matrix` 铺影视/本地素材 + **本 skill 产稿→外部出片→用户手动回铺**,**两条腿同一阶段**)→ ④ **全局抽帧检查画面构图**(用户确认)→ ⑤ **mg 铺 MG(含 ov,最后叠上)** → `gtrk render` 收口
20
+ > ① oralcut 剪口播 → ② split 视觉拆分派单 → ③ **B-roll 底轨全铺齐**(`matrix` 铺影视/本地素材 + **本 skill 产稿→外部出片→用户手动回铺**,**两条腿同一阶段**)→ ④ **全局抽帧检查画面构图**(用户确认)→ ⑤ **mg 铺 MG(含 ov,最后叠上)** → `gtrk subtitle lay` 上字幕(快速成片模式必做)→ `gtrk render` 收口
21
21
 
22
22
  **你与 `matrix` 同属第 ③ 步,MUST 在 MG 之前落位。** 理由:**AI 情景片段属于底轨 B-roll 画面家族,不是叠加层**——整条管线里唯一的叠加层是 MG(含 ov)。MG 的排版决策是「因势象形避主体」、**依赖底轨的最终画面构图**;若你的片段在 MG 之后才回铺,底轨构图就变了,先产的 MG 是对着「还没有 AI 画面的底轨」做的避让,你的片段落位后必然被避让错位、甚至被 MG 盖住画面主体。
23
23
 
@@ -1,93 +1,93 @@
1
- ---
2
- name: gtrk-cover
3
- description: 封面工作台——把一期视频的封面从「设计诊断 + 文生图 Prompt」到「H5 排字工作台一键导出多尺寸 PNG」两阶段做完。阶段一产诊断与三尺寸中英双版 Prompt(用户拿去 Midjourney / Flux / SDXL / Nano Banana / 即梦 / 可灵 / 通义万相 等任意文生图平台抽图),阶段二收齐背景图后产可拖拽排字的单文件 H5 工作台、浏览器里导出原分辨率 PNG。这是**纯创作 skill、无 gtrk 命令**(抽图在外部平台、排字在用户浏览器,同 /gtrk-ai-drama)。当用户想「做封面 / 出封面 / 封面 prompt / 封面排版 / 封面工作台 / cover」时使用本 skill。通用封面工艺(两阶段交付 / T1 字数布局路由 / Prompt 槽位 / 工作台引擎)由本 skill 自持;栏目封面审美(色板 / 字体 / 意象体系 / T1 样本)从栏目配置 style.skills 里 produces=="cover" 的条目解析注入,绝不硬编某栏目风格。凡给成片配封面,优先用本 skill,别手搓 prompt、别让用户裸排版。
4
- ---
5
-
6
- # 封面工作台(gtrk-cover)
7
-
8
- 把一期视频的封面走完两阶段:**阶段一**产设计诊断 + 三尺寸中英双版文生图 Prompt,交棒用户去外部平台抽图;**阶段二**收齐背景图后产**定制化 H5 排字工作台**(单文件 HTML、可拖拽 / 方向键 / 数值 / 滚轮微调、逐尺寸与一键导出原分辨率 PNG),用户在浏览器里排字导出。
9
-
10
- > **这是纯创作 skill、没有 gtrk 命令**——主链路「审美诊断 → Prompt → 外部平台抽图 → 用户浏览器拖字导出」里,抽图与排字两个环节的「手」在外部平台和用户手里;唯一的机械段(背景图压缩 + base64 注入模板)是一次模板文本替换,量级不足一条业务命令,且 `.gtrk` 工程没有封面槽位可写回(性质同 `/gtrk-ai-drama`)。别去找 `gtrk cover` 这条命令,它不存在也不该存在。
11
-
12
- ## 定位:管线外的「第 0 阶段」
13
-
14
- 封面**不在成片 SOP 序列内**(oralcut→split→matrix→mg→ai-drama→render 是片内的事),但它是观众看到的第 0 帧——**封面与标题共同组成完整的钩子**。随时可做,建议在成片定稿、标题确定之后做(互文检验需要标题)。封面产物不进渲染管线、不进派单,闭环 = 用户从工作台导出 PNG、自行投放。
15
-
16
- ## 三条铁律(先记死)
17
-
18
- 1. **业务分离:通用工艺归本 skill,栏目审美从配置解析。** 本 skill 只持对任何栏目都通用的封面工艺(两阶段交付、T1 字数/结构→布局路由、Prompt 槽位骨架、工作台引擎与自检)。**栏目专属的封面审美(色板与情绪轴、字体选型、概念→意象对照、T1 语气样本、材质与回避清单)从有效栏目配置解析注入**(见下节),**绝不硬编某栏目风格**。未绑封面风格资产的栏目 → 用中性默认兜底。
19
- 2. **两阶段不能合并。** 用户还没抽图就端出工作台 = 盲排(不看背景图排字,等于退回指令稿时代);工作台的价值就在「因势象形地就着背景图排字」。阶段一交付后**停下等图**。
20
- 3. **审美决策由本 skill 做,工作台只暴露微调面。** 工作台暴露给用户的只有:图层位置 / 字号 / 文案 / 显隐、显式声明的装饰件开关、T1 全局样式滑杆(描边 / 发光 / 既定字色选项)。色板体系、字体选型、布局拓扑、装饰件组合是审美决策——由你按注入的风格资产做出、交付时说明理由;用户想改审美层,**经对话增量改 HTML**(不推倒重来),别让他在工作台里找不存在的控件。
21
-
22
- > **产物落点纪律(MUST · 全文见随包 `AGENT.md` 同名一节)**:
23
- > Prompt 文本与工作台 HTML 只落**用户显式指定目录**,或有工程上下文时落 `<project>/cover/`;
24
- > **MUST NOT** 把用户媒体(背景图 / 导出的封面 PNG / 任何大文件)复制到 agent 自有工作目录(如用户文档目录下 agent 产品自建的目录、agent 家目录缓存、会话工作区)——压缩背景图时**从原路径读取**,压缩产物直接以 base64 写进工作台 HTML,不留中间副本;
25
- > 压缩脚本等临时文件一律放系统 temp 且**用完即删**(含中断 / 失败路径)。违者后果 = 用户系统盘被静默吃满(真机事故,非假设)。
26
-
27
- ## 业务分离:栏目封面风格从哪来(关键)
28
-
29
- **封面审美不是本 skill 预设的,是从栏目配置解析出来的。** 解析链路(与 `/gtrk-ai-drama` 的 Style Lock 解析同源):
30
-
31
- 1. **定位有效栏目**:用户 `--column <id>` 口头指定的栏目,或本地 config 的 `defaultColumn`;配置文件在 `~/.gitruck/columns/<id>.json`。本 skill 无 gtrk 命令,**直接读这个 JSON 文件**。
32
- 2. **取封面风格条目**:读 `style.skills[]`,取 `produces` **大小写不敏感归一后 `== "cover"`** 的条目。
33
- - 命中且未声明 `routing:"none"` → 拿它的 `ref`(指向一个 skill 目录/资源)→ **读该资产的封面风格维度**——色板与情绪轴、字体选型、概念→意象对照、T1 样本、材质与回避清单、平台安全区偏好……**读到什么维度用什么**;缺某维度就只对该维度回落中性默认,不整体放弃注入。
34
- - 条目声明 `routing:"none"` → 跳过(退役 / 显式停用标记)。
35
- - **无匹配活跃条目** → 用下面「中性默认」。
36
- 3. **注入,不臆造**:读到什么用什么;没读到就中性默认,**绝不凭栏目名猜风格、绝不套用别的栏目的调性**。
37
-
38
- > 举例(仅示意解析机制,非硬编):某栏目配置里有 `{produces:"cover", ref:"…/my-cover-style"}` → 读它的色板表 / 字体决策 / 意象对照注入诊断、Prompt 与工作台。换个栏目、换个 ref,注入的就是另一套审美。**本 skill 正文里不写死任何一套具体风格。**
39
-
40
- ## 前置与输入
41
-
42
- **必要输入(没给齐就问,一次不超过 3 个)**:
43
- 1. **选题 / 视频标题**(互文检验用)。
44
- 2. **T1 封面大字**——用户亲拟的那句话(典型 4~10 字:短语 / 对偶 / 哲句 / 质问)。**T1 是用户的内容,skill 只建议拆分 / 重音处理,不擅自改写**;栏目风格资产带 T1 样本库时可据其语气提候选,仍由用户拍板。
45
- 3. **尺寸集**:缺省 16:9 / 4:3 / 3:4 三种全出,用户按分发面增减。
46
-
47
- **可选输入(没给就推导或留空)**:
48
- - **核心意象 / 概念**(推封面视觉主体用)——没给时从 T1 与视频内容反推;栏目资产有概念→意象对照表就先查表,查不到就现场推一条(推完问用户要不要写进他的对照表)。
49
- - **情绪基调**——没给自己判;栏目资产有情绪轴按其轴归位。
50
- - **栏目名(品牌戳)/ 期号**——**用户没给就不放、不编造**,交付时老实标注「未提供,可省略」。
51
-
52
- ## 两阶段工作流
53
-
54
- ### 🎨 阶段一:设计诊断 + Prompt
55
-
56
- **Step 1 · 诊断展示**(是告知不是提问):T1 结构诊断(字数 / 逗号对偶 / 关键词可抽性)→ 情绪 / 气质归位 → 视觉意象推导 → 布局配方选择(按 T1 字数路由,见 `references/layout-recipes.md`)→ 色板选择(从栏目色板表选一档并说理由)→ 装饰件决策(用什么 / 不用什么,**不许躲**——画面再好看也要显式决定)。
57
-
58
- **Step 2 · 出三尺寸 Prompt**(`references/prompt-templates.md`):每尺寸一套**英文主版 + 中文辅版**,构图差异显式化(16:9 主体居中两侧留气 / 4:3 饱满可顶三边留对角气口 / 3:4 主体中段上下舒展)。铁律:**不让生图模型渲染中文字**——字全部由阶段二工作台贴,图里只留气息性软留白。
59
-
60
- **Step 3 · 阶段一自检**(`references/checklist.md` 阶段一 5 条)→ 结束语明确交棒:「每个尺寸抽到满意的图后传回来,我生成排字工作台」。**停,等图。**
61
-
62
- ### 🛠️ 阶段二:H5 排字工作台
63
-
64
- **Step 4 · 收齐背景图后实例化工作台**(`references/workbench-guide.md` + `assets/workbench-template.html`):
65
- 1. 按各图宽高比归位到尺寸档(归不上就问,别硬塞);
66
- 2. 压缩 + base64 注入模板占位符(压缩参数与体积红线见 guide;临时脚本落系统 temp、用完即删);
67
- 3. 按 **T1 实际字数**实例化 T1 图层(模板 `T1_KEYS` 常量驱动,5 字就 5 个逐字图层,不写死 4 字);
68
- 4. 注入色板 CSS 变量、T1 字体与发光、装饰件、各图层默认坐标(按布局配方 + 实际画面气口微调)、T2/T5/品牌戳等附加图层初始文案;
69
- 5. 命名 `<T1>_封面排版工作台.html`,落用户指定目录或 `<project>/cover/`。
70
-
71
- **Step 5 · 合规检查 + 交付**:占位符零残留 / 三尺寸 DEFAULTS 齐 / T1 初值两处一致 / 浏览器打开控制台零报错、三尺寸切换正常(能验就验)。交付时讲清:工作台能做什么(拖拽 / 方向键 / 滚轮微调 / 文案编辑 / 显隐 / 恢复默认 / 换背景 / 逐尺寸与一键导出)、默认布局按什么选的、审美决策为什么这么做;补一遍阶段二自检 4 条。
72
-
73
- **Step 6 · 迭代三分支**:用户自己微调位置字号文案 → 工作台已支持,不用回来;**审美层要改**(换色板 / 换字体 / 去装饰件)→ 对话告诉你,增量改 HTML 重新交付;**图要重抽** → 回阶段一只改相关槽位,其余不动。
74
-
75
- ## 中性默认(未绑封面风格资产时)
76
-
77
- 栏目配置里没有 produces=="cover" 的活跃条目时,别停、别硬套别的栏目,用这套克制通用的兜底:
78
-
79
- > **中性封面基调**:深色沉稳底 + 高对比单主体构图;T1 用无衬线特黑(系统可得的中文黑体族),纯白字 + 深色细描边、不加发光;无装饰件;Prompt 风格锚点用 cinematic illustration, clean composition, strong single subject,材质串用 subtle film grain;负面词用通用兜底(photorealistic face 之外按题材增删)。
80
-
81
- 中性默认下**不设色板情绪轴、不设概念→意象对照体系**(那些是栏目资产)。用完顺带提醒:**想要这条栏目有自己的封面视觉 DNA,去 `/gtrk-style-maker` 沉淀一套封面风格资产,登记进栏目配置 `style.skills`(`produces:"cover"`,活跃条目不加 `routing:"none"`)**,之后每期封面自动注入。
82
-
83
- ## 交付前自检
84
-
85
- 两阶段各自过 `references/checklist.md`(阶段一:意象与视频核心概念一致 / 情绪与视觉对齐 / 封面-标题互文 / 材质层 / 生成图低级错误提示;阶段二补:字的主视觉重量 / 留字位落点 / 身份锚不编造 / 分发平台安全区按平台适配)。逐条输出结果,不合格直说,不静默跳过。
86
-
87
- ## 这个 skill 不做什么 → 找谁
88
-
89
- - **视频内的 MG 动态图 / 颗粒** → 栏目 MG 生产 skill + `/gtrk-mg`
90
- - **AI 再现分镜稿** → `/gtrk-ai-drama`
91
- - **建栏目风格体系(含封面风格资产)** → `/gtrk-style-maker`
92
- - **成片剪辑 / 拆分 / 铺轨 / 渲染** → 成片 SOP 各步(`/gtrk-oralcut` 起)
93
- - **替用户抽图、替用户拖字导出** → 做不到也不该做:抽图在外部平台、排字在用户浏览器,这两步是用户检查点,交代清楚后**停下等用户**。
1
+ ---
2
+ name: gtrk-cover
3
+ description: 封面工作台——把一期视频的封面从「设计诊断 + 文生图 Prompt」到「H5 排字工作台一键导出多尺寸 PNG」两阶段做完。阶段一产诊断与三尺寸中英双版 Prompt(用户拿去 Midjourney / Flux / SDXL / Nano Banana / 即梦 / 可灵 / 通义万相 等任意文生图平台抽图),阶段二收齐背景图后产可拖拽排字的单文件 H5 工作台、浏览器里导出原分辨率 PNG。这是**纯创作 skill、无 gtrk 命令**(抽图在外部平台、排字在用户浏览器,同 /gtrk-ai-drama)。当用户想「做封面 / 出封面 / 封面 prompt / 封面排版 / 封面工作台 / cover」时使用本 skill。通用封面工艺(两阶段交付 / T1 字数布局路由 / Prompt 槽位 / 工作台引擎)由本 skill 自持;栏目封面审美(色板 / 字体 / 意象体系 / T1 样本)从栏目配置 style.skills 里 produces=="cover" 的条目解析注入,绝不硬编某栏目风格。凡给成片配封面,优先用本 skill,别手搓 prompt、别让用户裸排版。
4
+ ---
5
+
6
+ # 封面工作台(gtrk-cover)
7
+
8
+ 把一期视频的封面走完两阶段:**阶段一**产设计诊断 + 三尺寸中英双版文生图 Prompt,交棒用户去外部平台抽图;**阶段二**收齐背景图后产**定制化 H5 排字工作台**(单文件 HTML、可拖拽 / 方向键 / 数值 / 滚轮微调、逐尺寸与一键导出原分辨率 PNG),用户在浏览器里排字导出。
9
+
10
+ > **这是纯创作 skill、没有 gtrk 命令**——主链路「审美诊断 → Prompt → 外部平台抽图 → 用户浏览器拖字导出」里,抽图与排字两个环节的「手」在外部平台和用户手里;唯一的机械段(背景图压缩 + base64 注入模板)是一次模板文本替换,量级不足一条业务命令,且 `.gtrk` 工程没有封面槽位可写回(性质同 `/gtrk-ai-drama`)。别去找 `gtrk cover` 这条命令,它不存在也不该存在。
11
+
12
+ ## 定位:管线外的「第 0 阶段」
13
+
14
+ 封面**不在成片 SOP 序列内**(oralcut→split→matrix→mg→ai-drama→render 是片内的事),但它是观众看到的第 0 帧——**封面与标题共同组成完整的钩子**。随时可做,建议在成片定稿、标题确定之后做(互文检验需要标题)。封面产物不进渲染管线、不进派单,闭环 = 用户从工作台导出 PNG、自行投放。
15
+
16
+ ## 三条铁律(先记死)
17
+
18
+ 1. **业务分离:通用工艺归本 skill,栏目审美从配置解析。** 本 skill 只持对任何栏目都通用的封面工艺(两阶段交付、T1 字数/结构→布局路由、Prompt 槽位骨架、工作台引擎与自检)。**栏目专属的封面审美(色板与情绪轴、字体选型、概念→意象对照、T1 语气样本、材质与回避清单)从有效栏目配置解析注入**(见下节),**绝不硬编某栏目风格**。未绑封面风格资产的栏目 → 用中性默认兜底。
19
+ 2. **两阶段不能合并。** 用户还没抽图就端出工作台 = 盲排(不看背景图排字,等于退回指令稿时代);工作台的价值就在「因势象形地就着背景图排字」。阶段一交付后**停下等图**。
20
+ 3. **审美决策由本 skill 做,工作台只暴露微调面。** 工作台暴露给用户的只有:图层位置 / 字号 / 文案 / 显隐、显式声明的装饰件开关、T1 全局样式滑杆(描边 / 发光 / 既定字色选项)。色板体系、字体选型、布局拓扑、装饰件组合是审美决策——由你按注入的风格资产做出、交付时说明理由;用户想改审美层,**经对话增量改 HTML**(不推倒重来),别让他在工作台里找不存在的控件。
21
+
22
+ > **产物落点纪律(MUST · 全文见随包 `AGENT.md` 同名一节)**:
23
+ > Prompt 文本与工作台 HTML 只落**用户显式指定目录**,或有工程上下文时落 `<project>/cover/`;
24
+ > **MUST NOT** 把用户媒体(背景图 / 导出的封面 PNG / 任何大文件)复制到 agent 自有工作目录(如用户文档目录下 agent 产品自建的目录、agent 家目录缓存、会话工作区)——压缩背景图时**从原路径读取**,压缩产物直接以 base64 写进工作台 HTML,不留中间副本;
25
+ > 压缩脚本等临时文件一律放系统 temp 且**用完即删**(含中断 / 失败路径)。违者后果 = 用户系统盘被静默吃满(真机事故,非假设)。
26
+
27
+ ## 业务分离:栏目封面风格从哪来(关键)
28
+
29
+ **封面审美不是本 skill 预设的,是从栏目配置解析出来的。** 解析链路(与 `/gtrk-ai-drama` 的 Style Lock 解析同源):
30
+
31
+ 1. **定位有效栏目**:用户 `--column <id>` 口头指定的栏目,或本地 config 的 `defaultColumn`;配置文件在 `~/.gitruck/columns/<id>.json`。本 skill 无 gtrk 命令,**直接读这个 JSON 文件**。
32
+ 2. **取封面风格条目**:读 `style.skills[]`,取 `produces` **大小写不敏感归一后 `== "cover"`** 的条目。
33
+ - 命中且未声明 `routing:"none"` → 拿它的 `ref`(指向一个 skill 目录/资源)→ **读该资产的封面风格维度**——色板与情绪轴、字体选型、概念→意象对照、T1 样本、材质与回避清单、平台安全区偏好……**读到什么维度用什么**;缺某维度就只对该维度回落中性默认,不整体放弃注入。
34
+ - 条目声明 `routing:"none"` → 跳过(退役 / 显式停用标记)。
35
+ - **无匹配活跃条目** → 用下面「中性默认」。
36
+ 3. **注入,不臆造**:读到什么用什么;没读到就中性默认,**绝不凭栏目名猜风格、绝不套用别的栏目的调性**。
37
+
38
+ > 举例(仅示意解析机制,非硬编):某栏目配置里有 `{produces:"cover", ref:"…/my-cover-style"}` → 读它的色板表 / 字体决策 / 意象对照注入诊断、Prompt 与工作台。换个栏目、换个 ref,注入的就是另一套审美。**本 skill 正文里不写死任何一套具体风格。**
39
+
40
+ ## 前置与输入
41
+
42
+ **必要输入(没给齐就问,一次不超过 3 个)**:
43
+ 1. **选题 / 视频标题**(互文检验用)。
44
+ 2. **T1 封面大字**——用户亲拟的那句话(典型 4~10 字:短语 / 对偶 / 哲句 / 质问)。**T1 是用户的内容,skill 只建议拆分 / 重音处理,不擅自改写**;栏目风格资产带 T1 样本库时可据其语气提候选,仍由用户拍板。
45
+ 3. **尺寸集**:缺省 16:9 / 4:3 / 3:4 三种全出,用户按分发面增减。
46
+
47
+ **可选输入(没给就推导或留空)**:
48
+ - **核心意象 / 概念**(推封面视觉主体用)——没给时从 T1 与视频内容反推;栏目资产有概念→意象对照表就先查表,查不到就现场推一条(推完问用户要不要写进他的对照表)。
49
+ - **情绪基调**——没给自己判;栏目资产有情绪轴按其轴归位。
50
+ - **栏目名(品牌戳)/ 期号**——**用户没给就不放、不编造**,交付时老实标注「未提供,可省略」。
51
+
52
+ ## 两阶段工作流
53
+
54
+ ### 🎨 阶段一:设计诊断 + Prompt
55
+
56
+ **Step 1 · 诊断展示**(是告知不是提问):T1 结构诊断(字数 / 逗号对偶 / 关键词可抽性)→ 情绪 / 气质归位 → 视觉意象推导 → 布局配方选择(按 T1 字数路由,见 `references/layout-recipes.md`)→ 色板选择(从栏目色板表选一档并说理由)→ 装饰件决策(用什么 / 不用什么,**不许躲**——画面再好看也要显式决定)。
57
+
58
+ **Step 2 · 出三尺寸 Prompt**(`references/prompt-templates.md`):每尺寸一套**英文主版 + 中文辅版**,构图差异显式化(16:9 主体居中两侧留气 / 4:3 饱满可顶三边留对角气口 / 3:4 主体中段上下舒展)。铁律:**不让生图模型渲染中文字**——字全部由阶段二工作台贴,图里只留气息性软留白。
59
+
60
+ **Step 3 · 阶段一自检**(`references/checklist.md` 阶段一 5 条)→ 结束语明确交棒:「每个尺寸抽到满意的图后传回来,我生成排字工作台」。**停,等图。**
61
+
62
+ ### 🛠️ 阶段二:H5 排字工作台
63
+
64
+ **Step 4 · 收齐背景图后实例化工作台**(`references/workbench-guide.md` + `assets/workbench-template.html`):
65
+ 1. 按各图宽高比归位到尺寸档(归不上就问,别硬塞);
66
+ 2. 压缩 + base64 注入模板占位符(压缩参数与体积红线见 guide;临时脚本落系统 temp、用完即删);
67
+ 3. 按 **T1 实际字数**实例化 T1 图层(模板 `T1_KEYS` 常量驱动,5 字就 5 个逐字图层,不写死 4 字);
68
+ 4. 注入色板 CSS 变量、T1 字体与发光、装饰件、各图层默认坐标(按布局配方 + 实际画面气口微调)、T2/T5/品牌戳等附加图层初始文案;
69
+ 5. 命名 `<T1>_封面排版工作台.html`,落用户指定目录或 `<project>/cover/`。
70
+
71
+ **Step 5 · 合规检查 + 交付**:占位符零残留 / 三尺寸 DEFAULTS 齐 / T1 初值两处一致 / 浏览器打开控制台零报错、三尺寸切换正常(能验就验)。交付时讲清:工作台能做什么(拖拽 / 方向键 / 滚轮微调 / 文案编辑 / 显隐 / 恢复默认 / 换背景 / 逐尺寸与一键导出)、默认布局按什么选的、审美决策为什么这么做;补一遍阶段二自检 4 条。
72
+
73
+ **Step 6 · 迭代三分支**:用户自己微调位置字号文案 → 工作台已支持,不用回来;**审美层要改**(换色板 / 换字体 / 去装饰件)→ 对话告诉你,增量改 HTML 重新交付;**图要重抽** → 回阶段一只改相关槽位,其余不动。
74
+
75
+ ## 中性默认(未绑封面风格资产时)
76
+
77
+ 栏目配置里没有 produces=="cover" 的活跃条目时,别停、别硬套别的栏目,用这套克制通用的兜底:
78
+
79
+ > **中性封面基调**:深色沉稳底 + 高对比单主体构图;T1 用无衬线特黑(系统可得的中文黑体族),纯白字 + 深色细描边、不加发光;无装饰件;Prompt 风格锚点用 cinematic illustration, clean composition, strong single subject,材质串用 subtle film grain;负面词用通用兜底(photorealistic face 之外按题材增删)。
80
+
81
+ 中性默认下**不设色板情绪轴、不设概念→意象对照体系**(那些是栏目资产)。用完顺带提醒:**想要这条栏目有自己的封面视觉 DNA,去 `/gtrk-style-maker` 沉淀一套封面风格资产,登记进栏目配置 `style.skills`(`produces:"cover"`,活跃条目不加 `routing:"none"`)**,之后每期封面自动注入。
82
+
83
+ ## 交付前自检
84
+
85
+ 两阶段各自过 `references/checklist.md`(阶段一:意象与视频核心概念一致 / 情绪与视觉对齐 / 封面-标题互文 / 材质层 / 生成图低级错误提示;阶段二补:字的主视觉重量 / 留字位落点 / 身份锚不编造 / 分发平台安全区按平台适配)。逐条输出结果,不合格直说,不静默跳过。
86
+
87
+ ## 这个 skill 不做什么 → 找谁
88
+
89
+ - **视频内的 MG 动态图 / 颗粒** → 栏目 MG 生产 skill + `/gtrk-mg`
90
+ - **AI 再现分镜稿** → `/gtrk-ai-drama`
91
+ - **建栏目风格体系(含封面风格资产)** → `/gtrk-style-maker`
92
+ - **成片剪辑 / 拆分 / 铺轨 / 渲染** → 成片 SOP 各步(`/gtrk-oralcut` 起)
93
+ - **替用户抽图、替用户拖字导出** → 做不到也不该做:抽图在外部平台、排字在用户浏览器,这两步是用户检查点,交代清楚后**停下等用户**。