---
name: supermovie
description: |
  SuperMovie動画編集パイプライン全体を管理するオーケストレーター。
  Remotionベースの動画編集プロジェクトで、初期化、文字起こし、誤字修正、
  カット、テロップ、画像生成、SE配置、レンダリング、QAまでを段階実行する。
  「/supermovie」「supermovie」「動画編集を一気通貫で進めて」と言われたら使う。
argument-hint: "[init|transcribe|fix|cut|subtitles|images|se|render|qa] [プロジェクトパスまたは動画ファイル]"
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion
effort: high
---

# SuperMovie Orchestrator

動画編集プロジェクトの全工程を管理するオーケストレーター。
現在のプロジェクト状態をファイル存在チェックで判定し、未完了のStageから再開する。

Codexでは、このスキルを入口にして必要なサブスキルを読み込む。
Cloud/Claude Codeでは、同じ内容を `/supermovie` コマンドとして使える。

> ★ **/kaigyou は /supermovie に内蔵済み。** テロップStageで自動的に
> `改行ナレッジ.md`（まさき式・節ベース改行）を適用して テロップ確定.txt を生成→整列するため、
> ユーザーが別途 `/kaigyou` を打つ必要はない（事前に テロップ確定.txt を用意した場合はそれを優先）。

## 0. 環境セルフチェック（★最初に必ず・足りなければ自動で入れる）

このスキルは配布キットとして他者のPCでも動く。**実行を始める前に、動画編集に必要な道具が
揃っているかを確認し、足りなければ時間がかかっても自動でインストールしてから先へ進む**こと。
ユーザー（顧問生）に手作業を求めない・止めない。エラーが出ても自分で工夫して解決する。

```bash
# OS判定
OS="$(uname -s)"
# 1) 必須コマンドの有無を確認
for c in ffmpeg ffprobe node npm python3; do command -v "$c" >/dev/null 2>&1 && echo "OK $c" || echo "MISSING $c"; done
```

- **不足があれば自動インストール（同意を求めず実行）:**
  - macOS: Homebrew が無ければ先に導入 → `brew install ffmpeg node python@3.12`
  - Windows: `winget install -e --id Gyan.FFmpeg` / `OpenJS.NodeJS` / `Python.Python.3.12`
  - パッケージ管理自体が無い等で入らない場合は、別の手段（公式インストーラのDL等）を調べて工夫し、必ず使える状態にしてから進む。
- **文字起こしエンジン(whisper)** は `supermovie-transcribe` が初回実行時に自動で導入する
  （Apple Silicon→mlx-whisper / それ以外→faster-whisper、モデルは large-v3）。ここでは触らなくてよい。
- **Remotionの依存(node_modules)** は各プロジェクトで `npm install` 時に自動で入る。
- 初回は道具やモデルの取得で数分〜かかるが、それで正常。2回目以降は速い。途中で諦めず最後まで揃える。

## サブコマンド対応

| 入力 | 実行するサブスキル | 内容 |
|---|---|---|
| `/supermovie init` | `supermovie-init` | 動画素材からRemotionプロジェクト作成 |
| `/supermovie transcribe` | `supermovie-transcribe` | ワードタイムスタンプ付き文字起こし |
| `/supermovie fix` | `supermovie-transcript-fix` | 文字起こしの誤字脱字修正 |
| `/supermovie cut` | `supermovie-cut` | 無音・フィラー・脱線カット |
| `/supermovie subtitles` | `supermovie-subtitles` | テロップとタイトル生成（★まさき式改行=kaigyouを内蔵） |
| `/supermovie images` | `supermovie-image-gen` | 挿入画像の生成と配置 |
| `/supermovie se` | `supermovie-se` | 効果音配置 |
| `/supermovie telop` | `supermovie-telop-creator` | 新しいテロップスタイル作成 |
| `/supermovie skill` | `supermovie-skill-creator` | SuperMovie用スキル追加 |

サブコマンドなしの `/supermovie` は、下記の状態検出で次に必要なStageを判断して進める。

## パイプライン構成

