Communitygithub.com

Manim 動画制作パイプライン

Manim Community Edition を使用した数学的・技術的アニメーションの制作パイプライン。3Blue1Brown スタイルの解説動画、アルゴリズム可視化、方程式導出、アーキテクチャ図、データストーリーを作成します。

Manim 動画制作パイプライン とは?

このスキルは、Manim Community Edition を用いて高品質な数学・技術アニメーションを制作するための完全なパイプラインを提供します。3Blue1Brown スタイルの解説動画、アルゴリズムのステップバイステップ可視化、方程式導出、アーキテクチャ図、データストーリーなど、教育的な映像制作を支援します。 ユーザーが「アニメーション解説」「数式アニメーション」「概念可視化」「アルゴリズム解説」などをリクエストした際に、このパイプラインが活用されます。 スキルは、PLAN(計画)→ CODE(コーディング)→ RENDER(レンダリング)→ STITCH(結合)→ AUDIO(音声、オプション)→ REVIEW(レビュー)の6ステップからなり、各ステップの実践的なガイドラインと参考文献が含まれています。 色パレット、アニメーション速度、タイポグラフィスケールなどの視覚的一貫性を保つための詳細なクリエイティブディレクションも提供し、教育的な映像制作に必要なすべての側面をカバーします。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shashi-ai10/Manim-Skill-Project-Integration/tree/HEAD/manim-skill-main/skills/manim-video

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

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

ドキュメント

Manim 動画制作パイプライン は何をしますか?

クリエイティブスタンダード

これは教育的な映像作品です。すべてのフレームが教え、すべてのアニメーションが構造を明らかにします。

コードを一行書く前に、ナラティブの弧を明確にしてください。このアニメーションはどのような誤解を正すのか?「aha モーメント」はどこか?どのような視覚的な物語が視聴者を混乱から理解へと導くのか?ユーザーのプロンプトは出発点です — 教育的な野心を持って解釈してください。

代数よりも幾何を優先せよ。 数式の前に形を示し、方程式はその後に置く。視覚的記憶は記号的記憶より速くエンコードされます。視聴者が公式の前に幾何学パターンを見れば、方程式は自然に理解されます。

初回レンダリングでの完成度は譲れない。 出力は、修正ラウンドなしで視覚的に明確で美的にまとまっている必要があります。ごちゃごちゃしていたり、タイミングが悪かったり、「AI が生成したスライド」のように見えるものは不合格です。

不透明度の階層で注意を誘導する。 すべての要素を最大輝度で表示してはいけません。主要要素は 1.0、文脈要素は 0.4、構造要素(軸、グリッド)は 0.15。脳は視覚的顕著性を階層で処理します。

間合いをとる。 すべてのアニメーションの後には self.wait() が必要です。視聴者は表示されたものを吸収する時間を必要とします。次から次へとアニメーションを急いでつなげてはいけません。重要なリビールの後の 2 秒のポーズは決して無駄になりません。

一貫した視覚言語。 すべてのシーンでカラーパレット、タイポグラフィのサイズ、アニメーション速度を統一する。技術的には正しくても、シーンごとにランダムな色を使ったビデオは美的に失敗です。

前提条件

scripts/setup.sh を実行してすべての依存関係を確認します。必要なもの: Python 3.10+、Manim Community Edition v0.20+ (pip install manim)、LaTeX(Linux では texlive-full、macOS では mactex)、ffmpeg。リファレンスドキュメントは Manim CE v0.20.1 でテスト済みです。

モード

モード入力出力リファレンス
概念解説トピック/概念幾何学的直観を伴うアニメーション解説references/scene-planning.md
方程式導出数式表現ステップバイステップのアニメーション証明references/equations.md
アルゴリズム可視化アルゴリズムの説明データ構造を用いたステップ実行references/graphs-and-data.md
データストーリーデータ/メトリクスアニメーションチャート、比較、カウンターreferences/graphs-and-data.md
アーキテクチャ図システム説明コンポーネントを接続しながら構築references/mobjects.md
論文解説研究論文主要な発見と手法をアニメーション化references/scene-planning.md
3D可視化3Dコンセプト回転する曲面、パラメトリック曲線、空間幾何学references/camera-and-3d.md

スタック

プロジェクトごとに単一の Python スクリプト。ブラウザ不要、Node.js 不要、GPU 不要。

