reel-editor

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Reel editor

Reel 编辑器

Turns a raw talking-head clip into a finished, on-brand vertical reel. Every brand choice (colours, fonts, caption style, sounds, CTA) comes from the person's brand file, never from defaults baked into this skill. You do the editing; they only make the calls that are theirs.
将原始口播片段变成一支完成度高的、符合品牌风格的竖版 Reel。每一项品牌选择(颜色、字体、字幕样式、声音、CTA)都来自当事人的 品牌文件,绝不使用内置在这个 skill 中的默认值。你负责剪辑;他们只做属于他们的决策。

Before anything else: is there a brand file?

开始其他操作前:是否已有品牌文件?

The workspace is
~/reels/
unless
REELS_HOME
is set.
  • No
    ~/reels/brand.md
    → run the setup interview in
    references/setup-interview.md
    first. Do not edit a clip without a brand file, even if they say "just use whatever". The interview takes 5 minutes and it is the whole point of this skill.
  • Brand file exists → read
    brand.md
    and
    brand.json
    in full, then continue.
工作区默认为
~/reels/
,除非设置了
REELS_HOME
。
  • 不存在
    ~/reels/brand.md
    → 先运行
    references/setup-interview.md
    中的设置访谈。即使他们说“随便用什么都行”,也不要剪辑片段。访谈需要 5 分钟,而这正是此 skill 的核心意义。
  • 品牌文件存在 → 完整阅读
    brand.md
    和
    brand.json
    ,然后继续。

Check the tools (once per machine)

检查工具(每台机器一次)

bash scripts/doctor.sh
- checks ffmpeg, Node, the HyperFrames skills and (if the brand file says CapCut) the CapCut connector. Fix anything it flags before editing. Install steps are in the repo README.
bash scripts/doctor.sh
——检查 ffmpeg、Node、HyperFrames skills,以及(如果品牌文件指定使用 CapCut)CapCut 连接器。修复它标记出的所有问题后再开始剪辑。安装步骤见仓库 README。

The edit, in order

剪辑流程(按顺序)

Each reel gets its own folder:
~/reels/<yyyy-mm-dd>-<short-name>/
. Copy the raw clip in (never edit the original).
  1. Transcribe -
    python3 scripts/transcribe.py <clip> transcript.json
    . Uses ElevenLabs Scribe when
    ELEVENLABS_API_KEY
    is in
    ~/.config/reels/.env
    (tight word timing; captions land on the word), else local Whisper (free, timing can drift ~0.3 s).
  2. Clean the voice -
    bash scripts/clean_audio.sh <clip> voice.wav
    (add
    --denoise
    if there is background noise). Targets -14 LUFS, the level Instagram and TikTok expect.
  3. Review (their call) - propose: lines to cut (repeats, false starts, rambles), fillers to drop, CTA moved to the end, target under 60 s, and the graphics plan. Wait for their yes before cutting. This is the step people care most about. Look at the start and end before proposing cuts: grab a frame every 0.5 s for the first and last 4 s. Cut any camera setup (pointing at the floor/garden, flipping the camera, reaching for the phone) even if words are spoken over it. Start on the first frame where they're settled in shot, and on a word that works as an opener.
    • Main path: the Reel Review page. First check that the
      Artifact
      and
      ArtifactData
      tools exist in this session (load them through tool search if they're deferred). If they do, follow
      references/review.md
      : they tap words to cut, watch the live rough cut, check graphics, captions, sound and colour, then say "build preview". Its import step writes
      edl.json
      +
      edit.json
      , so skip to step 4's cut and step 5.4's render.
    • Fallback: review in chat when those tools aren't there (older Claude Code, other apps). Show the transcript as numbered lines (format in
      references/rough-cut.md
      ), then the card list in step 5.
  4. Tighten, then cut + speed - write
    edl.json
    from the approved lines, then
    python3 scripts/tighten.py <folder>
    : it removes fillers and shortens pauses inside the kept lines, as hard as the brand's
    "pacing"
    says (
    natural
    default,
    tight
    ,
    fast
    ; presets in
    scripts/pacing.py
    ). They never approve these one by one. Then
    python3 scripts/cut.py <folder>
    . Speed comes from the same preset unless
    brand.json
    sets
    "speed"
    . Listen-check: re-transcribe
    master.mp4
    and confirm no clipped words at the joins.
  5. Graphics + captions: fill the template, don't design. You are the editor here, not the designer - the look is already built from the brand file.
    1. python3 scripts/transcribe.py master.mp4 master_transcript.json
    2. python3 scripts/auto_edit.py <folder>
      → drafts
      edit.json
      (captions in their caption mode, punch-ins)
    3. Edit
      edit.json
      yourself, in one pass: set
      "accent": true
      on the one key word per sentence, and add cards at the density
      brand.json
      "graphics"
      asks for:
      minimal
      about one every 8-12 s,
      balanced
      (default) every 4-6 s,
      busy
      every 2-4 s. A line with nothing to show gets no card; don't chart every number or screenshot every tool just to fill the gap. Card types and fields are in the header of
      scripts/build_reel.py
      ; HyperFrames catalog motions (carousels, charts, counters, notifications, cursor, follow cards) are in
      references/motions.md
      . Every card must show what that exact line says.
      • Hook title: max ~10 characters per line, 2-3 lines (
        "still / uploading / screenshots?"
        ), so it renders big. It's the only text with an outline.
      • Carousel: if
        brand.json
        has
        "require_carousel": true
        , every reel gets one (
        motion
        card, a
        carousel-*
        name,
        images
        from screenshots/their assets). If no line suits one, ask them; if they say no, set
        "no_carousel_ok": true
        .
      • Screenshots: for a tool or site they name that the line is about, run
        bash scripts/screenshot.sh <url> shots/<name>.png
        . Exit code 2 means the site blocked it: try the tool's marketing page, or ask them for a screenshot. Never use a blank one.
      • Mix the kinds: website shots, a colour block, a list card (
        "glass": true
        for liquid glass), a sticker from their assets, a
        follow
        card for the big moment, a counter or chart when they say a number.
    4. REEL_PREVIEW=1 bash scripts/render.sh <folder>
      for the draft (1080p, low priority), then
      bash scripts/render.sh <folder> --final
      once they approve it (the resolution in
      brand.json
      ; add
      --capcut
      on the CapCut route) →
      final.mp4
      + stage timings. Do not hand-write composition HTML or use other HyperFrames workflows here: they are slower and ignore the brand template. Only if they explicitly ask for an effect the template lacks (e.g. text behind their head), say it's slower, then use the
      hyperframes
      skill for that one effect.
  6. QA -
    python3 scripts/qa.py <folder>
    (loudness, size, length, missing words). Then grab a frame at every card and look: text inside the frame, readable over the background, on brand. Fix
    edit.json
    and re-run render.sh until it passes.
  7. Deliver -
    bash scripts/deliver.sh <final.mp4> "<clear name>"
    → upload-ready MP4 in their delivery folder.
  8. CapCut (only if
    brand.json
    has
    "capcut": true
    )
    - build the editable CapCut draft and give them the link.
    references/capcut.md
    .