```text
Stage 0: プロジェクト準備
  └→ supermovie-init

Stage 1: 素材準備
  ├→ supermovie-transcribe
  └→ supermovie-transcript-fix
      ↓ 人間確認ゲート: transcript_fixed.json

Stage 2: 構成
  └→ supermovie-cut
      ↓ 人間確認ゲート: src/cutData.ts のカット箇所

Stage 3: 装飾
  ├→ supermovie-subtitles
  ├→ supermovie-image-gen
  └→ supermovie-se

Stage 4: 出力
  ├→ Remotionレンダリング
  └→ QA
      ↓ PASS → 完了 / FAIL → 必要Stageへ差し戻し
```

## 状態検出

以下のファイルを確認して、どこから再開するか判断する。

| ファイル | 存在する場合 |
|---|---|
| `project-config.json` | Stage 0 完了 |
| `transcript.json` | Stage 1-a 完了 |
| `transcript_fixed.json` | Stage 1-b 完了 |
| `src/cutData.ts` | Stage 2 完了 |
| `src/テロップテンプレート/telopData.ts` | Stage 3-a 完了 |
| `src/Title/titleData.ts` | Stage 3-a 完了 |
| `src/InsertImage/insertImageData.ts` | Stage 3-b 完了 |
| `src/SoundEffects/seData.ts` | Stage 3-c 完了 |
| `out/final_output.mp4` | Stage 4-a 完了 |
| `out/qa_report.md` | Stage 4-b 完了 |

## 実行ルール

1. まずユーザー入力から、動画ファイルパス、プロジェクトパス、サブコマンドの有無を確認する。
2. プロジェクトが未作成なら `supermovie-init` を使う。
3. 既存プロジェクトなら状態検出を行い、未完了Stageのサブスキルを読み込んで実行する。
4. Stage 1とStage 2の後は、人間確認ゲートを入れる。
5. オーケストレーター自身は `.ts` データファイルを直接編集しない。各サブスキルに処理を委ねる。
6. QA失敗を無視して完了扱いにしない。

---

## 8エージェント体制（デフォルト実行モード）

オーケストレーターは各Stageを**専任エージェント**にdispatchする。
Stage 3は3エージェントを**並列実行**し、大幅に時短する。

### エージェント構成

```
オーケストレーター（このスキル = 司令塔）
  │
  ├─[直列] Agent 1: supermovie-init         … プロジェクト作成
  ├─[直列] Agent 2: supermovie-transcribe    … 文字起こし
  ├─[直列] Agent 3: supermovie-transcript-fix … 誤字修正
  │   ↓ 🚧 人間確認ゲート: transcript_fixed.json
  ├─[直列] Agent 4: supermovie-cut           … カット編集
  │   ↓ 🚧 人間確認ゲート: cutData.ts
  ├─[並列] Agent 5: supermovie-subtitles  ┐
  ├─[並列] Agent 6: supermovie-image-gen  ├─ Stage 3 同時実行
  ├─[並列] Agent 7: supermovie-se         ┘
  └─[直列] Agent 8: render + QA             … レンダリング＆品質検査
```

### エージェントdispatchルール

**1. 各エージェントのspawn方法:**

Agentツールで起動する。promptには以下を必ず含める:
- 該当サブスキルのSKILL.mdのフルパス（Readで読み込ませる）
- プロジェクトパス
- 前Stageの成果物パス（依存データ）
- 完了条件（どのファイルが生成されたら成功か）

**2. spawnプロンプトテンプレート:**

```
以下のスキルファイルを読み込み、指示に従ってプロジェクトを処理してください。

スキル: Read("/Users/noguchimasatomo/.claude/plugins/supermovie/skills/<skill-name>/SKILL.md")
プロジェクト: <PROJECT_PATH>
前提ファイル: <依存ファイル一覧>
完了条件: <生成すべきファイル>

## 厳守事項
- ユーザーへの質問（AskUserQuestion）は行わない。一気通貫モード。
- SKILL.md に「★標準モード」がある場合は必ずそれを使う
  （cut: scripts/cut_rms.py / subtitles: scripts/align_telop.py / se: scripts/check_se.py。
   同等のロジックを自分で書き直すのは禁止 — スクリプトは検証済みの正本）。
- ヒアリング確定値: <フォーマット/種類/トーン/テロップスタイル>（init には必ず渡す）

スキルの手順に忠実に従い、完了報告フォーマットで結果を返してください。
```

