エクスプレイナー(Voxスタイル)→ HyperFrames
約60秒のエクスプレイナーは Nブロック × 10秒(60秒 = 6ブロック)です。ブロックkのナレーションはブロックkの画像とともに再生されます。ツール: .claude/skills/explainer/tools/ ($T)。スタイルガイド: references/styles.md。ソース付きの実例: examples/explainer-eiffel/。
動作イメージ
ターミナルと話しているのではなく、よくできたアプリを使っているように:
- メッセージごとに1つのステージを表示し、その後停止して待機。太字のステージタイトルと、それに合った絵文字1つ。
- 設定や選択肢はテーブルで表示。セクション間は
---で区切り、短い行で余白を確保。 - 内部のやり取りは一切表示しない: ファイル書き込み、ツールチェック、タイミング計算について説明しない。ユーザーが行動する場面か、何かが欠けている場合のみ発言。
- 貼り付けを意図したものはプロンプトのみを含むコードブロックに入れる。ラベルや注意事項は外側に。
ステージ0 — サイレントチェック(説明なし)
setup/doctor.sh --quiet。videos/ にエクスプレイナープロジェクト(内部にpack.jsonがあるもの)が存在する場合、「おかえりなさい — 新しいビデオを作りますか、それとも <最新> を続けますか?」と表示してステージ1をスキップ。
ステージ1 — ようこそ 🎬
短い歓迎メッセージと、仕組みを説明する5行のテーブル(アイデア → ルック → 音声 → シーン → 最終カット)を表示し、1つだけ質問する: ビデオのテーマは何ですか? ざっくりしたアイデアで構いません。または find one で今週のベストトピックを提案。停止。
ステージ2 — トピックと設定 ⚙️
find oneの場合 → ウェブ検索で現在の話題を調査し、トップ3を提案。それぞれ1行のフック(理由/方法の質問 + 驚きの数字 + 見栄えが良い理由)を添える。悲劇やゴシップは除外。ユーザーが選択する。代理で選択してはいけない。- それ以外の場合 → アイデアを1行のアングルに絞り込む。答えが驚きとなる質問。
次に、デフォルト値が入力された設定テーブルを1つ表示。go ですべてを受け入れる:
| 設定 | デフォルト | オプション |
|---|---|---|
| ルック | collage | collage (大胆なエディトリアルコラージュ) · diorama (セピア調のペーパードキュメンタリー) |
| 画像 | code | code (自由、HyperFramesでビルド) · ai (Higgsfieldまたは任意の生成ツール) · mixed |
| 長さ | 60 s | 30秒 ~ 10分、10秒単位 |
| アスペクト | 16:9 | 16:9 · 9:16 · 両方 |
停止。
ステージ3 — リサーチとスクリプト(サイレント)
videos/<slug>/ を作成。すべての主張をリサーチ: ウェブ検索で各数字を2つの独立した情報源でクロスチェックし、URLを保持。情報源が一致しない場合は、安全な数値を使用するか、その主張を削除。曖昧でも真実の一文が、正確でも虚偽の一文に勝る。絶対に数字、引用、予測を捏造しないこと。
ブロックごとにナレーションを1行作成。数字はスペルアウト、平易な話し言葉:
- Kokoro音声: 各行22~26語。edge-tts音声: 18~20語。音声ステップでずれは補正される。
- 構成: コールドオープン(最も驚くべき事実、挨拶なし)→ ステークス → 証拠(ブロックごとに1つのアイデア。それぞれ具体的に:数字、日付、場所が含まれ、エスカレート)→ 転換点 → ブロック1を反映したキッカーで解決。
- トーン: 探求心があり、正確で、軽妙なウィット。説明する。販売しない。
- ブロック間のデザイン: 繰り返し登場するヒーローオブジェクト(タワー、コンテナ、コインなどが変化しながら再登場); 早い段階で提起され、最後に答えられる質問; ビデオとして記憶される1つの「おおっ」という瞬間。
各ブロックについて、コールアウト(画面上の数字または2語の事実、9文字以内、例 +15 cm、2.5M、7 yrs)とビジュアルも選択。コードモードの場合、ビジュアルのkind は tower スタイルのシルエット(SVGを適応)、dots、bars、lean、calendar、stat のいずれか。pack.json(以下の形式)を書き込む。まだ何も表示しない。
ステージ4 — 音声 🎙
| 音声 | サウンド | エンジン |
|---|---|---|
am_michael | 米国男性、落ち着いたドキュメンタリー | Kokoro (オフライン、デフォルト) |
bm_george | 英国男性、落ち着いた | Kokoro |
af_heart | 米国女性、温かくクリア | Kokoro |
en-US-ChristopherNeural / en-GB-RyanNeural / en-US-JennyNeural | Microsoft ニューラル音声 | edge-tts (無料、オンライン) |
samples → ブロック1を3つのKokoro音声それぞれでサンプル生成し、ファイルを送信。停止。
ステージ5 — ブリーフ 📋 (ゲート)
1つのメッセージ:
- アングル、スルーライン、ルック、画像、長さ/ブロック数、アスペクト、音声を含むテーブル
- スクリプト(
ブロック1 … Nの形式) - 情報源リスト
最後に: **「すべて問題ありませんか?それとも何か変更しますか?」**承認されるまでループ。ユーザーはどの行でも書き換え可能。
ステージ6 — 画像
code モード: ステージ8にスキップ。すべてのブロックがコラージュシーン(カラーフィールド、紙の質感、コールアウトのカウントアップ、マーカーサークルの自己描画、およびビジュアル)になる。
ai / mixed モード:
- スタイルキー 🎨: 3つの名前付きバリアントをそれぞれ1文で提示(同じビジュアルシステムだが、異なるパレットまたは構図。
references/styles.mdから)。選択後、貼り付け可能な画像プロンプトを提供。Higgsfield:nano_banana_pro、アスペクトはビデオと同じ。コストを提示し、生成前に同意を待つ。1つの画像でルックが固定され、すべてのシーンに適用される。 - シーン 🎬: ブロックごとに1メッセージ(または求められれば一度にすべて)。各シーンにはナレーション行がコンテキストとして付与され、
references/styles.mdのテンプレートから構築された貼り付け可能なプロンプト: STYLE / SCENE / MOTION / AUDIO / AVOID。設定テーブル: 参照画像 = スタイルキー、10秒、720p以上、アンビエントサウンドオン、blockNN.mp4として保存。Higgsfield 直接: スタイルキーを使用したkling3_0pro 画像→ビデオ。最初に合計(ブロック数 × クレジット)を提示。またはユーザーが任意のジェネレーター(Veo、Kling、Runwayなど)でプロンプトを実行。 - クリップが到着 📥: ユーザーがファイルを
videos/<slug>/clips/にドロップ。明らかなバリアントは静かにリネーム(Block 1.mp4→block01.mp4); ペアリングが本当に曖昧な場合のみ質問。クリップがないブロックは自動的にコードシーンにフォールバック。
ステージ7 — クリップチェック(サイレント)
各クリップからフレームを1つ抽出して確認。スタイルから外れている、またはフォトリアルな場合: STYLE と AVOID の行を厳格化し、そのブロックのみ再生成。2回連続で失敗した場合は、シードだけでなくプロンプト自体を書き換え。AIクリップ内に読めるテキストがある場合、collage モードでは失敗とみなす(テキストはコールアウトとキャプションに配置する)。
ステージ8 — 音声とカット(サイレント)
~/.local/share/hf-kokoro/bin/python $T/voice.py videos/<slug> # または --engine edge --voice en-GB-RyanNeural
すべてのテイクが 7.5秒から9.7秒 の範囲に収まらなければならない。ツールが違反リストを出力。該当行を(短くまたは長く)書き換え、--only 3,5 で再音声生成し、すべてが範囲内に収まるまで繰り返す。タイムストレッチは絶対に行わない。
.venv/bin/python $T/build.py videos/<slug> [--aspect 9:16] # index.html + assets/mix.wav
cd videos/<slug> && npx --yes [email protected] lint && npx --yes [email protected] render -o raw.mp4
ffmpeg -y -i raw.mp4 -af loudnorm=I=-14:TP=-1:LRA=11 -c:v copy -c:a aac -b:a 192k "../../out/<Title> (16x9).mp4"
lint はネストされた構造と密なトラックについて警告する。これらはStudioタイムラインビューに関するものなので、レンダリングには影響しないため無視する。エラーは修正必須。ブロックあたり1フレームをスナップショット(snapshot . --at 2.5,12.5,…)して確認: 数字が1行に収まっているか、マーカーサークルが数字を囲んでいるか、キャプションが画像を覆っていないか。
ステージ9 — 納品 ✅
MP4を送信。続いて小さなテーブル: トピック、長さとアスペクト、ルックと音声、情報源(リンク)。提供: もう一方のアスペクト比、任意のブロックの変更、または新しいビデオ。
pack.json
{ "title": "…", "angle": "…", "through_line": "…", "look": "collage", "aspect": "16:9",
"voice": { "engine": "kokoro", "name": "am_michael" },
"blocks": [ { "line": "…", "callout": { "big": "+15 cm", "label": "taller on the hottest days" },
"visual": { "kind": "bars", "values": [10, 30, 60, 100], "highlight": 3 },
"prompt": "(ai mode) full scene prompt" } ],
"sources": [ "Publisher — title: https://…" ] }
人間が読める pack.md(概要、スクリプト、プロンプト、情報源)も作成する。これがプロジェクトの記録となる。
ルール
- 事実: 数字ごとに2つの情報源。情報源はすべてのビデオに同梱。捏造した数字、引用、予測は禁止。
- 有料生成は、モデル × 数 × クレジットのコストを提示し、同意を得てから(PLAYBOOK #1)。
- 実在の人物の顔をクローズアップで生成しない。ミッドショット、シルエット、または検閲バーを使用する。これによりモデレーション拒否も回避できる。
- Voxのルックはオマージュである。ビデオ内でVoxのロゴ、名前、ブランドを使用してはならない。