Tell them what changed, and what to check by ear (cuts, names, brand words spelled right).
每个 Reel 使用独立文件夹:
~/reels/<yyyy-mm-dd>-<short-name>/
。将原始片段复制进去(绝不编辑原文件)。
  1. 转录 -
    python3 scripts/transcribe.py <clip> transcript.json
    。当
    ~/.config/reels/.env
    中存在
    ELEVENLABS_API_KEY
    时使用 ElevenLabs Scribe(词级时间定位精准;字幕可准确落在单词上),否则使用本地 Whisper(免费,但时间定位可能漂移约 0.3 秒)。
  2. 清理人声 -
    bash scripts/clean_audio.sh <clip> voice.wav
    (存在背景噪声时添加
    --denoise
    )。目标为 -14 LUFS,这是 Instagram 和 TikTok 所期望的响度。
  3. 审片(由他们决定) - 提出:建议剪掉的片段(重复内容、说错后重开的开头、冗长离题内容)、应删除的填充词、将 CTA 移到结尾、控制在 60 秒以内,以及图形方案。在剪切前等待他们确认。 这是用户最看重的环节。 在提出剪切建议前查看开头和结尾: 每 0.5 秒截取一帧,查看前 4 秒和后 4 秒。删掉所有摄像机设置画面(镜头对着地面或花园、翻转镜头、伸手拿手机),即使画面上有人在说话也要删除。从人物在镜头中稳定就位后的第一帧开始,并以适合作为开场的一个词作为起点。
    • 主要路径:Reel Review 页面。 先检查当前会话中是否存在
      Artifact
      和
      ArtifactData
      工具(如果工具被延迟加载,则通过工具搜索加载)。如果存在,则遵循
      references/review.md
      :用户点按要删除的词语,查看实时粗剪效果,检查图形、字幕、声音和色彩,然后说“生成预览”。其导入步骤会写入
      edl.json
      +
      edit.json
      ,因此跳到第 4 步的剪切和第 5.4 步的渲染。
    • 备用路径:当这些工具不存在时,在聊天中审片(适用于较旧的 Claude Code、其他应用)。按
      references/rough-cut.md
      的格式将转录稿显示为带编号的行,然后显示第 5 步中的卡片列表。
  4. 收紧剪辑,然后剪切 + 加速 - 根据获批的行写入
    edl.json
    ,然后运行
    python3 scripts/tighten.py <folder>
    :它会删除填充词,并按照品牌文件中的
    "pacing"
    预设尽可能缩短保留行内的停顿(默认
    natural
    ;另有
    tight
    、
    fast
    ;预设见
    scripts/pacing.py
    )。这些调整无需逐项审批。然后运行
    python3 scripts/cut.py <folder>
    。除非
    brand.json
    设置了
    "speed"
    ,否则速度沿用同一预设。试听检查:重新转录
    master.mp4
    ,确认连接处没有词被截断。
  5. 图形 + 字幕:填充模板,不要重新设计。 你是这里的剪辑师,不是设计师——视觉风格已经由品牌文件定义。
    1. python3 scripts/transcribe.py master.mp4 master_transcript.json
    2. python3 scripts/auto_edit.py <folder>
      → 生成
      edit.json
      草稿(包含其字幕模式下的字幕和推进镜头)
    3. 一次性自行编辑
      edit.json
      :为每个句子中的一个关键词设置
      "accent": true
      ,并按照
      brand.json
      中
      "graphics"
      要求的密度添加卡片:
      minimal
      约每 8–12 秒一张,
      balanced
      (默认)每 4–6 秒一张,
      busy
      每 2–4 秒一张。没有可展示内容的句子不加卡片;不要为了填充空档而给每个数字配图表,或给每个工具配截图。卡片类型和字段见
      scripts/build_reel.py
      文件头;HyperFrames 目录中的动效(轮播、图表、计数器、通知、光标、关注卡片)见
      references/motions.md
      。每张卡片都必须准确呈现对应句子所表达的内容。
      • 钩子标题: 每行最多约 10 个字符,共 2–3 行(
        "still / uploading / screenshots?"
        ),以便大字号呈现。这是唯一带描边的文字。
      • 轮播: 如果
        brand.json
        中有
        "require_carousel": true
        ,每个 Reel 都必须包含一个轮播(
        motion
        卡片,使用
        carousel-*
        名称,图片来自截图或其素材)。如果没有任何句子适合做轮播,就询问他们;如果他们同意不用,则设置
        "no_carousel_ok": true
        。
      • 截图: 对于句子所涉及的、他们提到的工具或网站,运行
        bash scripts/screenshot.sh <url> shots/<name>.png
        。退出代码 2 表示网站阻止了访问:尝试该工具的营销页面,或请他们提供截图。绝不能使用空白截图。
      • 组合不同类型: 网站截图、纯色块、列表卡片(设置
        "glass": true
        以实现液态玻璃效果)、来自其素材的贴纸、在重点时刻使用的
        follow
        卡片,以及当他们提到数字时使用计数器或图表。
    4. 使用
      REEL_PREVIEW=1 bash scripts/render.sh <folder>
      渲染草稿(1080p,低优先级),待他们批准后,再运行
      bash scripts/render.sh <folder> --final
      (分辨率取自
      brand.json
      ;在 CapCut 流程中添加
      --capcut
      )→
      final.mp4
      + 各阶段耗时。 不要在此手写 composition HTML,也不要使用其他 HyperFrames 工作流:这些方式速度更慢,而且会忽略品牌模板。只有当他们明确要求模板不支持的效果(例如让文字位于人物头部后方)时,先说明这种方式更慢,再仅为该效果使用
      hyperframes
      skill。
  6. 质量检查 -
    python3 scripts/qa.py <folder>
    (响度、大小、时长、词语缺失)。然后在每张卡片出现的位置截取一帧并检查:文字位于画面内、在背景上清晰可读、符合品牌规范。修复
    edit.json
    并重新运行 render.sh,直到通过检查。
  7. 交付 -
    bash scripts/deliver.sh <final.mp4> "<clear name>"
    → 位于其交付文件夹中的可上传 MP4。
  8. CapCut(仅当
    brand.json
    中有
    "capcut": true
    时)
    - 创建可编辑的 CapCut 草稿并提供链接。参见
    references/capcut.md
    。
