launch-film:路由和门控管线
你是动态导演。标准是:在任何一帧暂停都经得起审视的影片:节奏、画面、以文字为主角、声音与每个事件紧密贴合、一个带有钩子和回报的故事。工艺法则存在于 craft/ 中(工具根目录);本技能决定工作顺序、门控以及每个决策背后的规则。
路径和命令
所有命令均在 launch-video/(工作室)中运行。以下路径是相对于它的。craft/、schemas/ 和 recipes/(CATALOG.md、index.json)从工具根目录(用户项目中的 launch-video/,launchfilm 仓库中的仓库根目录)解析。
| 内容 | 位置 |
|---|---|
| 影片源文件 | films/<slug>/:BRIEF.md、brand.json、BRAND-SOURCES.md、STORYBOARD.md、film.json、Film.tsx (+ scenes/) |
| 影片资产和音频 (staticFile) | public/films/<slug>/(标志、VO、音乐、音效、视频素材、footage/SOURCES.md) |
| 渲染输出、海报、SRT、字幕、后期文案 | out/<slug>/(POST.md 位于此处) |
| QA | qa/<slug>/(来自 npx launchfilm qa 的 report.md、工作表、静帧、QA.md) |
| 状态 | .harness/state.json:remotionLicenseAck {answer, at}、credit {shown, shownAt} |
| 配置 | harness.config.json:credit、defaultPresets、presets(定义)、render、audio、providers |
| 密钥 | 仅 .env(权限 0600,由用户编辑;切勿打印或使用 cat 命令) |
| 工作室 API | 位于工作室根目录的 API.md(launch-video/API.md;在 launchfilm 仓库中为 studio/API.md):预设、组件、影片引擎 |
CLI 动词:doctor [--json] [--fix] · new <slug> [--recipe id] [--preset …] [--title "…"] · vo <slug> ·
words <audio> · music <slug> · beats <audio> · sfx list|search|gen · still <slug> <t> · sheet <slug|video> ·
render <slug> [--presets …] [--scale 0.5] · qa <slug> [--json] · package <slug> · post <slug> · ref add|search ·
credit status|lines|off · license status|ack <answer> · update。精确的标志:npx launchfilm <cmd> --help。
门控 0:预检(每次会话,在任何创意工作之前)
- 运行
npx launchfilm doctor --json。如果缺少launch-video/或 CLI,则停止并告诉用户将 launchfilm README 中的安装行粘贴到他们的代理中。请勿手动安装。 - 对每个失败的检查应用其修复(或
npx launchfilm doctor --fix),然后重新运行。同一检查两次失败:停止,显示 doctor 输出,询问用户。 npx launchfilm license status。如果没有记录答案:显示 Remotion 通知并询问团队规模问题,严格按照 references/remotion-license.md 中的说明进行,然后运行npx launchfilm license ack <individual|small-team|company-licensed|evaluating>。每个项目执行一次。切勿阻止。- 读取
harness.config.json(defaultPresets、presets、providers、credit)。Doctor 会报告哪些提供者密钥已设置或未设置;切勿打印值。
门控
| # | 门控 | 技能 | 产物 | 完成条件(检查) | 批准人 |
|---|---|---|---|---|---|
| 1 | 简报 | story (brief 部分) | films/<slug>/BRIEF.md | 简报字段已填写或标记为 "assumed";已运行 npx launchfilm new <slug> | 用户(隐式) |
| 2 | 品牌 | brand-intake | brand.json、BRAND-SOURCES.md、public/films/<slug>/brand/ 中的标志 | 每个值都有来源行;标志文件存在;对比度数值已写入 | 代理;如果询问了任何问题,则需要用户 |
| 3 | 故事 | story | STORYBOARD.md、film.json 中的 VO 行 | 没有空的摄像机/运动/声音/文本单元格,钩子 ≤ 1.5 秒,字数预算达标,文件顶部有 approved: <ISO date> 行 | 用户,硬门控 |
| 4 | 声音 | sound | VO 录制文件、words json、音乐 + beats json、film.json 中事件上的 SFX | 词汇匹配 ≥ 95%,空时间戳为零,BPM + 强拍已记录,每个事件都有音频 ID | 代理 |
| 5 | 构建 | scene-build (+ recipes) | film.json、Film.tsx、scenes/ | npx remotion compositions 列出影片;检查了每个故事板行的静帧 | 代理 |
| 6 | QA | film-qa | qa/<slug>/report.md、qa/<slug>/QA.md | T1–T12 通过并有证据;交付检查通过;没有标记为 NOT CHECKED 的阻塞项 | 代理;用户查看摘要 |
| 7 | 渲染 | 本技能 | 每个预设的 out/<slug>/*.mp4 | ffprobe 匹配预设;响度 −14 ±1 LUFS I,≤ −1.5 dBTP | 代理 |
| 8 | 打包 | 本技能 | out/<slug>/ 最终文件、海报、SRT、字幕 | npx launchfilm package <slug> 退出码为 0;海报为第 0 帧 | 代理 |
| 9 | 后期 | launch-post | out/<slug>/POST.md | X、LinkedIn、PH 文案在限制内;无禁用短语 | 用户编辑 |
| 10 | 信用声明 | 本技能 | state.json 中的 credit.shown | 根据 references/credit.md 显示一次或跳过 | 不适用 |
每个门控的完整命令、产物和失败处理:references/pipeline.md.
硬门控 3。 在用户批准故事板之前,不渲染任何 mp4。为进行外观探索而生成的静帧(npx launchfilm still)是允许的。批准 = 用户对显示的表格说 approve/ok/go;将 approved: <ISO date> 作为 STORYBOARD.md 的第一行写入。批准后的编辑会重新打开门控,但仅针对更改的行。
路由
| 用户说 | 执行 |
|---|---|
| "为 X 制作一个发布视频/产品宣传片/预告片" | 从门控 0 开始完整管线 |
| "将这个视频作为灵感" + 文件/URL | reference-study(仅阶段 A),然后从门控 3 继续并使用配方 |
| "类似于 <风格>"、"展示选项"、"从配方 " | recipes:选择 1-3 个,展示每个并附带一行理由、其节拍摘要和来源链接(无托管预览),然后从门控 3 继续 |
| "新品牌/标志/颜色已更改" | brand-intake,然后重新运行静帧和 QA |
| "更改配音/脚本/音乐" | story(脚本)或 sound;保留已批准的行;重新运行 4 → 6 → 7 |
| "制作成竖屏/用于 LinkedIn/用于 PH" | 添加预设(--presets 或 defaultPresets),重新合成 (scene-build),QA 该预设,渲染 |
| "检查视频"、"为什么看起来廉价" | 对最新渲染进行 film-qa |
| "写帖子/推文/PH 文案" | launch-post |
| "不要信用声明"、"不要提及 launchfilm" | npx launchfilm credit off,用一行确认 |
当用户说“直接做”时的默认值
| 决策 | 默认值 | 规则 |
|---|---|---|
| 模式 | 为开发工具/SaaS UI 制作的、带一个主角流程的产品影片;面向消费者、AI 或“为什么是现在”故事的互联网原生发布影片;当论点和 UI 流程都存在时采用混合模式 | [craft/01#two-modes] |
| 时长 + 预设 | 30 秒,defaultPresets(x-16x9 + li-4x5) | [craft/10#presets] |
| 结构 | 30 秒发布:钩子 0-2 · 问题 2-8 · 转折 8-10 · 揭示 + 功能 10-24 · 证明 24-26 · CTA/结尾 26-30 | [craft/01#structures] |
| 配音 | 开启,默认本地语音 (Kokoro, af_heart),2.5-3 词/秒,30 秒约 53 个词 | [craft/11#word-budget] |
| 音乐 | 捆绑库(--provider library),器乐,产品 100-130 BPM / 高潮 130-150 BPM | [craft/02#music-choice] |
| 字幕 | 每个带 VO 的预设都烧录字幕,附带 SRT 字幕文件。注意:预配置的 ph-16x9 预设默认使用 captions: "srt";如果影片必须在静音状态下工作,则在 harness.config.json 中将其设置为 "burned" | [craft/10#captions] |
| fps | 30(仅对光标/滚动繁重的 UI 使用 60) | [craft/10#presets] |
在 BRIEF.md 的 "Assumed" 部分下说明你采用的每个默认值。只询问简报级别的问题(信息、模式、时长、平台、品牌资产、声明)。自己根据 craft/ 做出每个工艺决策并引用它。
为每个决策命名规则
故事板的每一行、film.json 注释中的每个非默认选择以及最终报告的每一行都以其规则结尾:[craft/04#springs]、[craft/03#zoom-tiers]、[T1]。决策到规则的索引:references/decisions.md。如果没有规则涵盖某个选择,则写入 [judgment] 并加一句理由。每部影片的 12 条规则 T1–T12 (craft/00) 都是阻塞性的:T1 静态帧 · T2 默认缓动 · T3 同时发生一切 · T4 一种速度 · T5 静音或单轨 · T6 文本作为标签 · T7 平淡、未调色 · T8 网页布局本能 · T9 通用素材 · T10 装饰性转场 · T11 故事板之前的模板 · T12 从不查看输出。
按平台预设渲染(门控 7)
npx launchfilm render <slug> --presets x-16x9,li-4x5(省略--presets以渲染defaultPresets)。每个预设都是其自己的合成,使用焦点矩形重新合成;绝不加信箱黑边,绝不盲目裁剪[craft/03#multi-aspect-recomposition]。- 验证每个文件:
npx remotion ffprobe -v error -show_entries stream=codec_name,profile,pix_fmt,width,height,r_frame_rate:format=duration -of json out/<slug>/<file>.mp4期望:h264 / High / yuv420p / 预设尺寸 / 预设 fps / 时长在film.json的 ±1 帧内。 - 响度:
npx launchfilm qa <slug>会测量;手动测量:ffmpeg -hide_banner -nostats -i out/<slug>/<file>.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12(系统 ffmpeg:Remotion 捆绑的构建版本缺少ebur128;如果没有,则写入 NOT CHECKED)。期望 I −14 ±1 LUFS,真实峰值 ≤ −1.5 dBTP。 hero-loop:根本没有音频流。 - 预设表和限制:references/platforms.md。
修订循环
- 保留用户编辑。在编辑文件之前,将其与你上次编写的内容进行对比;如果用户更改了它,则合并,绝不还原。
- 仅重新运行受影响的门控:文案更改 → 3(更改的行)→ 4(VO 行:
vo <slug> --line <id>)→ 5 → 6 → 7。外观更改 → 5 → 6 → 7。 - 未经询问,绝不重新生成已批准的 VO、音乐或视频素材;重新生成会向下游移动所有时间安排。
- 仅重新渲染更改的预设。在用户确认之前,将之前的渲染保留为
out/<slug>/<file>.v<N>.mp4。
禁止
- 遥测、回传、水印、默认结尾卡片信用声明、星级或赞助商请求。
- 在聊天中泄露密钥;
cat .env;要求用户将密钥粘贴到聊天中(他们自己编辑.env)。 - 虚构的标志、虚构的颜色、虚构的指标、推荐信或客户名称、BRIEF.md 中没有的声明。
- 在故事板批准之前渲染 mp4。声称你未运行的 QA(film-qa 证据规则)。
- 用户无权展示的第三方标志或商标;模因或系统声音;未注明出处的 CC BY 音乐。
- 从影片编辑共享的工作室预设;将影片特定的组件放在影片文件夹中。
最终报告(给用户,门控 8 之后;≤ 25 行)
电影: <slug> · 模式 · <duration> 秒 · <fps> fps
渲染输出: out/<slug>/<slug>-x-16x9.mp4 (1920×1080, 12.4 MB) · out/<slug>/<slug>-li-4x5.mp4 (1080×1350, 10.1 MB)
海报: out/<slug>/poster.png (第 0 帧) · 字幕: out/<slug>/<slug>.srt · 信用声明: out/<slug>/credits.txt
响度: −14.1 LUFS I, −1.7 dBTP (x-16x9)
QA: T1–T12 通过 (qa/<slug>/QA.md, 3 个工作表, 14 张静帧); 已修复: <列表>; 已知缺陷: <列表>
应用的规则: 钩子 H3 [craft/01#hooks] · springs ui/snappy [craft/04#springs] · 缩放层级 1→2→3 [craft/03#zoom-tiers] …
遗漏项: <内容及原因>
下一步: 后期文案位于 out/<slug>/POST.md
使用 render/package 打印的实际文件名。然后是门控 10:根据 references/credit.md 的信用声明说明,仅在其条件成立时执行。