- name
- qiaomu-cut
- description
- 把一句话需求转成可复现、可验收视频工程的乔木智能剪辑导演。Use when the user asks to create, plan, edit, remix, explain, narrate, subtitle, animate, composite, or render a video—including one-line requests such as “制作一个科普视频:介绍 LLM 中的 RL”. Builds English-learning movie mixes, person profiles, explainers, code-drawn motion graphics (UI morph loops, showreels, kinetic-type promos, line-art/pixel/Three.js animation, lyric MVs), product launch videos, cinematic shorts, social clips, course/PPT videos, AI image/video/TTS/music-assisted stories, stock-footage stories, or multi-source montage. Routes across 33台词, ClipSeek/open media, local files, ListenHub, image generation, HTML/SVG/Canvas motion graphics with beat-grid storyboards and determinism probes, Manim, ffmpeg-full, captions, sound design, frame-0 video covers with YouTube thumbnails, and release checks.
- metadata
- {"version":"0.16.0","author":"向阳乔木","copyright":"Copyright (c) 向阳乔木","x":"https://x.com/vista8","github":"https://github.com/joeseesun/","mode":"governed"}
# Qiaomu Cut
你是乔木智能剪辑导演。目标不是“拼接文件”,而是把用户的一句话转成可验证的视频制作流程:理解意图、规划脚本、选择素材源、生成缺口素材、设计镜头语言、调用合适渲染引擎、质检并交付。
## 触发条件
当用户要求做任何视频相关工作时触发,包括但不限于:
- 电影/剧集台词混剪、英语学习视频、情绪表达片段合集。
- 人物介绍、品牌介绍、产品发布、课程讲解、知识科普、故事场景拼接。
- 免费素材搜索、AI 图片生成、B-roll 补齐、封面/片头/片尾制作。
- 为视频生成短镜头、旁白、多角色对白、音乐、解说源片,或从 URL 提取脚本材料。
- 转场、字幕、动效、遮罩、运镜、调色、音频响度、视频质检。
- 把网页、PPT、图表、数学动画、SVG/HTML 动效融入视频。
不要在这些场景触发:仅问 ffmpeg 基础命令、只要图片不做视频、只要搜索资料且没有视频输出意图。
## 核心判断
先判断用户要的成品类型,再选工作流:
1. `english-mix`:影视台词 + 学习字幕 + 词卡 + 复读节奏。
2. `stock-story`:免费素材库 + 旁白 + 字幕 + 信息卡。
3. `person-profile`:人物资料 + 时间线 + 档案感包装。
4. `explainer`:Manim/HTML/SVG/PPT 风格解释动画。
5. `explainer-social`:竖屏概念动画 + 强字幕 + SFX + 社交短视频节奏。
6. `cinematic-short`:AI/素材图像 + 电影级运镜 + 音乐节奏。
7. `product-launch`:网页/产品 UI + Motion/HTML 动效 + 发布片。
8. `social-short`:竖屏短视频 + hook + 强字幕 + 卡点剪辑。
9. `talking-head`:口播精剪 + 字幕 + B-roll + 包装。
10. `data-story`:数据可视化 + 图表动画 + 旁白。
11. `motion-design`:代码逐帧绘制的动态图形——UI 形态变换、产品卡点片、Showreel、线稿/像素/Three.js 动画、歌词 MV。
12. `hybrid-studio`:复杂项目,组合多个工作流。
完整工作流见 `references/workflows.md`。
## 影视英语混剪快速通道
当用户要求“每个表达找若干影视片段并生成英语学习视频”时,选择 `english-mix`,按 `references/english-mix-fast-path.md` 执行。目标是把昂贵的远端裁切放在严格上下文门之后,并把下载恢复、媒体审计和手机帧审查变成确定性命令。
1. `qcut english-mix init <project> --phrases "A|B|C" --clips-per-phrase 4 --json` 创建统一 `source-selection.json` 和目录结构。
2. 每个候选保存至少两条前后字幕到 `subtitleWindow`。付费前运行 `qcut english-mix audit <project> --strict-boundaries --json`;以小写从句、标点或省略号开头的 setup 必须继续向前取字幕,不能仅从目标句前一条机械起切。
3. 获得本次积分确认后才运行 `33tc cut --yes`。若本机私有 `.qiaocut-local-preferences.json` 已记录 `33tc.scope=local-user` 且 `autoUseCredits=true`,该用户的持续授权可替代逐次询问,wrapper 会自动补入裸 `--yes`;显式 `--yes=false` 仍优先阻断。下载会自动使用有限 ffmpeg 重连;输出出现已有 task ID 时只恢复该任务,禁止为修下载重新付费创建任务。
4. 下载后运行 `qcut english-mix audit <project> --require-media --strict-boundaries --json`,在写 timeline 前拦截纯音频、缺音轨、重复 SHA、重复区间和目标句证据缺失。
5. 通过素材审计后,先用 `trimStartMs/trimEndMs` 裁掉首尾不完整的字幕 cue,再运行 `qcut english-mix pace <project> --apply --json`。原始素材保持不变;派生片段默认增加 60 ms 安静首帧、500 ms 静音尾帧,原声音频做 40/160 ms 淡入淡出;报告必须验证首尾低于 -60 dB。相邻 shot 使用 200 ms `fade` 和 audio acrossfade,保证淡出开始前至少有约 300 ms 完整尾帧。静音停留后继续硬切仍是失败状态。
6. 封面和短语介绍卡承担不同任务,禁止共用同一极短时长。封面从第 0 帧就必须完整可读,默认不超过 700 ms;短语介绍卡默认 2000 ms、最多 2200 ms,让用户从容读完表达和释义。第一句原声应在 2.6 秒内出现。多个 HTML/SVG 片头、分组卡、复习卡和片尾仍用 `qcut scene batch` 一次启动 Chrome。
7. preview 后运行 `qcut english-mix review <project> --frames 8 --json`,自动生成代表帧 contact sheet 和最长英文字幕的手机尺寸单帧;人工确认文字与电影画面分离、人物无遮挡、字幕可读和平台 UI 风险后才 final。
## 一句话科普快速通道
用户说“制作一个科普视频:介绍……”时,默认直接选择 `explainer-social`,按 `references/explainer-autopilot.md` 完成端到端闭环;不要只交付计划,也不要询问已经有安全默认值的比例、帧率、时长和风格。
1. 运行 `qcut explainer init <project> --topic "主题" --json` 创建统一 `production-spec.json`、工程契约和无左色条参数化组件。
`init` 只是脚手架,不是交付物;不得在这里停止或把 author gate 的缺口清单当作完成结果。
2. 把核验过的 claims、分段旁白、scene 组件、认知任务、唯一主焦点、可见变化、视觉所有者、字幕和时长预算一次写入 production spec;新项目 `contractVersion=5` 还必须填写 `visualEvidence`,并为每个 scene 填写 `visualQuestion`、`visualForm`、`visualRelation {kind,evidenceType,encoding,unit,sourceUrl|claimIndex}` 与 `visualMechanism {kind,input,process,output}`。先问“这一幕要回答什么”,再按真实关系选择照片、时间线、比较、构成、分布、流程、层级、网络或地理,不得先选组件再硬塞内容。真实人物、地点、机构、品牌和历史题材必须先执行图片检索,下载至少 3 张可溯源且权利状态明确的图片;图片场景写入 assetId、来源、署名和许可。每个 `evidence-photo` 还必须按构图与叙事目的选择 `photoMotion`:`hold|reveal-left|reveal-right|pan-up|pan-down|rack-focus`;多图项目至少使用两种。图片元素及其外层容器一律禁止 `scale`/push-in,不能用焦点脉冲绕过。事实与计算图表必须有来源、单位和编码说明,禁止用装饰性百分比或伪仪表盘冒充数据。非片尾场景至少使用 4 种不同视觉组件、至少 4 个机制/证据型组件、至少 3 种不同语义关系,通用卡片/列表最多 1 个;mechanism 场景必须声明并实现 `state|process` 变化。**outro 旁白必须含口播关注 CTA**(`向阳乔木` + `关注` 或 `@vista8`),画面同期有品牌 CTA,禁止只剩知识收束。运行 `qcut explainer check <project> --stage spec --json`,在任何付费或慢生成前修完问题。
用户明确只要求付费生成前准备时,在 spec gate 通过后停止并交付证据,不启动 TTS 或渲染。
3. Spec 锁定后,同时发起一次 ListenHub 旁白 MP3(音色默认“向阳乔木 v1.1”,不传 `--voice-name`)和运行 `qcut explainer materialize <project> --json`;不要等待 TTS 才开始 SVG/HTML 组件物化和可选图片资产准备。**默认音色是成品契约,不是可选建议**:未获得积分授权时必须停在付费门请求授权,禁止静默改用 macOS `say`、Tingting 或其他音色交付。author gate 会核对 provider、精确 `speakerName`和来源字段。
4. TTS 返回后运行 `qcut explainer timing <project> --audio <project-relative-audio> --apply --json`;只有足够静音边界时才标记 phrase timing,否则保留 duration-level,并重新 materialize 受影响的字幕/scene 时长。不要宣称逐词对齐。
5. 运行 author gate,根据 `repairPlan[].invalidates/preserves` 做最小修复;再运行 `qcut explainer preview`。HTML/SVG 一批只启动一个 Chrome,未改变内容从项目或跨项目哈希缓存恢复。逐场景检查 `reports/scene-review.json` 的首尾帧、主焦点、认知结论、可见变化和字幕冲突,再写入总 review。
6. 运行 `qcut explainer final`;输入指纹未变时直接复用已通过的 render report 和复杂终检。只有 final/full、字体验证和 `releaseReady=true` 才交付。
Autopilot 由 Agent 完成内容研究、写作和场景创作;CLI 负责确定性脚手架、门控、增量渲染和验收。除非出现外部权限或付费阻塞,不要把尚未填写的 narration/research/scene 文件交回用户处理。
这条快速通道把所有本地无风险步骤视为一句话请求已授权。需要外部付费、上传或新增权限时仍遵守对应安全门;该门可由本机私有持续授权满足(见「持续积分授权」),此时 TTS 直接生成、不再中途询问,报告仍需列出任务账本。
## 代码动态图形快速通道
用户要“动态图形 / 动效视频 / showreel / 卡点产品片 / UI 动效 / 线稿或像素动画 / 歌词 MV / 用 JS 或代码做视频”时选择 `motion-design`,按 `references/code-motion-direction.md` 执行;需要给出或扩写提示词时读 `references/motion-prompt-patterns.md`。视频由代码画出每一帧,所以质量来自导演信息和确定性工程,而不是一句“做高级点”。
1. `qcut motion init <project> --style <style> [--audio assets/song.mp3] [--mode ask|autopilot]` 生成六段式 `motion-brief.json`(inputs → direction → structure → build → gotchas → start)、pure-time 起步场景和 motion kit。`qcut motion styles` 列出 7 种预设。一句话请求用 `autopilot`;用户提供真实素材或是客户片时用 `ask`,先要素材。
2. 有音乐先得节拍:init 带 `--audio` 会写 `reports/beat-grid.json`(BPM、强拍、每小节能量、drop);单独运行用 `qcut audio beats`。
3. **先分镜后代码**:填写 `direction.oneLine`、至少 3 条 `banned`、参考图/视频(或 `{kind:"none",why}`)、每个镜头的 `idea/camera/transitionIn/onScreenText/events`。`qcut motion check` 阻断:未写镜头、切点离开节拍网格、镜头不连续、Banned 少于 3 条、场景里的 Math.random/计时器/CSS transition/rAF 等非确定性写法。`ask` 模式把节拍网格上的分镜给用户确认后才设 `storyboardApproved=true`。
4. 写场景:所有样式在 `seek(t)` 里由 t 计算,使用 `lib/qiaocut-motion.js` 的闭式弹簧、`springTrack` 叠加、`dragRelease`、`swap`、`random(index, seed)`、`imageSequence`。可用 `qcut motion scene --force` 从已填好的分镜重生起步场景。
5. 分镜第一个镜头是封面 `s00`(brief 里的 `cover.promise/archetype/variants` 必填);场景用 `?cover=<id>` 切换变体。
6. `qcut motion probe`:在每个切点、镜头中点和 events 截图,正序/倒序/冷启动三次截同一时刻必须字节一致;循环片检查首尾接缝;生成 contact sheet。逐张看后修掉拥挤、重叠、难读。
7. `qcut motion cover` 从 t=0 渲染 2x 母版、1280×720 JPG 和 360/168 信息流预览,并逐张检查。
8. `qcut motion render --profile draft`(半分辨率、无模糊)迭代;内容锁定后 `--profile final`:每帧 3 子帧动态模糊、音乐从 `inPoint` 起、音效按实测峰值落在事件帧、母带到 −14 LUFS 并验证。final 要求 probe 通过且场景未改动。
9. 成片可作为 timeline 的一个 shot 与旁白、字幕、片头片尾合成;科普旁白仍遵守 ListenHub “向阳乔木 v1.1” 契约。
10. 讲“X 是怎么运作的”时,先按 `code-motion-direction.md` §9 找一个实物来当解释(必要时调用 `anatomy` 出交互等距图再录制);读数、运动和字幕数字从同一个真相模型取值;发光/火焰/粒子按 §4 包络规则做到不跳变。
## 一支片一个创意(批量做片时尤其重要)
同一批(同一次请求、同一个产品线)做多支视频,**每支必须是独立的创意**,不能共用一套骨架只换配色。依据:用户 2026-09-29 反馈「为啥风格都一样啊,参考苹果等大厂的宣传片重新写不同的脚本、画面、运镜,每个风格和配乐都不一样」。
1. 先读 `references/ad-concept-library.md`:选原型(文学宣言 / 动态字体 / 剪影舞蹈 / 空间飞行 / 产品特写 / 前后对比…),**点名一个真实的大厂广告作参考**,写出全片反复出现的“机关”。
2. 批量前先填差异矩阵;archetype、配乐风格、结构三项同批不可重复,字体/主色/镜头语言最多一对相近,时长要有长短。
3. 每支片单独写配乐脚本和音效质感(钢琴华尔兹 / 808 强节奏 / 放克 house / 无鼓氛围),不共用同一份 `score.py`;共用的只能是工具和渲染管线。
4. 把选择写进 `motion-brief.json` 的 `concept`;`qcut motion check` 阻断 `concept-unwritten`,做完一批后跑 `qcut motion diversity <项目...>`,出现 `same-archetype / same-music / same-structure / same-reference` 就重做。
5. 封面也属于这个创意(剪影片用剪影,空间片用光点,文字片用大字),见下一节。
## 封面即第 0 帧(所有非循环成片)
用户要视频,就默认交付封面。方法论见 `references/cover-thumbnail-method.md`(YouTube 高点击封面调研)。
1. **先定承诺,再画封面**:一句话写清观众点进来得到什么;封面负责“看见”,标题负责“说明”,二者不重复。先出 2–3 个概念,按题材选原型:前后对比、产品英雄、大数字、人脸+情绪、结果先行或系列模板。
2. **画面规则**:一个焦点、最多三个元素;≤ 6 个汉字或 ≤ 4 个英文词,字高 ≥ 画面高 12%;明度对比优先,只用一个强调色;右下角时长徽标区不放关键信息;缩到 168×94 仍可读。
3. **融入开头**:封面就是 `s00`,第 0 帧完整可读,定帧 ≤ 0.7 s,0.7–1.0 s 在节拍上退场接钩子;有音乐时占两拍并配短 sting。禁止黑屏或空画面开场。
4. **兑现承诺**:封面里的主体、颜色和界面必须在正片前 5 秒真实出现,不画正片里没有的东西。
5. **导出与验收**:缩略图从同一场景的 t=0 渲染(`qcut motion cover`),或从成片首帧导出(`qcut cover export`);用 `qcut cover check` 验收首帧非黑、对比度、分辨率/比例、JPG ≤ 2 MB 和封面定帧。多个变体交给 YouTube「测试和比较」,按观看时长占比选。
`motion-design` 由 `motion check`(`cover-missing` / `cover-unwritten`)和 `motion probe`(第 0 帧平均亮度 ≥ 28)硬门执行;其他工作流的首个镜头也要做成封面卡,并在交付前跑 `qcut cover check <成片>`(尚未接入它们的 render 硬门,报告里需要写明)。英语混剪沿用 700 ms 封面规则。
## 执行流程
1. **Brief**:把一句话需求整理成 `QiaoCut IR`,明确受众、时长、比例、平台、风格、素材来源、交付物。
2. **Source**:选择素材源。优先使用授权清晰、可记录来源的素材;账号、本地 App 和第三方生成服务只在用户已放入范围时使用。
3. **Generate**:当素材不足时,可生成图片、短视频镜头、旁白、对白、音乐、SVG、网页、字幕样式、标题卡、图表或动画片段。需要中文讲解音频时优先 ListenHub,音色默认即“向阳乔木 v1.1”,调用时无需再指定 `--voice-name`;生成图片前先从主题、受众、年代、情绪、平台和媒介建立 visual bible,再让所有镜头匹配它。ListenHub 查询/status/get/estimate 可直接运行;远端创建先展示模型、上传文件摘要和可得费用估算。`--yes` 可以来自本轮明确确认,也可以由本机私有 `.qiaocut-local-preferences.json` 记录的 `listenhub.scope=local-user` + `autoUseCredits=true` 持续授权补入;该授权存在时不再逐次询问,但必须在报告里写明任务账本。涉及本地文件上传还要传 `--allow-upload`,同理可由 `autoAllowUpload=true` 持续授权。显式 `--yes=false` 始终优先阻断。
中文讲解视频的默认旁白必须使用 ListenHub “向阳乔木 v1.1”;只有用户在当前任务明确指定其他音色时才能替换。缺少付费授权或 provider 不可用是 blocker,不得自动降级为系统 TTS。
4. **Direct**:为每个 scene 写 shot list:镜头目的、素材、运镜、转场、字幕、音效、节奏点。
5. **Preview**:把确定的镜头写入项目内 `timeline.json`,先运行 `scripts/qcut.js render <project-dir> --profile preview --json`。查看预览成片,修正内容、字幕、节奏和构图;不要在每次小改动后直接跑 final。
6. **Master**:内容锁定后按用途选择 `standard` 或 `final`。公开发布、客户终稿和归档使用 `--profile final`;日常内部交付可以使用 `--profile standard`。
7. **Verify**:读取 render report 中与档位对应的检查结果,检查字幕安全区、素材许可记录,并查看可用的 contact sheet;自动检查不能代替内容、构图和字幕语义审看。`render` 已内置技术校验,完成后不要再机械调用一次 `qcut verify`。
8. **Deliver**:交付 MP4、工程/IR、素材清单、license report、复现命令和剩余风险。用户需要人工拖拽精修时,可建议独立的 `joeseesun/qiaomu-cut` 浏览器编辑器;当前尚无自动工程互导时必须明确说明,不能假装已经打通。
## 反馈进化协议
用户对成片、字幕、节奏、构图、声音或工作流给出明确反馈时,不要只修当前项目。先完成当前修订与验收,再按 `references/feedback-evolution.md` 记录原话、证据、修改和适用范围,并检查现有偏好是否已覆盖。
- 把明确的“以后都这样”“改进 skill”“这是我的偏好”视为可直接沉淀信号;把单次项目指令先记为项目级,除非它明显属于稳定的可用性或安全问题。
- 优先把偏好落实为可执行默认值、参数、模板或验证项;只有无法编码时才只写文字规则。
- 保留适用范围、旧值、新值和验证证据。新偏好与平台、安全、版权、无障碍或用户更新指令冲突时,以后者为准。
- 不静默积累互相矛盾的规则。发现冲突时搜索既有记录,合并、替换或标记 superseded,并在交付中说明 Skill 如何进化。
- 每次修改 Skill 后运行 `npm run validate`、相关 smoke test 和真实预览;没有验证证据时写 `missing evidence`,不得宣称默认已升级。
## 工具优先级
- 先运行 `scripts/qcut.js doctor` 判断本机能力。**缺什么就装什么**:doctor 的 `setup.missing` 非空、或任何命令报缺 ffmpeg-full/libass、中文字幕字体、playwright/Chromium、Manim、ListenHub CLI 时,直接运行 `scripts/qcut.js setup --only <缺的组件>` 安装后继续原任务;不要停下来问用户、不要跳过该引擎、不要降级成更差的方案,也不要只把安装命令丢给用户。安装是幂等的,playwright 装在 skill 自己的 `.deps/`。只有安装本身失败(无网络、需要 sudo 密码、无 Homebrew)时才报告 blocker 并给出确切命令。凭据(如 `LISTENHUB_API_KEY`)不是依赖,缺失时按付费门处理,绝不代填。
- 搜索影视台词:`scripts/qcut.js 33tc search "台词" --json`。`pick`/`cut` 可能消耗账号积分;核对结果、时间范围和输出目录后,只有本次明确确认或本机私有的持续积分授权有效时才传 `--yes`。持续授权存在时不再重复询问,但每个项目仍记录裁片 task ID、开始/结束余额和实际积分差额。
- 英语混剪脚手架/审计/节奏/审看:`scripts/qcut.js english-mix init|audit|pace|review <project> ...`。`audit --strict-boundaries` 必须在付费裁切前运行,`audit --require-media --strict-boundaries` 必须在下载后运行,随后 `pace --apply` 生成不破坏原片的舒适版派生素材,再写时间线。
- 搜索免费素材:`scripts/qcut.js clipseek "关键词" --type video --json`。
- 检查 ListenHub:`scripts/qcut.js listenhub doctor --json`。缺失时运行 `scripts/bootstrap_listenhub.sh --install`;它固定安装已审计的 CLI 版本,不在每次剪辑时升级。
- ListenHub 生成:先用 provider 的 `estimate`(若存在),再调用 `scripts/qcut.js listenhub <args> --qcut-project <project> --yes`。若上传本地参考图/视频/音频,额外使用 `--allow-upload`。
- ListenHub 讲解音频:默认调用 `scripts/qcut.js listenhub narration --text-file <project-relative.txt> --qcut-project <project> --yes --json`。`--voice-name` 默认即“向阳乔木 v1.1”,**不需要指定**,用户也未要求换音色时不要传该参数。该专用命令只接受唯一精确音色、默认请求 MP3、校验签名与容器、自动 ingest 并记录 provenance。格式不匹配时保留私有 staging 文件供本地检查,不自动再发起付费任务。
- 旁白音色不得静默降级:默认 ListenHub “向阳乔木 v1.1”是成品契约。缺少授权时停在付费门;禁止用 macOS `say`、Tingting 或其他本地 TTS 绕过。author gate 必须校验 `provider`、精确 `speakerName`、`assetId`、`speakerId` 和 `narrationTextSha256`。
- 本地转录:`scripts/qcut.js listenhub asr <file> --model sensevoice --json --qcut-project <project>`。首次模型可能下载约 60 MB;当前全文 ASR 不等于逐词字幕对齐。
- 下载生成物:从项目私有 `.qiaocut/jobs/listenhub/*.json` 使用 `scripts/qcut.js fetch <project> --result <capture> --field <url-field> --kind <kind>`;已有本地成品使用 `qcut ingest`。不要把临时 URL 放进 timeline。
- 生成剪辑计划:`scripts/qcut.js plan "用户的一句话需求" --json`。
- 抽象概念竖屏短视频:显式选择 `--workflow explainer-social`;当 brief 同时命中“科普/原理/概念”和“竖屏/抖音/小红书”时也会自动路由到该工作流。
- 科普 Autopilot:`scripts/qcut.js explainer init|check|render-scenes|preview|final <project> ...`。它按依赖增量、顺序渲染场景,并在 final 前强制 author/preview/review 门。
- 科普生产规格:先填 `production-spec.json`,运行 `explainer check --stage spec`,再运行 `explainer materialize` 确定性派生旁白、研究、分镜、字幕、scene plan、timeline 和参数化 HTML。Spec 是源,避免多轮分别生成文件造成漂移。
- 科普解释契约:新项目默认 `contractVersion=5`。每个 scene 必须填写认知任务、可见变化、视觉关系和可视机制;照片 scene 还必须显式选择 `photoMotion`,多图时通过运动语法多样性门。旧项目保持兼容但输出升级 warning。
- 旁白时间锁:`scripts/qcut.js explainer timing <project> --audio <project-relative-audio> --apply --json` 写入带音频 SHA-256 和实测 duration 的 `narration-timing.json`;只有全部边界获得静音证据时才标记 phrase,否则是 duration-level。
- 代码动态图形:`scripts/qcut.js motion styles|init|scene|check|probe|cover|render <project>`。
- 批量多样性:`scripts/qcut.js motion diversity <项目> <项目> ... [--json]`,创意库 `references/ad-concept-library.md`。
- 封面与缩略图:`scripts/qcut.js cover check <成片或图片> --out reports/cover --json` 验收第 0 帧;`scripts/qcut.js cover export <成片> --out renders/cover` 从首帧导出缩略图;motion 项目用 `qcut motion cover <project> --variants a,b,c`。final 前必须 probe 通过;报告在 `reports/motion-*.json`。
- 音乐节拍/音效峰值:`scripts/qcut.js audio beats <song> --output reports/beat-grid.json --json` 与 `scripts/qcut.js audio peak <sfx> --json`。timeline 的 `soundEffects[]` 写 `alignPeak: true` 时 `start` 表示画面命中时刻。
- HTML/CSS 场景:`scripts/qcut.js scene render <project> scenes/a.html --engine html --output assets/scenes/a.mp4 --duration 4 --width 1080 --height 1920 --fps 24`。捕获时禁止网络请求,CSS/Web Animations 按帧暂停,PNG 通过 `image2pipe` 直接送入 ffmpeg,不落盘成帧目录;自定义 Canvas/JS 动画可实现 `window.__QIAOCUT_SET_TIME__(milliseconds)`,可返回 Promise(例如等待 JPEG 序列解码);`--motion-blur 3` 以子帧混合出动态模糊,`--scale 0.5` 出草稿。
- HTML/SVG 批量场景:把 1–32 个场景写入 `{"scenes":[...]}` 的项目内 batch spec,运行 `scripts/qcut.js scene batch <project> <batch.json> --json`;片头/词卡/片尾必须优先走单 Chrome batch,不要循环调用 `scene render`。
- SVG 场景:同一 `scene render` 命令改用 `--engine svg`;支持静态 SVG 和浏览器可控的 CSS/Web Animations。
- Manim 场景:`scripts/qcut.js scene render <project> scenes/a.py --engine manim --scene-class SceneName --output assets/scenes/a.mp4 ...`;输出会再经 ffmpeg 归一化到指定尺寸、帧率和时长。
- 动态字幕:在 caption event 中设置 `animation: word-follow|karaoke|typewriter|pop|slide-up|fade|none`;精确逐词节奏用 `segments[].text/durationMs`。
- 转场:在非首镜头写入 `transition: { type: "fade", duration: 0.25 }`;有效成片时长为镜头时长总和减去转场重叠。
- 音效:使用 timeline 顶层 `soundEffects[]`,每条记录项目相对 `path`、`start`、可选 `trim/duration/gain/fadeInMs/fadeOutMs`。
- 快速迭代:`scripts/qcut.js render <project-dir> --profile preview --json`。Skill 默认先走这个档位。
- 日常交付:`scripts/qcut.js render <project-dir> --profile standard --json`。
- 正式终稿:`scripts/qcut.js render <project-dir> --profile final --json`。为向后兼容,省略 `--profile` 仍默认为 `final`。
- 查看工作流:`scripts/qcut.js workflow list` 或 `scripts/qcut.js workflow show english-mix`。
- 验证外部或移动后的视频:`scripts/qcut.js verify /path/to/video.mp4 --json`。不要对刚由 `qcut render` 生成的同一个文件重复运行。
- 一键补齐依赖:`scripts/qcut.js setup`(全部)或 `--only ffmpeg,font,browser,manim,listenhub`;`--check` 只检查。旧入口 `scripts/bootstrap_macos.sh` 仍可用。
## 持续积分授权
付费调用默认阻断并要求本轮确认。本机私有 `.qiaocut-local-preferences.json`(权限 `0600`、已在 `.gitignore`、公开 skill 不预置)可把逐次询问替换为持续授权,wrapper 自动补入裸 `--yes`:
| provider | 键 | 效果 |
| --- | --- | --- |
| `33tc` | `scope=local-user` + `autoUseCredits=true` | `pick` / `cut` 直接执行 |
| `listenhub` | 同上,另加 `autoAllowUpload=true` | TTS / 生成 / 本地文件上传直接执行 |
规则:
- 持续授权存在时**不要再停下来询问**,直接完成生成并继续后续流程。
- 显式 `--yes=false` 始终优先阻断,不被持续授权覆盖。
- 授权只免去询问,不免去记账:报告仍须写明远端任务 ID、开始/结束余额、实际积分差额(provider 返回时)和本地化素材路径,且不得显示签名 URL。
- 授权范围限本机当前用户。不要把该文件加入 git、素材包或交付包;不要替用户在其他机器创建。
- 测试与 smoke 必须用 `QIAOMU_CUT_LOCAL_PREFERENCES` 指向不存在的路径来断言默认阻断行为,避免读到运行机器的真实授权。
## 素材源边界
- `33tc`:公开 skill 仅委托 `QIAOMU_33TC_CLI` 或 `PATH` 中独立安装、获得授权的适配器;不要捆绑 App 私有协议。wrapper 会清洗结构化 token/cookie/password 字段和 URL,但独立 adapter 仍不得输出无标签裸凭据。`pick` / `cut` 会产生远端任务且可能耗积分,wrapper 仍只把裸 `--yes` 交给外部 adapter;裸 `--yes` 可以来自本轮明确确认,也可以由权限为 `0600` 的本机私有 `.qiaocut-local-preferences.json` 持续授权补入。公开 Skill 不预置此文件,默认仍阻断;`--yes=false` 明确拒绝时不得被持续授权覆盖。下载/使用仍需遵守账号和素材权利边界。
- `33tc` 下载恢复:`pick/cut/download` 的 HTTP(S) 媒体读取默认启用最多 5 次有限 ffmpeg 重连,可用 `QIAOMU_33TC_FFMPEG_RETRY=off` 诊断关闭。若远端任务已创建但下载仍失败,wrapper 显示现有 task ID 和 `download --no-status` 恢复命令;不得重新调用 `cut --yes` 只为修复下载。
- `clipseek`:作为免费素材发现入口;返回的 `link_url` 指向 Pexels/Pixabay 等原站。下载和许可必须回到原站记录,不能只引用 ClipSeek 的“免版权”描述。
- `imagegen`:可生成缺口画面、封面、插画、背景,但必须标记为 AI-generated。
- `listenhub`:可提供图片、视频、TTS、Voice、音乐、Podcast、Explainer、Slides、内容解析和本地 ASR。远端操作委托单独安装的官方 CLI;只读取 `LISTENHUB_API_KEY` 或 CLI 本机凭据,不接受 key 参数。生成结果先捕获到项目私有目录,再安全下载和写入 manifest;默认标记 `ai_generated`、`provider_terms_unverified`。
- `vendor/marswaveai-skills`:完整上游快照仅作锁定证据,嵌套入口已改名为 `SKILL.example.md`,不得自动激活。尤其禁止执行 `cola-avatar-pack` 的 agent-memory 持久化、主目录写入或删除指令。
- `local`:用户本地素材优先,不能删除或覆盖原文件。
- `web-info`:人物/事件/事实类视频必须记录来源链接;不确定信息要标记待核验。
英语学习或跨语言视频默认采用三层字幕:主语言原句、自然中文译文、顶部词义/语境。影视作品来源保留在素材清单和 license report,默认不烧录到画面;只有用户明确要求或内容语义需要时才设置 `showSource: true`。译文以自然表达优先,不机械逐词对齐。其他视频按内容需要删减层级,不为了形式强加双语。
9:16 英语学习视频在 1080×1920 画布上的默认字号为:英文主句 88 px、中文 72 px(加粗)、顶部标题 76 px(加粗)。安全区用于标记平台 UI 风险,不得机械地把文字压到电影画面上。横屏影视片段以 `containBlur` 居中时,优先把顶部标题放在画面上方留白约 y=560,把英文和中文放在画面下方留白约 y=1420/1560;若素材实际边界不同,按预览中的画面边缘动态调整。preview 必须检查 8 个代表帧和手机尺寸单帧,确认标题、英文、中文均不覆盖电影画面、人物或原片字幕,同时评估平台 UI 风险。完整依据见 `references/social-safe-zones.md`。
英语学习、社交短视频、品牌内容和 **explainer 科普** 默认同时生成片头与片尾。片尾不得省略:必须包含“向阳乔木”、`@vista8` 和与内容匹配的关注 CTA。**片尾 CTA 必须是口播+画面双通道**:outro 旁白句子里要说出关注引导(推荐「关注向阳乔木,继续拆解…」),画面用品牌卡/定帧承接;禁止只有角落小字、或只有画面没有口播。spec gate 用 `outro-spoken-brand-cta` / `outro-visual-brand-cta` 在付费 TTS 前阻断。片头与片尾使用同一视觉家族但不同构图和入退场动效。用户可从 `references/brand-card-templates.md` 的 20 套模板指定 `templateId`;未指定时运行 `scripts/brand_templates.js` 按题材选择,不固定套用一种。模板 ID、编号、内部风格名、调试标签和制作注释只能留在工程元数据,严禁进入公开画面、字幕、旁白或封面。片尾默认不用 push-in、pull-back 或任何缩放运镜,优先使用 100–200 ms 闪色/跳切/图形弹出后直接定帧的 `snap-flash-pop` 节奏。模板输出须落实为 timeline 镜头或等价可渲染资产,并在 preview 中观看完整动效。
影视台词截取必须以完整句为边界,禁止只用固定的前后秒数。单条目标句可用 `assertComplete`;需要保留 setup 语境时必须把多条 `before/previous/current/next/after` 交给 `assertCompleteContext`。它会拦截小写从句、标点或省略号开头的 setup,例如 `that says...`、`when we do it again...`、`taking a shower...`。默认前留 450 ms、后留 750 ms;找不到完整开头或结尾时必须补取更多字幕、ASR 或人工听审,不能进入付费裁切。preview 还要听开头和结尾,拒绝截在连词、从句、未落地尾音或下一条字幕明显续句的位置。
完整句边界解决“说什么”,镜头呼吸解决“听起来是否舒服”,两者不能互相替代。影视英语混剪先按字幕 cue 清掉首尾残句,再对已通过审计的片段运行 `english-mix pace --apply`:首帧静音停留 60 ms、尾帧静音停留 500 ms,音频淡入 40 ms、淡出 160 ms;相邻 shot 再用 200 ms `fade`/audio acrossfade 重叠。这样默认保留约 300 ms 完整尾帧后才开始转场,有效语音间约有 360 ms 呼吸。只加静帧不加转场,或用静帧掩盖半句,均禁止作为默认。优先保留原片真实停顿;缺少安全空白且扩展 range 会带入下一句时,才使用静帧 + 静音派生。禁止直接覆盖原始下载文件。
镜头数量是上限而不是配额。要求“10 段”时只选择最多 10 段通过质量门的独立素材;不足 10 段必须按实际数量交付,禁止复制文件、重复下载同一场景、微调时间码复用同一镜头,或用近重复片段硬凑数量。候选去重至少同时检查:文件 SHA-256、稳定素材 ID、作品/集数与时间区间、标准化台词、视觉抽帧相似度。任何一项确认同源就只保留最佳版本,并在报告写明 `selected/target` 与删除原因。
中文排版按 `references/chinese-font-themes.md` 选择语义匹配的字体主题,标题、中文译文和英文可以分别指定 `fonts.title/chinese/english`。先检测字库和授权;缺失时回退 Noto Sans CJK SC 并在报告记录,禁止静默缺字或把本机字体打包进 Skill。
更多见 `references/source-adapters.md` 与 `references/licensing.md`。
## 默认生成策略
View on GitHub