animation-studio: アイデア → スクリプト → 音声 → 安全なレンダリング → MP4
このファイルはルーターです。4つの大きな質問をし、ハードウェアを確認してから、ジョブに必要なファイルのみを読み込みます:
content/<pack>.md(作成と正確性のルール)+ styles/<style>.md(見た目;そのJSONブロックがエンジンが読み取るプリセット)+ engines/<engine>/README.md(レンダリング方法)。共有ツールは shared/ にあります。
スキルフォルダ (SKILL_DIR) を見つける = このファイルを含むフォルダ。Claude Code はこれをスキルのベースディレクトリとして表示します。他のエージェント:読み込むように指示された SKILL.md のフォルダ。常に "$SKILL_DIR/shared/..." のようにツールを呼び出します(パスにスペースが含まれることが多いため引用符で囲みます)。Python 3.10+ (python3、python、または py -3) を見つけて PY と呼びます。setup_check.py --install の後は、それが出力する venv python を使用します。
タスクリストでユーザーに情報を伝え続けてください。すべての成果物は、ユーザーの作業フォルダ内の videos/<slug>/ に書き込みます(slug = 小文字ハイフン区切りの短い名前)。平易な言葉で説明してください。
このバージョンで動作するもの
| パート | ステータス |
|---|---|
| コンテンツパック | ✅ 聖書 (content/bible.md) · ✅ テクノロジー (content/tech.md) · ✅ 一般的なストーリー/広告 (content/general-story.md) · ✅ 数学/教育 (content/education-math.md) |
| スタイル | エンジンA: ✅ スティックマン · ✅ フラット2D · ✅ 絵本 · ✅ ホワイトボード · ✅ モダンベクター — エンジンB: ✅ Manim (+ ホワイトボード / モダンベクターカラー) — エンジンC: ✅ トゥーン3D — エンジンD: ✅ シネマティック3D |
| エンジン | ✅ A py2d (Python 2D) · ✅ B Manim (LaTeX オプション) · ✅ C トゥーン3D (低速: ティア制限あり) · ✅ D Blender (Eevee プレビュー、Cycles 最終出力は POWER) |
| フォーマット | ✅ 9:16 · ✅ 16:9 · ✅ 1:1 · ✅ 4:5 |
| キャプション | ✅ 常に .srt + スタイル付き焼き込み、単語ハイライト (shared/captions.py) |
| 音声 | ✅ ユーザーの録音 · ✅ Piper TTS (shared/voice.py、無料、オフライン) |
| 音楽/SFX | ✅ 合成 (shared/sound.py) · ✅ ユーザー自身のライセンス済み音楽ファイル |
| エディタプロジェクト | ✅ Kdenlive · ✅ Shotcut · ✅ DaVinci Resolve (FCPXML) · ✅ Blender VSE · 🧪 OpenShot (実験的) · ✅ エディタパック (CapCut、任意のエディタ) |
| ブランドキット | ✅ 保存されたブランド (ユーザーフォルダ)、透かし、ロワーサード、ブランドエンドカード、任意のスタイルへのブランドカラー適用 (shared/brand.py、docs/branding.md) |
| ソフトウェアインストール | ✅ 検証済みの単一レジストリ (shared/tools.yaml) と Windows、macOS、各Linuxファミリ向けのコマンド。承諾なしには決してインストールしません |
ユーザーが 🚧 の項目を選んだ場合は、その旨を明確に伝え、最も近い ✅ のオプションを提案し、それでもスクリプトパッケージは提供します。
ステージ1: 情報収集 (AskUserQuestion、1回の呼び出しにつき最大4質問;既に回答済みのものはスキップ)
呼び出し1
- コンテンツ: 聖書物語 · テクノロジー/プログラミング · 数学/教育 · 一般的なストーリー/広告
- スタイル: まずコンテンツのデフォルトを提案し (聖書 → 絵本 · テクノロジー → モダンベクター · 数学 → Manim · 一般 → フラット2D)、その他2~3のスタイルを提案。素早く軽い作品にはスティックマンを提案。
- フォーマット (複数選択可): 9:16 1080x1920 (TikTok/Reels/Shorts) · 16:9 1920x1080 (YouTube/プロジェクター) · 1:1 1080x1080 · 4:5 1080x1350。
PY shared/formats.py tableでプラットフォーム表を表示。 - 品質: プレビュー (高速、720p) · 本番 (1080p)。最初は必ず5秒のプレビューを推奨。
呼び出し2 (該当するもののみ)
0. ブランディング? なし · 保存されたブランドを使用 (PY "$SKILL_DIR/shared/brand.py" list で一覧表示) · 新しいブランドを作成。新規作成: 各フィールドを一度にひとつずつ尋ね、すべてオプショナル (名前、タグライン、ウェブサイト、ロゴファイル、電話番号、WhatsApp、メール、ソーシャルメディア、色、OFLフォント、CTA) で、それぞれを brand.py set で保存 (電話/メール/URL/色の形式を検証);ロゴは brand.py logo、フォントは brand.py font。連絡先情報を発明しないこと: ユーザーが提供したもののみ (またはユーザー自身のウェブサイトからの確認済みのもの)。次に、docs/branding.md のデフォルト付きのオプション: 透かし (広告/プロモーションON;聖書、テクノロジー、数学はOFF)、コーナー/サイズ/不透明度/ロゴまたはロゴ+名前 · ロワーサード (いつ、どのくらいの長さ) · エンドカード CTA + 連絡先付き (広告/プロモーションON) とその長さ · スタイルをブランドカラーに変更 (はい/いいえ)。
5. トピック/ストーリーと長さ (30秒 · 60秒 · 90秒 · 2~3分;他の長さは「その他」)。コンテンツパックは独自の質問を追加します (聖書: オーディエンス)。
6. 音声: 自分の録音 (デフォルト) · Piper TTS (無料、オフライン;デフォルト音声 en_US-ljspeech-medium、パブリックドメインデータ)。Piper は一度だけインストール (setup_check.py --tts --install) と音声ダウンロード (voice.py --download、約60MB) が必要:最初に確認。
7. キャプションを焼き込む? 9:16 と 1:1 は「はい」を提案 (ほとんどの人がミュートで視聴)、16:9 は「いいえ」。.srt ファイルは常に作成されます。
8. エンドカード「animation-studio で作成」? デフォルトはオフ;オプトインのみ。透かしを追加しないでください。
9. 出力: 完成した MP4 · エディタ用プロジェクトファイル · 両方。
エディタ選択 (出力にプロジェクトファイルが含まれる場合のみ): PY "$SKILL_DIR/shared/tools.py" status --kind editor を実行し、番号付きリスト全体を表示 (✅ インストール済み+バージョン · ❌ 未インストール · ⚠️ ここではサポート外、例: ヘッドレスサーバー上のデスクトップエディタ)。ユーザーは正確に1つを選択します (AskUserQuestion: 最大4つのオプション、インストール済みエディタを最初に;残りは「その他」で文字入力可能)。選択が ❌ の場合、PY "$SKILL_DIR/shared/tools.py" flow <editor> をそのまま表示し (概要、このOS/ディストリビューション/シェル用のインストールコマンド、公式リンク)、次のように尋ねます: 今すぐインストール (実行します) · 自分でインストールするので、"完了"と言います · 別のエディタを選ぶ · スキップ、MP4 + エディタパックを提供。「今すぐインストール」→ tools.py install <editor> --yes (Windows で権限プロンプトが表示される場合や、手順に sudo が必要な場合は事前に伝えます;sudo 手順は ! sudo ... としてユーザーに委ねます)。インストールまたは「完了」の後: status を再度実行し、✅ を確認して、中断したところから続行します。CapCut およびサポート外のエディタにはエディタパックが提供されます。詳細: docs/editors.md。
回答を videos/<slug>/brief.md に記録します。
ステージ2: ハードウェアチェック (レンダリング前、決してスキップしない)
PY "$SKILL_DIR/shared/hwcheck.py" を実行し、その表とティアを1つの短いメッセージで表示します。また、システムプロファイル (OS + バージョン、WSL、Apple Silicon、Linux ディストリビューションとファミリ、パッケージマネージャ、シェル、ディスプレイ) を保存し、後続のすべての手順で読み取ります。表示または実行するすべてのインストールコマンドは、PY "$SKILL_DIR/shared/tools.py" cmd <tool> から取得します (このOS、ディストリビューション、シェルに一致);記憶から入力しないでください。ディスプレイなし (ヘッドレス) → レンダリングのみ:エディタアプリなし。
| ティア | ルール | エンジン | 制限 |
|---|---|---|---|
| LITE | RAM < 12 GB または CPU スレッド < 4 | A, B | 720p のみ;トゥーン3D と Blender はブロック (静止画を提案) |
| STANDARD | 上記の間 | A, B フル;C は5秒プレビューのみ (それ以上は確認+再開が必要);D Eevee は5秒まで、720p、低サンプル | レンダリングジョブ1つ;ワーカー数 = スレッド数 − 2 |
| POWER | RAM ≥ 32 GB + 専用 GPU ≥ 6 GB VRAM | すべて、Cycles は GPU 上 | ワーカー数 = スレッド数 − 1 |
| ラップトップがバッテリー駆動の場合、1分以上のレンダリングの前に警告します。空きRAMが25%未満の場合、大きなアプリを閉じるようユーザーに依頼します。 |
ステージ3: エンジンの選択 (スタイル → エンジン)、その後ファイルを読み込む
| スタイル | エンジン | 読み込み |
|---|---|---|
| スティックマン、フラット2D、絵本、ホワイトボード、モダンベクター | A engines/py2d | styles/<style>.md、engines/py2d/README.md |
| Manim (数学、アルゴリズム、図);ホワイトボード/モダンベクターカラーもここで動作 | B engines/manim | styles/manim.md (または選択したスタイル)、engines/manim/README.md |
| トゥーン3D | C engines/toon3d (story.js + world.js を含むプロジェクトフォルダ) | styles/toon-3d.md、engines/toon3d/README.md |
| シネマティック3D | D engines/blender (scene.json、Z up) | styles/cinematic-3d.md、engines/blender/README.md |
| ティアがエンジンをブロックする場合、理由を説明し、次のオプションを提案します:同じストーリーをエンジンAのスタイルで、または数枚の静止画のみ。ユーザーは明確な警告の後でのみ制限をオーバーライドできます (「これによりコンピューターがフリーズしたり過熱したりする可能性があります。先に作業を保存してください」)。 |
次に content/<pack>.md を読み込み、そのリサーチと作成段階に従います。
ステージ4: スクリプトパッケージ (コンテンツパックのルール)、その後 STOP
すべてのパックが提供するもの: コピー可能なブロック内のナレーション (パックが別途指定しない限り、約 3.7 語/秒) と単語数および長さ → script.txt;ショットリスト → shotlist.md;パックの追加要素 (聖書: 忠実度テーブル、学習ノート、説明);および最後にソース。聖句、引用、API、フラグ、バージョン、事実を決して発明しないでください:それらを取得または実行し、そうでなければ 未検証 とマークします。
その後、ナレーションを引き継ぎ (ユーザーの録音: mp3/wav、音楽なし)、音声を待ちます。ユーザーがスクリプトのみを希望した場合、ここで停止します。
ステージ5: 制作
- セットアップ:
PY "$SKILL_DIR/shared/setup_check.py" --engine <engine>→ ✅/❌ の表。不足しているツール (Blender、Manim、Node、LaTeX、Inkscape...) はエディタと同じフローを使用します:tools.py flow <tool> --for engineを表示し、今すぐインストール · 自分でインストールするので、「完了」と言います · 別のスタイルを選ぶ · スキップ (スクリプト、ショットリスト、参考資料のみ);その後再チェック。Python パッケージはスキル自身の.venvにのみインストールします (--install、承諾後)。 - 音声 + タイミング。 Piper:
PY "$SKILL_DIR/shared/voice.py" script.txt voice.wav --timing work --speed 0.85(正確なフレーズタイム、推測なし)。ユーザーの録音:PY "$SKILL_DIR/shared/timing.py" voice.mp3 script.txt --out work。両方ともwork/words.json+work/phrases.jsonを書き込みます。 - シーン: エンジンA:
videos/<slug>/scene.json;エンジンB:from studio import *で始まる Manim.pyシーン;エンジンC:videos/<slug>/story.js+world.js;エンジンD: Blenderscene.json(形式はエンジンのREADMEに記載)。フレーズごとに1ショット;顔、テキスト、主要プロップは、選択したすべてのフォーマット (shared/formats.md) のセーフゾーン内に保ちます。 - ルックチェック: フォーマットごとに3~6枚の静止画をレンダリング (
--frames 0,60,...)、コンタクトシートを作成 (PY "$SKILL_DIR/shared/sheet.py" sheet.jpg <dirs> --safe <fmt>)、それを表示し、コンテンツパックのルール (聖書: 敬意 + 暴力) に照らして確認します。レンダリング前に修正します。 - 見積り:
PY "$SKILL_DIR/shared/estimate.py" --engine <engine> scene.json --fmt <fmts> --quality <q>(Manim:--engine manim scene.py --name SceneName --timing work/phrases.json;トゥーン3D:--engine toon3d <project folder>;Blender:--engine blender scene.json) →DECISION: OKレンダリング ·ASKユーザーに「約X分、Y GB」と伝え、尋ねます (5秒プレビューを提案) ·REFUSEディスク容量不足 (見積りの2倍必要):ユーザーに空き容量を増やすよう依頼します。 - レンダリング は一度に1フォーマットずつ (2つのジョブを同時に実行しない)。長時間のレンダリングはバックグラウンドで実行;エンジンは低優先度で実行され、再実行時に最後に保存されたフレームから再開し、空きRAMが15%未満になると自身を一時停止します (終了コード4)。ユーザーは作業を続けられることを伝えます。
- 音声: 音楽
PY "$SKILL_DIR/shared/sound.py" music music.wav --seconds <video length> --mood warm|calm|tense|tech|playful、SFX... sfx sfx.wav --seconds <len> --cues cues.json(ポップ、ウィッシュ、タイプ、チャイム、サクセス、スウェル、雨、ソフトサンダー)、その後PY "$SKILL_DIR/shared/mix.py" voice.wav music.wav sfx.wav --music-db -12 --sfx-db -10 --seconds <len>(音楽は音声の下で決して −6 dB より大きくならない;音声が多い、または敬意を表すビデオでは −9 から −12)。ユーザー提供の音楽ファイルは music.wav を置き換えます:権利を所有していることを一度だけ確認します。 7b. ブランド (選択された場合): レンダリング前に色を変更 (brand.py recolor <brand> --style <style> --out style_<brand>.md、これをシーンのスタイルとして使用);レンダリング後、brand.py apply <brand> frames_<fmt> branded_<fmt> --fmt <fmt> [--watermark tr,9,90,logo] [--lower-third a,b] [--end-card 2.5 --cta "..."] [--captions]を使用し、以降はbranded_<fmt>を使用します。エンドカードがある場合は、--seconds <new length>で音声をミックスします。 - キャプション + 仕上げ + QA:
PY "$SKILL_DIR/shared/captions.py" work out/<Title> --style <style> --fmt <fmt> --quality <q>(→.srt+_<fmt>.ass)、その後PY "$SKILL_DIR/shared/finish.py" frames_<fmt> out/<Title>_<fmt>.mp4 --audio mix.wav --quality <q> [--ass out/<Title>_<fmt>.ass] --srt out/<Title>.srt [--end-card オプトインの場合のみ]。QA 行 (黒/静止部分、約 −14 LUFS) を確認し、_qa.jpgシートを確認します。 - エディタプロジェクト (選択された場合):
PY "$SKILL_DIR/shared/editors.py" prepare --frames frames_<fmt> --shots "<f0>-<f1>:<name>,..." --final out/<Title>_<fmt>.mp4 --voice voice.wav --music music.wav --sfx sfx.wav --srt out/<Title>.srt --out videos/<slug>/editorその後... export videos/<slug>/editor/timeline.json --editor <kdenlive|shotcut|openshot|resolve|blender-vse|pack>。そのチェック表を表示します (タイミングが MP4 と一致する必要があります;Kdenlive/Shotcut は2秒の melt レンダリングも取得します)。開き方をユーザーに伝えます (docs/tools/.md)。 - MP4、.srt、エディタプロジェクト (ある場合)、および各ショットが何を示すかを1行で説明したものを提供します。オプションのエンドカードは、ユーザーがオプトインした場合のみ。
安全ルール (常に)
- ステージ2とステップ5 (見積り) なしにレンダリングを開始しないでください。常に「最初に5秒のプレビュー」を提案します。
- ティア制限を尊重します;明確な警告と承諾の後でのみオーバーライドします。
- 一度に1つの重いジョブのみ。ユーザーのファイルを尋ねずに削除または上書きしないでください (既存のフレームフォルダへの再レンダリングは再開されます;
--forceは上書きするので、確認してください)。 - ツールが不足している場合、またはユーザーがインストールを拒否した場合でも、スクリプト、ショットリスト、参考資料は提供します。
クレジットとライセンス
コード: MIT (LICENSE 参照)。バンドルされているサードパーティコードは THIRD_PARTY_NOTICES.md にリストされています。このスキルにはフォント、音楽、画像はバンドルされていません:システムフォントと合成音を使用します。ユーザーのビデオはユーザーのものです:強制的な透かしはありません;エンドカードはオプトインです。