解説動画作成
あなたは、特定の視聴者に理解され、かつ正しい解説動画を作成します。結果を左右するのは2つの要素です。
references/STYLE.mdのルール(実際のレビュアーフィードバックに基づく)と、表示するすべての数値を計算して確認する習慣です。レンダリングは簡単な部分です。
リポジトリマップ: ライブラリ animkit/(APIリファレンス animkit/README.md)、ツール群 tools/、サンプル examples/、完成した2つのエピソード episodes_example/(ストーリーボードとショットのフォーマットをコピーすること。CLAIMS形式は references/VERIFY.md にあります)、あなたの作業は episodes/<ID>_<topic>/ に配置します。
0. 開始前に
- 環境は動作していますか?
python -I -B -X utf8 tools/selftest.pyがall OKと表示される必要があります。config/animkit.jsonがない場合は、python -X utf8 tools/setup_config.pyを実行します(設定はチェックアウトごとに必要です。新しいクローンやgit worktreeでは再実行が必要です。またはANIMKIT_CONFIGを設定してください)。問題がある場合はSETUP.mdを参照。 - デフォルトで決められないことだけをユーザーに質問します(1回のメッセージで簡潔に):
- トピックとソース資料(講義ノート、論文、Webページ)。すべての主張にソースが必要です。
- 対象視聴者とその既知の知識(深さを決めます。
references/STORYBOARD.md§Audience を参照)。 - 長さ。翻訳版/ナレーション/音声合成が必要か?
- 実際のモデル(GPU、ダウンロード)を実行してよいか? デフォルト:いいえ。既知の正解データで合成シーンを使用。
- 回答がない場合のデフォルト:1080×1440、30fps、キャプションのみ、音声なし、1回のレビューラウンドを計画。
episodes/<ID>_<topic>/を作成し、STATUS.md(ステージ/次のステップ/待機中/dateからの時間)を配置します。
1. パイプライン(詳細とコマンド:references/PIPELINE.md)
| ステージ | あなたが生成するもの | 次のステージへのゲート |
|---|---|---|
| A. 精読 | ソースダイジェスト;オプションで参考動画の分析(references/REFERENCES.md) | メカニズムを「入力 → 数式 → 形状 → 小さな数値例 → なぜそうなるか」として説明できる |
| B. ストーリーボード | storyboard.md、CLAIMS_to_verify.md、episode.json(+ ライブラリに不足があれば elements_needed.md) | 長いエピソードの場合、ユーザーが概要をOKすること;独立検証ラウンド1が完了し、修正が適用されていること(references/VERIFY.md) |
| C. ショット | shots/sNN_*.py、各々に @shot.check を含む | --check-only がパスすること;コンタクトシートを確認;フルレンダリング;check.json の警告を修正 |
| D. アセンブル | render/<ID>.mp4(tools/concat.py)、review/round1/review.html(tools/review_page.py) | 各ショットのシートを確認済み;画面上の数値 = CLAIMS |
| E. レビューラウンド | review/roundN/feedback.md(ユーザーのメモ)、review/roundN+1/changes.md、再レンダリング | 各フィードバック項目に回答;新しい主張を検証(1項目あたり最大2ラウンド) |
| F. オプション | 翻訳版(references/I18N.md)、ナレーション(references/NARRATION.md)、音声合成(references/TTS.md) | それぞれに独自のチェックあり |
ショットは動画の言語で直接記述します(例では英語)。キャプション、タイトル、ラベルはスクリプト内のプレーンな文字列です。--lang は2番目の翻訳版のみに使用します。
マイクロパス(≤ 60秒、1~3ショット)。同じステージですが、より軽量です。episodes/<ID>_<topic>/ 内の最小ファイルリスト:
storyboard.md:1つのテーブル、キャプションごとに1行(時間範囲、キャプション、画面の変化、計算値か説明用か)。スケルトン:templates/storyboard_skeleton.md。CLAIMS_to_verify.md:画面上の数値/事実ごとに1行(主張、ソース、確認方法、測定値/計算値/推測値/論文)。shots/s01_<name>.pyをtemplates/shot_template.pyから作成し、表示されるすべての計算数値を文字列としてアサートする@shot.checkを含めます。- 検証:新しいサブエージェントに
templates/verifier_prompt.mdを使用し、すべてのCLAIMS行をスコープとします。修正を適用します(古い文言は取り消し線)。 - レンダリング:
--check-only→--sheet-only(sheet.jpgを確認)→ フルレンダリング。 episode.jsonとtools/concat.pyはショットが2つ以上の場合のみ使用。tools/review_page.py <EP> --round 1でレビューページを作成(1ラウンド)。主張テーブル、@shot.check、コンタクトシートの確認を省略しないでください。
2. 決してオプションではないルール
- 計算可能なビジュアルはすべて計算(投影、アテンション重み、リシェイプ、逆投影、フィッティング線)し、
@shot.checkでアサートします。表示される文字列も含めます:ck.eq("depth on screen", f"{z:.3f}", "1.976")。完全精度からフォーマット。印刷された値を再丸めしないこと。説明用ビジュアルにはshot.tag("Illustration")を使用。次元削減された図面はその旨を明記。 - すべての数値にはソースがある(論文の§/表/式、公式コードのファイル+行、または独自スクリプト)
CLAIMS_to_verify.mdに記述し、測定値/計算値/推測値/論文のいずれかでラベル付け。比較では指標、単位、値の大小どちらが良いかを明記。パーセンテージは分母を明記。 - すべての記号は出現時にその都度定義。視聴者が知らないと思われる用語にはポップアップサイドウィンドウ(
animkit.Popup)で簡潔に説明し、閉じます。 - 1つのキャプション = 1つの視覚的変化、≤ 12単語、フレーム幅を超えないこと(レンダラーが警告;42pxでは1行あたり約8語、最大2行)、2~3秒、静的でないこと。
- 図を先に、次に数式。数式の項を1つずつ照明し、各項を図の対応部分に色付けまたはリンク。
- 独自のテストは(論文の実験ではなく)私たちのものとラベル付け、初回と以降同じタグで。
- 独立検証:主張を書いた者が検証しない。修正は新しい主張。最大2ラウンド、その後は文言通りに適用しスポットチェック。古い文言は取り消し線で示す(
~~old~~ → new)、決して黙って削除しない。 - 翻訳やナレーションで事実を捏造しない:検証済みのキャプション/CLAIMSが言うことだけを言う。
- 完全なチェックリスト:
references/STYLE.md(§A 内容、§B リズム、§C ビジュアル文法、§D 納品前、§E ルール化されたレビューフィードバック)。ストーリーボード作成前と各レビューラウンド前に読むこと。
3. 作業スタイル
- 必要なAPIセクションを
animkit/README.mdで読む(長いので、要素をgrepしてからその部分を読む)。episodes_example/の最も近いショットからパターンをコピーし、レイアウトを新規発明しない。templates/shot_template.pyは最小限の完全なショットテンプレート。 - ショットの反復には
--still t1 t2(PNGフレーム)と--sheet-only(12フレームコンタクトシート)を使用。フルレンダリングは最後に行う。シートは毎回自分で確認(重なり、テキストのはみ出し、ボックス=グリフ欠落、図に重なるキャプション)。スチルは後のレンダリングで更新されないので、編集のたびに--stillを再実行。 - 3Dシーン:
animkit/README.md§3D scenes(PinholeCam、OrbitCamのaz/el規則:az=90, el=0は側面図)。2D図(ピンホール側面図など):§2D side view(等スケールのPlot2D)。 - Pythonは
python -I -B -X utf8として実行。別のセッションがレンダリング中にライブラリファイルを編集しない(references/PITFALLS.md)。 STATUS.mdを短く最新に保つ。努力をeffort_log.csvに記録(item,size,start,end,render_s,iterations,note)。- 長いエピソードや多数のショット:
references/DISPATCH.mdに従ってセッション/サブエージェントに分割(メインセッションのコンテキスト予算約300k、1回限りのサブエージェントは≤150k、切り替え前にハンドオフファイルを作成)。
4. 納品
ユーザーに伝えること:動画パス、レビューページパス(review/roundN/review.html、ブラウザで開く。ショットごとのコメントボックスと「すべてコピー」ボタンあり)、計算されたものと説明用のもの、検証されたものと誰が検証したか、未解決の質問。フィードバックが戻ってきたら、そのまま review/roundN/feedback.md として保存(ショットIDごとに1行、例:E03-02: ...)、各項目に回答し、一般的な好みはエピソードのローカルルール(episodes/ 内の STYLE_local.md)に追記し、次のエピソードで反映されるようにする。
リファレンスインデックス
| ファイル | 読むタイミング |
|---|---|
references/PIPELINE.md | 開始時;ステージコマンド、ファイル形式、ゲート |
references/STYLE.md | ストーリーボード作成時;各レビューラウンド前 |
references/STORYBOARD.md | ステージB:視聴者の深さ、ストーリーボード+CLAIMS形式、ストーリーパターン |
references/REFERENCES.md | 参考動画/ソース論文の研究時 |
references/VERIFY.md + templates/verifier_prompt.md | CLAIMS後、モデル実行後、ナレーション/翻訳後 |
references/REVIEW.md | ステージD~E:レビューページ、フィードバックファイル、ラウンド |
references/I18N.md | 英語エピソードの翻訳版(--lang) |
references/NARRATION.md | ビジュアルセグメントごとの音声スクリプト |
references/TTS.md | ローカルTTS音声、タイミング、ミキシング |
references/DISPATCH.md | マルチセッション/サブエージェント作業、コスト、共有マシンのエチケット |
references/PITFALLS.md | 何かが壊れたとき;ライブラリを変更する前 |
templates/ | セッションとサブエージェント用プロンプト、スケルトンファイル、ショットテンプレート |