본문으로 건너뛰기
cccskills
무료GitHub에 공개

gtrk-matrix

B-roll 检索铺轨编排手册——成片管线里第一个铺的车道(SOP ③ B-roll 底轨阶段)。

消费拆分派单的 FILM_BROLL 队列(`dispatch.film_broll`),检索素材并在工程里平铺 N 条候选 B-roll 轨,供用户在 opencut 里用轨道小眼睛切换对比、挑选/调整;确认后交棒同阶段的 AI 情景片段腿(`/gtrk-ai-drama`,车道非空时)。

命令族还含:**本地素材模式**(`matrix index` 建索引、`--local` 用自己的素材铺轨,**素材本体不上云**)、**按需理解**(`matrix describe`,为排序提供画质与看点信号)、**源时间窗检索**(`--source-window`,电影解说式逐段推进)、**通用三态素材检索**(`matrix material`:clip/image/audio 整条素材下载向,BGM/配图主场)、**plan 可编辑通路**(agent 改 plan 后 `matrix lay` 消费)。

더 보기(약 230자 남음)

当用户想「铺 B-roll / 检索素材 / 找空镜 / 给空镜配画面 / 填 B-roll 候选 / 单独搜个词补个空槽 / 找 BGM / 搜配乐 / 搜张配图 / 用我自己的素材铺 B-roll / 给素材文件夹建索引 / 理解一下这些素材能不能用 / 把这堆素材剪成片 / 影视解说配画面」时使用本 skill。

凡涉及把素材检索并铺进工程,优先用本 skill 驱动 gtrk CLI 的 `matrix` 命令族,别让用户自己去终端敲、也别手搓检索。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli스타 966(GitHub 966 + cccskills 0)

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md69.3 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

B-roll 检索铺轨编排手册(gtrk-matrix)

把素材检索铺轨当乐高:CLI 提供原子零件(index / search / describe / plan / lay),你按场景裁定怎么编排——本手册给你六个起手配方、三条裁定判据、零件参数总表、plan 编辑口径与计费速查。CLI 是手(检索/理解/下载/铺轨/写回),你是脑(裁定用哪个配方、管用户检查点、遇差调参补空)。

本 skill 已含你需要的全部信息,照它做即可,不用也无法去查外部文档。(gtrk matrix --help 也随时列全部 flag。)

四层架构与三条铁律(先立规矩)

裁定层(你):按题材/素材形态/文稿有无/用户偏好,选配方或自创编排
配方层(本手册 §配方库):原子命令的调用序列——只是起手式,可变奏可自创
原子层(gtrk CLI):index / search(--local/--source-window) / material / describe / matrix(plan) / lay / tool image_move
服务层(云端):embed 端点 / material_describe / 检索 2×2 四口(剪辑向×通用三态 × 公开×成员) / image_move
  1. 零件不裁定:原子命令不猜用户意图,行为全由显式参数决定。describe 出的 usable_flags(水印/字幕/黑边/模糊)只是给你的信号——CLI 永远不会依据它自动剔除候选,剔不剔由你编辑 plan 裁定。
  2. 配方不进代码:配方只活在本手册。遇到新场景,别等 CLI 发版——用现有零件拼。
  3. plan 是一等可编辑中间产物:检索产 plan → 你改 plan(删候选/重排/删段/注理解/钉选)→ matrix lay 消费。这是你的裁定注入铺轨的法定通道(口径见 §plan 编辑口径)。

配方库 v1(起手式,可变奏可自创)

当前 Agent 的审片路径(本地素材优先)

视觉理解优先由用户当前会话的 Agent 完成。CLI 不启动另一个 Agent;“本地”指编排位置,不保证当前 Agent 的模型在离线设备运行。

  1. 概览:按素材时间顺序查看带时码的抽帧与照片;长场景也保留多个观察位置。结合 gtrk transcript 的原声转写整理事件、人物、环境和待核实之处,不从文件名猜内容。
  2. 细查:脚本要求某个动作或情绪时,对相关素材用 describe --materials <视频> --source-window <起秒,止秒> --prepare <工程目录/审阅目录> 加密取帧;通过当前视觉工具检查过程。有音频依赖时回看/听对应原声,不以一张图证明完整动作。
  3. 回传:查看任务中的实际图片后填写 visual-review.json,以相同输入参数加 --review <回执路径> 导入。全部本地完成时零豆包调用;不能看图或无法完成的单项标 unavailable 并说明原因,只有这些项由豆包补齐。不得把未查看项批量写成完成,也不得仅因省事直接调用豆包。
  4. 编排:从已观察证据中按脚本意图选择片段。按脚本语义选材,本手册不调用视频高光算法;该增强仅由 Vlog 图纸按需编排。看片范围、未确认事实和原声覆盖均如实记录。
gtrk matrix describe --materials <本地视频或图片> --prepare <工程目录/visual-overview> --json
# 当前 Agent 使用自身视觉工具查看 visual-job.json 列出的图片,填写 visual-review.json
gtrk matrix describe --materials <同一素材> --review <工程目录/visual-overview/visual-review.json> --yes --json
# 检索后的候选同理:--plan <plan.json> --prepare <目录>,回传时保持同一 --top-k 与 --highlight-rubric

准备和导入是 Agent 的内部工具接力,不要求用户逐帧填表。确实没有视觉能力时,可以直接用既有豆包 describe,报告回退原因。远端 URL 候选尚不支持本地交接,沿用豆包通道。--plan 仍只看每候选 segments[0].best 帧,动作细查走明确的 --materials --source-window;不能把候选描述当作整条视频都已审过。

配方前置都一样:能跑 gtrk CLI;本地素材类配方先 gtrk matrix index --dirs <素材夹> 建索引。每条命令都带 --json。 ⚠️ 路径里有英文半角逗号(Bears, Salmon and Adventure 这种)时 --dirs / --materials MUST 重复传(--dirs "A" --dirs "B",累加不覆盖),别塞进一串里 —— 缺省按半角逗号分隔。整串在盘上存在时会自动不拆,中文全角「,」从不参与拆分。

配方 A · 纯匹配铺轨(默认主路)

  • 适用线索:文稿强(口播/解说已定)、素材净(策划过的素材夹或云端素材库)、节奏快、成本敏感。
  • 命令序列:
    gtrk split <拆分稿>                                   # ② 产派单
    gtrk matrix --project <目录> --json                    # ③ 检索+铺轨一步走(云端)
    # 本地素材版:gtrk matrix --local --dirs <素材夹> --project <目录> --json
    
  • 变奏点:--lay N 多候选轨;--score-floor 卡准入;--top-k 扩候选面;--lay 0 先出 plan 人审再 matrix lay。

配方 B · 匹配后理解铺轨(求稳/素材可信度存疑)

  • 适用线索:素材夹很「野」(下载杂片/相机胶卷,可能混着带水印、烧字幕、黑边、糊片);高价值成片求稳;用户抱怨过「搜出来的像但不能用」。
  • 命令序列:
    gtrk matrix --local --dirs <素材夹> --project <目录> --lay 0 --json     # ① 只出 plan 不铺
    gtrk matrix describe --plan <目录>/split/broll-plan.json --top-k 5 --json  # ② 理解 top 候选,产物注入 plan
    # ③ 你读 plan 各 result.describe,裁定:剔除 usable_flags 命中且描述证实不能用的候选(删 result 条目)、
    #    按描述调顺序(重排)、把非留不可的候选标 pinned:true —— 直接编辑 plan 文件
    gtrk matrix lay --project <目录> --json                                  # ④ 消费你编辑后的 plan 铺轨
    
  • 变奏点:--top-k 控理解成本(1 积分/张,只理解你会认真考虑的那几条);云端 plan 同样可 describe(帧从签名 url 现抽);理解产物有本地缓存,反复迭代不重复扣费。
  • 裁定要点:usable_flags 是信号不是判决——结合 desc 复核(水印在角落的航拍也许仍可用);剔除动作=从 plan 删掉那条 result,CLI 不会替你剔。 另读 describe 输出的剔除风险清单:候选数 ≤1 的 beat 一删就掏空(音频驱动 ⇒ 整段黑屏或跨 beat 借片;口播 ⇒ 露 A-roll)。先补素材再剔,MUST NOT 见 flag 就删。 该清单只是判据,剔不剔仍归你(铁律①「零件不裁定」,见 §四层架构与三条铁律)。

