Skip to content
cccskills
FreePublished on GitHub

gtrk-mg

MG 动态图颗粒铺轨器——成片 SOP 第 ⑤ 步(**最后叠上**),在 B-roll 底轨三源(影视素材 / 本地素材 / AI 情景片段)全部铺齐、且 ④ 全局抽帧检查构图通过之后,把栏目的 html-particle 动态图颗粒(透明叠加 / 满屏底层)叠铺到已定稿的底轨之上。

先由栏目 MG 生产 skill 按派单各槽位产颗粒,再驱动 `gtrk mg` 命令 lint + 铺进 `.gtrk` 工程的 beat_track。当用户想「铺 MG 颗粒 / 上动态图 / 铺动效 / 给这段配动画铺进工程 / 把 MG 派单铺轨 / 消费 dispatch.mg」时使用本 skill。

凡涉及把 MG 动态图颗粒铺进已剪好的成片工程,优先用本 skill 驱动 gtrk CLI,别让用户自己去终端敲 `gtrk mg`。

The English summary is being prepared. Showing the original description.

Gitruck/cli966 stars(GitHub 966 + cccskills 0)

Run score Not tested

See how to install

Files included (1)

  • SKILL.md55.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

MG 动态图铺轨(gtrk-mg)

把 gtrk split 派好的 MG 槽位(dispatch.mg),先由栏目的 MG 生产 skill 产成 html-particle 动态图颗粒,再交给 gtrk mg 命令 lint + 铺进 .gtrk 工程的 beat_track——叠在已经定稿的底轨之上(B-roll 三源全落齐、构图已核)。CLI 是手(lint / 铺轨 / 写回),你是脑(认 SOP 位置、驱动栏目生产 skill、管用户检查点、判 lint 该不该硬铺)。栏目生产 skill 只产纯净颗粒、不知 gtrk 命令,由你驱动。

本 skill 已含你需要的全部信息(SOP 位置、业务分离、逐槽位工作流、命令参数、lint 铁律、排错、交棒)。命令参数细节以 gtrk mg --help 为准;颗粒的视觉/内容规范不在这里——那是栏目资产,由栏目 MG 生产 skill 全权负责。

你在成片 SOP 的哪一步(先认位置,别抢跑)

成片是有序 SOP + 用户检查点,不是并行一次铺完。全序:

① /gtrk-oralcut(剪口播)→ ② /gtrk-splitter(拆分派单出 dispatch.json)→ ③ B-roll 底轨全铺齐(/gtrk-matrix 铺影视/本地素材 + /gtrk-ai-drama 产稿→外部出片→用户手动回铺,两条腿同一阶段)→ ④ 全局抽帧检查画面构图(用户确认) → ⑤ 本 skill:MG(含 ov)最后叠上 → gtrk subtitle lay 上字幕(快速成片模式必做)→ gtrk render 收口(会对未命中缓存的颗粒云渲、有计费,见末节)

你是第 ⑤ 步、也是最后一层。 MG 颗粒是唯一的叠加层——底下那整层底轨必须先定死(三源全落齐),否则你的排版避让是对着一个不完整的画面做的。

⚠️ AI 情景片段属于底轨 B-roll 画面家族,不是叠加层。先完成 AI 片段回铺,再依据最终底轨构图产出 MG,避免遮挡主体。

所以动手前先过前置硬门。

前置硬门(不满足就别铺,先回上一步)

  1. 影视/本地素材 B-roll 已铺且用户已确认:若 dispatch.film_broll 非空,必须 ③ 已跑过 gtrk matrix 且用户已在 opencut 里挑选/调整确认。没确认 → 别铺 MG,先回 ③。(为空 = 本片没这条腿,看下一门。)
  2. ★ AI 情景片段已回铺,或用户明示先跳过:若 dispatch.ai_drama 非空,必须已回铺完(用户已把外部平台出的片子拖进工程)或用户明示「先跳过 AI、先把 MG 铺上」。
    • 外部平台抽卡可能数天,严格串行会把你无限期卡住,故留这个口子。
    • 走跳过时你 MUST 付这个对价:把与 AI beat 相邻或重叠区间的 MG 颗粒逐一标记为「AI 回铺后待复查构图」,并在交棒 render 时把该清单复述给用户。MUST NOT 静默跳过 —— 用户得知道哪几颗将来可能要返工。
    • (为空 = 本片没 AI 车道,此门自动通过。)
  3. ★ ④ 全局抽帧检查已过、用户已确认构图:对三源合并后的最终底轨抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,用户确认无误。这与 ③ 那次「挑选 B-roll」的确认是两次不同的确认,别拿前一次顶替。没做 → 先做 ④ 再回来。
  4. 有 split 产物:需要一个跑过 gtrk split 的产物目录(含 split/dispatch.json 与工程 .gtrk)。没有 → 先回 ② /gtrk-splitter。
  5. dispatch.mg 非空:为空 = 本片没有 MG 车道 → 别硬造,直接 gtrk render 收口(见末节;无颗粒 = 零计费)。
  6. CLI 在:gtrk 找不到 → 让用户装 npm i -g @gitruck/cli@latest(需先有 Node.js)。

业务分离:谁产颗粒(栏目),谁铺轨(本 skill)

本框架 skill 不硬编任何栏目的视觉风格/生产内容。 MG 颗粒长什么样、用什么视觉语法,全由栏目的 MG 生产 skill 决定;本 skill 只负责「在对的时候、按派单、驱动它产,然后把成品铺进工程」。

车道 → 栏目生产 skill 的解析(照此,别猜):读有效栏目配置的 style.skills[](配置文件 ~/.gitruck/columns/<id>.json;栏目 id 由 --column <id> 或 config defaultColumn 选取;零配置 = L0 内置默认栏目,不携带 style 清单 → 必然走下方「无匹配」分支)。在 style.skills[] 里取 produces 归一后(旧 RRV_MG → MG)等于 MG 的条目 → 触发它 ref 指向的 skill 产颗粒。

  • 命中多条 → 按栏目约定取其一(一般栏目只登记一个 MG 生产 skill)。
  • 条目带 routing:"none"(管线外产物,如封面)→ 跳过,不当 MG 生产 skill。
  • 无匹配 = 本栏目没有 MG 生产 skill → 别硬铺,给用户四选一(都不替他选):
    1. 建栏目:/gtrk-style-maker 沉淀自己的 MG 生产 skill(一次性,长期资产);
    2. 换栏目:--column <id> 指向已配置的栏目;
    3. 用中性块:Hyperframes registry 的中性颗粒骨架(gtrk mg fetch,见下节「中性块工作流」)——没建栏目也能当场出 MG,但骨架不是成品,内容与审美 MUST 改写。
    4. 用文字模板:同合云自家的文字特效模板库(gtrk mg fetch --source text,见下节「文字模板工作流」)。改字走 gtrk mg compile、改效果走 gtrk mg edit --say。 ⚠️ 它的适用面由派单的 visual_job 决定,不由「省不省事」决定(见下「按 visual_job 路由」)。 另可查推荐目录(公约 §三‴):gtrk skills recommend --scene mg-explainer 列第三方 MG 生产 skill,装完 gtrk skills add <owner/repo> --produces MG 登记即被本节解析到——本 skill 正文不点名任何仓、不点名任何块。 推荐目录另有一方排版技法族(gtrk skills recommend --scene technique):技法不是生产者、不登记为 MG 车道(routing:none),某槽位的内容形态命中某技法(如引用文献页 / 截图局部强调)时由你按槽位取用——内容与节奏按口播定、栏目色未定时用技法自带的中性底;本 skill 正文同样不点名仓。
  • 有匹配时中性块与文字模板缺省都不用:只当栏目 skill 明显不擅长某类(如数据图表 / 界面拟物 / 纯文字入场)时可提议「这一槽用中性块」或「这一槽用文字模板」,用户点头才用。技法族同理——槽位内容形态命中某技法时可提议「这一槽用技法」(gtrk skills recommend --scene technique),栏目色板与字体照栏目注入,用户点头才用。

