プラグインのインストール: セットアップやフレッシュネスコマンドの前に、このスキルがHyperFramesプラグイン内にある場合は、プラグイン実行ルールに従ってください。スタンドアロンインストールの場合は、以下の更新手順をそのまま使用してください。
まず、このスキルを最新に保つ — ユーザーに確認してから実行:
npx hyperframes skills update embedded-captions。すべてが最新の場合は高速なno-opです。そうでない場合は、このスキルとそれが依存するコアドメインスキルを更新してから使用します。
埋め込みキャプション
1つのカタログ、最初に選択(CATALOG.md — 35のアイデンティティ;その背後にあるエンジンはバックエンドの詳細です)。標準(デフォルト)は、クリーンな逐語レール(ほとんどのテキストを運ぶ下部3分の1の字幕)と、クライマックスで被写体の背後にシーンに合成される埋め込みを構築します。シネマティックは純粋な埋め込み — レールなし、すべてのキャプションが被写体の背後に合成されます(ヒーロータイポグラフィ、蓄積、オクルージョンがエフェクトとして)。テーマは、レジストリ(themes/README.md)から構成された完全なテーマ別構成 — ボディパラダイム × ヒーローセットピース × フロントFX × プレートリアクションです:ordnance terminal neonsign stardust stomp。ほとんどの説明動画/ボイスオーバーは標準です;埋め込みは希少で獲得されたピークです — すべての単語を埋め込むのはよくある間違いです;テーマはVFXレベルの要求(「炸」、「特效」、「AEで作ったように」)のためのものです。
ランタイムの前提条件
プラグインインストールでは、マット処理、文字起こし、レンダリングにバンドルされマニフェストで固定されたCLIを使用します。ソースチェックアウトは必要ありません。ローカルプレビューとキャプション計測ヘルパーには、Sharp、Puppeteer(そのChromiumブラウザを含む)、GSAPも必要です。これらをキャプションプロジェクトにインストールします。読み取り専用プラグインの内部にはインストールしません:
npm install --prefix <project> --save-dev --save-exact [email protected] [email protected] [email protected]
プロジェクトのロックファイルを保持します。これらの依存関係がすでに存在する場合は、上書きせずにそのロックされたバージョンを使用します。BashとFFmpeg/ffprobeがPATHにある必要があります。マット処理と文字起こしは、初回使用時に独自のモデルをダウンロードする場合があります。
レンダリングは、CLIが正常に終了するのを待ってから合成します。古い HF_TIMEOUT_S シェルウォッチドッグは使用されなくなりました。大きな部分ファイルはレンダリングが完了したことの証明にはなりません。明示的なビルドチェックアウト引数または HYPERFRAMES_ROOT により、プラグインピンの代わりにコントリビューターCLIが選択されます。スタックしたレンダリングは、CLI/ターミナルから通常通りキャンセルします。キャプションヘルパーは強制終了したり、プロセススナップショットからレンダリングを復旧したりしません。
運用フロー(TL;DR)
/hyperframes を介してルーティングされ、インテントレイヤーは入力(どのクリップか)のみを確認し、アイデンティティ選択を後回しの質問としてアナウンスします — ショートリストはプローブされたクリップを必要とするため、以下のステップ1に留まります;レイヤーの実行形状に関する質問は適用されません(映像は未加工であり、レビューするストーリーボードはありません)。BRIEF.md が存在する場合、確認された入力とユーザーノートが含まれています — 最初にそれを読んでください。
以下のクラフト散文は長いですが、パイプライン自体は短いです — そして決定論的なものはすべて計算またはコンパイルされ、手書きではありません:
- 決定ゲート(不良クリップを拒否)→ CATALOG.mdから1つのアイデンティティを選択(35のアイデンティティ;エンジン/コンパイラはルックアップによって導出 — モード/カテゴリの質問は決して表面化しない)
hyperframes init(プロジェクトディレクトリがすでに存在し、中にビデオがある場合はスキップ —matte.cjs/transcribe.cjsはディレクトリ内の任意のビデオをソース.mp4として採用します)→bash scripts/prepare.sh <project>(マット処理 ∥ 文字起こし ∥ オーディオエンベロープを並行して実行、その後シーンパレット/光学/照明を使用したセーフゾーンv2 — 1つのコマンドで、何も忘れない)- クリエイティブな選択の小さなJSONを作成(最初に
safe-zones.jsonを読む):シネマティック →cinematic.json→make-cinematic.cjs(plan.jsonを導出してコンパイル);テーマ →theme.json→make-theme.cjs(レール/パネル/詩/テイクオーバーパラダイム;anchorは静かなレールのデフォルト) - ビジュアルQA:
node scripts/preview-frames.cjs <project>→ 約2秒/フレームで忠実な合成プレビュー(レンダリングなし)。レンダリングに費用をかける前に、§ビジュアルQAを確認。 render-and-composite.sh→ ゲート(タイミング/オクルージョン+ヒーロー/オーバーフロー/ハンドオフ)→final.mp4
人々が見逃す重要なルール:
- レール(デフォルト)+ 埋め込み(プロモーション)。
drop(フィラー、表示されない)/rail(逐語的な下部3分の1の字幕、前面、ほとんどのテキストを運ぶ)/embed(被写体の背後に合成されるピークワード)。標準モードは両方を行い、ピークのみを埋め込みます。§キャプションモデルを参照。 - 動画はそのまま提供されます(標準/シネマティック;テーマモードのPLATEバジェットは唯一認められた例外 — レジスターでゲートされたリアクションビート(チャージディム、パンチ、シェイク、グレイン)はテーマDNAごとに定義され、マット合成後に適用されるため、被写体+テキスト+プレートが1つのフレームとして動きます) — キャプションのみが追加されます;マットは被写体が埋め込みトラックを隠すことを可能にするだけです。映像のグレーディング/リカラー/スキャンラインは絶対に行わないでください。
- 2つのルールブック:レール → references/rail.md(薄い)、埋め込みクラフト → references/composition-craft.md(リッチ、埋め込みのみ)。必要に応じてざっと目を通します。
キャプションモデル — レール + 埋め込み
話されたすべてのフレーズは、次の3つのいずれかです:
| 内容 | 表示方法 | |
|---|---|---|
| drop | フィラー — えーっと/あー、吃音、自己修正 | 表示されない |
| rail | デフォルト — 通常の話された内容(逐語) | クリーンな下部3分の1の字幕、前面、読みやすい。パンチワードはインラインの emphasis ハイライト(アクセントカラー/アクティブワードポップ)を得ることができます — レール上に留まります。 |
| embed | 昇格されたピーク — 見出しビート | 被写体の背後に合成された1つの大きな単語(マットオクルージョン)、デザインされた入り口と出口 |
レールがテキストの大部分を運びます;埋め込みは希少で獲得されたピークです。 希少性はクリップごとではなく、ビート/ブロックごとです:ブロック(思考)ごとに≤1つのヒーロー、2つが同時に表示されることはなく、ヒーローウィンドウの間には少なくとも1ビートの間隔があります(コンパイラは0.6秒未満で警告します)。短いクリップ → 通常1~2つ;長い説明動画 → セクションごとに約1つ。複数のヒーローの中で、最も大きく作成されたものはAPEXです(それだけが完全なロックアップ埋め込み+幅フィットレイズを取得します);小さいものはマイナーピークであり、特大の強調行(前景、減衰モーション)としてそのカラムに乗ります — すべてのビートがマットショーケースを必要とするわけではなく、それがまさにAPEXをイベントとして保つ理由です。すべての単語を埋め込むことは依然としてよくある間違いです。
レール表面のアイデンティティはこれを正確に構築します(レール = rail.html、埋め込み = index.html のクライマックス)。カラムフローのアイデンティティはレールを削除し、すべてを埋め込みスタイルにします — 逐語性よりもムードが重要な要求にのみ推奨し、単語を読む必要がある説明動画/ボイスオーバーには決して推奨しません(CATALOG.mdはこれをアイデンティティごとにエンコードしています)。
ステップ 0 — CATALOGから1つのアイデンティティを選択
1つのフロントエンド、背後に3つのエンジン。 ユーザーはCATALOG.mdからIDENTITYを選択します(35エントリ:10クラシック + 25テーマ);エンジン、コンパイラ、および作成ファイルはカタログ行からルックアップによって導出されます。「標準 vs シネマティック vs テーマ」を質問として表面化しないでください — これらはバックエンド名です(1つの製品は複数のエンジンでも1つのUXを持ちます)。カタログはルーティングに必要なすべてをエンコードします:読み取り面、声、推奨対象、シーン要件、真に近いペア(loud↔ordnance、neon↔neonsign、cream↔stardust)の隣接性メモ。
アイデンティティ選択は嗜好ゲートです(../hyperframes/references/brief-contract.md § 1):自律モード(「サプライズして」/「自分で決めて」)では、自分でショートリストから選び、理由を一文で述べてください。ユーザーに尋ねる代わりに。
手順:クリップをプローブ → カタログから2~3のアイデンティティをショートリスト → 理由を一文で付けて1つを推奨 → ユーザーが選択(自律モード:あなたが選び、理由を述べる)→ そのアイデンティティのファイルを作成。アイデンティティはエンジンにロックされています(クロスコンボは不可;1つを開くことは検証イベントです — dna/README.mdを参照)。
作成する前に、常に推奨を提示し、ユーザーに選択させてください。 黙ってデフォルトにしないでください。
(完全なアイデンティティテーブルはCATALOG.mdにあります — ルーティングの単一の真実の情報源。以下のエンジンドキュメントは、各バックエンドの作成契約を説明しています。)
CATALOG.mdがここでの答えの全空間です:このワークフローはHyperFramesコンポーネントレジストリを検索しません。 作曲ワークフローは、名前付きルックを作成する前に npx hyperframes catalog を実行します。これは実行してはいけません。そのエンジンはロックされたコンパイラであり、cinematic.json / theme.json を消費して作曲自体を出力するため、レジストリアイテム — 含まれている caption-* ブロック — はマウントするものがありません。レジストリブロックはデザインされたキャンバス上のテキストをスタイリングします;このスキルはマットを通して誰かの映像にキャプションを焼き付けます。アイデンティティが要求に合わない場合は、そう言って最も近いものを選び、カタログの外に手を伸ばさないでください。
推奨ヒューリスティック:CATALOG.mdの「ショートリスト化ヒューリスティック」を使用します — これらはアイデンティティレベルです(例:「炸」はordnance/stomp/terminal/loudをショートリストし、何が爆発するかで選びます)、カテゴリレベルでは決してありません。不明な場合 → anchor。
- シネマティック →
make-cinematic.cjsによってコンパイルされるロックされたテンプレートのためにcinematic.jsonを記述。 - テーマ → 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を一度試し、それでもダメなら拒否します(捏造された単語の逐語レールは、キャプションがないより悪いです)。 - 忙しいハンドヘルドで高速モーション(マットがちらつく)
事前フライトプローブ(費用はかからず、最悪の失敗を防ぐ)
- ショットカットプローブ。 20%、50%、80% でフレームをサンプリング。異なる被写体/シーンが表示された場合は、カットの前にクリップをトリミングします。
- レターボックス/ピラーボックスプローブ。 最初のフレームに黒いバーがありますか?安全なコンテンツ矩形を計算し、キャプション配置をその内部に制限します。
- 輝度プローブ。 キャプション領域の平均輝度をサンプリング —
60未満→ 明るいテキストはそのまま読める、60~180→ グリフスクリムを追加、180以上→ 不透明テキスト + スクリム(明るい裸テキストは絶対に避ける)。シネマティックテンプレートはクリーム+screenで固定されています — このプローブを使用して_適合するアイデンティティを選択_し(明るいシーン →ink、または不透明レールのanchorテーマ)、色を変更するためには使用しないでください。 - トーンによるアイデンティティ推奨(あなたが推奨;ユーザーが選択 — ステップ0 + CATALOG.mdを参照)。 説明動画/インタビュー/単語を読む必要がある → レール/パネル表面のアイデンティティ;詩的/ソーシャル/「シネマティック」 → レジスターによるカラムフローアイデンティティ;「炸 / 特效 / VFX」/ 名前付きワールド → テーマ別アイデンティティ。不明な場合 →
anchor(単語は読め、シーンは安全) — ただし、ショートリストを提示し、ユーザーに選択させてください。
パイプライン — 5ステップ
1. hyperframes init <project> --non-interactive --video <video.mp4> --skill=embedded-captions
2. bash scripts/prepare.sh <project> # マット処理 ∥ 文字起こし(並行)→ セーフゾーン。1つのコマンド。
# → frames_fg/ transcript.json safe-zones.json
3. [エージェントステップ — 唯一のクリエイティブなステップ] 小さなJSONを作成;以下をモードに従って参照
シネマティック:cinematic.json を作成 → node scripts/make-cinematic.cjs <project>
テーマ: theme.json を作成 → bash scripts/render-theme.sh <project> (コンパイル + レンダリング + プレートFX)
4. node scripts/preview-frames.cjs <project> # 約2秒/フレームの合成プレビュー → §ビジュアルQA(レンダリングの前)
5. bash scripts/render-and-composite.sh <project> # ゲート → final.mp4 + history/ スナップショット
(テーマモード:ステップ3b/5をスキップ — render-theme.sh はすでにコンパイル + レンダリングアンドコンポジット
+ _postfx.sh を実行;成果物は final_fx.mp4、final.mp4 はプレートリアクション前)
ステップ1の init は、インストールされたスキルをGitHub上の最新版と照合し、いずれかが古い場合はグローバルセットを更新します。
ステップ3はモードによって異なります:
ステップ3 — シネマティックモード(純粋な埋め込み)
- 最初に
safe-zones.jsonを読む。 ナレーションプレーンはzones.hugLeft/hugRightに配置 — シルエットに隣接するクリーンなストリップ(体から遠いテキストは浮いて見え、埋め込まれていないように見えます;遠い角はフォールバックであり、デフォルトではありません)。ヒーローはデフォルトでheroAnchor/heroBands.best(被写体の中央、約30~55%オクルージョン)。recommendation:"fg"は読みやすさのためにナレーションを前面に移動します;ヒーローはheroBands.feasibleの場合、常に埋め込まれたまま — ヒーロー前景は最後の手段です。 - **DNAはステップ0で選んだアイデンティティです
…
(翻訳は省略されました)