配方 C · 时间窗匹配(电影解说式)

  • 适用线索:解说顺序≈素材内时间顺序(影视解说、赛事复盘、长录像剪辑)——第 N 段解说该配影片第 N 段邻域的画面,全片乱配会剧透/错位。
  • 命令序列(逐段推进窗口,窗口推进是你的编排逻辑,CLI 不自动推进):
    # ⚠️ --dirs 钉到**这一部片的绝对路径**,不是它所在的夹——同夹邻片会抢占候选
    gtrk matrix index --dirs <这一部片的绝对路径> --json
    # 对解说的每一段(第 i 段,共 n 段,影片时长 D 秒):
    #   窗口中心 ≈ D × (i/n)(解说进度比),半径 r 可调(起手 ±D/n 到 ±2D/n)
    gtrk matrix search "<该段画面描述>" --local --dirs <这一部片的绝对路径> --source-window <中心-r>,<中心+r> --out seg-i.json --json
    # ↑ --dirs(文件域)与 --source-window(源时间域)是**两个维度**,AND 叠加:
    #   前者限定「哪一部片」,后者限定「片内哪一段」。只用后者不限文件域,邻片的同时段照样进候选。
    # 空窗(results 空)→ 你裁定:扩半径重试 / 接受留空 / 放弃时序约束去全片搜
    # 汇总各段命中组一份 plan(结构照 broll-plan.json;每段一个 beat、track_st/ed=该段口播窗口)
    # ★ 每个 seg-i.json 里的 results 条目**原样搬进去**,MUST NOT 自己重写 segments
    gtrk matrix lay --project <目录> --plan <你组的 plan 路径> --json
    #(可选)组 plan 前先 describe 一轮候选帮助取舍(配方 B ③ 的动作)
    
  • 变奏点:窗口公式只是起手——非线性叙事(倒叙/闪回)按你对片子的理解手排窗口;--source-window 与 --score-floor AND 叠加;窗口显式传入时图片候选自动排除(无时间轴)。
  • 要点:段边界不被窗口裁剪(有交集即完整返回),截多长归铺轨槽长逻辑;扩窗与否永远是你的裁定,CLI 绝不自动扩。
  • ★ 组 plan 时最容易丢的东西:cuts(段内切点)与 motion(段级运动量)住在 segments[] 里面,检索结果本来就带着它们。你原样搬 results 条目就都在;一旦按「我自己写个 start/end/best」的姿势重写 segments,它们一起没了,后果具体是:
    • 丢 cuts ⇒ 铺轨的端点残片收缩空转(只剩帧网格吸附,还得候选带 fps 才生效)——成片上可能出现一闪而过的异景帧;
    • 丢 motion ⇒ 高运动降权不生效(缺席=不可判,不是「平稳」);
    • 没跑过 describe ⇒ 美观度 / 看点 / 模糊降权三条一并不生效(那是配方 B ② 的产物)。
  • 两种「没有 cuts」要分开处理:① 素材压根没扫过切点 ⇒ 跑 gtrk matrix index --dirs <夹> --rebuild 补上;② 你重写了 segments 把 cuts 抹掉了 ⇒ 重跑索引一万遍也不会消,改姿势原样搬回 results 条目即可。 ⚠️ 告警本身分不清这两档——两者在 plan 里长得一模一样(都是 cuts 整键缺席)。判别法是先跑 ①,若告警还在就是 ②(matrix lay 的告警原文里也是这么写的)。 另注:cuts: [](空数组)不是「没有 cuts」,那是「扫过了,这段里恰好没切点」,可判且无风险,不会触发告警。

配方 D · 理解先行编剧(vlog 式,素材→文稿)

  • 适用线索:没有文稿、素材是叙事源头(「帮我把这堆素材剪成片」、旅行胶卷、活动跟拍)。查询不存在,无物可匹配——先理解素材,再由你编剧。
  • 命令序列:
    gtrk matrix index --dirs <素材夹> --json
    gtrk matrix describe --materials <素材路径列表> --json      # 全量或抽样理解(视频按场景抽帧、图片直传)
    # 你拿着逐场景描述编剧:大纲 → 章节 → 逐章旁白(与用户对话定基调)
    # 旁白定稿 → 走口播管线反填:oralcut/TTS 出口播 → gtrk split → 配方 A/B 反填 B-roll
    
  • 变奏点:素材多时先抽样(每夹几条)理解定大纲,定了再补理解入选素材;描述有缓存,二次编排零成本;>20 张会有计费确认(1 积分/张),先跟用户对齐预算。

配方 E · 三层层叠(企业动线)

  • 适用线索:本地素材不够填、需要栏目概念素材/通用素材补空洞;企业客户三源混用。
  • 命令序列(任意顺序,层序铁律自动保序 local > concept > common):
    gtrk matrix --local --dirs <素材夹> --project <目录> --lay 2 --json        # 本地层
    gtrk matrix --project <目录> --column <id> --material-class concept --json  # 概念层(internal 矩阵成员口)
    gtrk matrix --project <目录> --json                                         # 通用层垫底填空洞
    
  • 变奏点:每层可独立换配方(本地层走 B 先理解再铺);每层铺完停下让用户看(见「三条业务动线」节);重铺某层不碰他层。
  • 注意:概念层重铺请走上面的检索命令(matrix lay 从 plan 推导层归属:local→local、云端→common,概念层信息不在 plan 里)。

配方 F · 图文混排

  • 适用线索:素材夹含大量剧照/海报/示意图;图片值得上轨(被选中时自动经云端 image_move 转运镜视频,2 积分/张)。
  • 命令序列:任意配方照跑——图片默认参与索引/检索/铺轨;--no-image-broll 反向排除(零图片上云)。
  • 变奏点:describe 对图片是文件直传理解;出域与计费口径见「图片候选运镜入轨」节——图片本体会上云这条差异必须跟用户说清。

裁定线索(判断素材,不是分支条件)

拿到一个活,先过三个判据。它们帮你倾向某配方,不是 if-else——边界情况跟用户对话确认。

  1. 信息流方向:成片从素材长出来(素材→文稿),还是素材服务既有叙事(文稿→素材)? 用户给了完整口播/文稿/解说 → 查询存在,匹配主导(A/B/C)。用户只有一堆素材、叙事尚未诞生 → 无物可匹配,理解主导(D)。「先剪口播再配画面」是前者,「把这堆素材剪成片」是后者——同一个用户两天能各来一次,别拿昨天的路径套今天。
  2. 素材可信度:素材越「野」,理解的前置价值越大。策划过的素材(成片切片/精选夹/云素材库)→ 纯匹配直接吃(A);下载杂片/用户随手拍(可能混水印、字幕残留、糊片)→ 匹配后理解过一道(B),甚至先 describe 全量过滤再谈其他。判断不了就问用户素材哪来的。
  3. 规模 × 决策类型:几十个镜头 → 描述装得进上下文,你直接读 describe 产物做编排;万级库 → embedding 粗筛必须先行(index/search),理解只花在 top 候选(B 的成本结构:O(候选) 而非 O(素材库))。「找相似画面」→ 检索足矣;「排叙事/定取舍/避剧透」→ 必须理解物+你裁定(B/C/D)。

再叠两条场景特征:解说与素材同源(影视解说)→ C 的时间窗;素材夹里图片占比高 → F 的口径先交代。

零件参数总表

检索/铺轨主命令(gtrk matrix,云端派单消费为默认路):