★各エージェントには **前Stageの完了報告の要点**（ワード数・尺・フレーム数・特記事項）も
コピーして渡す。エージェントは前の会話を見られないため、文脈はプロンプトが全て。

**3. 直列Stageの実行:**

```
Agent 1 完了 → Agent 2 spawn → Agent 2 完了 → Agent 3 spawn → ...
```

各エージェントの戻り値（完了報告）を確認してから次をspawnする。
エラーが返った場合はユーザーに報告し、続行可否を確認する。

**4. Stage 3 並列実行（★最大の時短ポイント）:**

Agent 5（subtitles）、Agent 6（image-gen）、Agent 7（se）を
**1つのメッセージで同時にspawn**する:

```
// 1回のメッセージで3つのAgentツールを呼ぶ
Agent({ description: "テロップ生成", prompt: "...", run_in_background: false })
Agent({ description: "画像生成",     prompt: "...", run_in_background: false })
Agent({ description: "SE配置",       prompt: "...", run_in_background: false })
```

**並列実行の前提条件:**
- cutData.ts が存在すること（Stage 2 完了）
- transcript_fixed.json が存在すること
- Agent 5（subtitles）の完了を待たずに Agent 7（se）を起動する場合、
  Agent 7 は telopData.ts の存在をポーリングで待機する

**並列実行の依存関係:**
```
Agent 5 (subtitles) ──→ telopData.ts + titleData.ts
                              ↓（Agent 7が参照）
Agent 6 (image-gen) ──→ insertImageData.ts
                              ↓（Agent 7が参照、任意）
Agent 7 (se)        ──→ seData.ts
                         ※ telopData.ts が必要なので、
                           Agent 5 完了後に起動するのが安全
```

**安全な並列パターン（推奨）:**
```
Step A: Agent 5（subtitles）+ Agent 6（image-gen）を並列spawn
Step B: 両方完了後 → Agent 7（se）をspawn
        ※ telopData.ts と insertImageData.ts の両方を参照するため
```

**5. Agent 8: レンダリング＆QA:**

Stage 3 の全エージェント完了後に実行。
Agent 8 はサブスキルファイルを持たず、オーケストレーター内で直接実行:

```bash
# レンダリング（★数分かかるので run_in_background: true で実行し、完了通知を待つ）
cd <PROJECT> && npx remotion render MainVideo \
  --output=out/final_output.mp4 --codec=h264 --concurrency=2

# 音声正規化（-16 LUFS）＋★映像も再エンコード（2秒固定GOP＋faststart）— まさきFB 2026-06-13・必須
#   ⚠️ -c:v copy は禁止: Remotion出力は scenecut依存でキーフレーム間隔が最大8秒超になり、
#      QuickTime等がその長大GOP区間で映像を停止する（実害事故あり）。映像も再エンコードして互換性を担保。
ffmpeg -y -i out/final_output.mp4 \
  -af "loudnorm=I=-16:TP=-1.5:LRA=11" \
  -c:v libx264 -preset medium -crf 18 -pix_fmt yuv420p -profile:v high -level 4.0 \
  -x264-params "keyint=60:min-keyint=60:scenecut=0" \
  -c:a aac -b:a 192k -movflags +faststart \
  out/final_output_normalized.mp4

# 正規化版を本番ファイルに昇格
mv out/final_output_normalized.mp4 out/final_output.mp4

# 完了したら自動で開く
open out/final_output.mp4
```

