Communitygithub.com

Toon Studio

ワンコマンドでAIアニメーション映画を生成するパイプライン。story.jsonのスクリプトから、キャラクターリファレンス、ストーリーボード静止画、アニメーションクリップ、ナレーション、音楽までを自動生成します。ユーザー自身のKIE.aiおよび(オプションで)ElevenLabsのAPIキーを使用します。

Toon Studio とは?

Toon Studioは、JSON形式のスクリプトから完全にミックスされたMP4アニメーション映画を生成する、単一ファイルのPythonパイプラインです。Windows、macOS、Linuxで動作し、GPUは不要で、ユーザーが用意するAPIキーのみで動作します。このツールは、キャラクターのビジュアルリファレンス生成、ストーリーボード静止画の作成、アニメーションクリップの生成、音声ナレーション、BGMのミックスまでの全工程を自動化します。各工程はキャッシュされるため、再実行時には不足している部分のみが生成されます。また、`--director`オプションでストーリーボード後に確認・修正が可能で、`--producer`オプションで最終的な微調整ループも行えます。主なバックエンドとしてKIE.aiをサポートし、音声はElevenLabs(直接API)も選択可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aroga2/toon-studio/tree/main

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

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

ドキュメント

Toon Studio は何をしますか?

JSONスクリプトからミックスされたMP4アニメーション映画を生成する、単一ファイルのPythonパイプライン(studio.py、stdlib + elevenlabs SDKのみ)。Windows、macOS、Linuxで動作します。GPUは不要で、ユーザーが提供するAPIキー以外のアカウントは必要ありません。

セットアップ(各マシンで一度だけ実行)

  1. Python 3.10以上。
  2. pip install elevenlabs imageio-ffmpeg(ffmpegバイナリはimageio-ffmpegに同梱されています。必要に応じてFFMPEG環境変数で上書き可能)。
  3. .env.exampleを.envにコピーし、以下を記入:
    • KIE_API_KEY(必須) - https://kie.ai から取得。画像、動画、音楽生成に対応。
    • ELEVENLABS_API_KEY(推奨) - https://elevenlabs.io から取得。直接音声生成を行います。KIEはElevenLabs TTSを再販していますが、そのエンドポイントは度々障害が発生します。デフォルトのストーリーでは、音声ルートは直接バックエンドに送られます。
    • モデル選択は、2026年11月時点で測定された予算/品質のスイートスポットにデフォルト設定されています:qwen3/pro-text-to-image(静止画、約6.4クレジット)、minimax-h3/image-to-video(クリップ、約48クレジット/6秒)、Suno V4_5(BGM)。任意のKIEモデルIDは、KIE_IMAGE_MODEL / KIE_VIDEO_MODEL / KIE_MUSIC_MODELで置き換え可能です。