用户想要CLI 怎么传取值 · 默认说明
消费派单铺 B-roll(主路)gtrk matrix --project <目录>目录 · —读 split/dispatch.json 的 film_broll,产候选清单 + 铺轨
单独搜个词(ad-hoc)gtrk matrix search "<词>"字符串 · —单条检索;--out <file> 落盘或缺省 stdout
显式指定派单文件--dispatch <path>路径 · 由 --project 推非标准布局兜底
按某栏目检索偏好--column <id>栏目 id · config defaultColumn→内置默认仅 internal 口生效
多铺几条候选对比--lay <n>非负整数 · 1(0=只出 plan 不铺轨)opencut 小眼睛切换对比挑选
每段多给几个候选--top-k <n>整数 · 派单 shots 值(服务端上限 50)每 query 候选数上限
指定素材类型--material-class <c>real_shot | concept · 栏目策略仅 internal 矩阵成员口
填充门槛--score-floor <f>浮点 0–1 · 0.2低于不采纳、槽位留空——口播工程里留空处由候选轨补纯黑片;调完必看空洞告警
切点对齐字幕句--cut-align <r>浮点 0–1 · 0.7(0=关闭)三七开拍板:约七成字幕句起点恰逢镜头切点、三成有意错开;句级时码取 transcript 重投影(降级自动回旧节奏并告警);开启时结果 JSON lay.cut_align 报实测比例
主轨空洞填充--gap-fill <m>fast | solid(默认)| none仅音频驱动工程主轨(口播工程不适用零回归):fast=放宽地板随便填候选→延长相邻颗粒→跨 beat 借候选→次地板补真画面→仍不够才黑片;借来的画面与本段稿子相关性弱、次地板槽是不到 1.2s 的快切,两者都会在日志里指名报出(kind 为 borrowed / subfloor)——那是如实告知,不是缺陷,别当 bug 上报;solid=黑片垫齐(精修一眼看出没匹配到);none=留 gap(客户端主轨磁吸会吸除 gap 致画面与配音错位,慎用);生效时结果 JSON lay.gap_fill 报明细
编排交给云端跑--arrange <m>按素材来源自动定档,一般不用传铺自己电脑里的素材→cloud(编排在服务端,按编排量计费);铺素材矩阵的素材→local(编排仍在本机、不计费,逐字不动)。shadow=本机照跑照铺轨、云端只对拍不采纳。⚠️ 本地素材路上 --arrange local 不受理;云端拿不到产物时直接报错,不会换算法把活干完。⚠️ 它不是省钱开关——矩阵素材要付检索费,两条路都花钱、只是花在不同环节,MUST NOT 对用户说「用本地就不花钱」
落轨前先质检画音对齐--arrange-qc开关 · 缺省关只查各 beat 的卡点句(span.from 领衔句):画面没给到稿句说的东西就换候选重排,最多 2 轮,到限即交付 + 如实登记残余。零渲染。⚠️ 按帧计费(每卡点句 1 帧/轮),跑前报预估求确认。默认关,用户没说就别带。拿不到卡点句(无 dispatch / 重投影降级)时会明说「跳过 ≠ 查过」,别把那条日志读成通过
云端编排本次上限--arrange-cost-cap <n>正整数 · 不限超限服务端前置拒绝、零执行零计费(不是跑一半掐断)。只在 --arrange shadow|cloud 时有意义
先估价再决定跑不跑--arrange-estimate-only开关 · 缺省关走到云端编排的计价确认那一步就停:报出编排量后成功返回(ok:true + estimateOnly:true,不是「被拒绝」),零云端调用、工程零改动。机读值在 lay.arrange.units 与 lay.arrange.scale。⚠️ 它省的是云端那一次调用与其计费(及其后的下载落轨),不是整条链——工程/plan/重投影照样要走。素材矩阵路会报 applicable:false 而不是 0。与 --yes 同给时以它为准
云端编排请求体存证--dump-request <file>路径 · 缺省不写排障专用,用户没提就别带。 把实际上行的云端编排请求体逐字节落到该文件——服务端不保存 plan 全文,所以复现一次调用只能靠它。⚠️ 不能指向工程目录内(工程会被打包拷走,而它含 beat 名与检索词),传了会报参数错;开 --arrange-qc 时每轮各一份(第 N 轮加 .roundN)。回执在 lay.arrange_run.dump_request。⚠️ 转交这份文件前 MUST 先告诉用户里面有什么,别替他做决定
外发调参仪表--explain开关 · 缺省关缺省 lay.dedup 只出 emptySlots(判素材池够不够用,upsell 判据就是它);本开关再补 emptySlotsByRefine / adjacentWaived / hotSlotsPlaced / blurrySlotsPlaced 四个调参仪表,人读日志同口径。不改任何决策,工程产物逐字节不变。⚠️ 用户问「为什么这颗抖/糊/空」时才带,别缺省开着刷噪音
用户的客户端太旧(不认片段底板)--black-bed开关 · 默认关旧形态:铺一条纯黑底垫轨、候选片段不带底板。缺省是候选片段自带纯黑底(background_fill)、空档在候选轨内补纯黑片,不铺黑底轨;--no-black-bed 已是缺省(无操作)
已编辑轨强铺逃生门--force-relay开关 · 关用户明确点头才带;raw 登记删除不可恢复
同素材彻底不二用--dedup-scope materialscene(默认)| material收严会加剧空洞,先看 lay.dedup.emptySlots
机读(你必带)--json开关 · 关人读日志转 stderr,stdout 只出结果 JSON

⚠️ 编排档位不是 flag。 --arrange 管的是取数路(在哪算:本机还是云端), 与「怎么排」无关。编排档位(direct 高档锚定直排 / temporal 中档 / semantic 低档) 是 plan 层字段 beat.arrange_mode,由 agent 在图纸层逐 beat 标注, 同一片内可混档。没有 --arrange-tier 这种参数,CLI 不猜档位。

高档还要在同一个 beat 上给 direct_slots[]: { clip_id, clip_st, clip_ed, track_st?, track_ed?, query?, slot_role? }。 slot_role 二选一——quote 引用段(画音逐秒对齐,端点是硬约束,必须给 track_st/track_ed)、provenance 硬出处段(位置可协商,要精修消端点残片); 缺席 = 按硬出处处置。越界取值一律拒绝,MUST NOT 静默降级。

通用三态素材检索零件(gtrk matrix material,云端素材库、下载向出参):

与上面那张表的剪辑向检索是并列的第二条线,出参契约独立(下载向直链 vs 剪辑向 segments),别混用:要 B-roll 段落走 matrix search/派单主路,要整条素材(BGM、配图、整条原片)走本零件。

2×2 路由矩阵(身份自动判定,每次运行探一次、不降级不缓存):

external 公开口internal 矩阵成员口
剪辑向/task/video_clip_search/task/custom/video_clip_search
通用三态/task/material_search/task/custom/material_search

成员口搜全库(含非商用/概念素材)且 0 积分;公开口只含可商用实拍素材、1 积分/次。差距不是理论值:Artlist 全库 2397 条音乐 is_copyright=0,同一 query 公开口 0 条、成员口 5/5 命中。

用户想要CLI 怎么传取值 · 默认说明
搜整条素材(BGM 主场)gtrk matrix material "<词>"字符串 · —单条检索;--out <file> 落盘或缺省 stdout
指定素材形态--scope <s>clip | image | audio · audio三态通用;clip 要的是整条原片直链(要段落用 matrix search)
只要可商用--commercial-only开关 · 关(成员档即全库,这是缺省而非将就)按需收紧的显式开关,MUST NOT 默认带上(见下方选材口径):成员口传 copyright_scope=commercial;公开口本就只含可商用,该档位会显式提示而非静默忽略
按成片时长挑--min-duration <秒> / --max-duration <秒>数字 · 不过滤可单独或组合给;成员口透传服务端 filters,公开口无该入参(CLI 按结果 duration 本地过滤并提示);负数 / 上界小于下界=参数错误
多给几条候选--top-k <n>整数 · 5(服务端上限 50)BGM 推荐 3-5 首的量级
去同质化--diversity开关 · 关避免返回雷同素材
机读(你必带)--json开关 · 关mode:"material",stdout 只出结果 JSON

出参逐条:{id, note, duration, audio_type, tags, score, download_url, cover_url};audio_type(pure 纯音乐 / song 歌曲)与 accompaniment_url(song 类现成伴奏直链,零处理成本)两档通用;只有 is_copyright(及 clip 的 material_class)是成员口独有——公开口没有这个字段,零件如实缺省不伪造,你也别把「没有该字段」读成「不可商用」。download_url 带 24h 签名(过期重跑即重签)。