QA項目（コマンドつき・実証済みの期待値）:
```bash
# duration / resolution / codec / size を一括確認
ffprobe -v error -show_entries format=duration,size \
  -show_entries stream=codec_name,width,height -of default=noprint_wrappers=1 out/final_output.mp4
# ラウドネス実測（Input Integrated を見る）
ffmpeg -i out/final_output.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary" -f null - 2>&1 \
  | grep -A1 "Input Integrated"
```
- ファイルサイズ > 1MB（破損チェック。実績: 5分52秒で約53MB）
- duration が videoConfig の DURATION_FRAMES/FPS と±0.5秒以内で一致
- 解像度 1920x1080 / h264 + aac
- 音声ラウドネス -14〜-18 LUFS 範囲内（正規化後の実測 -16.6 LUFS が正常例）
- ★★キーフレーム間隔 ≤2秒＋faststart（再生停止の再発防止・まさきFB 2026-06-13）:
  `ffprobe -v error -select_streams v:0 -show_entries packet=flags -of csv=p=0 out/final_output.mp4 | grep -c "K_"`
  → 尺/2 前後（例 547s なら約274個）。1桁なら長大GOP＝-c:v copyしてしまっている→再エンコードし直す。
  faststart確認: `ffprobe -v trace -i out/final_output.mp4 2>&1 | grep -iE "type:'moov'|type:'mdat'" | head -2`（moovがmdatより前）。
- ★無音上テロップ検査: 全テロップで endFrame − 発話終わり(playback) ≤ 0.55秒
  （「声が無いのにテロップが出る」箇所がゼロか。align_telop.py を通していれば構造的に保証済み。
   ※フルカバー（密度90%）なら次テロップがすぐ来るので自然に小さくなる。超過が出る＝テロップが疎すぎる兆候）

### エラー時のリカバリ

| エージェント | 失敗時 |
|---|---|
| Agent 1-4（直列） | ユーザーに報告、修正後に該当Agentだけ再spawn |
| Agent 5-7（並列） | 失敗したAgentだけ再spawn、成功分はそのまま |
| Agent 8（render） | concurrency=1で再試行、それでもダメならエラーログ表示 |

### 単独サブコマンド実行時

`/supermovie subtitles` のようにサブコマンド指定の場合は、
エージェント体制を使わず、該当サブスキルを直接読み込んで実行する。
8エージェント体制はサブコマンドなしの `/supermovie` フルパイプライン実行時のみ。

## 完了報告フォーマット

```text
動画制作完了

出力: out/final_output.mp4
尺: X分Y秒 / 解像度: 1920x1080 / サイズ: XX MB
音声: -16 LUFS（正規化済み）

8エージェント実行レポート:
  Agent 1 (init)           ✅ Xs
  Agent 2 (transcribe)     ✅ Xs
  Agent 3 (transcript-fix) ✅ Xs
  🚧 人間確認ゲート通過
  Agent 4 (cut)            ✅ Xs
  🚧 人間確認ゲート通過
  Agent 5 (subtitles)      ✅ Xs ┐
  Agent 6 (image-gen)      ✅ Xs ├ 並列実行
  Agent 7 (se)             ✅ Xs ┘
  Agent 8 (render+QA)      ✅ Xs

制作サマリー:
- 文字起こし: XXXワード
- テロップ: XX個
- タイトル: XX個
- 画像: XX枚
- SE: XX個
- QA: PASS
- 総実行時間: X分Y秒（並列により約Z分短縮）
```

---

## 標準レシピ（画面収録の解説動画）★これが既定品質

> ※ 各Stageは固定スクリプトに丸投げせず、**内容に合わせて都度ロジックを組んで生成する**（手作業方式）。
> カット・整列・テロップ・SEの確定ルールは下記＋各サブスキル（cut/subtitles/se）に記載。
> スタイル/SE/アニメは内容に応じて十分な量・多彩さを必ず確保する（normalだらけ＝単調＝NG）。
>
> ★★ **動画の最初から最後まで同じクオリティ（まさきFB）。** 後半・締めも手を抜かず全工程を実施。
> 特にテロップ改行は前半だけ丁寧→後半雑になりがち。**セクション分割で均一に処理**し、
> 書き出し前に「尺3分割で各1/3のテロップ密度・平均字数・SE密度が同等か」を検証してから出す（subtitles V6）。

