Communitygithub.com

NoRoboto/toon-explainer

ストーリーボードJSONからヘッドレスBlenderでセルシェーディングされた3D解説ビデオを構築・レンダリングします。

toon-explainer とは?

このスキルは、ストーリーボードJSONを入力として、ヘッドレスBlenderを使用してセルシェーディング(平らな色、黒い輪郭線)の3D解説アニメーションを自動生成します。ユーザーが「Stupy Doo」風のアニメーションや図解アニメーションを作成したい場合にトリガーされます。生成されたビデオは、オブジェクトの出現、カメラ移動、大きなキャプションが特徴で、8〜30秒の短いクリップに最適化されています。音声合成、効果音、音楽のミキシング、キャプションの追加はすべて後処理で行われ、最終的に1080x1920の縦型ビデオが出力されます。Claude Codeで動作し、Blender 5.1.xがインストールされている必要があります。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NoRoboto/claude-skills/tree/HEAD/toon-explainer

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

アクティベーションコントラクト

ユーザーがセルシェーディングされた3D解説クリップ(平らな色、黒い輪郭、オブジェクトのポップイン、移動カメラ、大きなキャプション)を要求した場合、「Stupy Doo」スタイルのビデオを再現したい場合、またはテキストからBlenderで図をアニメーション化するよう依頼された場合に読み込みます。

ハードルール

  • ビジュアルを画像/ビデオAIモデルで生成してはいけません。ルックはBlenderでレンダリングされた3Dジオメトリ+フリースタイルアウトラインです。
  • Blenderバイナリ: ~/.local/bin/blender(5.1.x、ユーザーインストール)。常に-b -Pでヘッドレス実行します。
  • ストーリーボードが唯一の真実の情報源です: storyboard.json(スキーマはreferences/storyboard-schema.mdにあり)。JSONを編集し、再レンダリングします。.blendファイルを手動で編集してはいけません。
  • フルビデオをレンダリングする前に必ず確認します: --stillsを3〜5回レンダリングし、コンタクトシートを作成し、それを読み、重なりやカメラ外のオブジェクトを修正します。
  • キャプションとオーディオは後処理(mix.py、captions.py)であり、Blenderテキストオブジェクトでは決してありません。
  • SFXはaudioセクションのaction:参照を介してアクションタイムに配置され、アクションが存在する場合に手動で秒数を入力することはありません。
  • ナレーションはスペイン語で中立的に保ちます。UI/キャプションのコピーはユーザーの言語に従います。
  • クリップは短く保ちます:ストーリーボードあたり8〜30秒。長いビデオの場合はffmpeg concatでクリップを連結します。

決定ゲート

ニーズ実施事項
ナレーション付きビデオ最初にナレーション、それに合わせてキャプションをタイミング調整、次にアニメーション。voice-video(tts.py)でaudio.narrationに音声を設定。
SFX / 音楽audioセクション: action:参照付きのナレーション、音楽、SFX。プレースホルダーはassets/sfx/に、CC0ソースはそのREADMEに。
提供された音楽スチル前にbeats.py snap storyboard.json --music track.mp3 --writeを実行。
簡単なルック確認--preview --stills t1,t2,t3(半分の解像度、8サンプル)。
最終レンダリング--previewなし。デフォルトは1080x1920、30fps。
オブジェクトがプレハブにないプレハブ: box、plane、cylinder、sphere、panel、panel_row、cable、device、car、charger、transformer、cloud、tree、pole。それ以外はプリミティブまたはmodel(glb/obj)。
フレームが安っぽく見えるショットあたり1つの主題、カメラは8〜13m、tree/pole/cloudの装飾、ケーブルはdrawしてからflow。references/style-notes.mdを参照。
手動調整が必要--blendを追加し、Blender UIでout/scene.blendを開く。

実行手順

  1. references/storyboard-schema.mdとreferences/style-notes.mdを読みます。
  2. <workdir>/storyboard.jsonを出力する小さなgen.pyを書きます:z=0の地面プレーン上のオブジェクト、ショット(それぞれ1つの主題)、アクション、キャプション、post、audio。
  3. スチル: ~/.local/bin/blender -b -P ~/.claude/skills/toon-explainer/assets/build.py -- storyboard.json out --preview --stills 1,3,5。Pillowでコンタクトシートを作成し、それを読みます。
  4. JSONでフレーミングとタイミングを修正します。すべてのショットが明確に読めるまで手順3を繰り返します。
  5. プレビュービデオ: 同じコマンドを--previewのみで実行。out/raw.mp4をffprobeで確認します(duration、fps)。
  6. オーディオ(audioがある場合): python3 ~/.claude/skills/toon-explainer/assets/mix.py storyboard.json out/mix.wav。キュー表を読みます。
  7. キャプションと多重化: python3 ~/.claude/skills/toon-explainer/assets/captions.py storyboard.json out/raw.mp4 out/final.mp4 --audio out/mix.wav(またはaudioがない場合は--audio narration.wav)。
  8. 最終: --previewを削除し、手順5〜7を再実行。out/final.mp4をxdg-openで開きます。

出力コントラクト

storyboard.jsonのパス、out/final.mp4のパス、duration、解像度、および画面に表示されている内容をショットごとに1行で返します。レンダリング時間を報告します。まだ実装されていないもの(リップシンク、マルチクリップ連結)をリストします。

リファレンス

  • references/storyboard-schema.md — JSONスキーマ、プレハブ、アクション、カメラ規則。
  • references/style-notes.md — 参照ルック、Blender 5の落とし穴、安っぽいカットを修正したもの、サウンドデザイン。
  • references/external/ — MITコピー: EL4CTEO blender-stylized-npr、arjun988 camera-cinematography。
  • assets/toonlib.py — bpyライブラリ(マテリアル、プレハブ、カメラ、アニメーション)。
  • assets/build.py — ストーリーボードからBlenderレンダリングへ。
  • assets/mix.py — audioセクションを1つのWAVに(ダッキング音楽、SFXキュー)。
  • assets/beats.py — ビート検出+アクションタイムのスナップ。
  • assets/sfx/ — プレースホルダーSFX、CC0ソース。
  • assets/captions.py — ffmpegキャプション+オーディオ多重化。
  • assets/storyboard.example.json — 太陽光ルーフトップの例、9秒。

関連スキル