レイヤーツール目的
コアManim Community Editionシーン描画、アニメーションエンジン
数式LaTeX (texlive/MiKTeX)MathTex による方程式レンダリング
ビデオI/Offmpegシーンステッチング、フォーマット変換、音声多重化
TTSElevenLabs / Qwen3-TTS (オプション)ナレーションボイスオーバー

パイプライン

計画 --> コーディング --> レンダリング --> 結合 --> 音声(オプション) --> レビュー
  1. 計画 — ナラティブの弧、シーンリスト、視覚要素、カラーパレット、ボイスオーバースクリプトを記述した plan.md を作成
  2. コーディング — シーンごとに 1 クラス、それぞれ独立してレンダリング可能な script.py を作成
  3. レンダリング — ドラフトは manim -ql script.py Scene1 Scene2 ...、プロダクションは -qh
  4. 結合 — ffmpeg でシーンクリップを結合して final.mp4 を作成
  5. 音声 (オプション) — ffmpeg でナレーションや BGM を追加。references/rendering.md を参照
  6. レビュー — プレビュー静止画をレンダリングし、計画と照合、調整

プロジェクト構造

project-name/
  plan.md                # ナラティブの弧、シーン内訳
  script.py              # すべてのシーンを 1 ファイルに
  concat.txt             # ffmpeg シーンリスト
  final.mp4              # 結合済み出力
  media/                 # Manim が自動生成
    videos/script/480p15/

クリエイティブディレクション

カラーパレット

パレット背景プライマリセカンダリアクセントユースケース
クラシック 3B1B#1C1C1C#58C4DD (青)#83C167 (緑)#FFFF00 (黄)一般数学/CS
温かみのある学術#2D2B55#FF6B6B#FFD93D#6BCB77親しみやすい
ネオンテック#0A0A0A#00F5FF#FF00FF#39FF14システム、アーキテクチャ
モノクロ#1A1A2E#EAEAEA#888888#FFFFFFミニマリスト

アニメーション速度

コンテキストrun_timeその後の self.wait()
タイトル/イントロ出現1.5秒1.0秒
重要な方程式のリビール2.0秒2.0秒
変形/モーフィング1.5秒1.5秒
補助ラベル0.8秒0.5秒
FadeOut によるクリーンアップ0.5秒0.3秒
「aha モーメント」リビール2.5秒3.0秒

タイポグラフィスケール

役割フォントサイズ使用法
タイトル48シーンタイトル、冒頭テキスト
見出し36シーン内のセクションヘッダー
本文30説明テキスト
ラベル24注釈、軸ラベル
キャプション20字幕、細かい注釈

フォント

すべてのテキストに等幅フォントを使用すること。 Manim の Pango レンダラーは、プロポーショナルフォントではすべてのサイズでカーニングが壊れます。詳細は references/visual-design.md を参照してください。

MONO = "Menlo"  # ファイル先頭で一度定義

Text("フーリエ級数", font_size=48, font=MONO, weight=BOLD)  # タイトル
Text("n=1: sin(x)", font_size=20, font=MONO)               # ラベル
MathTex(r"\nabla L")                                         # 数式(LaTeX を使用)

読みやすさのための最小 font_size=18。

シーンごとのバリエーション

すべてのシーンで同一の設定を使用しないこと。各シーンで:

  • パレットから異なるドミナントカラー
  • 異なるレイアウト — 常に中央に配置しない
  • 異なるアニメーション開始方法 — Write、FadeIn、GrowFromCenter、Create を変化させる
  • 異なる視覚的重み — 密度の高いシーンと疎なシーンを設ける

ワークフロー

ステップ1: 計画 (plan.md)

コードの前に、plan.md を作成します。包括的なテンプレートについては references/scene-planning.md を参照してください。

ステップ2: コーディング (script.py)