`/supermovie @動画.mov` で画面収録を渡されたら、**最初に AskUserQuestion 1回**で
①フォーマット（16:9/9:16/1:1） ②種類（YouTube解説/セミナー録画/プロモ）
③トーン（教育的/プロ/カジュアル/エンタメ） ④進め方（一気通貫 or ゲートごと確認）
の4問を聞く（テロップスタイル・BGMはトーン別デフォルトでよい）。その後は
**以下の確定仕様で止めずに最後まで通す。** これが「一発で同品質」の正本。

> ★★★ **再現性の核（Opus 4.8 でも同品質にするための鉄則）:**
> カット・テロップ整列・SE検証は **検証済みの正規スクリプトを実行する**。ロジックの再実装は禁止。
> - カット: `skills/supermovie-cut/scripts/cut_rms.py`（解析→検証→cutData/videoConfig更新まで全自動）
> - テロップ: `skills/supermovie-subtitles/scripts/align_telop.py`
>   （モデルは テロップ確定.txt と スタイル割当.json を作るだけ。整列・同期・検証V1〜V6は全自動）
> - SE: `skills/supermovie-se/scripts/check_se.py`（seData.ts を書いたら必ず実行・エラー0まで修正）
> モデルの判断が要るのは「改行の節分割・スタイル/SEの選曲・タイトル文言」だけ。それ以外は機械任せ。

### 確定仕様

1. **動画正規化**: Retina/60fps の画面収録は `1920x1080 / 30fps` に正規化してから配置（init 3-2）。
2. **文字起こし**: mlx-whisper large-v3（Apple Silicon）。単一話者・日本語。
3. **誤字修正**: 固有名詞のみ最小修正（例: 宴→UTAGE）。
4. **カット（★完全ジェットカット＝間を強く詰める。発話は絶対切らない）**: スクリプトを実行（再実装禁止）。
   - ★**標準は `supermovie-cut3/scripts/cut_rms.py`（PROT=100・残り無音約0.20秒）を使う**（まさきFB 2026-06-13）。
     16:9標準の `supermovie-cut/scripts/cut_rms.py`（PROT=230・残り0.46秒）は **「ジェットカットが甘すぎ」** とNG。
   - 既に1度カット済みのプロジェクトを再カットする時は、`videoConfig.ts` の DURATION_FRAMES を
     **元尺（round(原尺秒×30)）に戻してから**実行する（cut_rms.py の元尺表示が正しくなる。マッピングは音声基準なので結果は正しいが混乱回避）。
   - 検証 V-cut1〜3（削れた発話=0等）はスクリプトが自動実行。cutData.ts上書き＋videoConfig更新も自動。
   - ❌KEEPを削る=ぶつ切り（失敗済み）。さらに詰めたい時は PROT_MS を100未満に。