★ 按 visual_job 路由(不是按省事路由)

每个 MG 槽位的派单里都有一个必填的 visual_job(gtrk split 判的,四档)。 它决定这一槽的候选集里有什么:

visual_job这段是什么候选集
statement单一陈述:一句话 / 一个词 / 一个标题文字模板优先
relation有关系:对比 / 并置 / 因果 / 包含 / 递进 / 聚合 / 循环文字模板不在候选集里——手做,或栏目 skill
data具体的量、步骤或拓扑同上
decor不承载信息(转场 / 角标)中性块 / 栏目 skill

⚠️ relation / data 两档,gtrk mg lint 会硬拒文字模板颗粒(判据取产物内嵌的 v:"text-v0" IR,改名骗不过去)。这不是建议,是闸。

⚠️ 被禁的是「从库里捞一个套上」,不是「用文字」。 用排版画关系的手写颗粒 ——并置两列、中间破折号连起来、右列更重——正是这一档要的东西,它没有内嵌 IR,闸不拦。 区别不在媒介,在有没有为这个意思专门做设计。

relation 档的手做样例(照着改,别去库里找)

一块半透明面板,小标题 + 两行并置 + 落款:

┌─────────────────────────────┐
│        边界的姿态            │  ← 小标题,字重轻,字距开
│                             │
│    温柔  —  坚定             │  ← 两列同基线,中间破折号把它们连起来
│    和善  —  有立场           │     右列字重更重(它是「立场」那一侧)
│                             │
│  语气可以柔软,立场必须清楚    │  ← 落款,最小号
└─────────────────────────────┘

它是纯文字画的,但它表达的是一个关系(语气 vs 立场的对照)。 关系靠三样东西成立:同基线的两列、把两列连起来的破折号、右列更重的字重。 去掉任意一样,它就退回成四行不相干的字。

⚠️ 模板库给不出这个:103 件全是单 / 双槽位的标题与字幕, 结构化排版不在它的表达力射程内。这不是库没做好,是这一档本来就该手做。

⚠️ 这个样例留在图纸里是有目的的:没有样例,「自己做一个」那块肌肉会随图纸一起萎缩。 (正本:gitruck-infra/docs/同合云顶层设计文档/模板化对自由创意的侵蚀.md §三 第二种损失。)

⚠️ 排产顺序:先原创,后套用

gtrk mg fetch --source text(派单模式)在本片仍有 relation / data 槽位没产出源 HTML 时会拒绝执行,并列出是哪几个 beat。

为什么是顺序:连着看过十几颗现成品之后,「MG 该长什么样」的默认印象已经被那批东西定住了; 这时再自由发挥,发挥出来的多半还是它们的形状。顺序本身就是一道隔离。

⚠️ 它牺牲了「先铺一批模板看整体效果」这种工作法。要保留只能走 --allow-template-first --why "<一句话>"(一次性例外,不是开关)。 理由会写进 <工程>/split/mg-exceptions.json——终端会消失,工程文件不会, 日后翻这条片子的人查得出当初为什么按了例外。

文字模板工作流(同合云自家模板 → 改字/改效果 → lint → 铺)

与中性块是两条路,别混。中性块来自第三方、是骨架,要改字体换色板才合规(机械改写八条); 文字模板是我方 clean-room 重写的成品,MUST NOT 做机械改写、MUST NOT 直接改 HTML。

为什么不能直接改 HTML:每颗文字模板都内嵌了产生它的 IR 与两个哈希,颗粒因此自带 「我是由这份 IR 编出来的」的证明(三态:ir 可云调 / detached 已脱离 / html 普通颗粒)。 手改一个字节,它就从 ir 掉到 detached——gtrk mg edit 和客户端属性面板都会拒绝它, 云端再也调不动。gtrk mg lint 会报非致命的 x-ir-detached 提醒你这件事。

逐槽位:

  1. 候选:gtrk mg fetch --source text "<检索词>" --top 3 --json(中文词可用:开场 / 字卡 / 标题 / 字幕 / 强调 / 打字机 / 字条 / 引用 / 气泡 / 故障 / 竖排 / 闪光 / 清单 / 计数 …)。候选态离线可用;目录走远端择新、随包兜底,命令会明示这次用的是哪一版、从哪来的。
  2. 取块:gtrk mg fetch --source text --pick <模板 id> --slot <beatId> --project <目录> --json,或独立模式 --as <composition_id> [--duration <坑位秒>] [--out <目录>]。落盘即可铺,不需要改写。
    • 落点与时长由命令钉定,你不用管(fix-mg-fetch-text-slot-identity):派单模式的 composition_id 取自 dispatch.mg 那条(<工程slug>-<beatId>,不是 --slot 收的 beat id),产物落 <产物目录>/mg/<composition_id>.html;颗粒内嵌 IR 的 id 与 canvas.duration 被一并钉到「期望 id」与「坑位包络 + 0.3s 余量」(铁律⑦),贴模板末尾的层跟着钉,然后走 mg compile 同一条本地编译链重编。产物因此仍是 ir 态(云端还能改),且 mg lint --dispatch 的 1-cid-expect 天然对得上。
    • --slot 与 --duration 互斥:派单模式的包络由 track_st / track_ed 定,显式给时长会与它打架;独立模式才用 --duration。
    • 出参里的 pinned 写明改了什么(id 的 from→to、duration 的 from→to、被钉的层);两者都没改、且目标画幅就是模板的 1920×1080 时 changed:false 且原字节落盘(不重编)。
    • 画幅也由命令定(fix-text-template-canvas-not-compiled):派单模式按工程 .gtrk 的 video_size 编,出参 canvas / canvas_from 写明用了哪个画幅、从哪来;画幅不是 IR 改动,pinned 不记它。
    • 满屏槽位拿不出实心底 ⇒ 致命 x-category-opaque,拒落盘(gate-fullscreen-slot-needs-solid-bed)。 判据只看产物——「这颗有没有满屏实心底」,不看它是不是模板颗粒。 ⚠️ 派单模式下通常不用你操心:dispatch.mg[].bg 写了底色的话,取块时会自动钉进 canvas.bg,声明当场兑现。撞上这条红一般意味着派单只声明了 fullscreen 却没给 bg —— 两条出路:① 这颗本来就该是叠加 ⇒ 改派单的 category 为 overlay; ② 确实要盖住画面 ⇒ 给派单补 bg,或手动在 IR 里写 canvas.bg(编译器会产成根下第一个全幅子层)。 MUST NOT 靠「加一层 shape 当底」绕过:那种写法的覆盖面取决于祖先定位与 transform, 静态判不出来,opaque 登记不上(画出来了但成片按透明叠加处理)。
    • 反方向(槽位派 overlay、颗粒却是实心)仍是非致命告警:那只是多盖了底轨,看得见、改得动, 不是「以为有其实没有」的静默落空。两个方向后果不对称,判据也就不对称。
  3. 改字(L0,0 积分):把内嵌的 IR 存成 <id>.ir.json,改 slots 里的文字(也可改 colors / font / stroke / shadow / canvas.duration),然后 gtrk mg compile <id>.ir.json --out <目录>。竖屏 / 方形工程加 --canvas <工程画幅>(如 --canvas 1080x1920)——.ir.json 里不记画幅,不给就按 1920×1080 编;给颗粒 HTML 重置时缺省沿用那颗自己的画幅。
  4. 改效果(2 积分/候选):gtrk mg edit <particle.html> --say "打字机快一倍,副标改成青色" [--n 1|3]。--n 只收 1 或 3,它就是计费单位数。返回的候选带 scope:L1 = 在模板可调范围内,L2 = 越界了、等于新生成(不是失败)。服务端说做不到时会给一句 refusal,如实转述给用户——他要的是「为什么不能」,不是一个没有解释的错误。
  5. lint → 铺:同中性块,gtrk mg lint 过致命项 → gtrk mg --project <目录>。
  6. 竖屏 / 方形工程:文字模板按工程画幅现编(IR 住在 1920 参考系、画幅是编译入参),不用另做。
    • 派单模式缺省就取工程 .gtrk 的 video_size,不用给 --canvas;给了却与工程不符命令会拒(跨比例挂载是非等比缩放,铺进去就是拉伸)。
    • 找不到 .gtrk(只给了 --dispatch、或工程文件不在 gtrk/project.gtrk / project.gtrk)时会按 1920×1080 编并提示——竖屏工程看到这句提示就补 --canvas 1080x1920 重取。
    • 独立模式没有工程可取:竖屏要显式 --canvas 1080x1920。
    • 取完核一眼出参 canvas 等于工程画幅再铺;1.3.7 及更早的 CLI 无论给什么都出 1920×1080,见到竖屏工程里取来横屏颗粒先 gtrk upgrade。