ワークフロー

  1. スクリプト。 story.jsonを作成します(examples/moodcast-eva/story.jsonおよびstudio.pyの先頭のdocstringを参照):タイトル、スタイル、キャラクター(名前、デザイン、音声の説明、実在の人物を漫画化するためのオプションのphoto、オプションのElevenLabs voice_id)、シーン(説明、モーション、4~15秒の長さ、発言者付きの台詞行)、music_prompt。 または、LLMを使って下書きすることも可能: python studio.py new "子猫の騎士が黄金の鍵を見つける" --scenes 3 --out story.json
  2. ビルド。 python studio.py build story.json --outdir my-film ステージ:キャラクターリファレンス → ストーリーボード静止画 → アニメーション → ナレーション → 音楽+ミックス。各ステージはキャッシュされ、再実行では不足している部分のみが生成されます。
  3. ディレクター(オプション、推奨)。 --directorを追加すると、ストーリーボード静止画の後で一時停止します:各画像を確認し、承認するか、メモ付きで再生成(r wider shot)するか、アニメーションクレジットが消費される前に自分で画像を差し替え(s path.png)ます。インタラクティブなstdinがないエージェントでは、代わりにフォルダプロトコルを使用します:build --stop-after stillsを実行し、出力ディレクトリ内のsceneN.pngを確認/上書き(またはpython studio.py regen story.json --outdir DIR <scene#> "director's note"を実行)してから、同じビルドを再実行します。
  4. プロデューサー(オプション)。 --producerを追加すると、アセンブリ後の修正ループが実行されます:r 2でシーン2のクリップを再レンダリング、v 2 1でシーン2の1行目のナレーションを再生成、m 0.2でBGMを大きくして再ミックス、aで承認。
  5. 事前チェック(クレジット消費なし)。 python studio.py check story.jsonでスキーマを検証し、シーンごとの発話時間の適合性(推定発話秒数 vs シーンウィンドウ)を報告し、不足しているステージのKIEクレジットコストと現在の残高を見積もります。消費前に承認します。
  6. キャストの承認(低コスト)。 python studio.py preview story.jsonで、各固有の音声の最初の1行をpreview_<speaker>.mp3としてレンダリングします。これにより、ビデオクレジットが消費される前にユーザーが音声を承認できます。

すべてのビルドでは、MP4の横に<film>.srt(各台詞行のフィルムタイムライン上の正確な配置を示すキャプションサイドカー)も書き込まれ、デフォルトでキャプションがビデオに焼き付けられます(白文字に暗い輪郭、画面下部3分の1の位置。build --no-captionsで無効化、またはstudio.py内のCAPTION_STYLEでスタイル変更可能)。

苦労して得たモデルの事実(再導出しないこと)

  • KIEタスクAPI:POST {KIE_BASE_URL}/api/v1/jobs/createTask、本文は{"model", "input": {...}}、結果はGET /api/v1/jobs/recordInfo?taskId=...でポーリング。成功はsuccessFlag == 1。結果はdata.response.resultUrls[0]。ローカルファイルのアップロード先はhttps://kieai.redpandaai.co/api/file-base64-upload(JSON base64)であり、api.kie.aiではありません。
  • 参照画像:nano-bananaファミリーはimage_input(URLのリスト)を読み取ります。image_urlsフィールドは黙って無視され、指定と異なるキャラクターが生成されます。
  • MiniMax H3(minimax-h3/image-to-video):入力はfirst_frame_url、整数の長さ4~15、解像度768Pまたは2K。このモデルはネイティブに独自のサウンドトラック(多くの場合、ボーカル付きフルミュージック)を生成します。スタジオではデフォルトでこれを無音にします(studio.py内でAMB_VOL = 0.0)。確実にクリーンな効果音であることが確認できたレンダリングでのみ音量を上げてください。
  • Hailuo(hailuo/2-3-image-to-video-pro):image_url、文字列の長さ("6" / "10")、解像度768P / 1080P。
  • Seedance(bytedance/seedance-2-fast):first_frame_url、整数の長さ、generate_audio: false。
  • KIE経由のSuno音楽:POST /api/v1/generate(プレースホルダーのcallBackUrlが必要。GET /api/v1/generate/record-info?taskId=...でstatus == SUCCESSをポーリング、音声はresponse.sunoData[0].audioUrl)。
  • すべてのモーションプロンプトには2つのハードルール(studio.py内の定数NO_SPEAK、AUDIO_FX)が適用されます:キャラクターは決して口を動かさない(そうしないとオフスクリーンの台詞がリップシンクの不一致として認識される)、およびクリップのサウンドトラックに音楽や音声を含めない。

バックエンド

story.jsonの"backends"は、各プリミティブを独立してルーティングします:{"image": "kie", "video": "kie", "voice": "elevenlabs", "music": "kie"}。利用可能なバックエンド:kie(画像/動画/音楽/音声)、elevenlabs(音声のみ、直接API)、higgsfield(代替CLIバックエンド)。TOON_BACKENDまたはストーリーのbackendで指定がない限り、デフォルトはhiggsfieldです。

コストの透明性(KIEで測定、2026年11月)

モデルコスト備考
qwen3/pro-text-to-image約6.4クレジット/画像1344x768、参照機能あり、約60秒
z-image約0.8クレジット/画像低コスト、低品質
nano-banana-pro約18クレジット/画像高品質
minimax-h3/image-to-video約48~56クレジット/6秒高速(約90秒)、独自の音声を生成
hailuo/2-3 i2v pro約45クレジット/6秒約130秒
seedance-2-fast約148.8クレジット/6秒高品質なモーション
Suno V4_5約24クレジット/曲フル曲、ミックスでトリミング

ElevenLabs音声:プランによる文字数制限に従います(例:eleven_v4は約数百文字/行)。KIEの残高はGET /api/v1/chat/creditで確認できます。ビルドは毎回実行後に残りクレジットを表示します。

トラブルシューティング

  • キャラクターの見た目がおかしい / 参照を無視する:参照が実際にアップロードされたか確認します(ログにタスクIDが表示されます)。nano-bananaはimage_urlsではなくimage_inputを必要とします。
  • フィルムに余分な音楽や音声が含まれる:H3などによるクリップレベルのサウンドトラックが原因です。AMB_VOL = 0.0を維持するか、クリップを再レンダリングします(非決定論的です)。
  • ナレーション中のリップフラップ:NO_SPEAKルールで通常は防げます。もし1つのクリップで問題が発生した場合、そのclipN.mp4を削除してビルドを再実行するか(新しいレンダリングで通常は改善されます)、--producerとメモを付けて再レンダリングします。
  • KIE音声タスクが500エラーで失敗する:voiceをelevenlabs(直接)にルーティングします。
  • ビルドの途中で生成が失敗した:同じコマンドを再実行するだけです。完了したステージは再利用され、不足しているアセットのみが再生成されます。

関連スキル