5. **テロップ（最重要・品質の核）★/kaigyou を内蔵 ＋ 確定.txtレビューゲート**:
   - **改行は /kaigyou を別途打たなくても自動で行う。** このStageで必ず
     `改行ナレッジ.md`（まさき式・節ベース・最大18字）を Read し、文字起こしを
     節分割して `<PROJECT>/テロップ確定.txt` を生成。スタイル/タイトルは `<PROJECT>/スタイル割当.json` に書く。
     （ユーザーが事前に テロップ確定.txt を用意/編集していればそれを優先使用）
   - ★★**確定.txt は「フィラーだけ除去・ほぼ全発話カバー」（まさきFB 2026-06-13・最重要）**:
     - **除くのはフィラーだけ**（はい/えっと/あの/まあ/もうね/っていうところで/んですよね等の中身のない繋ぎ）。
       **意味のある発話・固有名詞・数字は1つも消さない。要点だけに絞りすぎない**（疎すぎると「失敗して見える」とNG）。
       目標**密度90%前後**＝視聴者がほぼ常にテロップを読める状態。全文逐語版に近い行数を保つ（×174行は疎すぎ／○300行前後）。
     - 残りは自然に読めるよう**軽い意訳OK**。ただし align は音声照合（difflib・各行50%以上一致）なので、
       喋ったワードから大きく外さない（語順大変更・新しい固有名詞/数字の追加は禁止）。
     - 全編均一の粒度。締めまで同じ密度（V6検証あり）。
   - ★**hallucination_ranges は「whisper幻聴」だけ入れる**（フィラーは align のdifflibが自動許容するので入れない）:
     ①「う」等の連発（同一字が数十〜200連続・ほぼ0尺）②同一句の二重出力の2回目（低conf/圧縮タイムスタンプ）。
     2回目は word添字を明示指定（[start,endExclusive]）。**difflib補集合をhallucinationにすると重複句の1回目まで誤除去するので使わない**。
   - ★**確定.txt を生成したらここで必ず一度ユーザーに渡して止まる（一人語りでも適用・まさきFB 2026-06-11）。**
     一気通貫でも止める（下記「人間確認ゲートの扱い」の例外）。下の定型メッセージで投げる。
   - ユーザーOK（＋画像指示）後に **`align_telop.py` を実行**。以下はスクリプトが自動保証（再実装禁止）:
     持続表示＋無音キャップ（endFrame=min(次start, 発話終わり+0.4秒)）／同期 start=round+**2f**・end=ceil／
     normal=none・冒頭アニメ無し・アニメ3連続禁止・リストはslideFromLeft統一／検証V1〜V6。
   - ★**V6「後半1/3の密度低下」で出力拒否されたら**: 後半の長い行(≥15字)を助詞で2分割し、
     `スタイル割当.json` のemphasis/warning/success/list_slide行番号を振り直してから再実行。
   - **アニメは入口だけ・出口なし**（フェードアウト禁止。Telop.tsx側で恒久化済み）。

   **★確定.txtレビューゲートでユーザーに投げる定型メッセージ（一人語り版）:**
   ```
   テロップの下書き（確定.txt）ができました。整列（時間合わせ）の前に確認をお願いします。

   📄 ファイル: <PROJECT>/テロップ確定.txt（開いて直接編集→⌘+Sで保存）

   【チェックしてほしいこと】
   1. 誤字・言い回し（除いたのはフィラーだけ・発話はほぼ全部テロップ化してます。残し/削りすぎだけ見てください）
   2. 改行の区切り（1行＝テロップ1枚・最大18字）

   【画像を入れたい場合（任意）】
     ・どの行のところで出すか ／ どの画像か（このチャットに添付）
     ・出し方：全画面 / ポップアップ(中央) / sticker(顔など好きな位置に小さく重ねる)／何秒
   確定.txt 内に「# 画像: ◯◯を全画面で5秒」のようにメモ書きでもOK。画像なしならスキップ。

   直し終えたら「OK・整列して」と返してください。整列→画像→SE→書き出しまで仕上げます。
   ```
6. **画像挿入(image-gen)**: **画面収録ではデフォルト・スキップ**（画面自体が主役で、生成画像は内容を覆うため）。
   ユーザーが上の確定.txtゲートで画像指示を出した時のみ実行。配置先 `public/images/`＋`insertImageData.ts`
   （file名は `images/` 接頭辞なし）。type: `'photo'`全画面cover/`'infographic'`全画面contain/
   `'overlay'`中央ポップアップ/`'sticker'`好きな位置に重ねる（`position:{x,y}`%＋`width`%＋出しっぱは`fade:false`）。
   レイヤー順 テロップ(z200)>タイトル(z100)>画像(z50) なので全画面でもテロップ・目次は上に出る。
6.5 **章タイトル(titleData)**: ★**画面収録が完成スライド（タイトル・ラベルが焼き込み済み）の場合は
   `スタイル割当.json` の `titles: []` を空にして章タイトルチップを出さない**（まさきFB 2026-06-13。
   収録自前タイトルと二重表示してクラターになる）。スチルで左上の重なりを確認して判断。
   ※titlesを空にすると、タイトル切替に置いたSEが孤立する→該当SE（旧タイトルstartFrameのもの）を削除して check_se.py 再検証。