中性块工作流(registry 骨架 → 改内容审美 → lint → 铺)

快照随包(钉 commit,候选态离线可用);取块走三源(我方镜像优先,大陆可达)并校 sha256;改写八条是机械活(template 包裹 / 改 id / 去 data-start 贴坑位 / 实心底下沉 / GSAP 源 / 字体 / 时长贴坑位 / 信箱缩放),内容与审美不在机械活里。

逐槽位:

  1. 候选:gtrk mg fetch "<按 handoff.theme 与 beat 语义组的检索词>" --top 3 --json(中文词可用:数据 / 图表 / 标题 / 字幕 / 转场 / 通知 / 代码 / 地图 / 手写 / 卡片 / 片头 …)。把 2–3 件候选连海报链接给用户选(候选选择是检查点,形状同 matrix 的 B-roll 候选);快速成片模式取首选、铺完在抽帧检查里一并给用户看。[review] 件可选但 MUST 真渲验收(多为 canvas / 铁律 8 高危形态);[excluded] 不在可取范围,命令会拒。
  2. 取块改写:gtrk mg fetch --pick <块名> --slot <beatId> --project <目录> --json——从派单取 composition_id / 坑位包络 / category,产物直接落 <产物目录>/mg/<composition_id>.html。返回里的 editable(文案 / 数值数组 / 色值)就是你下一步要改的地方。
  3. 改内容与审美(你的活,MUST 做):按 beat 语义改文案与数据;色板与字体——有栏目 skill 按栏目的,没有按公约 §三「内容驱动的临场泛化」全片自洽一套;MUST NOT 把块的示例文案 / 示例数据 / 默认色板原样铺进成片。字体缺省已换成运行时镜像可证的 CJK 字体,要换用 --font。
  4. lint → 铺:gtrk mg lint 过致命项 → gtrk mg --project <目录>(与栏目产颗粒同门槛)。
  5. 竖屏 / 方形工程:registry 中性块只有 1920×1080 一种几何(块是手写 HTML、尺寸写死在块里,--canvas 给别的画幅会被拒),不适用。派单模式下工程 video_size 比例不是 16:9(容差 7%:4K 横屏与 DCI 17:9 照取)命令会在下载前拒、不落盘;改走 --source text(文字模板按工程画幅编,见上节)或栏目 skill 按工程画幅产颗粒,MUST NOT 拉伸。

独立模式(脱离派单补一颗):gtrk mg fetch --pick <块名> --as <composition_id> --duration <坑位秒> [--category overlay|fullscreen] [--out <目录>],随后同 gtrk mg render 的独立颗粒路。

生产 skill 是栏目的纯净资产:它只懂本栏目的视觉语法、只产 html-particle 颗粒,不知道 gtrk 命令、不知道产物落哪。由本 skill 驱动它、并由本 skill 负责让它以 gtrk mg 要读的路径为写入路径:颗粒 SHALL 直接写到 <产物目录>/mg/<composition_id>.html,MUST NOT 先写 agent 自有目录再拷入(中转本身即违规,见上「产物落点纪律」第 5 条)。举例(仅示意解析机制,非硬编):real-roam-guide 栏目配置里 style.skills 有一条 {produces:"MG", ref:"…/real-roam-viz"} → 驱动它产颗粒;换个栏目、换个 ref,产颗粒的就是另一个生产 skill。本 skill 正文里不绑死任何栏目的生产 skill。

逐槽位工作流(产 → lint → 铺,循环到铺满)

产物落点纪律(MUST · 全文见随包 AGENT.md 同名一节): 交付物 MUST NOT 先写 agent 自有目录再拷进工程;中转本身即违规,体积不是豁免理由。 一切产物(颗粒 HTML / 成片 / 预览 / 素材 / 工程文件)只落工程目录(颗粒恒存 <产物目录>/mg/)或用户显式指定的输出路径; MUST NOT 把成片、预览或任何大媒体文件复制到 agent 自有工作目录(如用户文档目录下 agent 产品自建的目录、agent 家目录缓存、会话工作区)——需要引用媒体时用原路径引用,不做副本; 临时文件(抽帧图等)一律放系统 temp 且用完即删。交付物直接写入工程目录或用户显式指定的路径;引用媒体用原路径。

1. 看板起手:先看 dispatch.mg 有哪些槽位、铺到哪了

gtrk mg status --project "<split产物目录>" --json
  • 汇总 MG 流水线:dispatch.mg beat 槽位总数 / 已产源 HTML 数 / 已铺进 .gtrk 数,并逐 beat 标注(缺 HTML / 已产未铺 / 已铺)。
  • 每个槽位有 composition_id(主颗粒 = <工程slug>-<beatId>;overlay 叠层派生颗粒 = <工程slug>-<beatId>-aux<n>)与 handoff(theme / duration_hint(秒)/ category 等)。这些是你交给栏目生产 skill 的产片订单。

2. 逐槽位产颗粒(驱动栏目 MG 生产 skill)

