Communitygithub.com

FnSGit/video-craft-skill

任意のトピックを映像化し、コンテンツの形態に応じて最適なレンダリングバックエンドを自動選択します。黒背景のモーショングラフィックスによる概念解説(Remotion)、数式の導出・証明(Manim)、本物のターミナル操作によるコマンドライン教育(asciinema、V2)、製品プロモーション動画(Hyperframes、V3)。レンダラー非依存の共通レイヤー(調査規範、ナレーション原稿原則、TTS音声タイムライン、絵コンテトークン、フレーム読み取りQCスクリプト)、バックエンドルーティング判定木、プラグ可能なレンダリングバックエンド、マルチエージェント並列ビルドプロトコルとQC判定基準を内蔵。

video-craft-skill とは?

video-craftスキルは、ユーザーが指定した任意のトピックをナレーション付きの動画に変換するためのAIエージェントスキルです。コンテンツの形態(概念解説、数式導出、ターミナル操作教育、製品プロモーションなど)に基づいて、最適なレンダリングバックエンド(Remotion、Manim、asciinema、Hyperframes)を自動的にルーティングします。スキルは8段階のパイプライン(プロジェクト作成、調査、ナレーション原稿とタイムライン、絵コンテ、図形要素、プレビュー、並列ビルド、レンダリング、QC、納品)で構成され、各段階でユーザー確認が必要です。レンダラー非依存のコア(core/)とプラグ可能なバックエンド(backends/)に分離されており、複数のエージェントが並行して作業できるプロトコルとQC判定基準を備えています。Claude CodeやCursorなどのAIエージェントプラットフォームで動作し、高品質な教育・解説動画の自動生成を実現します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add FnSGit/video-craft-skill

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

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

ドキュメント

video-craft

任意のトピックを動画にします。まずコンテンツの形態に応じてレンダリングバックエンドを選択し、共有の生産ラインを進みます。

前身は anything2explainer(Remotion 解説動画のみ)でした。今回の分割で、レンダラー非依存のアセットを core/ に、レンダリング関連を backends/ に分離し、新たに routing/ でバックエンド選択を行います。

使用タイミング

  • ユーザーがトピックを指定し、解説・導出・教育・プロモーションのいずれかの動画を希望する場合。または記事を動画に変換したい場合。
  • 適用外:既存の動画の再現、実際の人物によるナレーション、実写主体の動画。

4つの確認ポイント(必ずユーザーの返答を待つ)

  1. 尺・言語+バックエンド推奨(フェーズ1で調査と同時に確認):routing/router.md の判定結果と尺の表をユーザーに提示し、一問二答。ユーザーが推奨を拒否した場合は、その指示に従う。
  2. ナレーション原稿確定(フェーズ2、音声作成前):全文+章分割+文字数/推定尺を提示し、「この原稿で良いですか?」と確認。章名とHUD小節名は別途1行に並べる。複数章の動画では、各章の境界にある2文を並べて表示する。確定後はフレーム番号が全て変わるため、文言は変更しない。
  3. 音声作成(tts_build.py 実行前):デフォルトは中国語 edge-tts 雲希、英語 kokoro am_liam。好みがある場合はユーザーが自作のwavを script/audio.wav に配置し、タイムラインを手入力する。
  4. 最初の30秒サンプル(フェーズ5a、他のグループを割り当てる前):「スタイル/フォントサイズ/ナレーション速度/リズムは適切ですか?」と確認。ここで修正する場合は1グループ分のコスト、全体レンダリング後に修正する場合は全グループ分のコストがかかる。

フロー(8フェーズ)