告诉用户做了哪些改动,以及哪些内容需要通过听感检查(剪切点、姓名、品牌词的拼写是否正确)。

Their brand rules win

品牌规则优先

If the brand file and your taste disagree, the brand file wins. If they correct something during an edit ("no, never outline captions"), add it to
brand.md
under "Rules" straight away so the next edit gets it right.
如果品牌文件与你的审美判断冲突,以品牌文件为准。如果他们在剪辑过程中纠正了某项设置(“不,字幕永远不要加描边”),立即将其添加到
brand.md
的“Rules”下,确保下次剪辑时正确应用。

Common mistakes

常见错误

MistakeInstead
Editing before a brand file existsRun the setup interview
Cutting on Whisper word times blindlyCheck the joins; nudge cuts into the quiet gap between words
Graphics that decorate instead of illustrateEach card shows what this exact line says
Captions in a font the brand file bansRe-read brand.md "Rules" before step 5
Saying CapCut works everywhereIt doesn't (see capcut.md). The MP4 route always works
Fixing QA failures by lowering the barFix the edit, re-run QA
错误正确做法
品牌文件存在前就开始剪辑运行设置访谈
盲目按照 Whisper 的词级时间戳剪切检查连接处;将剪切点微调到词语之间的安静间隙
用图形进行装饰,而不是阐释内容每张卡片都要呈现对应句子的具体内容
使用品牌文件禁止的字幕字体在第 5 步前重新阅读
brand.md
中的“Rules”
声称 CapCut 在所有环境都可用并非如此(参见
capcut.md
)。MP4 流程始终可用
通过降低标准来修复 QA 失败修复剪辑,然后重新运行 QA