埋め込みキャプション(Embedded Captions)
1つのカタログ、最前面に選択(CATALOG.md — 17のアイデンティティ;背後にある3つのエンジンはバックエンドの詳細)。Standard(デフォルト)はクリーンな逐語的 レール(ほとんどのテキストを表示する下部3分の1の字幕)と、ピーク時に被写体の背後に合成された エンベッド クライマックスを構築します。Cinematic は純粋なエンベッド — レールなし、すべてのキャプションが被写体の背後に合成されます(ヒーロータイポグラフィ、蓄積、オクルージョンが効果として)。Theme は完全なテーマ構成 — ボディパラダイム × ヒーローセットピース × フロントエフェクト × プレートリアクション、レジストリから構成されます(themes/README.md):ordnance terminal neonsign stardust stomp。ほとんどの解説/ナレーションは Standard;エンベッドは希少で価値のあるピーク — すべての単語をエンベッドするのはよくある間違い。ThemeはVFXレベルの要求(「炸」、「特效」、「AEのように」)向け。
運用フロー(TL;DR)
以下のクラフト散文は長いですが、パイプライン自体は短い — そして決定論的なものはすべて計算またはコンパイルされ、手書きではありません:
- 判断ゲート(悪いクリップを拒否)→ ** CATALOG.md から1つのアイデンティティを選択**(17のアイデンティティ;エンジン/コンパイラはルックアップで導出 — モード/カテゴリの質問は表示しない)
hyperframes init(プロジェクトディレクトリが既に存在し、中にビデオがある場合はスキップ —matte.cjs/transcribe.cjsはディレクトリ内の任意のビデオをsource.mp4として採用)→bash scripts/prepare.sh <project>(マット ∥ 文字起こし ∥ オーディオエンベロープを並列実行、その後セーフゾーンv2をシーンパレット/光学/照明で実行 — 1つのコマンドで何も忘れない)- クリエイティブな選択の小さなJSONを作成(最初に
safe-zones.jsonを読む): Cinematic →plan.json→fill-timings.cjs→fit-fonts.cjs→make-composition.cjs; Theme →theme.json→make-theme.cjs(レール/パネル/ポエム/テイクオーバーパラダイム;anchorは静かなレールのデフォルト) - Visual QA:
node scripts/preview-frames.cjs <project>→ 約2秒/フレームで忠実な複合プレビュー(レンダリング不要)。レンダリングに費用を払う前に§ Visual QAを確認。 render-and-composite.sh→ ゲート(タイミング / オクルージョン+ヒーロー / オーバーフロー / ハンドオフ)→final.mp4
見逃されがちな負荷のかかるルール:
- レール(デフォルト)+ エンベッド(プロモーション)。
drop(フィラー、表示されない)/rail(逐語的な下部3分の1字幕、前面、ほとんどのテキストを表示)/embed(被写体の背後に合成されるピークワード)。Standardモードは両方を行い、ピークのみを埋め込みます。§ キャプションモデルを参照。 - ビデオは未加工のまま納品されます(Standard/Cinematic; ThemeモードのPLATE予算は唯一認められた例外 — レジスタゲートされたリアクションビート(チャージディム、パンチ、シェイク、グレイン)はテーマDNAごとに定義され、マット複合の後に適用されるため、被写体+テキスト+プレートが1フレームとして動く) — 追加されるのはキャプションのみ。マットは被写体がエンベッドトラックを隠すことを可能にするだけ。映像をグレーディング/リカラー/スキャンラインしないでください。
- 2つのルールブック:レール → references/rail.md(薄い)、エンベッドクラフト → references/composition-craft.md(豊富、エンベッドのみ)。必要に応じてざっと読む。
キャプションモデル — レール + エンベッド
すべての話されたフレーズは次の3つのいずれかです:
| 対象 | 表示方法 | |
|---|---|---|
| drop | フィラー — えーと/あー、吃音、自己修正 | 表示されない |
| rail | デフォルト — 通常の話し言葉(逐語) | クリーンな下部3分の1字幕、前面、読みやすい。パンチワードはインライン emphasis ハイライト(アクセントカラー / アクティブワードポップ)を取得可能 — レール上に残る。 |
| embed | プロモートされたピーク — 見出しのビート | 被写体の背後に合成された1つの大きな単語(マットオクルージョン)、デザインされた入場+退場 |
レールがほとんどのテキストを運びます。エンベッドは希少で価値のあるピークです。 希少性は クリップごとではなく、ビート/ブロックごと:ブロック(思考)ごとに≤1ヒーロー、同時に表示されることはなく、ヒーローウィンドウ間には最低1ビートの間隔(コンパイラは0.6秒未満で警告)。短いクリップ → 通常1〜2;長い解説 → セクションごとに約1つ。複数のヒーローの中では、最大の作成されたものがAPEX(それだけが完全なロックアップエンベッド+幅フィットレイズを取得);小さいものは MINORピーク で、特大の強調行(fg、減衰モーション)としてカラムに乗る — すべてのビートがマットショーケースを必要とするわけではなく、それがまさにAPEXをイベントとして保つ理由です。すべての単語をエンベッドするのは依然としてよくある間違いです。
レール表面のアイデンティティはこれを正確に構築します(レール = rail.html、エンベッド = index.html 内のクライマックス)。カラムフローのアイデンティティはレールを廃止し、すべてをエンベッドスタイルにします — ムード重視で逐語が不要な場合にのみ推奨。解説/ナレーションでは単語が読める必要があるため、使用しないでください(CATALOG.mdはアイデンティティごとにこれをエンコードしています)。
ステップ0 — CATALOGから1つのアイデンティティを選択
1つのフロントエンド、背後に3つのエンジン。 ユーザーは CATALOG.md から IDENTITY(アイデンティティ)を選択します(17エントリ:12クラシック + 5テーマ);エンジン、コンパイラ、作成ファイルはカタログ行からのルックアップで導出されます。「Standard vs Cinematic vs Theme」を質問として表示しないでください — これらはバックエンド名です(製品は複数のエンジンでも1つのUXを持ちます)。カタログはルーティングに必要なすべてをエンコードしています:読み取り表面、声、推奨対象、シーン要件、近いペア(loud↔ordnance、neon↔neonsign、cream↔stardust)の隣接ノート。
手順:クリップを調査 → カタログから2〜3のアイデンティティを候補に → 1つを1行の理由で推奨 → ユーザーが選択 → そのアイデンティティのファイルを作成。アイデンティティはエンジンロックされています(クロスコンボ不可;1つを開くことは検証イベント — dna/README.md参照)。
常に推奨を提示し、作成前にユーザーに選択させてください。 黙ってデフォルトにしないでください。
(完全なアイデンティティテーブルは CATALOG.md にあります — ルーティングの単一真実源。以下のエンジンドキュメントは各バックエンドの作成契約を説明しています。)
推奨ヒューリスティック: CATALOG.md の「Shortlisting heuristics(候補絞り込みヒューリスティック)」を使用 — これらはアイデンティティレベル(例:「炸」はordnance/stomp/terminal/loudを候補にし、何が爆発するべきかで選択)であり、カテゴリレベルではありません。不明な場合は → anchor。
- Cinematic → ロックされたテンプレートの
plan.jsonを作成し、make-composition.cjsでコンパイル。 - Theme → themes/README.md を読み、
theme.jsonを作成し、scripts/render-theme.shを実行(コンパイル+レンダリング+プレートリアクション → final_fx.mp4)。
判断ゲート — 最初に実行
どちらのモードの前に、ビデオを調査し、シーンを分類します。
ffprobe <video.mp4> # スペック
ffmpeg -ss <t> -i <video.mp4> -vframes 1 sample.png # 20/50/80%の位置で
サンプルを読みます。以下の場合は拒否:
- 複数の話者 / ハードカット(各ショットを分割してレンダリング、または拒否)
- 人間の被写体がいない(このスキルは話している人の頭用)
- 3秒未満、音声なし、または顔がはっきり見えない —
transcribe.cjsはオーディオが無音に近い場合に警告(Whisperは無音上で「Thank you.」などの単語を幻覚することがあります);それに従い、拒否する — 作り上げられた単語にキャプションを付けない - ソースに既に焼き込みキャプション/字幕/重いテキストグラフィックがある — 2つ目のキャプションシステムを追加すると競合し、映像は未加工のまま出荷されます(カバリング/インペインティングなし)。焼き込みテキストはクリップの中間でのみ現れることが多い:1fpsのコンタクトシート(
ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png)をサンプリングし、3つのスポットフレームを信用しないでください。 - 文字起こしがガベージ — 非ネイティブ/強いアクセントの音声は自信満々のガラクタに文字起こしされる可能性があります。作成前に
transcript.jsonを常識で読んでください;言語として解析できない場合は、WHISPER_MODEL=mediumを1回試し、それでもダメなら拒否(作り上げられた単語の逐語的レールはキャプションなしより悪い)。 - 手ブレの激しいハンドヘルド撮影(マットがちらつく)
事前飛行プローブ(コストゼロ、最悪の失敗を防ぐ)
- ショットカットプローブ。 20%、50%、80%の位置でフレームをサンプリング。異なる被写体/シーンが現れた場合、クリップをカットの前でトリミング。
- レターボックス / ピラーボックスプローブ。 最初のフレームに黒いバーがあるか?安全なコンテンツ矩形を計算し、キャプション配置をその内部に制約。
- 輝度プローブ。 キャプション領域の平均輝度をサンプリング —
60未満→ 明るいテキストはそのまま読める、60-180→ グリフスクリムを追加、180以上→ 不透明テキスト+スクリム(裸の明るいテキストは避ける)。Cinematicテンプレートはクリーム+screenでロック — このプローブを使用して 適合するアイデンティティを選択(明るいシーン →ink、または不透明レールのanchorテーマ)、リカラーはしないでください。 - トーンによるアイデンティティ推奨(あなたが推奨;ユーザーが選択 — ステップ0 + CATALOG.md参照)。 解説/インタビュー/必読単語 → レール/パネル表面のアイデンティティ;詩的/ソーシャル/「シネマティック」 → レジスターによるカラムフローのアイデンティティ;「炸 / 特效 / VFX」/ 名前付きワールド → テーマのアイデンティティ。不明な場合 →
anchor(単語が読め、シーンが安全)— ただし候補リストを提示し、ユーザーに選択させてください。
パイプライン — 5ステップ
1. hyperframes init <project> --non-interactive --video <video.mp4> --skip-skills
2. bash scripts/prepare.sh <project> # マット ∥ 文字起こし(並列)→ セーフゾーン。1つのコマンド。
# → frames_fg/ transcript.json safe-zones.json
3. [エージェントステップ — 唯一のクリエイティブステップ] 小さなJSONを作成;モードに応じて以下を参照
Cinematic: plan.jsonを作成 → node scripts/fill-timings.cjs → fit-fonts.cjs → make-composition.cjs
Theme: theme.jsonを作成 → bash scripts/render-theme.sh <project> (コンパイル+レンダリング+プレートFX)
4. node scripts/preview-frames.cjs <project> # 約2秒/フレームの複合プレビュー → § Visual QA(レンダリング前)
5. bash scripts/render-and-composite.sh <project> # ゲート → final.mp4 + history/ スナップショット
(Themeモード:ステップ3b/5をスキップ — render-theme.shがすでにコンパイル+レンダリングアンドコンポジット
+ _postfx.shを実行;成果物はfinal_fx.mp4、final.mp4はプレートリアクション前)
ステップ3はモードによって異なります:
ステップ3 — Cinematicモード(純粋エンベッド)
- 最初に
safe-zones.jsonを読む。 ナレーションプレーンはzones.hugLeft/hugRightに配置 — シルエットに密着したクリーンなストリップ(テキストが体から遠いとフローティングに見え、埋め込まれていない;遠いコーナーはデフォルトではなくフォールバック)。ヒーローはデフォルトでheroAnchor/heroBands.best(被写体の中央に配置、約30〜55%オクルージョン)。recommendation:"fg"はナレーションを前面に移動して可読性を確保;ヒーローはheroBands.feasibleである限り埋め込まれたまま。