Pexels 补充(仅 clip / image):--scope clip|image 时零件缺省另附 Pexels 补充结果,放在 --json 出参顶层的 pexels_results 数组(另有 pexels_status,counts.pexels 计条数),不在 results 里,也不算候选数;--no-stock 关闭,audio 恒不带。

  • 补充条目 id 形如 pexels:video:<n> / pexels:image:<n>,带 rank(没有 score,别拿去和自有结果比分)、author / author_url / page_url / download_url;
  • 用之前先用 download_url 下载落地再引用(.gtrk 不收 url 态素材);MUST NOT 拿 pexels: id 跑 matrix fetch——补充素材不经同合云授予,CLI 会直接拒绝;
  • 引用时 MUST 保留摄影师署名与 Pexels 链接(条目的 author / author_url,以及 https://www.pexels.com);
  • MUST NOT 把 Pexels 素材上传到任何对外可检索的素材库或图库(Pexels License 禁止再分发);
  • pexels_status 为 unavailable / disabled,或出参里根本没有 pexels_status = 这次补充源没用上,自有结果不受影响,照常往下走,不必追问用户。

⚠️ is_copyright = 能不能商用,不是「有没有被版权保护」

is_copyright: true   → 可商用(自有 ∪ 已授权)
is_copyright: false  → 不可商用(**不是**「没版权、可随便用」)

false MUST NOT 读作「无版权、可以随便用」——它恰恰相反。 决定性反证:概念素材(他人版权物) 入库时固定写 is_copyright=0;字段若真是「是否受版权保护」,那批必须是 1。

选材口径按档位分流:

  • internal 矩阵成员口:缺省搜全库,MUST NOT 自设一道命令面并不存在的闸。 命令面缺省本就是 copyright_scope=all,你 MUST NOT 默认写上 --commercial-only,也 MUST NOT 以「保险起见」 为由把 is_copyright:false 的候选剔除或降权——「免费搜全库(含非商用/概念素材)」 正是成员身份买到的东西,在最后一米替他扣下等于把已售出的权益又收回去;
  • 对价是如实标注:推荐候选时 MUST 逐条带上 copyright_label(不可商用的就照直写「不可商用」)。 放开池子 MUST NOT 连版权状态一起放掉。但这条 MUST NOT 升级成追问或阻塞—— 用户没提商用需求就不必反问,标注完照常往下走;
  • 用户特意说明才收紧:他明说「只要可商用的」/「这条要商用发布」/「客户商单交付」时, MUST 加 --commercial-only(传 copyright_scope=commercial,出参逐条 is_copyright:true), 或只从 copyright_label:"可商用" 的候选里挑。「用户没说」MUST NOT 被当成「用户要求收紧」;
  • 公开口(external 档)没有这个字段——那不是「不可商用」,而是「服务端已经在源头只放可商用素材」, 缺席即无需判,本条分流对它无影响;
  • --json 出参里 CLI 会逐条派生一个人话标签 copyright_label("可商用" / "不可商用"), 与 is_copyright 恒同向、缺席同缺席。判读以这两个键中的任一为准,MUST NOT 靠字段名去猜。

upsell 口径:--json 出参可能带一个独立顶层字段 upsell(人读模式则是末尾一行提示)——当且仅当公开口档位且结果不足(0 条或少于请求量一半)时才有,内容是「加入同和新媒体矩阵可免费搜全库」+ 链接。它不在 results 里、不改写任何候选:原样转述给用户,别把它当成一条素材。成员档恒无此字段。

本地素材零件(matrix index / --local):

用户想要CLI 怎么传取值 · 默认说明
给素材夹建索引gtrk matrix index --dirs <a,b,...>逗号分隔目录或素材文件 · —免切片只记时间戳;指纹增量零重算;断点续传
本地检索模式--local开关 · 关必配 --dirs;跳过身份探针、不触云端检索端点;与 --column/--material-class 互斥
圈定检索域--dirs <a,b,...>逗号分隔目录或素材文件 · —检索域永远显式可见;绝不与云端结果混合。传文件即把域收窄到该素材——一稿对一片时钉到那一部片,避免同夹邻片抢候选
源时间窗过滤--source-window <start,end>秒,start<end · 不过滤仅 --local:只返回与窗口有交集的命中段(段边界不裁剪);与其他过滤器 AND 叠加;图片候选自动排除;空窗 = ok 空结果非错误,扩窗是你的裁定
场景切分粒度--scene-threshold <f>浮点 (0,1) · 0.3仅 index:镜头切换快调高、长镜头调低
固定机位判稳阈值--stability-threshold <f>浮点 (0,1) · 0.05仅 index:场景内最大帧间变化低于此值判 stable,抽帧按不超过六秒的间隔覆盖整个场景;summary 分列 stable/unstable 场景数与省帧数;误判 stable 丢检索粒度、误判 unstable 只是不省钱——宁严勿松;默认为保守值待标定
索引强制重建--rebuild开关 · 关忽略指纹全部重算向量;理解缓存(describes)不清。需要补齐切点、倍帧判定或段级运动量信号时使用;这些索引信号只在重建时落库
不要图片候选--no-image-broll开关 · 默认参与检索与铺轨完全排除图片(零图片上云);pinned 也不豁免这条
跳过计费确认--yes开关 · 关图片运镜 / describe >20 张两处护栏通用

理解零件(gtrk matrix describe,三输入形态):

用户想要CLI 怎么传取值 · 默认说明
理解 plan 里的候选gtrk matrix describe --plan <path>plan 路径 · —对各 query 候选取 best 帧理解,产物注入 result.describe 后回写 plan 文件
只理解前 N 条--top-k <n>整数 · 全部每 query 限量(省钱:只理解会认真考虑的候选)
直接理解素材文件--materials <a,b,...>逗号分隔文件 · —视频按场景中点逐帧理解;图片文件直传;结果在 stdout JSON items
跳过确认--yes开关 · 关将实际调用 >20 张才触发确认(预估积分明示);internal 豁免免确认仅提示

理解产物形态:{desc(≤200字中文描述), tags[], mark(0-100 质量分), usable_flags{watermark, text_overlay, black_border, blurry}, at_sec(射程锚点)}。缓存即钱:产物按(素材, 帧时刻)落本地索引库,同帧重复 describe 零调用零计费;素材内容变了(size:mtime 指纹变)该素材缓存自动作废。

⚠️ 一条 describe 只代表一段,不代表整条候选(--plan 形态):每个候选只抽一帧(segments[0] 的 best),这条判决的有效射程就是那一帧所属的那一个 segment。at_sec 就是那一帧的时刻(素材时基秒,与 segments[].best 同轴——注意与 beats[].anchors[].at_sec 的工程轴秒同名不同轴,别换算)。缺这个字段的旧 plan 按 segments[0] 推定,不外推到全部段。

  • 命令跑完会报告「理解覆盖率:N 帧 / M 段 = X%」(--json 读 describe_coverage),M 是段数不是候选数——别把「注入 N 条 result.describe」读成「这 N 条候选都看过了」。
  • 量级示例:843 个候选中只有 32 段被抽帧理解时,覆盖率是 3.8%;覆盖率低时必须按段说明射程,不能外推到整条素材。
  • 转述给用户时 MUST 按段说:「这条候选的 X–Y 秒那一段有字幕」,MUST NOT 说成「这条素材有字幕」。要判更多段就得多抽帧 = 多花钱(1 积分/张),是否加抽由用户拍板,CLI 不替他加。

plan 消费零件(gtrk matrix lay):

用户想要CLI 怎么传取值 · 默认说明
消费(编辑后的)plan 铺轨gtrk matrix lay --project <目录>目录 · —读 <目录>/split/broll-plan.json,白名单校验后按 plan 现值铺轨(不重新检索、零检索开销)
显式指定 plan 文件--plan <path>路径 · 上述默认配方 C 自己组的 plan 从这进。⚠️ 组的时候把检索返回的 results 条目原样搬——cuts / motion 住在 segments[] 里面,自己重写 segments 就把它们丢了(后果:端点残片收缩空转、高运动降权失效,见配方 C 要点)
美观度参与排序--mark-weight <w>浮点 0–1 · 0(关闭)仅 matrix lay:候选融合分 = sim×(1-w)+(mark/100)×w,mark 取 describe 理解缓存(素材内就近帧命中);无缓存候选中性(融合分=sim,不惩罚不加分、绝不变相剔除);score 地板仍只看原始 sim。零件不裁定:默认关(0 时排序与产物逐字节零回归),开不开、开多大由配方/你裁定——先 describe 过一轮才有 mark 可用(配方 B ② 之后开才有意义),开启时结果 JSON lay 含 mark_weight/mark_hit/mark_neutral
其余铺轨参数--lay/--score-floor/--cut-align/--gap-fill/--arrange/--arrange-cost-cap/--arrange-estimate-only/--arrange-qc/--dump-request/--explain/--black-bed/--force-relay/--dedup-scope/--yes/--no-image-broll同主命令语义一致

plan 编辑口径(法定通道的边界)

broll-plan.json 你可以放心编辑,matrix lay 按现值消费,绝不因「与原始检索结果不一致」拒绝。但有白名单:

可编辑面(随便动):

  • results 数组:删条(剔除不能用的候选)、重排(调优先级——池内按 score 排序,重排主要配合删条用);
  • segments 数组:删段(某命中段不想要就删);
  • result.describe:增删(describe 命令注入的,你也可以手写笔记进去);
  • result.pinned: true:钉选——是落位保证,不只是排序特权。它豁免四条自动护栏:①派单负词 excluded_hint、②--score-floor 分数地板、③不二用抢占(钉选段不会因为别的候选占了同一把消费键而落不上;但同一个「候选+段」对仍只落一次)、④紧邻跳剪避让(钉选相邻照落,也不计进 dedup.adjacentWaived)。 不豁免的三条:--no-image-broll(零图片上云是硬承诺,图片候选连 pinned 也进不来)、同 beat 跨轨素材归属互斥(那条给的是备选面——钉选占满每条轨,--lay N 就退化成 N 条一样的轨)、主轨 gap 快速填充的兜底档。 钉多了仍可能打架(供长不足/位置冲突),让位名单在结果 JSON lay.pinned.yielded 与告警里逐段明示。
  • beat 的 anchors:关键词锚(拆分稿圈定、plan 检索时内插 at_sec)——[{keyword, utterance, at_sec, query}],lay 把锚 query 原始 sim 最高的合格命中(原始检索相似度,不是 mark/highlight 融合分——--mark-weight/--highlight-weight 在锚槽退为同 sim 时的 tie-break)钉在 at_sec−0.5s(时长 min(命中段, per_shot×2)),其余槽位在锚点分割的区间内序贯填充。锚预留优先于普通序贯槽消费:铺轨前先为每锚锁住其 sim 第一名(每锚至多 1 对,落位或降级后立即释放),前序 beat 的泛化普通槽拿不到它;取不到第一名时锚 outcome 会如实报名次与去向(落的是第几名、第一名被哪个 beat/query 取走),MUST NOT 静默当成钉准了。可编辑:挪 at_sec(微调卡点时刻)、换 query(换锚画面)、删锚(整条删除);at_sec:null=内插失败态,lay 按降级普通槽处置。锚 query 池内有 pinned 候选时用户钉选优先占锚槽。
  • beat 的 per_shot_sec/requested_shots(节奏锚,影响槽长档位)。

不可编辑面(动了会被 matrix lay 校验拒绝并指名字段):

  • clip_id / local_path / url:素材身份与来源是检索产出,改了必错(local_path 指向不存在的路径会被拒——可移动盘先挂载再 lay);
  • 几何字段(duration/width/height/fps)与 segments 内部几何(best 必须落在 [start,end]);
  • 结构形态(plan_version/beats/queries/results 的数组性、pinned 必须是布尔)。

坏 plan 的拒绝是整单拒绝+逐条明示(防误铺),改好重跑即可;plan 与已下载代理都还在,拒的只是这一步。

计费速查

零件单价计费形态internal 豁免备注
embed(matrix index 抽帧图)0.1 积分/张会话计量:开跑前按抽帧计划预扣 ceil(N×0.1),跑完按实际用量结算多退少不补(用量>0 最低 1 积分)✅ gc_member_type=internal 免会话零计费文本 embed 免费——--local 检索本身零积分
describe(matrix describe)1 积分/张异步任务(提交预扣→完成结算,失败自动退款),无会话✅ 同上(豁免时 >20 张护栏免确认仅提示)缓存命中零调用零计费;>20 张确认护栏(--yes 跳过)
通用素材检索(matrix material)公开口 1 积分/次;矩阵成员口 0 积分同步返回按次计费(成员口 0 元也照留痕带 task_id)看的是 matrix_member_type(走哪个口就按哪个口计价,非 gc 豁免维度)云端检索双口;剪辑向 matrix search 同款口径(成员口 0 元、公开口 1 积分/次)
image_move(图片运镜入轨)2 积分/张按任务计费internal 不豁免、照常计费(已查证:走标准任务计费链路无 gc_member_type 豁免;豁免只存在于 embed/describe 两个原子口)工程内同图同参恒复用不再扣费;铺轨前有预估确认(--yes 跳过,拒绝=整轮中止零调用)
  • 豁免看的是 gc_member_type(同合云内部成员),与检索档位 matrix_member_type 是两个维度——memberType:"internal"(检索口)≠ 计费豁免,别混。
  • 量级参考:全量索引 5000 帧 ≈ 500 积分 ≈ 5 元;describe 50 张候选 = 50 积分;增量都只按新增算(索引指纹增量、理解缓存命中)。

你在成片管线里的位置(SOP 第 ③ 步 · B-roll 底轨阶段的影视/本地素材腿)

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

① oralcut 剪口播 → ② split 拆分派单出 dispatch.json → ③ B-roll 底轨全铺齐(matrix 铺影视/本地素材(你在这) + /gtrk-ai-drama 产稿→外部出片→用户手动回铺,两条腿同一阶段)→ 用户 opencut 调整/挑选 → ④ 全局抽帧检查画面构图 → ⑤ mg 铺 MG(含 ov,最后叠上)→ subtitle lay 上字幕(快速成片模式必做——工程直接带好字幕)→ render 收口。

为什么 B-roll 整个阶段最先:AI 情景片段属于底轨 B-roll 画面家族,不是叠加层——叠加层只有 MG(含 ov)。MG 的排版决策是「因势象形避主体」,依赖底轨的最终画面构图;三源(影视/本地/AI)没落齐就产 MG,等 AI 片段回铺后避让必然错位、甚至盖住 AI 画面主体。

⚠️ 旧序(MG ④ 在 AI 情景动画 ⑤ 之前、理由写「越往后叠得越上层」)是把「工序次序」误当成了「图层次序」。工序上 AI 片段必须先落位;图层上它本来就在底轨。

铺完必须停下等用户在 opencut 里挑选/调整(关键检查点),不要一口气往下冲。

前置:需要跑过 gtrk split 的产物目录(split/dispatch.json)。film_broll 空 = 本片没有影视/本地素材腿 → 跳过本步,看 AI 情景片段腿(dispatch.ai_drama 非空则交棒 /gtrk-ai-drama),两腿都空才直接进 ⑤。gtrk 找不到 → npm i -g @gitruck/cli@latest。用户先在 opencut 手调过切点也不怕——命令每次都现场重投影 beat 窗口,微调口播轨不用重跑 gtrk split,只有拆分稿本身变了才要。

业务分离:本框架 skill 不硬编任何栏目审美。B-roll 的 queries 在 ② 拆分时已写进派单(不触发生产 skill);栏目只供检索偏好(--column,internal 口生效)。档位由命令自己探(结果 JSON memberType),external 口固定 real_shot + 可商用素材。

本地素材检索模式要点(--local / matrix index)

  • 视频素材本体永不上云:只把 512px 抽帧图送同合云自建 embed 端点向量化、即传即弃;产物以绝对路径直引原文件(免下载免代理,无 url 签名/过期语义)。
  • 图片一视同仁可检索可铺轨(kind:"image");被选中时经云端 image_move 转运镜视频入轨(图片本体会上云,见下节)。
  • 两步走:gtrk matrix index --dirs <a,b> --json 建索引(增量零重算)→ gtrk matrix --local --dirs <a,b> --project <目录> --json 检索铺轨。
  • score 地板观察(重要):本地域 score 量纲与云端不同,完美命中可低至 0.246——默认 0.2 是松地板,排名靠查询内相对顺序。别按云端直觉调高(0.3 可能把正确命中砍光)。
  • 索引跨机不可移植(键=绝对路径):换机重跑 matrix index 即可(分钟级);素材改名/移动身份不变(内容哈希)。
  • 段带运动量,据此换段(add-material-motion-signal):重建过索引的素材,检索结果的每个 segments[] 会多带一个可选 motion(去重后帧间跳变分位 p50/p90 + 样本数 + 有效帧率)。它答的是**「这段抖不抖」**,与 score(像不像)正交:p50 超 0.05 视为高运动,铺轨排序时降权 0.02 分(只降权、不排除——候选稀疏时宁可用高运动段也不留空,留空的观感代价更大)。用户报「这段画面晃得看不清 / 想换一段」时,motion.p50 就是挑替补的依据:同 beat 里挑 p50 更低的段。
    • ⚠️ 缺席 = 不可判,不是「平稳」。存量索引库(本能力上线前建的)没有这份信号,段上整键无 motion;此时高运动降权对该素材不生效,不是「它很稳」。要拿到信号得 gtrk matrix index --dirs <夹> --rebuild 重建一次。
    • ⚠️ 样本不足也报缺席:长静止镜头去重后可能只剩个位数帧,分位不可信,p50/p90 如实为 null(samples 仍照报)。同样 MUST NOT 读成「平稳」。
  • 倍帧素材(30fps 内容装进 60fps 容器):这类素材每隔一帧就是上一帧的复制。索引会认出来并落有效帧率(motion.effective_fps)。判据看近零帧的连续长度而非占比,以区分倍帧运动段和静止镜头。
    • 见到 effective_fps 明显低于容器帧率时,如实告诉用户这条素材是倍帧的(画面实际流畅度只有标称的一半,不是铺轨铺坏了)。
    • 倍帧素材的切点判定在去重后的帧序列上进行:持续快摇作为连续高分串处理,真实切换仍按孤立尖峰保留。
    • ⚠️ 存量索引里的假切点不会自己消失:这条修法只在重建索引时生效。素材被判 doubled 且某段 cuts 密得离谱(零点几秒里十几刀)时,多半是本能力上线前建的库 ⇒ gtrk matrix index --dirs <夹> --rebuild 重建一次;重建前别把那些切点当真。
    • ⚠️ 一个已知取舍:倍帧区里紧挨着的两刀(去重后相邻)会被判成持续运动而漏掉。它们在信号上与「快摇的头两帧」不可分——宁可漏这一对,也好过把十几个假切点放进去。
  • 含本地 B-roll 的工程云渲会被提交口直接拒绝(local_broll_cloud_render_rejected)——走客户端本地出片或 gtrk render。
  • embed 端点连不通(embed_endpoint_unreachable):查 ~/.gitruck config embedUrl / env GITRUCK_EMBED_URL;describe 端点同理(describe_endpoint_unreachable,describeUrl / GITRUCK_DESCRIBE_URL);CLI 绝不回落第三方端点。会话失效(6033)重跑即自动重开续跑。

图片候选运镜入轨(出域口径必读)

  • 图片本体会上云:图片候选被选中时经云端 image_move(GPU 运镜)转短视频——与视频素材「本体不上云」不同,跟用户交代本地模式时必须说清这条差异。不愿图片上云 → --no-image-broll。

  • 计费:2 积分/张,铺轨前汇总确认(--yes 跳过;拒绝=整轮铺轨中止零云端调用,reason:"image_move_billing_declined",plan 照常可用)。

  • ★ 本地素材铺轨现在默认走云端编排,也要钱(按「编排量」计)。 你在无 TTY 的环境里跑, CLI 问不到人 ⇒ 整轮铺轨中止(工程零改动、plan 照常可用)。本地编排那条路已关死,没有备用算法可退。 所以:跑之前先把预估编排量与花费告诉用户、拿到他的同意,再带 --yes 重跑; MUST NOT 未经同意就带 --yes(那是替他花钱),也 MUST NOT 看到回落告警就当没事发生 (那等于默默把他降级到冻结的本机算法)。想先看看要花多少,用 --arrange-estimate-only 单独估一次(零调用、零改动,数在 lay.arrange.units);要兜上限用 --arrange-cost-cap。

  • 缓存零重复计费:产物落工程 assets/broll-move/(材料 id=broll-local-<图hash>-mv<参数指纹>),同图同参恒复用;跨工程会重新生成。

  • 参数定死统一档:duration 恒 5s(槽长 >5s 取 ceil,钳 [2,12])、画布=工程 video_size、入轨按槽长裁剪——统一档就是为了缓存命中与重铺画面不跳。

  • 失败降级=静态图片上轨(不换内容不留黑),明细在 lay.image_move_failures;重铺自动重试运镜。

  • 读结果:image_move_billing:{generated, reused, estimated_credits}——generated 非零要如实告诉用户扣了多少积分。

三条业务动线与层序铁律(多源分批铺轨必读)

层序铁律(写死,无配置项):B-roll 轨按来源分三层带,渲染遮挡自上而下恒为 本地(local)> 栏目概念(concept)> 通用(common),与铺轨先后无关。换层重跑他层轨号整体平移是预期行为,内容零扰动。

不二用与宁空不重复(防审美疲劳铁律):单轮铺轨一个素材单元全局只用一次(云端按切片、本地视频按场景、图片按文件;--dedup-scope material 收严)。候选枯竭宁空不重复(留空走黑底),空洞数在 lay.dedup.emptySlots。跳剪豁免:同素材相邻槽位只有源画面头尾差 <2s 才避让;≥2s 属合法叙事照铺(lay.dedup.adjacentWaived 记枯竭放行数)。

三条动线(分批执行,每层铺完停下让用户看):

  1. 只铺本地(个人创作者主线):--local 铺 → 看效果 → 调参重跑,重铺只剥本地层。
  2. 本地打底 + 通用垫底填空洞:本地先铺(--local --lay 2);空洞多 → 不动本地层,补跑一轮云端通用检索,自动垫到本地层之下。
  3. 企业级三层:即配方 E。

存量工程首次重铺的过渡口径:层带引入前的旧自产轨没层登记——broll-local- 前缀轨自动归 local 照剥;其余保守不剥并告警(指名 track_index)。

执行(每次都带 --json)

产物落点纪律(MUST · 全文见随包 AGENT.md 同名一节):交付物只写入工程目录或用户显式指定的输出路径;引用媒体用原路径,不复制到 agent 工作目录;不交付的临时文件放系统 temp,用完即删。 交付物 MUST NOT 先写 agent 自有目录再拷进工程;中转本身即违规,体积不是豁免理由。

gtrk matrix --project "<split 产物目录>" [--lay N] [--score-floor F] [--top-k K] [--column <id>] --json
  • --json:人读日志走 stderr,成功时 stdout 只有一行结果 JSON: { ok, mode:"plan", memberType, columnId?, planPath, lay:{ refused, laidTracks:[…], laidClips, removedTracks:[…], keptEditedTracks:[…], blackTrack, blackBedHoleSec, blackBedHoles:[…], dedup:{scope,emptySlots}(**调参仪表四件只在 --explain 时才出**), signal_coverage?:{mark?:{hit,neutral,coverage},highlight?:{hit,neutral,coverage}}, pinned?:{requested,placed,yielded}, anchors?:{planned,pinned,degraded}, anchor_details?:[{beat,keyword,at_sec,track_st,clip_id,status,reason?}], arrange_run?:{calls,source,mode,fallback?,units_total,billed,idempotency_recorded?,diff_count?,diffs?:[…],rounds:[{round,mode,source,fallback?,units?,idempotent_replay?,idempotency_recorded?,diff_count?}], dump_request?, dump_request_files?}, downloads:{preview,raw,reused,failed} }, integrity:{…}, reprojection:{…}, counts:{ beats, queries, results, errors } } (--lay 0 时无 lay;search 模式 { ok, mode:"search", results:[…], counts, outPath? };matrix lay 模式 mode:"lay" 且 counts.queries 恒 0——零检索;matrix describe 模式 { ok, mode:"describe", described, cached, called, failed, credits_estimated, exempt?, planPath?/injected?, describe_coverage?:{frames,segments,ratio,image_candidates}, items? })
  • 拒铺结局(候选轨已被用户编辑):stdout 出 { ok:false, refused:[…], reason:"tracks_edited", planReusable:true, … } 且非 0 退出——不是命令失败,plan 已产出,处置见下表。
  • 命令失败(缺派单、鉴权失败、全部 query 失败、参数越界、坏 plan 被 lay 拒)→ 非 0 退出、报错在 stderr、stdout 无 JSON。先看退出码,把 stderr 报错如实回给用户。
  • 检索分钟级,耐心等返回。

跑完读结果、给用户交代

读 stdout 那行 JSON(字段按需读、读前判空),别只回「铺好了」:

  • counts:几个 beat、几条检索(几条失败)、几条候选——一句话概括盘子大小。
  • memberType:internal=矩阵成员口(栏目偏好/concept 生效);external=通用口(固定 real_shot + 可商用)。
  • lay.laidTracks / lay.laidClips:铺了几条候选轨、几个颗粒(不含空档补片 / 黑底轨)。
  • lay.bed:底板形态——fill(缺省:候选片段自带纯黑底、空档在候选轨内补黑)/ track(--black-bed 旧形态);lay.bed_fill = 补了几段、几秒。
  • lay.flash_gaps(fill 形态口播工程才有):短于 1.2s 的空档(片段间 1–2 帧缝、锚点前的空档)会在源窗余量内并进相邻片段,absorbed 是并掉的;kept 是余量不够、照旧补黑的——成片里会闪,非空就逐段报给用户(beat / 轨 / 区间 / 差多少余量)。
  • lay.blackTrack:黑底垫轨轨号(只有 --black-bed 才有,缺省 null)。
  • lay.blackBedHoleSec / lay.blackBedHoles:纯黑时段(没有任何 B-roll、靠黑片压住口播的段落;两种形态数值相同),恒全量不按阈值过滤——非零就主动报(哪个 beat、几秒、在哪),这是粗剪期既定取舍不是故障。
  • lay.removedTracks / lay.keptEditedTracks:剥了哪些旧自产轨 / 因「你编辑过」保留未剥的轨。删了什么必须跟用户说。
  • lay.dedup:emptySlots(宁空不重复的空槽数——多了是该补料或走动线②的信号)、adjacentWaived。
  • lay.pinned(有钉选才出现):requested/placed/yielded——三个数按段计(键 <clip_id>@<段内锚点毫秒>)且同分母,placed + yielded === requested 恒成立。整片单素材的工程(二创:一条长视频钉多处引用)全靠这个粒度才看得出「钉了 5 段只落了 1 段」。yielded 非空要逐段指名哪些没落上(stderr 也有告警)。
  • lay.signal_coverage(开了 --mark-weight / --highlight-weight 才出现,只出开了的那一维):coverage = hit/(hit+neutral),分母是参与融合的候选段数。 覆盖率低不等于「没 describe」——一个素材通常只有一个时间点有描述行,离它太远(>15s)的段就近命中不上,素材越长覆盖率越低。所以:coverage 为 0 ⇒ 本片确实没理解过,去跑 matrix describe --plan;coverage 偏低但非 0 ⇒ 重跑 describe 不会改善,如实告诉用户「信号只对这 N% 的候选段起了作用,其余按中性、排序主要还是语义分」,别让他以为加权在全面生效。
  • lay.anchors / lay.anchor_details(拆分稿圈了关键词锚才出现):planned 钉位数 / pinned 用户钉选占锚槽数 / degraded 降级数——degraded 非零要按 anchor_details 指名哪个关键词没锚上及原因(无合格命中/文本漂移/窗口不足),提示用户该处「听到关键词看到画面」的卡点没兑现、可换 query 或补素材后重跑。
  • lay.downloads:raw 原片回落 / failed 掉槽位非零时提一句。
  • lay.arrange_run(本地素材路才出现;素材矩阵路与总闸压回本地时整键缺席):这一轮云端编排的账与归因,MUST 主动读、别当噪声跳过。⚠️ 它与 --arrange-estimate-only 出的 lay.arrange 不是同一个东西:那个是零调用的本地预估,这个是服务端复算的实收量,MUST NOT 拿去互相核账。
    • fallback:"self_check_failed" ⇒ MUST 主动告诉用户:这一轮云端产物被弃、已花掉 units_total 编排量、成片走的是本地编排;并把 diffs 前几条贴给他 / 反馈给我们(diffs 是全量,机读面不截断)。成片没问题(ok 仍是 true),但这笔钱花得不明不白。
    • fallback:"decision_pin_mismatch" ⇒ 两侧跑的不是同一版决策算法,产物不可比而非「算得不一样」。告诉用户服务端版本与本机期望版本这两个数,让他稍后重试;持续如此就反馈给我们。这一档没有 diffs(根本没比过)。
    • fallback:"unreachable"/"rejected"/"malformed" ⇒ 没拿到可用的云端产物;diff_count/diffs 会一起缺席(那是「压根没对拍成」,不是「对拍过且一致」)。
    • mode:"shadow" ⇒ 成片走的本来就是本地产物(设计如此,不是回落、没出事),但云端那一次照样计了费⇒ MUST 如实报 units_total,MUST NOT 因为 source:"local" 就说「没走云端」。
    • units_total > 0 ⇒ 如实报花了多少;billed:false ⇒ 全部命中服务端幂等回放,本轮零新增计费,别吓唬用户。
    • idempotency_recorded:false ⇒ 幂等登记没写成,提示用户重发会重新计费(别建议他「重跑一次试试」)。
    • rounds 恒在(开 --arrange-qc 时不止一条):逐轮的账在这里,units_total 已按轮累加并跳过回放轮。某轮的 units 缺席 = 那一轮「已计费但服务端没告诉我们计了多少」,MUST NOT 读成「那轮没花钱」。
    • dump_request(只在带了 --dump-request 时出):上行请求体的落点。服务端不留 plan 全文,所以这份文件是复现这次调用的唯一凭据。写了不止一份时另出 dump_request_files 全量清单——按它读,MUST NOT 自己按命名规则拼后几轮的路径。
    • 服务端频率保护(按 key 限流 / 相似请求指纹,同回 HTTP 429)⇒ CLI 先按限流窗口对齐等待并重试,仍不通过才落到 fallback:"unreachable",零执行零计费。此时报错原文里带的是服务端说法(「频率保护」而非「端点不可达」)——MUST 照那句转述:不是余额问题、也不是请求写错了,隔一会儿再来,或先用 --arrange-estimate-only 只看规模。⚠️ MUST NOT 建议用户立刻连着重跑(那只会把窗口撑得更满)。
  • integrity(素材落盘自检,只在真写回过时出现):dangling 悬空引用全量清单;danglingReferenced(时间线上没素材可放)与 danglingOrphan(只挂在 materials 里)严重度差一个量级,分开说;external 绝对路径找不到文件另一档。告知不拦阻,别自己删素材。
  • 单 query 失败是局部化的(counts.errors>0 但 ok:true):如实说哪几段没检到。
  • 工程缺失/非 v1 → 告警跳过铺轨但仍产 plan(lay 字段缺失)。
  • reprojection.degraded:true → 已降级至派单快照时码,照 reason 给出路(transcript 补回 / 工程放回 / 用户接受快照就照跑但要说明位置可能偏了)。
  • describe 结果:called 非零如实报扣了多少积分(1 积分/张);cached 命中说明零计费;failed 非零说明哪些帧没取到。

关键检查点:让用户在 opencut 里挑选/调整(别跳过)

这是本步的核心,不是可选收尾。 铺轨产出的是多条并列候选轨,不是定死的成片。铺完必须提示并停下等确认:

  • 在同合云桌面客户端(opencut / OpenCut Gitruck Edition)里打开工程,候选轨已铺好。
  • 用轨道头「小眼睛」逐条切换对比,留满意的、关不要的。
  • 候选默认是 preview 代理;下载原片属挑选后的动作(客户端挑选 UI)。
  • 候选片段自带纯黑底(片段级背景填充,客户端属性面板「基础 › 背景填充」可逐片段改),空档在每条候选轨上各补了纯黑片——所以关掉某条候选轨的小眼睛会露口播,那是用户主动切换。纯黑补片也是候选轨上的片段,换片拖到候选轨颗粒上替换即可。
  • 旧工程(之前按黑底垫轨铺的)可能还有一条纯黑底轨(struct_meta.broll.black_track)——别误删;重铺时它会被换成新形态。用户的客户端太旧、打开后 B-roll 黑边处露口播 ⇒ 让他升级客户端,或本次加 --black-bed。
  • 觉得填充有问题(太杂/太空/漏段)→ 回来找我调参重铺(配方 B 的理解裁定也在这时上场)。

用户明确说「B-roll 就这样」之后,才往下走——先看 AI 情景片段腿(同属 ③),三源齐了再进 ④ 全局抽帧检查,过了才交棒 ⑤ 铺 MG。详见末节「下一步」。

常见情况处置(据结果因势象形调整,同目录可反复重跑对比)

情况怎么做
想在多个候选里挑--lay N 多铺几条候选轨。只增加可选方案数,不扩大覆盖——别把它当空洞的解药
填充太差 / 命中太杂先看排序前几条质量再调 --score-floor(调高留空处补纯黑,必看空洞告警);杂得可疑 → 走配方 B:describe top 候选,按 usable_flags+desc 剔除后 matrix lay
「像但不能用」(水印/字幕/黑边混进候选)配方 B 的标准场景:describe --plan → 你删掉命中的 result → matrix lay。CLI 不会自动剔(零件不裁定),删不删你判断
某候选非用不可 / 顺序想钦定编辑 plan:该 result 标 pinned:true → matrix lay。钉选是落位保证(免负词/地板/不二用抢占/紧邻避让),lay.pinned.yielded 非空说明确实钉多了在打架,名单逐段指名
出现空档补黑 / 黑底空洞告警不是故障:照 lay.blackBedHoles 逐段报给用户,出路=调低 --score-floor / opencut 手动补片 / 动线②云端垫底
--online 结果带 plan_kept外网这轮零可铺候选,既有 plan 没被覆盖(planPath 仍是上一轮的,可直接 matrix lay);本轮逐条报错与待核候选在 plan_kept.online_attempt_path,照它说明失败原因
每段候选太少不够挑--top-k 调大重跑
某段有空槽 / 想补特定意象gtrk matrix search "<英文长句场景描述>" --project <目录> --json 单条补检;影视解说类补检记得带 --source-window 保时序
只想先看清单不铺轨--lay 0(只产 plan);之后铺 = matrix lay(不重新检索、不重新烧配额)
报「候选轨已被你编辑过」拒铺保护不是故障:工程零改动,plan 照常产出。① opencut 处置那条轨后重跑;② 用户明确点头 → --force-relay(raw 登记删除不可恢复,先说后果)
matrix lay 报「plan 校验未通过」你把不可编辑面改坏了(报错逐条指名字段):按 §plan 编辑口径改回来重跑;local_path 路径无效 多半是可移动盘没挂载或真把路径改了
describe 明明跑过、这轮又扣费多半是服务端判据升级:describes 缓存键并入判据版本(DESCRIBE_CRITERIA_VERSION),旧口径条目在新版本下不算命中,会重跑重计费。--json 的 cached_stale_criteria 就是这一栏的张数(是 called 的子集,不是额外开销)。旧产物不删、仍可读。属预期,不是缺陷
matrix index 报 0/0(一个素材都没枚举到)先看两件事:① --dirs 的路径里有没有英文半角逗号——有就改成重复传(见文首前置);② 素材夹里有没有断链(失效软链接)。两条都不是再查路径本身对不对
报「本地索引不存在」先 gtrk matrix index --dirs <...>;已建过则查 --dirs 与建索引目录是否一致、可移动盘是否挂载
换电脑用不了索引索引跨机不可移植(本机缓存),新机重跑 matrix index 即可
预览看不了 / 想「重签」别为此重跑铺轨:preview_url/cover_url 不带签名不过期;带签名 24h 过期的是原片 url——工程内走客户端「确认原片」重签;脱离工程要原片落本地走 gtrk matrix fetch <clip_id...>(免费重签+下载,见「精剪补素材」节)
raw 原片回落 / 体积大提示用户;服务端 backfill 后重跑可换回轻量代理
reprojection.degraded:true不是故障:命令算不出当刻窗口退回快照。transcript_missing → 补回 transcript.json 或新版 oralcut 重出;no_project/gtrk_unreadable → 工程放回位或 --project 指对
期望 concept 却报 external 限制如实说明当前身份只出 real_shot 可商用素材,concept 需矩阵成员口
describe 报 describe_endpoint_unreachable服务端未上线/网络/配置指错:查 describeUrl / GITRUCK_DESCRIBE_URL;缓存与 plan 都在,修好重跑。describe 走异步任务(提交后轮询取结果):任务提交成功后即便中途断网结果也不丢(服务端照跑),可重新轮询/稍后重跑取回;上游失败服务端自动退款,只需重跑

搜词规范(ad-hoc search 与理解派单 queries 通用):英文长句场景描述(5–12 词,谁+在哪+做什么),一条只装一个场景意象,避多义/字面强的动词("pointing"/"hunting" 会召回特写/猎人,改用 "giving suggestions in a meeting" 这类场景语义)。

下一步(别停在铺完,也别直接跳去铺 MG)

用户确认你这条腿的 B-roll 满意后,先看 AI 情景片段腿有没有活——它与你同属 ③ B-roll 底轨阶段,MUST 在 MG 之前落位:

  • dispatch.ai_drama 非空 → 交棒 /gtrk-ai-drama(产分镜稿 → 用户去外部平台出片 → 手动回铺)。一句话交代:「影视素材这腿定了,AI 情景片段还有 N 段要出,我把分镜稿产出来给你」。 ⚠️ 异步等待的口子:外部平台抽卡可能数天,严格串行会把后续无限期卡住。故进 ⑤ 的硬门是「AI 片段已回铺 ∨ 用户明示先跳过」。走「明示跳过」时 MUST 把与 AI beat 相邻或重叠区间的 MG 颗粒标记为「AI 回铺后待复查构图」并在收口时复述该清单,MUST NOT 静默跳过。
  • dispatch.ai_drama 为空 → 三源已齐,直接进 ④ 全局抽帧检查画面构图:对最终底轨抽帧看主体位置 / 安全区 / 画面朝向 / 明暗,停下等用户确认构图无误(这与刚才「挑选 B-roll」那次确认是两次不同的确认),过了才交棒 ⑤ /gtrk-mg。
  • dispatch.mg 也为空 → 无 MG 车道,④ 检查过后直接 render 收口。

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

上面的往下走是默认,但用户表达了范围保留或节奏保留时 SHALL 停在这一步、SHALL NOT 自动交棒。 两者语义正交,认漏一个都会误冲:

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

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

停下时必须交代下一步是什么、他说一声就继续(例:「B-roll 这腿定了。按你说的逐步来我先停在这, 下一步是 AI 情景片段 / 全局抽帧检查构图,你说一声我就接着做」),别退化成事事请示。

没有这两类信号时不改默认:仍按上文自动往下走。

原则:agent 替用户跑 CLI / 接力 skill,用户只对话——别让用户自己去终端敲下一条 gtrk 命令;但关键检查点务必停下等用户确认再进下一步——本车道涉及两处:① B-roll 铺完让用户挑选/调整;② ④ 全局抽帧检查后让用户确认构图。


精剪补素材:gtrk matrix fetch,两段式拉原片(脱离工程)

场景:粗剪已完成、工程已导剪映,用户在剪映精剪时说「这里想补一段 B-roll」——不回客户端、不重跑铺轨,把原片拉到本地直接拖进剪映。这是既有管线的旁路补给口(add-matrix-raw-fetch),与铺轨链路的「确认原片」(客户端挑选 UI)互不相扰。

动线恒为两段式(先看后拉,钱和磁盘都不失控):

  1. search 挑定:gtrk matrix search "<词>" 出候选(preview 可看)→ 用户/agent 挑定要的 clip_id。计费检索的每次成功返回都会灌授予账本——付费即持久授予。
  2. fetch 拉取:gtrk matrix fetch <clip_id...> [--out <dir>] → 免费重签新鲜签名 → 原片按 <clip_id>.<ext> 落盘(缺省 ./matrix-fetch/)→ 「拖进剪映即用」。

授权边界话术(MUST 如实、给出路):

  • fetch 零计费:重签是行使既有授予,免费无限次;24h 过期签名不构成障碍——三天前 search 出的 clip 照样 fetch(授予持久、签名现签)。
  • 未购项逐条报因不连坐:报「未购授予」的条目,出路 = 对该素材的关键词跑一次计费检索即获授予;其余命中项照常落盘,别把部分 missing 说成整批失败。
  • 首发只覆盖视频 clip 原片:图片/音频素材虽也落授予账本,但重签面未开——这类 id 会进 missing(透传报因并附提示),属「暂不支持」不是故障。
  • 本地素材不走 fetch:--local 域素材本就绝对路径直引——matrix search --local --dirs 出的就是本地路径,用户直接拖,没有「拉取」这一步。

工程分叉明示(与 gtrk mg render 同款话术):用户在剪映里补的这段料不会回流 .gtrk(导出本就单向),回头从工程重导剪映不会带上它;要长期用提醒自存产物文件。原片体积可观(单条常见几十 MB 级),批量拉取前把量说清。


改工程:走 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

gtrk matrix 铺的片段 clip_id 形如 B05-local-broll-0-3(beat-来源层-broll-轨内序-槽序;补黑片为 -bedfill-), 各层互不撞名,--clip 可直接寻址。

MUST NOT 直接编辑 .gtrk 的 JSON。 片段时码是两套并存的(clip_st+clip_ed 与 clip_st+duration):改一份不改另一份,客户端优先读 clip_ed、后端又不强校验它 ⇒ 没人报错,成片却用了陈旧出点。gtrk patch 替你做恒等式同步 + 帧对齐 + 写前全档校验。

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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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,别手搓。

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Gitruck/cli9662026년 10월 26일 업데이트

Gitruck의 스킬 모두 보기

이 스킬의 문제 신고