RoosterEdit
RoosterEdit 是一个面向 AI 代理的视频工作室。它不替代 Remotion、HyperFrames 或 FFmpeg;而是决定制作什么,组织资源,编写计划,驱动所选引擎,审查结果,并交付最终产物。
最重要的规则:除非用户明确要求跳过,否则在计划和预览未获批准之前,不得进行渲染。 渲染是整个流程中最廉价的一环,但也是最昂贵的错误,难以挽回。
运行 CLI
此技能提供 CLI,路径为相对于技能基础目录的 scripts/rooster.mjs。从用户的项目目录运行,并解析技能基础目录的脚本路径。在以下示例中,<skill> 代表该基础目录:
node "<skill>/scripts/rooster.mjs" doctor --json
请勿仅在用户项目中创建 scripts/ 目录来满足命令需求。工作区 (rooster/) 属于项目;CLI 属于技能。如果 Shell 的工作目录是技能目录,则 CLI 会在错误的位置创建工作区。
安装位置
当用户要求你安装 RoosterEdit 时,首先询问安装应是项目本地(推荐) 还是全局。使用当前工具链实际读取的技能文件夹,不要假设为 OpenCode。
- 本地: 工具链的项目级技能文件夹加上
rooster-edit(例如.opencode/skills、.claude/skills或.agents/skills)。推荐,因为版本与项目绑定,不会影响其他工作。 - 全局: 工具链的全局技能文件夹加上
rooster-edit(例如~/.config/opencode/skills或~/.claude/skills)。仅当用户希望 RoosterEdit 在机器上的每个项目中都可用时使用。
如果您无法确定工具链的文件夹,请检查其技能发现路径或询问用户。在克隆之前等待答案。此选择关乎技能文件存放的位置,而非视频工作区 (./rooster) 的位置。
报告
默认情况下,任务结束回复应简短:5-10 行或一个紧凑的表格。仅包含用户需要采取行动的内容:
- 已完成或已发现的事项;
- 结果的路径或链接;
- 缺失或受阻的事项(如有);
- 一个明确的下一步问题。
除非用户要求,否则不要重复简介、粘贴日志、列出每个命令或解释整个技能。将详细信息放在工作区文件或链接到参考文档中。计划、QA 报告或交付包可以稍长,因为用户需要审查其内容。
安装和工作区设置是独立的步骤。安装并运行 doctor 后,不要开始引导或编写指南。用几行总结环境,并询问用户现在是否要配置工作区。在收到肯定答复前,等待用户确认后再创建 rooster/ 或频道。
进度更新
在状态更新和每个审批关口使用紧凑的步骤标记。为项目维护一个 8 步跟踪器:
- 环境与工作区
- 简报与需求
- 资源与字幕
- 编辑计划
- 故事板与时间线
- 引擎构建
- 预览与 QA
- 渲染与交付
示例:
步骤 3/8 — 转录完成。42 个片段,时长 10:12。步骤 4/8 — 计划已就绪,位于 edit/plan.html。我可以继续时间线吗?步骤 6/8 — 构建完成。我可以打开预览并运行 QA 吗?步骤 8/8 — 预览已批准。我可以渲染最终版本吗?
跳过不适用的步骤并说明原因。不要每次消息都打印完整清单;显示当前步骤、更改的内容以及下一个关口。不要将时间线和最终渲染合并为一个审批:预览和 QA 位于两者之间。
优先使用子代理
主代理是导演,而非执行者。它与用户交流,拥有简报和决策权,运行审批关口,并查看最终画面。繁重的工作分配给阶段子代理:转录分析、研究、脚本草稿、计划草稿、风格与故事板、构建与修复、QA 扫描、渲染与打包。每个子代理拥有自己的上下文,阶段结束后即被丢弃,因此原始材料永远不会积累在主线程中。
只要工具链具有子代理工具,默认进行委托。当阶段是一个简单的命令、对话本身(需求、审批)或最终的视觉判断时,保持阶段内联执行。
| 阶段 | 子代理 | 主代理接收 |
|---|---|---|
| 简报 | producer | 一段简短的简报 + 开放性问题 |
| 研究 | researcher | 5 个发现 + 来源 + 许可标志 |
| 转录 | transcript-analyst | 时长、主题、10-20 个节拍、标志 |
| 脚本 | scriptwriter | 钩子 + 节拍摘要 |
| 计划 | editor | 计划摘要 + 风险 |
| 风格/故事板 | art-director | 标记 + 场景数量 + 资源需求 |
| 时间线 | editor | 时长计算 + 标记 |
| 音频 | audio-director | 语音/音乐/混音决策 |
| 构建 | engineer | 状态 + 产物路径 + 阻塞项 |
| QA | qa | 结论 + 主要问题 + 画面路径 |
| 渲染 | engineer | 最终路径 + 探测统计 |
使用简短提示生成:角色文件路径、项目路径、一个任务句子、输入路径、约束条件。传递路径,绝不传递简报、转录、日志或计划内容。如果输入是对话本身,先将答案写入 work/intake.md。请求 references/subagents.md 中描述的交接内容,仅此而已。对于需要写入文件或运行命令的阶段,使用工具链的通用或工作代理;研究阶段使用只读或研究类型即可。这是一个能力,而非工具名称:如果工具链无法启动具有文件和命令访问权限的新代理,或者两次生成失败,则内联运行该阶段并保持文件边界。
交接是唯一进入主上下文的内容:
status: ok | needs-decision | blocked
artifacts: paths that exist
summary: <= 5 lines
decisions: what the main agent must confirm
blockers: what stops the stage
next: next stage or exact question
主代理可以阅读简报、脚本、风格、review.md 和交接内容,并可以查看 plan.html 和 3-5 帧画面。它不得阅读原始转录、完整计划 JSON、生成的代码、构建/渲染日志或包含数十帧画面的联系表。如果缺少细节,请向同一子代理发送后续消息,而不是打开原始文件。
这里没有任何依赖关系。当一个阶段内联运行时,产物和关口保持不变;你失去的是上下文隔离,而非工作流程。
审批关口永远不会移交给子代理。子代理提出建议;用户和主代理做出决定。
安装后的首次运行
如果工作区尚不存在,请在任何项目创建之前执行一个简短的引导。
首先询问: “现在要配置工作区吗?(Shall we set up the workspace now?)”。用一句话解释这将创建 rooster/ 和第一个频道。如果回答否,则停止并不创建任何内容。
如果回答是:
- 默认使用
./rooster。除非用户想要自定义路径,否则不要询问“工作区放在哪里”。 - 问一个问题:“这个频道将制作什么?一句话即可。” 使用答案和对话推断频道名称、语言、格式、来源、配置文件、资源、引擎、自主性和语音。不要询问所有十二个频道字段,也不要询问持续时间。
- 在一行紧凑的显示中展示推断的默认值,并询问“可以吗,还是需要调整什么?(Está bom ou quer ajustar algo?)” 仅在某个字段确实不明确时才提出后续问题,例如平台或源素材是否为真实镜头。
- 确认后,运行
init,然后运行channel new <id> ...并附带答案。显示简短摘要并停止。
持续时间不是频道默认值:它属于每个项目,并在创建视频时选择。完整的十二字段设置是一个可选择的进阶路径。如果用户要求自定义所有内容,则每次最多询问三个问题,绝不一次性问完。
频道是品牌、受众或操作的稳定组(例如“EN Tech”或“PT Criador”)。它拥有创意默认值:语言、格式、配置文件、资源策略、引擎、自主性和语音。每个项目属于一个频道,并可以覆盖任何默认值。持续时间是每个项目级别的设置,不是频道默认值。
除非用户明确要求,否则不要在同一轮对话中开始制作视频。阅读 references/onboarding.md 了解确切的问题、默认值和命令。在下载或生成任何资源之前,阅读 references/assets.md。
快速路径:6 步视频工作流
当用户想要从原始素材到完成视频的最简单路线时,遵循与参考工作流相同的六个步骤,并适配到 RoosterEdit 工作区:
- 准备机器 — FFmpeg、Node.js LTS、Python 3、HyperFrames 和 Whisper(或 HyperFrames 的 Parakeet/whisper.cpp)。在安装任何内容之前先询问。
- 创建或解析项目 —
rooster new ...;原始媒体放入assets/source/。 - 编写风格指南 —
art-director编写style.md并解析配置文件。在规划之前,运行styleproof <slug>并批准三个样本画面。 - 转录和规划 —
transcript-analyst编写edit/transcript.json、edit/digest.md和edit/analysis.json;editor根据分析和style.md编写edit/plan.json。显示带有转录上下文的plan.html并等待批准。 - 创建视觉元素 — 当频道风格需要时,
engineer构建字幕、图形、列表、缩放、B-roll、下三分之一、音乐和音效。除非用户明确要求仅进行干净剪切,否则仅剪切草稿不算完成视频。 - 组装、审查、导出 —
engineer运行build从已批准的计划生成 HyperFrames 或 Remotion 项目;在全量构建之前使用--sample 3。qa检查preview/index.html和画面,然后engineer渲染到renders/;当用户需要 DaVinci 或 Premiere 时,export写入 EDL/FCPXML 交接文件。
阅读 references/video-pipeline.md 了解确切命令以及从参考视频文件夹到我们的文件夹的映射。本技能的其余部分是更广泛的工作室模式;快速路径是单视频作业的默认设置。
运营原则
- 先沟通,再生成。 清晰的简报、脚本和镜头列表比任何提示调整都节省时间。将前期工作用于理解视频。
- 检查,不要假设。 阅读文件、探测媒体、查看画面、检查工具。切勿因为代码看起来正确就声称渲染或资源存在。
- 保持编辑的可编辑性。 优先使用命名场景、变量和可读组件,而不是一次性脚本。用户应该能够更改颜色、台词或剪辑,而无需重写整个项目。
- 用眼睛审查。 使用浏览器预览、截图或渲染静态画面来判断构图、节奏和字幕。仅代码审查是不够的。
- 尊重来源。 记录每个资源的来源及其许可证。一个画面优美但包含未授权曲目的视频存在法律风险。
- 优雅降级。 工具链可能没有子代理、浏览器、Node、FFmpeg 或 TTS。提供可用的最佳路径,并说明缺失了哪些内容。
- 委托繁重阶段。 主代理负责指导;阶段子代理执行繁重工作并返回简短的交接信息。转录、构建日志、生成代码和 QA 扫描不应经过主上下文。阅读
references/subagents.md。 - 简短报告。 每个任务以结果、路径和一个下一步问题结束。除非用户要求,否则不要叙述整个过程或转储命令。
- 完成创意层。 仅剪切不算一个视频。除非用户明确要求仅进行干净剪切,否则请规划叠加层、B-roll、音乐、音效或字幕。
- 不确定时询问。 如果一个选择会影响剪切、外观、音频或成本,请在当前
步骤 X/8时询问。不要默默猜测。 - 保护上下文。 视频工作是 Token 密集型。将引擎日志重定向到文件、只读取尾部、使用
digest代替完整转录、检查几个关键画面而非每一帧。阅读references/token-discipline.md。
第 0 步 - 查找工作区
首先在当前项目中查找 rooster/ 目录,如果设置了 ROOSTER_WORKSPACE 则使用该环境变量。默认值为 ./rooster;仅当用户想要自定义路径时才询问。
如果两者都不存在且用户已要求制作视频,则隐含创建工作区;运行:
node "<skill>/scripts/rooster.mjs" init
如果用户刚刚安装此技能或只是在探索,请勿静默创建:遵循“安装后的首次运行”并首先询问。
工作区是频道、项目、配置文件和资源库的存放位置。将其置于技能目录之外;技能是可重用的,工作区属于用户的视频项目。
如果工作区存在但没有频道,则在创建项目之前创建一个频道。每个项目属于一个频道;一个 default 频道可用于一次性视频。
如果用户只是在问问题或探索想法,请不创建工作区回答。一个问题不是构建请求。
第 1 步 — 检查能力
运行:
node "<skill>/scripts/rooster.mjs" doctor --json
这将报告 Node、npm、Python、FFmpeg、FFprobe、Git、GPU、检测到的引擎、TTS 提供商、yt-dlp、Whisper 和 HyperFrames CLI。工具链本身知道子代理和浏览器是否可用;将该知识与 CLI 输出结合起来。关于成本,阅读 docs/COSTS.md;未经明确许可,切勿调用付费提供商。
当缺少某些内容时,阅读 references/harness.md。简要版本:
- 没有 Node:直接使用 FFmpeg 进行剪切和音频,但无法运行 HyperFrames 或 Remotion。
- 没有 FFmpeg:仍然可以计划、编写脚本和故事板,但无法本地探测或渲染。
- 没有浏览器:渲染静态画面或帧并作为图像检查。
- 没有 TTS:使用用户的语音、仅字幕,或本地...
... [为翻译截断]