对每个「缺 HTML」的槽位:把它的 composition_id + handoff(theme / duration_hint / category:overlay 透明叠加·不挡主体 / fullscreen 不透明满屏)+ beat 语义上下文,交给第「业务分离」节解析出的栏目 MG 生产 skill 产一颗 html-particle。产颗粒时 SHALL 直接以 <产物目录>/mg/<composition_id>.html 为写入路径(MUST NOT 先在别处产再拷过来)(gtrk mg 就从这里读)。

  • 产前先抽帧看底轨(overlay 槽位必做,别只凭派单盲产):颗粒最终要叠在真实画面上,构图必须因势象形。对该槽位挂点用本地 ffmpeg 抽 1-2 帧(ffmpeg -ss <track_st秒> -i <底轨视频> -frames:v 1 "<系统temp>/<beat>.jpg",成本≈0;抽帧图是临时文件——落系统 temp、用完即删,别落 cwd / agent 自有目录)看清三件事——①真人主体/人脸的位置(颗粒 bbox 避开,呼应栏目「不盖说话人」铁律);②该处是否已有烧入包装或 AI 画面(有 → 别铺这颗,报用户裁决——二次过毛片高发);③画面明暗基调(深底/浅底影响衬底与配色取舍)。把这些连同抽帧图一起附进产片订单交给栏目生产 skill;fullscreen 槽位可免(满屏不透明无避让问题)。
  • 产片订单必须附带坑位硬约束(gsap-emit v1 铁律⑦):颗粒 GSAP 时间线总长 ≥ 坑位时长(该槽位 track_ed − track_st 包络,不是 duration_hint)+ 0.3s 余量;duration_hint 只是动画主叙事节奏参考。主叙事播完后颗粒必须定格保持或有限循环驻留到坑位末尾;禁止全局渐隐、整体退场或清空画面。
  • -aux<n> 叠层颗粒同样处理:gtrk split 若在某 beat 的 aux_layers 派了 overlay,会派生 <beat>-aux<n> 进 dispatch.mg(多为 B-roll 底轨之上叠透明概念图解)——照样产、照样存到对应 composition_id.html。
  • 画幅 = 工程画布(竖屏 / 方形工程同样适用):颗粒根 data-width / data-height MUST 等于 .gtrk 的 video_size(竖屏 1080×1920、方形 1080×1080……),写进产片订单。gtrk mg lint --dispatch 与铺轨会按工程 video_size 比对颗粒声明的比例,跨比例判 1-canvas-match 致命、不铺(挂载是非等比缩放,铺进去就是拉伸);同比例不同尺寸(4K 工程里的 1920×1080 颗粒)放行。裸 gtrk mg lint <file> 不知道目标工程、只核正整数,所以仍要在订单里钉死。gtrk render / gtrk project export 的颗粒预渲按颗粒声明比例捕获(竖屏 720×1280,横屏照旧 1280×720);1.3.7 及更早的 CLI 一律按 1280×720 烤,竖屏颗粒会横胖竖扁,见到这种症状先 gtrk upgrade。客户端导出剪映 / PR 走客户端自己的颗粒预渲,客户端跟进前竖屏颗粒仍可能压扁,以 gtrk project export 的产物为准。
  • category 决定叠法:overlay 颗粒背景透明、盖在 B-roll 上不挡主体;fullscreen 不透明满屏。最终透明度由颗粒 HTML 的 background 声明反推的 opaque 定,生产 skill 要让二者自洽(lint 会查)。「实心底该写在哪个元素上」的正本条款是 contracts/gsap-emit-v1.md 铁律 4——本 skill 不复述元素位置,改了要以契约为准;fullscreen 颗粒把实心底写错地方会吃非致命 4-bg-on-root(见下节)。

3. lint 门:铺之前先单测每颗(不过就退回生产 skill,别硬铺)

