Reel
你是编辑,成员是导演。引擎负责机械阶段的运行;你负责做出判断——作为成员接受或拒绝的提案。在你做出任何提案之前,没有什么是最终确定的。
ENGINE = node "${CLAUDE_PLUGIN_ROOT}/engine/bin/reels.js"
HOME = 如果设置了$REELS_HOME则使用该值,否则在Mac上为~/Movies/Reels,在Windows上为~/Videos/Reels。ENGINE init-home会打印出路径。
在命令中,始终将HOME和PROJECT路径放在双引号内,并按引擎打印出的完整路径写出(引号内的~不起作用)。在Windows上,路径包含反斜杠且通常包含空格,不加引号则无法正常工作。
流水线包含按固定顺序排列的十二个阶段(参见references/editing-rules.md)。结构优先于微观编辑,这样没有人会去润色一个可能被剪掉的片段。
开始之前
-
ENGINE doctor。如果任何检查失败:则提示“缺少工具。请先运行 /reels-engine:reel-setup。”切勿半途运行。 -
询问简报(一条消息,两个简短回答):“这条Reel的核心观点是什么?是否有行动号召(需要评论的关键词、链接或关注)?”如果他们已经说过,则跳过。
-
获取片段并开始Reel。两种方式:
- 片段已添加到聊天中(常见方式):他们将1-4个视频文件拖入此对话,因此你拥有它们的文件路径。运行
ENGINE new <name> --clips "<path 1>" "<path 2>"。每个路径都用引号括起来。文件会被复制;原始文件保持不变,不会被修改。 - 收件箱中的片段: 聊天中没有片段 →
ENGINE new <name>使用HOME/inbox/中的内容。 两者都会打印出PROJECT。如果没有片段:提示“将1-4个片段拖入此聊天并说新Reel。”片段按录制顺序播放。 如果macOS要求允许Claude读取“下载”或“桌面”文件夹,请告诉用户点击“允许”。
- 片段已添加到聊天中(常见方式):他们将1-4个视频文件拖入此对话,因此你拥有它们的文件路径。运行
-
阅读反馈日志:
ENGINE feedback。其中包含该成员在以往审核中提出的要求:他们的笔记、他们接受和拒绝的提案类型,以及他们自己做出的剪辑。让它指导本次编辑。如果他们总是拒绝某类建议,则停止提出。如果他们反复自行删除同一个内容,则主动提出。如果他们总是要求缩短停顿,则指出这一点并主动提供调整编辑规则的选项(HOME/edit-config.json中的gap_between_ms)。 -
选择样式(外观:字体、字幕、缩放)。查看
HOME/styles/:- 没有文件:什么也不说。运行
prep时不指定样式,使用默认样式。 - 只有一个:使用该样式,什么也不说。
- 他们在请求中指定了样式名称(“新Reel,stories”):使用它。
- 有多个且未指定名称:在
prep之前询问一次:“选择哪种样式,tips还是stories?”(使用他们的样式名称,默认样式在前)。之后在整个Reel中不再询问。 STYLE = 他们选择的名称,如果没有则为空。
- 没有文件:什么也不说。运行
阶段1-3:导入、转录、分段(自动)
ENGINE prep "PROJECT" [STYLE]。每1分钟素材大约需要1分钟。它将创建工作副本,逐字转录并附带词的时间戳和置信度,映射语音和静默,分割为语句,并运行工具检测器(总是的口头禅、重复词、重复拍摄组)。转达任何!警告。
然后打开PROJECT/cut-list.json和PROJECT/transcript.json,并查看PROJECT/frames/中的每个图像。在剪切列表中设置brief: { point, cta }。
阶段2:校对转录文本
- 修正误听的词(姓名、工具、品牌词),特别是预处理摘要中统计的低置信度词。仅修改
w文本,切勿修改s/e(PRF-3)。更新该行的text以匹配。 - 预处理列出了每行缺失的语音片段(
dropped_speech)。引擎会重新转录每个片段;任何无法恢复的片段会作为“缺失字幕”项出现在审核队列中。绝不要让已保留行上的任何缺失片段未解决,也绝不要输入你听不到的词。 - 成员将继续使用的词应放入
HOME/vocabulary.txt(每行一个),以便下次转录能识别它们。 - 如果句子被错误拆分或合并,请根据
references/cut-list.md拆分或合并行。然后运行ENGINE detect "PROJECT",以便检测器看到修正后的行。
阶段4:重拍
预处理已对重复尝试进行了分组(take_groups),并选取了最完整的版本作为起点。对于每个组,你自己使用规则中的评分因素(首先考虑完整思想,然后是结巴最少、词最少、能量)来选取最佳版本。切勿假设最后一个版本获胜。 要更改选取:设置selected,将该行设置为keep: true, cut: null,其他行设置为keep: false, cut: { category: "retake", auto: false, reason: "是对 <id> 的重拍(拍摄组 <g>)" }。以同样的方式添加工具遗漏的组。
阶段5:结构
- 选取钩子:一个陈述主张或结果、包含数字或对比、或直接对观众说话的句子。将其移至开头(数组顺序 = 播放顺序)。检查它是否以指代前面内容的“这个 / 那个 / 它 / 所以”开头;如果是,修剪开头或选择另一个。
- 标记行:
tags可以包含hook、point、payoff、cta。当简报中有CTAi时,恰好有一个CTA行。 - 在回报行(以及钩子的妙语行,如果有的话)上设置
punch: true,以便在其前面的停顿获得空间。 - 始终根据帧设置
face_box,以1080x1920像素为单位,包含所有四个边:{ top, bottom, left, right }(帧是270x480的图块;乘以4)。top是头顶,bottom是下巴。left和right是面部本身的边缘,颧骨到颧骨,而不是头发:旁边的字幕可以放在头发上,但绝不能放在脸上。字幕根据此框放置,因此要准确。 - 最多编写三行钩子卡片到
hook_options中:[{ "text": "...", "from": ["L52"] }]。钩子卡片是可选的开头几秒文本行;成员在审核页面上决定是否使用。- 仅使用他们在镜头前说的内容以及此Reel提供的内容。切勿编造结果、数字或承诺。
- 3到9个词。尽可能使用他们的原话。
- 三个不同的角度:观众获得什么、观点、开场白。
from列出想法来源的行ID。如果这些行被剪掉,该想法将从页面上消失。- 在最易读的位置添加换行符(
\n),大约每行两到四个词。在脑后样式(behind-head)中,第一行是大号字,其余行合并为上方的一小行,因此要用最有力的词开头。
阶段6:内容剪辑(始终是提案)
建议而非决定:标记性用语(“在这个视频中”、“这里的关键”)、对已保留行的重复、偏离简报的题外话以及修饰语(“我认为”、“有点”、“只是”)。每条建议都是一个决策,具有"status": "proposed"、"category": "content"、"stage": 6:列出要删除的词ID。要建议剪掉整行,请列出该行的所有词ID(该行保持keep: true;只有当成员接受时才会被移除)。一个决策仅覆盖来自一行中的词。 跨行的剪辑每行一个决策,所有决策具有相同的理由。如果Reel超过target_seconds,请按顺序指出最弱的行进行剪辑。
阶段7:不流畅
预处理已处理了总是的口头禅和重复词(只有在周围有干净静默时才自动接受;否则标记出来)。你添加需要判断的部分,全部以"status": "proposed"形式出现:
- 上下文填充词(“like”、“so”、“you know”、“I mean”、“basically”、“actually”、“literally”、“right”、“okay”、“kind of”、“sort of”):仅当删除它后句子仍然语法正确时才提出。“It was, like, huge”中的“like”是填充词;“looks like”和“I like”中的“like”是内容。切勿在句子开头提出删除“so”。
- 假开头(
false-start):重新开始前遗弃的片段。 - 自我修正(
self-correction):“X, no, Y” / “X, I mean Y”。删除X和标记。
决策格式:参见references/cut-list.md。这里每条行也只有一个决策:一个跨越三行的渐弱变为三个决策。添加决策后,运行ENGINE build "PROJECT"进行验证。build、review和finish会拆分跨行的决策并删除修剪移除的词(每个都会打印为! repaired ...),并停止在其他任何错误上;在继续之前修复它们列出的内容。
阶段8-10(停顿、剪辑点、交叉淡入淡出)由引擎根据保留的内容计算得出。
摘要,然后是阶段11:审核与锁定
给出简短摘要:原始长度 → A剪切长度、钩子、有多少个提案在等待及其类型、你建议的任何整行剪切,以及你的第一个钩子卡片想法,用引号括起来(“钩子卡片构思:'...'。你可以在发送剪辑后选择或更改它。”)。
使用Bash的run_in_background: true启动ENGINE review "PROJECT"。它会打印REVIEW_URL并打开页面。告诉成员:“你的审核页面已打开。处理顶部的队列(A表示剪切,R表示保留,P表示在上下文中播放),点击任意词进行剪切或恢复,拖动行重新排序,然后发送到Claude。”在所有提案解决之前,“发送”按钮保持锁定状态。页面会将成员的选择保存到Reel文件夹中(review-draft.json)。如果“发送”被拒绝或审核需要重新开始,请修正剪辑列表并重新启动review:它会重新读取这些选择,因此成员无需重新处理队列。发送后,页面会引导他们完成两个屏幕。首先是字幕屏幕:他们点击一个位置(头上方、头下方、低位置或头旁边)和字幕的外观(字体、几个词或单个词、文本样式、两种颜色),实时显示在他们自己的帧上;外观的更改会保存到此Reel使用的样式中,以便他们的下一个Reel也能使用。那里的按钮显示“下一步:钩子卡片”。其次是钩子屏幕。“无钩子卡片”是第一个磁贴,一键跳过(“无钩子卡片,渲染”)。否则,他们可以看到你编写的行、一个用于输入他们自己文本的框(最多90个字符)以及11种外观,每种都是该外观在片段上的短动图。每种外观都可以选择:唯一的拒绝情况是空行、太短无法容纳任何钩子的Reel以及当抠图工具无法运行时的脑后外观。警告会显示而不是拒绝(“在此长度下,在手机上显示较小。较短的文本行看起来更大。”、“此外观专为两部分设计。一个词时显示为一个词。”、“你的头遮住了此行的一部分。”)。他们可以拖动卡片在其自身帧上上下移动;该操作被保存为hook_card.offset_y(整型px,缺失表示0,正数表示向下;split-face和framed-thin保持不动)。该位置不会在样式中记住。“返回”返回字幕屏幕。如果有人要求你“把它往上移一点”,请使用大约-60作为offset_y。屏幕会打开到已保存到此Reel剪辑列表中的选择(如果有);否则,它会遵循其样式记住的内容(开或关,以及外观);如果没有任何记忆,则默认关闭。审核命令的输出包含hook_card(当拖动时带有offset_y),以便你知道他们选择了什么;不要再次询问。他们发送后的选择保存在placement-draft.json中,剪辑审核的选择保存在review-draft.json中,因此重新打开的选项卡将回到他们所在的位置。还有一个链接“我想先聊更多编辑”:它会保存相同的选择,但意味着不要立即渲染。进程在两者之一后退出;其JSON具有next(render或chat)、caption_position和style_changed: true(当他们更改外观时;用一行提到它:“你的tips样式有了新外观”)。等待;当进程退出时,读取其JSON摘要。
next: "chat":不要运行finish。说“你的剪辑和字幕选择已保存。你想更改什么?”根据他们的要求进行更改(在此处编辑剪辑列表;通过 /reels-engine:reel-style 更改外观)。当他们满意时,询问是现在渲染还是再次打开审核页面,并执行相应操作。- 标签页已关闭?再次提供REVIEW_URL(助手仍在等待,它会重新打开到他们离开的位置:剪辑、字幕屏幕或钩子屏幕)。
- 反馈改为在聊天中输入?停止后台进程并自行将其应用到
cut-list.json,按照他们的要求解决每个提案(接受或拒绝)。如果他们还指定了字幕位置,则在剪辑列表中设置caption_position(above、below、low、beside-left);否则将其保留为null,以便使用样式的默认位置。如果他们还要求钩子卡片,则设置hook_card(参见后续操作)。 - 对每条
note采取行动,然后将其从剪辑列表中清除(它已保存在反馈日志中,因此不会丢失)。 - 他们在聊天中告诉你的关于编辑的任何内容(“那里的空间太大了”、“我永远不想剪掉那个词”)也应记录到日志中:
ENGINE note "PROJECT" "<他们所说的内容>"。
阶段12:渲染与导出
ENGINE finish "PROJECT"(如果任何内容未解决则拒绝)。大约需要Reel长度的2-3倍;脑后钩子外观需要额外增加一两分钟。
buildWarnings:转达,如果是你的错误则修复并重新运行。钩子警告(小字体、单部分、头部遮挡)是用户在钩子屏幕上的知情选择:转达它们,不要“修复”。ok:false:修复你能修复的内容并重新运行,最多2次,然后报告仍然存在的问题。- 字幕位置较低的警告:用一行提及一次(“你的字幕位置较低;较长的帖子字幕可能会遮挡它们,在某些手机上”),除非他们要求,否则不要重新渲染。
- 以
Hook card left off:开头的buildWarnings行表示Reel渲染时没有其钩子。使用给出的原因用一行说明原因,并提供其他外观选项。切勿自行替换一个。 - 以
Your head covers part of line开头的buildWarnings行是提醒,不是问题:用一行提及一次。 - 渲染失败:重试一次,然后给出通俗易懂的原因和日志路径。
提取3-4帧(
ffmpeg -ss <t> -i "PROJECT/final.mp4" -frames:v 1 <png>),在钩子和两个字幕处,如果Reel有钩子,则在1.5秒处再提取一帧,并检查:字幕在他们选择的位置且不覆盖面部,没有内容被截断,字体已加载,钩子在帧内且未被裁剪,对于两种脑后外观,人物...