7. **SE**: `_SEライブラリ/カタログ.md` 準拠。emphasis/warning/success＋（あれば）タイトル切替のみ。
   密度約25〜30%・多彩（SE20種前後）。**★冒頭（frame 0 付近の最初のテロップ）にはSEを置かない（クリーンに始める）。**
   章タイトルと同フレームのテロップはSEをタイトル側1つに統合（二重発火回避）。最後5〜8秒はSEなし（余韻）。
   書いたら **`check_se.py` でエラー0を確認**してから完了。
   ★**カット/テロップを作り直したらSEも必ず作り直す**（テロップ総数が変わるとフレームがずれる。
   テロップ総数が同じなら旧seDataをテロップID経由で新frameに移植可。変わったら再生成。どちらも check_se.py でE0まで）。
8. **BGM**: 既定 `_BGM/bgm.mp3`、volume 0.08。
9. **出力**: Remotionレンダリング → **loudnorm -16 LUFS ＋ 映像も再エンコード（2秒固定GOP keyint=60＋faststart。-c:v copy禁止）** → QA → `open`。

### 人間確認ゲートの扱い

ユーザーが「一気通貫で」と言った場合は、transcript_fixed.json / cutData.ts の
ゲートで止めず、内容をログ提示しつつ最後まで通す（事後に該当Stageだけ再実行可能）。

★ただし **確定.txtレビューゲート（上記5）だけは例外**で、一気通貫でも必ず止める（まさきFB 2026-06-11）。
確定.txt は文字・改行・フィラー削り具合・画像配置指示が一望できる唯一の地点で、
ここでユーザーレビューを入れるのが最も事故が少ない。一人語り・対談どちらも適用。

### このレシピを支えるスキル側の恒久設定（再現性の担保）

- `template/src/CutPlayer.tsx` + `cutData.ts`（恒等初期値）常設 → カットが常に効く。
- `template/src/テロップテンプレート/Telop.tsx`: 高さ統一（背景有無で揃う）＋出口フェード無し。
- `_SEライブラリ/`（SE全種＋`_BGM/bgm.mp3`＋`カタログ.md`）→ init が自動コピー。
- subtitles SKILL.md: 持続表示／normal=none／多様アニメ／start=round+2f・end=ceil／入口のみ。
- se SKILL.md: normal無音、emphasis/warning/successのみ、ライブラリ参照。
- ★正規スクリプト（supermovie-0609 の本番出力と完全一致を確認済み）:
  カット=**`supermovie-cut3/scripts/cut_rms.py`（PROT=100完全ジェットカット・標準）**／
  `supermovie-subtitles/scripts/align_telop.py`／`supermovie-se/scripts/check_se.py`。
  **品質ロジックの変更はスクリプト側を更新する**（SKILL.mdの文章だけ変えてもモデルがスクリプトを使う限り反映されないため）。

### ★運用の鉄則（事故防止・まさきFB 2026-06-13）

1. **重い処理（ffmpeg正規化・whisper文字起こし・Remotionレンダリング）はオーケストレーター自身が
   `run_in_background:true` で実行する。サブエージェントにbackgroundで投げない**
   （サブエージェントがyieldするとbackgroundプロセスが孤立して落ちる＝実害事故あり。
   ffmpeg正規化が6.8MBで停止した）。軽い決定論スクリプト（cut_rms/align_telop/check_se）は
   フォアグラウンドなのでサブエージェント可。LLM判断（誤字修正・確定.txt生成・SE選曲）もサブエージェント可。
2. **サブエージェントには必ず絶対プロジェクトパスを明示し「他フォルダを探す/作る/削除するな」と書く**
   （日本語パスの取り違えでプロジェクトを別フォルダと誤認・削除した事故あり。パスはダブルクオートで囲む）。
3. **レンダリングは `| tail` 等でパイプしない**（SIGPIPEでレンダラーごと死ぬ）。ログにリダイレクトし、
   exit 0 を信じず出力mp4の存在とサイズを ls で確認してから次へ。
4. **装飾を変えたら本レンダ前にスチル目視**（`npx remotion still MainVideo /tmp/f.png --frame=N`、
   テロップは start/end の中間フレームで撮る）。特に画面収録が完成スライドの時は左上の章タイトル重なりを確認。
5. **ユーザーFBは三点同期で焼き込む**: ①プロジェクト ②template ③SKILL.md/スクリプト の3ヶ所（次回が再現しない）。