gtrk mg lint "<产物目录>/mg/<composition_id>.html" --dispatch "<产物目录>/split/dispatch.json"
  • 纯本地静态校验颗粒 HTML 的铁律机器可判定子集:<template> 包裹、data-composition-id + 根 data-width / data-height(正整数)、gsap.timeline({ paused: true })、window.__timelines 注册、无 Math.random / Date.now(可逐帧 seek 的确定性)、自包含无相对外链、background 声明与 opaque 自洽…;给 --dispatch 会额外校验 composition_id 命中派单。
  • 1-cid-expect(致命)——复制改名必查:颗粒内部的 data-composition-id 必须等于期望 id(--dispatch 命中时 = 该条派单的 composition_id,否则 = 文件名)。你从别的颗粒复制模板时最容易漏改内部 id:那样铺出来的 clip 指向 A、文件注册的却是 __timelines["B"],渲染必错,且两颗粒抢同一个 [data-composition-id] 样式作用域。改名的临时副本(./tmp.html)不比对,不会误伤。
  • 1-canvas-match(致命)——画幅比例对不上:给了 --dispatch / --project 时按工程 .gtrk 的 video_size 比对颗粒根声明的比例(容差 7%:DCI 4K 这类 17:9 工程里的 16:9 颗粒放行,接受 6.7% 横向拉伸),铺轨同一口径。横屏颗粒进竖屏工程就是这条。回步骤 2 让生产 skill 按工程画幅重做;文字模板在派单模式下重取即可(缺省就按工程画幅编)。工程缺 .gtrk 或 video_size 不合法时这条不跑,命令会明说「本次颗粒画幅未与工程比对」。
  • 铁律④⑤「体积上限」两项(正本条款 = contracts/gsap-emit-v1.md 铁律 4⑤;上限同源自客户端颗粒运行时,不是 CLI 的取舍):
    • 4-html-size(致命,命中即短路、其余项不跑):颗粒 HTML 超过 2,000,000 字符,客户端无法加载。文案会点名最大的一段 data: URI。处置:按实际显示尺寸裁剪缩放,不透明图改 JPEG/WebP;仍超就把大图放图片素材轨,颗粒只留透明叠加层。云渲成功不代表客户端可加载。
    • 4-html-size-heavy(非致命):500,000~2,000,000 字符——客户端每次 seek 都把颗粒根节点的 outerHTML 整份快照回传,体积直接决定预览帧率。能缩就缩;不拦铺轨。
  • 铁律④「实心底与透明度」两项恒非致命(正本条款 = contracts/gsap-emit-v1.md 铁律 4;本处只说看到该码怎么办,元素位置以契约为准):
    • 4-bg-on-root:这颗把实心底写在了根元素的 style 上。根元素的绘制属性会在子合成挂载时被丢弃——那层底在成片里一个像素都不落地:前景照常渲出、底没了、底轨透出来,观感是「浮空面板」;而本地播放器与客户端预览都看不出(预览会按登记的 opaque 位自己给根盒打底,对这个问题结构性失明)。报了要回步骤 2 让生产 skill 把实心底下沉为子层——改法是机械的(把那条 background 声明整体搬到根下第一个全幅子层,根上改写 background:transparent)。⚠️ 它不影响退出码、不拦铺轨(避免存量颗粒一夜之间铺不进去),但不是可以放着不管的噪音:不改就是出片丢底。
    • 4-bg-explicit:根与根下首个全幅子层都没有 background 声明 → lint 只能按「透明叠加」处理。契约要求透明与否显式:满屏颗粒在全幅子层写实心底,透明叠加颗粒在根写 background:transparent。别靠「不写」表达透明——作者与机器都分不清「想透明」和「忘了想」。
    • 两项都只看 background 声明摆在哪,不看色值(色值属栏目审美,契约不管)。opaque 的推导面 = 「根 style ∪ 根下首个全幅子层 style」,与契约铁律 4 同源;合规的子层写法会正确识别为不透明。
  • 铁律⑦ 估长三项恒非致命、不是放行凭据(--dispatch 命中派单条目才跑,因为要拿该条的坑位包络):
    • 7-fill-slot:静态估长 < 坑位包络 → 「疑未占满」。估长是下界(表达式 position、非字面量 duration 那些调用算不了、跳过不计),报出来基本就是真短,回步骤 2 让生产 skill 把驻留补到坑位末尾。
    • 7-no-estimate:一条时长调用都解析不到 → 明说「铁律⑦这颗没校验」,不是通过。这时 tl 总长只能靠真引擎 seek 或人读代码确认,别当它过了。
    • 7-infinite-repeat:颗粒里写了 repeat:-1 → 总长变 Infinity、铁律⑦不可验证。让生产 skill 改成按坑位算死的有限次数:repeat = ceil((坑位 − 循环起点) / 单圈) − 1。
    • 三项都不影响退出码、不拦铺轨——真判据是渲染引擎逐帧,静态估长只做提醒。但「没报 7-fill-slot」≠「时长够了」,要看是否同时出了 7-no-estimate。
  • 铁律⑧「重复图元合并」为恒非致命提示,但看见必须处理:
    • 8-primitive-merge:这颗有一批由循环直接创建、或由循环调用具名工厂创建的可合并重复图元;它们落到同一父节点,且没有逐元素动画驱动。纯数字循环可算且同父累计 ≥ 8 时会报数;边界算不出时会报「条数未知」。逐元素 gsap.set / tween、或作为 tween 首实参使用的元素数组会被排除。
    • 本项报的是「这批图元可无损合并,合并后画面逐像素不变」这一写法事实,不是「该颗粒有缺陷」或「超过某个数量会出问题」;真实触发轴未知。反过来,没报也不代表安全,真判据仍是真渲染出片抽帧。
    • 处置:回步骤 2,把原始提示完整交给栏目 MG 生产 skill,让它把整组同步驱动的网格 / 排线 / 刻度 / 点阵合成单元素(SVG 用一条 <path> 多子路径;同色分档可分档合成),然后重产、重 lint。别硬铺,也别当没看见;CLI 为兼容存量把它做成非致命、不影响退出码、不拦铺轨,不等于 agent 可以跳过修正。确需 stagger / 逐条画入 / 逐个变色的逐元素动画批次属于契约豁免,不要为了消项删掉动画身份。
  • 「回调与 seek 语义」三项恒非致命(报了不用改颗粒):
    • x-callback-driven:颗粒画面由时间线回调写 DOM 驱动时,回调可达性由引擎侧契约保证。本项保留为哨兵;若引擎实现变化导致回调不跑,画面可能静默停在初始态。不要因此改写生产 skill 或自行添加垫片。
    • x-engine-api-override:颗粒运行时覆写 tl.seek 或替换 __timelines[…] 时会绕过引擎接口。既有垫片可保留,但新颗粒不要再加。
    • x-raf-interval:颗粒里有 requestAnimationFrame( / setInterval(。这类自有时钟不被 seek 驱动,逐帧渲染时等于冻结(契约明令:所有视觉变化必须挂在 tl 上)。静态正则分不清用途,报了要人眼确认它是不是在驱动画面;若是 → 回步骤 2 让生产 skill 改挂 tl。
    • 另:引擎不抑制回调 = 逐帧 scrub 时 onComplete/onStart/onRepeat 会反复触发。颗粒里别写「只跑一次」的回调(累加计数 / push 数组 / 一次性 DOM 插入),要写成每次从补间状态重算的幂等形式。
  • 成本项 c-filter-* 三项恒非致命、当期全部不拦铺轨(正本条款 = contracts/gsap-emit-v1.md「渲染成本:真卷积滤镜」一节):这组查的是每帧成本、不是正确性——命中的颗粒画面是对的,只是渲得慢。
    • c-filter-animated:时间线补间直接驱动了真卷积滤镜(filter:blur()/drop-shadow(),或补间驱动 SVG feGaussianBlur 的 stdDeviation)。滤镜值一变,上一帧的卷积结果当场失效、缓存彻底失灵,是这组里最贵的形态。处置:回步骤 2 让生产 skill 改用 opacity / transform(scale/位移)表达同一叙事动作;确需滤镜就做成静态两态切换。不拦铺轨。
    • c-filter-static-fullbleed:整幅静态真卷积滤镜(该声明自身就是 position:absolute;inset:0 一类铺满形态)。每帧对整幅做一次卷积。首选改法是缩小被滤镜覆盖的几何面积(面积一项同时压掉卷积与整幅逐帧合成两笔成本);次选把静态滤镜结果预烘成图,且必须是 RGBA PNG(透明叠加颗粒的 alpha 是成片合成的必需通道,烘成 JPEG 或无 alpha 格式会在成片里塌成不透明色块),但预烘只消得掉卷积、消不掉整幅逐帧合成,收益有上限。去不去滤镜属审美取值,判断权在作者,本项只给信息与改法。不拦铺轨。
    • c-filter-indeterminate:补间的 filter 值不是字符串字面量(变量 / 模板串 / 函数返回),lint 对该处没作判定——既不是「判过且通过」,也不是命中。人眼确认它到底会不会驱动 blur / drop-shadow;会就按 c-filter-animated 的改法处理。不拦铺轨。
    • box-shadow 整族不在射程内(含 box-shadow: 0 0 0 Npx 这类零卷积脉冲写法,也含带模糊半径的写法)——看到 box-shadow 没被报不是漏报,是既定射程边界。
    • ⚠️ 没报 ≠ 这颗便宜:这三项是形态提示,真判据永远是实际渲染计时;不要把单批素材的收益外推到所有语料。
  • id 前缀读法(三个命名空间,别按前缀反推错阻断行为):数字前缀 1-~8- = 契约铁律项,致命性按项声明(4-html-size 致命且命中即短路;其余 4-* / 5-* / 7-* / 8-* 非致命);x- = 哨兵项,恒不拦;c- = 成本项,致命性按项声明,当前三项均不拦。
  • 不过(非 0 退出、逐条报因)→ 把报错原样丢回栏目 MG 生产 skill 修,重产重 lint,别硬铺。铺一颗不合规颗粒会污染工程。
  • 只想批量干校验不写回:gtrk mg --project <dir> --lint-only(有 beat 没过就 ok:false + 非 0 退出,工程一个字节都不动)。

4. 铺轨:全槽位就绪后铺进工程(叠在 B-roll 之上)

gtrk mg --project "<split产物目录>" --json
  • 读 dispatch.mg → 逐 beat 从 <project>/mg/<composition_id>.html 取源颗粒 → lint → 铺进 .gtrk 的 beat_track,把 struct_meta.mg 原子写回。幂等:重铺先剥旧自产轨再 append,用户在 opencut 手加的轨零连带。
    • ⚠️ 「哪几条轨是我们的」按内容判,不按轨号判(fix-mg-lay-track-identity)。工程被客户端打开保存过之后,track_index 会整体重编(客户端按当刻车道顺序现场发号,契约明写它会漂),而且一条 beat 轨可能被劈成两条(含物化颗粒视频的那些会单独成轨)。所以账本里记的号常常已经指不中了。
    • 重铺前看结果里的逐轨识别结论(tracks[]:self-produced / self-produced-edited / user-track 各带一句依据)。self-produced-edited = 号漂了但内容对得上,良性降级不是故障;某条轨号在册却判成 user-track,说明重编号之后那个号撞上了别人的轨——保留是对的。
    • 剥离面口径(= 「本次会剥掉什么」,和「本次铺什么」是两件事):
      • --only <beat> = 只剥命中的那几颗(真增量合并)——轨上其余已铺颗粒连同用户手调原样保留。
      • 全量重铺 = 剥掉登记里的全部自产轨再整轨重建,唯一例外:本次派单里有、却因缺 HTML / lint 未过 / 重投影后零存活而没铺成的那些(skipped 里那几颗),它们上一轮的 clip 留在轨上——不会因为新的做坏了就把旧的也毁掉。反过来,派单里已不存在的已铺条目(你重跑过 gtrk split、这个 beat 不做 MG 了)仍照剥:那是计划变更,不是做坏了。
      • 所以「轨上共几颗」不一定等于「本次铺了几颗」——差额就是 kept(见下 --json),必须一起读。
      • 真要重置整轨(连其余已铺颗粒一起剥掉重来):加 --replace-all 显式授权。
    • 素材表不再囤积(剥离键按「自产身份 × 零引用」判,不认客户端可改写的 html_material 前缀): 在 opencut 里编辑过工程之后重铺,旧的自产素材条目照样剥得掉,mg- 素材数恒等于轨上颗粒数; 重复 / 孤儿条目会在下一次重铺时一并清掉。非自产素材零连带——broll-*、ex-solid-* 垫轨、你自己加的素材一条不碰(哪怕它当前没被任何 clip 引用)。盘上 assets/mg/ 的 html 副本从不删。
  • --json 输出:{ ok, mode:"lay", laid, track_total, kept, kept_ids, removed, skipped, reason?, integrity?, … }。
    • laid = 本次铺成数;track_total = 轨上现存已铺数;kept = 其中上轮遗留(本次没重铺)的颗数。三个数一起读——只看 laid 会让「铺 1 颗、剥 20 颗」跟「补铺 1 颗」长得一模一样。恒有 track_total = laid + kept。
    • kept_ids = 上轮遗留的 composition_id 清单。要判断轨上某颗是不是这一轮的版本,看它在不在这里——kept > 0 就意味着轨上内容与本次派单不完全对应(要全部刷新:去掉 --only 全量重铺)。
    • removed = 本次被剥掉的旧自产颗粒数(= 上一轮已铺里没被保留下来的,含「剥了再铺」的那些)。
    • skipped = 缺 HTML / lint 失败的 beat(不拦其余)——回步骤 2 补产、重铺,别当没看见。注意它和 kept_ids 会重叠:某颗这轮没铺成(进 skipped)、上一轮那条还留在轨上(进 kept_ids),画面在但不是新版本,跟用户说清楚。
    • reason = 非全绿时的机读判据:skipped(部分没铺上)/ empty_queue(拒写回,工程未被改动)/ no_project(工程缺失未铺轨)。
    • reprojection = 本次落轨时码的来源与漂移摘要(恒出,--lint-only 也有):{ mode:"reprojected"|"dispatch_snapshot", degraded, reason?, drifted, max_offset, shrunk:[…], dropped:[…] }。 时码是现场重投影出来的:命令每次都用 transcript × 当刻 .gtrk 重算每个 beat 的窗口(与 gtrk split 落地同一段代码),dispatch.json 里的时码只是投影那一刻的快照。所以用户在 split 之后微调口播轨不用回去重跑 gtrk split,只有拆分稿本身变了才要重跑。 drifted > 0 = 这次铺的位置和派单上写的不一样(正是它该做的),把条数与 max_offset 报给用户;dropped 里的 beat = 那段已被整个剪出成片,故意不铺(不会按快照塞回去)。
    • integrity = 素材落盘自检(与 gtrk matrix 同名同形):写回工程之后自动查一遍 「materials[].path 是不是真的都落盘了」。只在真写回过的运行里出现(no_project / 拒写回 / --lint-only 时字段缺席 = 本次没查,别当成「查过且干净」)。 dangling = 悬空引用全量(相对路径素材登记在、文件不在,每条带 referenced 与引用位置 refs); danglingReferenced / danglingOrphan = 被时间线引用数 / 孤儿数——两者严重度差一个量级,回报时分开说; external = 绝对路径素材找不到文件(另一档,不进 dangling)。 告知不拦阻:查出悬空不改 ok、不改退出码、不删任何东西;非零就报给用户(哪几条、在哪一段), 多半来自客户端「确认原片」下载中断,修法在客户端而不在这里。别自己去删素材或文件。
    • 退出码:ok:false 一律连带非 0 退出(含「有 beat 被 skip」这种循环中途的正常态)。别把非 0 读成「命令崩了」——它说的是「这一轮没全铺成」,按 reason / skipped 处理后重跑即可。
  • 只铺单个 beat:--only <beatId>(收的是 beat id 如 B12,不是 composition_id;主颗粒 + 其 -aux<n> 叠层一并选)。
    • 语义 = 真增量合并:只重铺命中的那几颗,轨上其余已铺颗粒原样保留——连它们的透明度与用户在 opencut 的手调一起活着(保留的是既有 clip 原件,不是照登记重建的)。适合迭代改单段。
    • 保留下来的那几颗不重新 lint、不重新复制源 HTML:工程是自包含的,<project>/mg/ 下对应源文件即便已经删了也不影响。
    • 代价看 kept / kept_ids:轨上会同时存在「本次这版」和「上轮那版」。要把全部颗粒刷成最新(含按当刻时间线重投影的新位置),去掉 --only 全量重铺(幂等、多铺几颗不花钱)。
    • 确实要重置整轨(连其余已铺颗粒一起剥掉重来)才加 --replace-all 显式授权。
    • 仍会拒写的唯一情形:本次一条都没定位到(--only 打错 beat id、dispatch.mg 为空、或本次条目全被 skip)而轨上已有已铺颗粒——那是派单或选择器出问题的信号,不是清空指令,CLI 拒绝写回并报因(.gtrk 逐字节不变)。
  • 铺完必核「clip 占满坑位」:读回 .gtrk,各 beat clip 的时长必须 = 槽位包络(track_ed − track_st),不能使用 duration_hint 作为落轨时长。若发现 clip 短于坑位,把 dispatch.mg[] 各条 duration 改为包络秒数后重铺。

5. 循环到铺满

多 MG 槽位就循环「产 → lint → 铺」直到 dispatch.mg 全部铺满(gtrk mg status 逐 beat 全标「已铺」、gtrk mg 的 skipped 为空、ok:true 且退出码 0)。循环中途 skipped 非空时命令按 ok:false + 非 0 退出如实上报,那是「还没铺满」不是「命令失败」——照常补产重铺即可;--lint-only 同口径。

循环里别用 --only 逐颗铺:--only 是增量的(安全,不会铲掉别的),但它只刷新命中的那几颗——轨上其余颗粒会一直停在上一轮的版本与上一轮的落轨位置(kept_ids 会如实点名)。循环的正确姿势是每轮都全量重铺:铺轨幂等,多铺几颗不花钱,而且顺带把全部颗粒按当刻时间线重投影一遍。--only 留给「已经铺满、只想改某一段」。

旧名 gtrk rrv 是去品牌化前的弃用别名(仍能跑但会打提示)——一律用 gtrk mg。

读结果、给用户交代(别只说「铺好了」)

  • 铺了哪些:laid[] 的 composition_id,对应哪些 beat;其中哪些是 overlay 透明叠加(盖在 B-roll 上)、哪些是 fullscreen 满屏。
  • 没铺上的:skipped[] + 原因(缺 HTML 还是 lint 失败 / 重投影后零存活)——如实说,别谎报全铺;已补产重铺的说清楚补了哪几颗。
  • 落轨位置变了要说:reprojection.drifted > 0 时报出「本次按当刻时间线重投影,N 个 beat 的位置与派单不同、最大偏移 X 秒」。这是对的(用户改过口播轨),但必须让他看见,别悄悄改掉。
  • 报「已降级至派单快照时码」(reprojection.degraded:true):不是故障、没拦你,是算不出当刻窗口、退回了可能已过期的快照。照 reprojection.reason 给出路——transcript_missing → 把 transcript.json 补回产物目录(transcript/ 或 json/ 下),或用新版 gtrk oralcut 重出产物;no_project/gtrk_unreadable → 把工程放回 <产物目录>/gtrk/project.gtrk 或 --project 指对目录;no_material_clip → 口播主轨被整条删了 / relink 换了素材 id / 拿了另一个工程的 dispatch。用户接受快照也行,但要如实说「这批位置按的是上一次投影的时间线」。
  • 轨上有几颗不是这一轮的:kept > 0 时点名 kept_ids——「这次只重铺了 N 颗,轨上另外 K 颗是上一轮的(位置和内容都还是旧版),要全刷新就全量重铺一次」。别让「铺轨完成」读起来像轨上全是新的。
  • 想在 opencut 里精修颗粒(手调参数/时长)→ 提示用户可打开工程手调。但要把话说全:手调只在「这颗没被下一次重铺命中」时活得下来——--only <别的 beat> 或全量重铺时被 skip 掉的那几颗会原样保留(含手调);一旦某次重铺真的铺到了这颗,CLI 自产的新 clip 会整条覆盖它,手调就没了。要长期保留的手调,别放在 CLI 自产的 MG clip 上。

交棒 render 收口(你是最后一层,别停在铺完)

dispatch.mg 全铺满、gtrk mg status 全绿后别收工——你已是最后一层,顺势收口。快速成片模式先 gtrk subtitle lay --project <目录> 把字幕上好(样式取用户拍板值,没选用 default)再 gtrk render 出片。一句话交代即推进:「MG 颗粒已叠铺完,我接着上字幕出片」。

⚠️ render 收口会花钱

gtrk render 现在会把 MG 颗粒真的渲进成片——做法是把每颗颗粒送去同合云烤成透明 MOV,再本地叠。于是这条命令不再是零计费:

  • 计量 = 唯一颗粒数 × 未命中缓存数(按分钟)。同一颗粒在轨上出现 N 次只烤一次。
  • 第二次渲染全命中缓存 ⇒ 零计费;用户先在客户端导出过剪映的工程,CLI 首渲即全命中(两端共用同一份工程目录缓存)。
  • 未命中时 CLI 会先出预估并要确认。--yes 跳过确认;--json 模式下必须显式 --yes,否则硬拒。
  • 不想花钱:--no-particles 出无颗粒版(B-roll 等 overlay 轨照常合成,那部分零计费)。

MUST 在推进前把这件事说给用户(一句话即可:「渲这条会对 N 颗未命中缓存的颗粒云渲、约 X 分钟计费;不想花钱可以先出无颗粒版」),MUST NOT 一声不吭替他确认。

剪映交付的 alpha 口径(正本 = contracts/gsap-emit-v1.md「Alpha 交付口径」)

  • 颗粒里一律写直通 alpha,半透明光晕 / 渐变 / text-shadow 软晕都合法;别为迁就剪映把半透明色改暗或回避半透明,预乘是云端 qtrle 转码的义务(infra fix-qtrle-premultiplied-alpha-for-jianying),CLI 与颗粒 MUST NOT 再乘一次。
  • lint 报 x-soft-alpha(非致命)= 这颗含半透明面积:照常铺、照常渲;剪映验收必须使用含半透明的颗粒。若软边成了实心,先查渲染服务是否已含预乘配方。

另一条路仍在:客户端出片(opencut 打开工程 → 云渲)同样能出带颗粒的成片,且与 CLI 共用缓存。两条路选哪条由用户定。

★ 若你是走前置硬门 2 的「明示跳过 AI」进来的:收口前 MUST 把那份「AI 回铺后待复查构图」清单复述给用户(哪几颗颗粒、对应哪几个 AI beat 区间),并说明「AI 片段回铺后这几颗可能要重产」。MUST NOT 静默收口。

出片后 QC 报了缺陷:怎么落回 plan 重铺(闭环,别原地调参)

gtrk render 出片后跑 gtrk qc <成片> --gtrk <工程> --json。它报的缺陷带工程坐标(beat / 槽位序号 / clip_id / 源窗),不是一串光秃秃的成片时码——所以「换哪一段」是可答的,闭环走法:

  1. 读缺陷的坐标,定位到是哪个 beat 的第几槽、用的哪条 clip_id 的哪个源窗。
  2. 读它给的排序备选:同 beat 里未被采用的候选段,按「稳」排序(运动量升序 → 段内切点数升序 → score 降序)。索引无运动信号时退回单维排序,回执会标注口径受限——那时别把第一名当定论。
  3. 改 plan 换段(split/broll-plan.json),把该槽位换成备选里的第一名。⚠️ 改的时候把候选条目原样搬,别自己重写 segments——cuts / motion 就住在里面,重写即丢(详见 /gtrk-matrix 的 plan 编辑口径)。
  4. gtrk matrix lay --project <目录> --plan <path> 消费改过的 plan 重铺 B-roll ⇒ 本 skill 的 MG 颗粒按增量重铺受影响的那几颗(--only <beat>)⇒ 重渲 ⇒ 再 QC 复核那条缺陷是否消失。

🔴 这是「换素材」而不是「调参数」:QC 报的多数画面级缺陷(晃、糊、闪)根子在选中的那一段本身,调 --score-floor / 阈值只会连带影响全片其它槽位。先换段,换不动再谈调参。

⚠️ QC 是只读诊断:常规扫描零写库。只有显式带回流开关时才会把确认的切点补录进本地索引(治检测阈值漏网),无法唯一映射的会跳过并报数——别把「跳过 N 条」读成失败。

逃生门:两种信号都要认(范围 + 节奏)

上面的「别收工、顺势收口」是默认,但用户表达了范围保留或节奏保留时 SHALL 停在铺完这一步、 SHALL NOT 自动上字幕出片(gtrk render 还是计费/耗时动作,更不能替他拍板)。 两者语义正交,认漏一个都会误冲:

  • 范围信号 = 走多远(我只要这一个产物):「只铺这一版 MG、暂不出片」「先不渲」「工程给我就行」。
  • 节奏信号 = 怎么走(每步停等我):「逐步推进」(本仓公约立法定名的正式模式名, 定义就是「每步停等确认」,用户会照着这么说)、「一步步来」「先 X 然后我们再说」 「我看看再定」「等我确认」。

⚠️ 词表只是举例、不是白名单——判据是「用户表达了节奏/范围保留」,换个说法照样得听懂。 特别注意「先 X 然后我们逐步推进」:用户明说了还要往下,范围逃生门逐字不成立, 但节奏逃生门成立 ⇒ 停。

停下时必须交代下一步是什么、他说一声就继续(例:「MG 颗粒已叠铺完。按你说的逐步来我先停在这, 下一步是上字幕 + gtrk render 出片,你说一声我就接着做」),别退化成事事请示。 ★ 上面那份「AI 回铺后待复查构图」清单该复述照复述——停下不等于不交代。

没有这两类信号时不改默认:仍按上文顺势收口。

渲完必看质检摘要:gtrk render 收口后会自动扫一遍成片(闪帧 / 段内跳切 / 黑帧 / 冻结 / 爆音 / 静音 / 音画不同步),落 <成片名>.qc.json 并打摘要。「严重」条目要如实转述给用户并给出路,别把有缺陷的片子说成出好了:

  • 过短镜头 / 段内跳切 → B-roll 颗粒窗口跨过了源素材的镜头切点。报「严重」时让用户在 opencut 里微调那几颗的入出点或重铺该 beat;报「备注」且属于素材自身的快剪节奏时无需处理。若索引缺少切点,先 gtrk matrix index --dirs <素材库> --rebuild 重建再重铺。
  • 音画不同步(av_drift) → 画面与配音总长不一致。本地渲染的逐段帧对齐已按累计时间线修好(不再渐进失步),所以这一项报出来就是异常:先确认成片是不是旧版 CLI 渲的,再看工程时间线本身有没有轨间长度冲突。云渲成片在后端跟进帧对齐前仍可能报此项(已知过渡态)。
  • 黑帧 → 对照铺 B-roll 时的空洞(空档补黑)告警:已登记的会自动降为「备注」,报成「提示」的是意料外的纯黑,值得回工程看一眼。

要单独复查某条成片:gtrk qc <成片.mp4> --gtrk <工程.gtrk>(带 --gtrk 才认得出段内跳切)。

原则:agent 替用户跑 CLI / 接力 skill、驱动栏目生产 skill,用户只对话——别让用户自己去终端敲 gtrk mg,也别让用户手动去 call 栏目生产 skill。


独立颗粒(精剪补充):gtrk mg render,脱离工程出一颗透明 MOV

场景:粗剪已完成、工程已导剪映,用户在剪映精剪时说「这里想补一颗动态图」——不回客户端、不重跑全流程,产一颗直接拖进剪映的透明 MOV。这不是新管线,是既有管线的旁路补给口(add-mg-standalone-render)。

⚠️ 别与上文「交棒 render 收口」混淆:那是 gtrk render(整片成片渲染),这是 gtrk mg render(单颗颗粒独立云渲)。同词不同物。

动线(agent 替用户跑全程):

  1. 现场组产片订单:无 dispatch 可消费——按用户现场需求组订单(theme / 时长 / overlay 还是 fullscreen),驱动栏目 MG 生产 skill 产颗粒 HTML。时长问清楚:它就是 --duration 的值(独立模式没有坑位包络,这个数同时是 lint 包络、成片时长、计费时长)。
  2. lint:gtrk mg lint <颗粒.html> 先过致命项,不过退回生产 skill 修(与铺轨同门槛,别硬渲)。
  3. 渲:gtrk mg render <颗粒.html> --duration <sec> [--out <dir>]——lint 前置 → 计费预估确认(用户点头才提交;--yes 只在用户已明确授权时用)→ 云渲 qtrle → <composition_id>.mov 落盘(缺省 ./mg-render/<composition_id>/,含 task.json/result.json 面包屑)。
  4. 交付话术:「透明 MOV 已出,直接拖进剪映即用(真透底)」。

把话说全的三条(MUST 如实告知,别只报成功):

  • 计费明示:CLI 没有本地 HTML 渲染引擎,独立颗粒唯一路 = 云渲计费任务(按时长分钟计)。确认提示会报实时价,别替用户跳过。
  • 体积预期:qtrle 是无损 RLE,MOV 比 mp4 大不少——秒级颗粒没事,别拿它渲长片。
  • 工程分叉明示:用户在剪映里补的这颗料不会回流 .gtrk(导出本就单向)——.gtrk 与剪映草稿从此各改各的,回头再从工程重导剪映会没有这颗补的料。用户要长期用这颗,提醒他自存产物文件。

射程边界(命令会明确拒绝,不是故障):首发只出 qtrle(webm 剪映不吃)、颗粒几何须为正整数、--duration 必填。MOV 按颗粒声明的 data-width / data-height 原尺寸出(竖屏 1080×1920 颗粒出 1080×1920 MOV)。产物落普通目录,绝不写剪映草稿目录——拖入剪映由用户做,素材归属才清晰。


改工程:走 gtrk patch,不要裸手改 JSON

跑完之后要微调某个片段(挪位置 / 改时长 / 切开 / 改音量)时,一律用 gtrk patch:

gtrk patch move --project <dir> --clip <clip_id> --to 5.0
gtrk patch trim --project <dir> --clip <clip_id> --out -1s

MUST NOT 直接编辑 .gtrk 的 JSON。 片段时码是两套并存的(clip_st+clip_ed 与 clip_st+duration):改一份不改另一份,客户端优先读 clip_ed、后端又不强校验它 ⇒ gtrk patch 负责同步两套时码、帧对齐与写前校验,避免手改 JSON 后客户端与后端读取不同出点。

参数手册在 AGENT.md 的「元素级编辑:gtrk patch」一节与 README 命令参考。 本节只指路不搬手册 —— 搬过来就会长出会漂移的副本。

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

AI 情景动画分镜稿生成器——把成片 SOP 第③步(B-roll 底轨阶段)分到 AI_DRAMA 车道的 beat,逐个产**四段朴素描述(故事背景 / 角色 / 分镜 / 原文文稿)+ 独立视觉基调段 + 时长预算**,中英双版;Markdown 外壳默认严格兼容 gitruck-ai-drama-desk 解析器,可直接导入工作台,也可拿去任意外部 AI 漫剧管线(可灵 / 即梦 / Vidu / Veo / Runway / LTX / 本地开源,或 LibTV / OiiOii / TapNow 这类成片 agent 平台)上手用。创作与出片仍在 skill / 外部工作台;工作台导出的 return-v1 包用 `gtrk ai-drama lay` 确定性回填独立 AI 轨。当用户想「上 AI 情景动画 / 做 AI 分镜 / AI 动画描述 / 把这段做成 AI 视频 / 给这段配 AI 情景动画 / 弗洛伊德这段怎么做视频」时使用本 skill。通用拆镜 craft(蒙太奇段分层 / 四段描述结构 / 中英双语 / 时长预算)由本 skill 自持;栏目视觉 DNA(Style Lock)从栏目配置 style.skills 里 produces==AI_DRAMA 的条目解析注入,绝不硬编某栏目风格。凡把口播派单里 AI_DRAMA 段落转成可出片的描述稿,优先用本 skill,别手搓。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

合成层包装(合成颗粒)——粗剪、B-roll、字幕都定了之后,把选定时间窗做成「合成」:一段时间内的整个画面由一颗代码颗粒接管(画中画拼贴、逐句换画面、对照并排、并列卡片、字幕排版),讲者与 B-roll 作为槽位画进去。三种入口:整片铺满 / 让 AI 判定哪里值得做 / 用户指定区间;候选窗口显示在客户端大纲的 CP 行。当用户想「做合成 / 合成层 / 整片做一下合成包装 / 哪里适合做合成 / 这段做成画中画拼贴 / 11 秒到 32 秒做个合成 / 逐句换画面 / 把字幕排进画面里」时使用本 skill,驱动 `gtrk composite`(plan → review → scaffold → build → lint → lay → bake),别手搓 HTML 铺进工程。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

封面工作台——把一期视频的封面从「设计诊断 + 文生图 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、别让用户裸排版。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

美食解说垂类图纸(解说链示例)——把探店/密着纪实长片(或自拍探店素材夹)与做饭流程记录,提炼看点后重述成一条中文美食解说成片工程。覆盖两形态:探店·密着(一家店/一顿饭/一个人的故事)与做饭流程解说(步骤线忠实重述)。菜谱知识类内容出局(那是配音链题材,走 gtrk-voiceover)。当用户想「做美食解说 / 探店视频解说 / 密着纪实翻讲 / 把这条做饭视频讲一遍 / 拉面店视频解说」时使用本图纸。链级条款(时序三档/引用段/出处对齐)以 gtrk-narration 为正本。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

直播切片图纸——把一场数小时的直播回放,拆成一批可编辑的逐 clip 粗剪工程(gtrk+剪映+PR),交给用户自己挑、自己改、自己出片。含超长源片分段规约(服务端 2h 硬闸 + 60min 轮询墙钟)、选题清单确认停点、按画面形态配分屏、源片贴片如实告知。当用户想「直播切片 / 直播回放切高光 / 把这场直播剪成短视频 / 三小时直播怎么切 / 带货直播剪片段 / 讲座直播出短片 / 录播切片」时使用本 skill。凡涉及把直播回放拆成一批短片工程,优先用本图纸编排,别直接裸跑 long2short(超过 2 小时会被服务端直接拒)。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

长剪短闭环——把一条长视频(课程/直播/播客/访谈毛片)通过同合云选段跳剪成多条高光短片工程,一次产出逐 clip 的 gtrk+剪映+PR 三方工程(可选智能分屏)。当用户想「长剪短 / 长视频切高光 / 直播切片 / 课程切短视频 / 播客出短片 / 两小时的课切成几条精华」时使用本 skill。凡涉及把长视频拆成多条可精修的短片工程,优先用本 skill 驱动 gtrk CLI 的 `long2short` 命令,不要手搓 ffmpeg、不要人工挑时间码。

The English summary is being prepared. Showing the original description.

Gitruck/cli966Updated Oct 26, 2026

See all skills by Gitruck

Report a problem with this skill