フェーズ0  プロジェクト作成 → ルーティング結果に応じて対応バックエンドの new_project.sh を呼び出す
フェーズ1  調査      → core/research-brief.md(並列1エージェント)   【確認ポイント1】
フェーズ2  ナレーション+タイムライン → core/narration-guidance.md + tts_build.py 【確認ポイント2、3】
フェーズ3  絵コンテ    → バックエンドの形式に従って記述、core/render_storyboard.py
フェーズ4  図形要素    → バックエンドに応じて追加(remotion: ui.tsx / manim: figures.py)
フェーズ5a プレビュー   → 最初の1グループを作成、preview.sh で最初の30秒を出力 【確認ポイント4】
フェーズ5b 並列ビルド   → 各グループ1エージェント、バックエンドの agent-build-rules.md を使用
フェーズ6  レンダリング  → バックエンドの render.sh → mp4 + fin_frames/
フェーズ7  QCと修正    → core/motion_check.py + frame_metrics.py + バックエンドの qc-rules
フェーズ8  納品      → 納品説明.md(使用バックエンドと判定理由を記録)

ルーティング:まずバックエンドを選択

routing/router.md を必読。 簡易版:

コンテンツ形態バックエンドステータス
連続的な数式導出/証明/記号変形manim✅ V1
概念解説(Xとは何か/仕組み/理由)remotion✅ V1
実際のターミナル操作教育(インストール/設定/コマンド実行)terminal⏸ V2
製品プロモーション/ソーシャル動画/PRウォークスルーhyperframes⏸ V3

判定はトピック名ではなく、ナレーションが連続的に記号を操作しているかどうかで判断:「フーリエ変換が何をするか」→ remotion(直感的説明);「フーリエ級数からフーリエ変換を導出」→ manim(連続導出)。

未実装のバックエンドが選択された場合、必ずユーザーに通知し、代替案を説明する。 黙ってバックエンドを変更してはならない。

前提依存関係(新規マシンで必読)

全バックエンド共通

# core/ の Python スクリプトに必要。3.13 で venv を作成(3.14 は wheel 不足のリスクあり)
uv venv --python 3.13 ~/.venvs/video-craft
uv pip install --python ~/.venvs/video-craft/bin/python numpy pillow scipy edge-tts

⚠ この venv がないと、tts_build.py / motion_check.py / frame_metrics.py が全て動作しません。これは anything2explainer で踏んだ落とし穴です:文書化されていない venv 依存関係により、新規マシンで全フローが停止しました。

remotion バックエンド

brew install ffmpeg          # フレーム抽出用
# Node 22+;プロジェクトは new_project.sh が自動的に npm install を実行

manim バックエンド

brew install pkg-config cairo pango     # pycairo コンパイルに必須。不足すると manim がインストール不可
brew install --cask basictex            # MathTex による本格的な数式組版に必須。不足すると ASCII 近似にフォールバック

basictex をインストールしなくても動作は可能(自動的に MANIM_TEX=text になる)が、数式は a/b のような ASCII 近似のみとなります。導出動画では basictex を必ずインストールしてください——数式組版の品質は導出動画の生命線です。

ディレクトリ構成

video-craft/
├── SKILL.md                   ← 本ファイル
├── routing/
│   └── router.md              バックエンド判定木+オーバーライド機構+境界ケース
├── core/                      レンダラー非依存、全バックエンド共通
│   ├── research-brief.md          調査フローと事実に関するルール
│   ├── narration-guidance.md      13のナレーション原稿原則
│   ├── narration-storyboard.md    ナレーション/絵コンテ形式とトークンシステム
│   ├── tts_build.py               音声+timeline.json
│   ├── render_storyboard.py       絵コンテトークン置換
│   ├── motion_check.py            リズムQC(フレーム読み取り、バックエンド間共通)
│   ├── frame_metrics.py           構図QC(フレーム読み取り、バックエンド間共通)
│   ├── sheet.py                   サムネイルグリッド(フレーム読み取り)
│   └── lessons.md                 失敗事例と根本原因
└── backends/
    ├── remotion/              概念解説動画(旧 anything2explainer)
    │   ├── template/               React プロジェクト
    │   ├── scripts/                render/preview/still/test_render/new_project/selfcheck
    │   ├── reference/              style-guide/motion-vocabulary/composition-and-light/
    │   │                            agent-build-rules/agent-qc-rules/prompts/math-physics
    │   └── examples/rag/           サンプル動画(品質基準)
    ├── manim/                 導出動画
    │   ├── template/               Python プロジェクト(common/ + scenes/)
    │   ├── scripts/
    │   ├── reference/
    │   └── README.md               環境実測結果(cairo/latex/pycairo)
    ├── hyperframes/           V3 予約
    │   └── README.md
    └── terminal/              V2 予約(ユーザー確認済み、必須)
        └── README.md