シーンごとに 1 クラス。すべてのシーンは独立してレンダリング可能です。

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("なぜこれが機能するのか?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("なぜこれが機能するのか?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

重要なパターン:

  • すべてのアニメーションに字幕を付ける: self.add_subcaption("テキスト", duration=N) または self.play() の subcaption="テキスト" を使用
  • ファイル先頭で色定数を共有し、シーン間で一貫性を保つ
  • すべてのシーンで self.camera.background_color を設定する
  • クリーンな終了 — シーン終了時にすべての mobject を FadeOut する: self.play(FadeOut(Group(*self.mobjects)))

ステップ3: レンダリング

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # ドラフト
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # プロダクション

ステップ4: 結合

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

ステップ5: レビュー

manim -ql --format=png -s script.py Scene2_CoreConcept  # プレビュー静止画

重要な実装ノート

LaTeX には Raw 文字列を使用

# 間違い: MathTex("\frac{1}{2}")
# 正しい:
MathTex(r"\frac{1}{2}")

端のテキストには buff >= 0.5

label.to_edge(DOWN, buff=0.5)  # 0.5 未満にしない

テキスト置換前には FadeOut

self.play(ReplacementTransform(note1, note2))  # 上から Write(note2) しない

未追加の Mobject をアニメーションしない

self.play(Create(circle))  # 最初に追加する必要がある
self.play(circle.animate.set_color(RED))  # その後にアニメーション

パフォーマンス目標

品質解像度FPS速度
-ql (ドラフト)854x480155-15秒/シーン
-qm (中品質)1280x7203015-60秒/シーン
-qh (プロダクション)1920x10806030-120秒/シーン

常に -ql でイテレーションします。最終出力のみ -qh でレンダリングします。

参考文献

ファイル内容
references/animations.mdコアアニメーション、レート関数、合成、.animate 構文、タイミングパターン
references/mobjects.mdテキスト、図形、VGroup/Group、配置、スタイリング、カスタム mobject
references/visual-design.md12のデザイン原則、不透明度階層、レイアウトテンプレート、カラーパレット
references/equations.mdManim での LaTeX、TransformMatchingTex、導出パターン
references/graphs-and-data.md軸、プロット、BarChart、アニメーションデータ、アルゴリズム可視化
references/camera-and-3d.mdMovingCameraScene、ThreeDScene、3D サーフェス、カメラ制御
references/scene-planning.mdナラティブの弧、レイアウトテンプレート、シーン遷移、計画テンプレート
references/rendering.mdCLI リファレンス、品質プリセット、ffmpeg、ボイスオーバーワークフロー、GIF エクスポート
references/troubleshooting.mdLaTeX エラー、アニメーションエラー、よくある間違い、デバッグ
references/animation-design-thinking.mdアニメーション vs 静的表示の使い分け、分解、ペーシング、ナレーション同期
references/updaters-and-trackers.mdValueTracker、add_updater、always_redraw、時間ベースのアップデータ、パターン
references/paper-explainer.md研究論文をアニメーションに変換 — ワークフロー、テンプレート、ドメインパターン
references/decorations.mdSurroundingRectangle、Brace、矢印、DashedLine、Angle、注釈のライフサイクル
references/production-quality.mdコード前、レンダリング前、レンダリング後のチェックリスト、空間レイアウト、色、テンポ

クリエイティブな発展(ユーザーが実験的/クリエイティブ/ユニークな出力を要求した場合のみ使用)

ユーザーがクリエイティブ、実験的、または型にはまらない説明方法を求める場合、アニメーションをデザインする前に戦略を選択し、その理由を明確にしてください。

  • SCAMPER — ユーザーが標準的な説明に新しい視点を求めるとき
  • 前提の逆転 — ユーザーが典型的な教え方に挑戦したいとき

SCAMPER 変換

標準的な数学/技術的可視化を変換します:

  • 代替 (Substitute): 標準の視覚的メタファーを置き換える(数直線 → 曲がりくねった道、行列 → 都市グリッド)
  • 結合 (Combine): 2 つの説明アプローチを融合する(代数的 + 幾何学的を同時に)
  • 逆転 (Reverse): 結果から始めて公理にまで分解する逆方向の導出
  • 修正 (Modify): パラメータを誇張してその重要性を示す(学習率を10倍、サンプルサイズを1000倍)
  • 削除 (Eliminate): すべての記法を削除し、アニメーションと空間関係のみで説明する

前提の逆転

  1. このトピックがどのように可視化されるかの「標準」をリストアップする(左から右、2D、離散ステップ、形式的記法)
  2. 最も基本的な前提を選ぶ
  3. それを逆転する(右から左への導出、2D 概念の 3D 埋め込み、ステップではなく連続的な変形、記法ゼロ)
  4. 逆転によって、標準アプローチが隠している何が明らかになるかを探る

関連スキル