コアファイル早見表

目的使用ファイル
使用するバックエンドを判定routing/router.md
調査エージェントの割り当てcore/research-brief.md
ナレーション原稿の作成最初に core/narration-guidance.md を読み、形式は core/narration-storyboard.md を参照
音声+タイムラインの生成core/tts_build.py
絵コンテ表の生成core/render_storyboard.py
リズムQCcore/motion_check.py
構図QCcore/frame_metrics.py
完成動画の通し確認core/sheet.py
プロジェクト作成backends/<バックエンド>/scripts/new_project.sh
ビルドエージェントの割り当てbackends/<バックエンド>/reference/agent-build-rules.md
QCエージェントの割り当てbackends/<バックエンド>/reference/agent-qc-rules.md

バックエンド固有の絵コンテ形式

バックエンド絵コンテ単位形式
remotion1カット(ナレーション1文につき1画面)backends/remotion/reference/narration-storyboard.md の {S12.from-8} トークン
manim1つの導出ステップbackends/manim/reference/storyboard.md のDP形式

QC閾値はバックエンドごとに調整

core/motion_check.py のデフォルト閾値は remotion 概念解説動画向けに設定されています。他のバックエンドでは調整が必要です:

# remotion(デフォルト)
python3 core/motion_check.py --frames fin_frames

# manim 導出動画:静止上限を5秒に緩和(操作後に確認する時間を確保)、hold判定をオフ(離脱概念なし)
python3 core/motion_check.py --frames fin_frames --shots DP01:1-170 --still-max 5.0 --no-hold

# terminal 教育動画(V2):コマンド出力待ちで静止時間が長くなるため、8-10秒程度を見込む

ハードルール(全バックエンド共通)

  1. オリジナル:画面は全てコードで描画または実際の録画によるもの。既存の動画のフレームやクリップを使用してはならない。
  2. 事実には出典を:画面上の全ての数字、用語、年号、人名は、調査ドキュメント内に出典URLが存在しなければならない。
  3. 動画全体で1つの一貫したサンプルコンテキスト:ナレーションと画面で同じサンプルを使い続ける。
  4. 確定後は文言を変更しない:フレーム番号がハードコードされるため、1文字変更すると動画全体の位置合わせがやり直しになる。
  5. バックエンドをユーザーに通知:ルーティング判定結果と代替案は、必ずユーザーに知らせる。黙って決定してはならない。

サンプル動画と品質基準

  • remotion バックエンド:backends/remotion/examples/rag/(4分35秒、44文、44カット) —— 作業開始前に examples/rag/frames/overview_*.jpg を確認し、品質基準を設定する。
  • manim バックエンド:V1にサンプル動画はなし、最小限の動作確認のみ。完全な品質基準サンプルはV2で追加予定。
  • 悪い例:backends/remotion/examples/contrast/

anything2explainer から移行したプロジェクト

~/Projects/ai-video/ 以下の linear-function / transformer / a2e-fourier / py-course は元のスキルで作成されたもので、旧レイアウト(template/scripts/)のままです。これらは引き続き使用可能です。元のスキルは非推奨状態として保持し、削除しないでください。

新しいプロジェクトは、必ず本スキルの新しいレイアウトを使用してください。

関連スキル