Communitygithub.com

manim-video

Manim CE アニメーション:3Blue1Brown スタイルの数学・アルゴリズム動画を作成します。

manim-video とは?

このスキルは、Manim Community Edition を使用して 3Blue1Brown スタイルの教育用アニメーション動画を制作するための完全なパイプラインを提供します。数学の概念説明、方程式の導出、アルゴリズムの可視化、アーキテクチャ図、データストーリーなど、幾何学的・数学的内容をプログラムでアニメーション化するリクエストに最適です。 パイプラインは PLAN → CODE → RENDER → STITCH → AUDIO → REVIEW の6段階で構成され、各シーンは独立した Python クラスとして実装します。レンダリングには ffmpeg を使用し、ElevenLabs や Qwen3-TTS による音声ナレーションをオプションで追加できます。 特徴として、教育的な物語設計(ナラティブアーク)を重視し、幾何学的直感を先に示してから数式を導入する「幾何学が先、代数は後」の原則を採用。カラーパレットやアニメーション速度、フォントサイズなどの一貫した視覚言語を定義し、プロフェッショナルな品質を確保します。 各シーンは独立してレンダリング可能で、低解像度(-ql)で素早くイテレーションし、最終出力のみ高解像度(-qh)でレンダリングする効率的なワークフローを提供します。また、クリエイティブな出力が求められる場合には SCAMPER や Assumption Reversal などの発想法も用意されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/David2024patton/custom-skills-public/tree/main/skills/creative/manim-video

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

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

ドキュメント

Manim 動画制作パイプライン

使用タイミング

以下のリクエストに使用します:アニメーション説明、数学アニメーション、概念の可視化、アルゴリズムのウォークスルー、技術解説、3Blue1Brown スタイルの動画、または幾何学的・数学的な内容を含むプログラムによるアニメーション。Manim Community Edition を使用して、3Blue1Brown スタイルの解説動画、アルゴリズム可視化、方程式導出、アーキテクチャ図、データストーリーを作成します。

クリエイティブ基準

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

コードを1行も書く前に、物語の弧(ナラティブアーク)を明確にしてください。これが修正する誤解は何ですか?「アハ体験」はどこですか?視聴者を混乱から理解へ導く視覚的なストーリーは何ですか?ユーザーのプロンプトは出発点です — 教育的な野心を持って解釈してください。

幾何学が先、代数は後。 形を先に示し、方程式は後で。視覚記憶は象徴記憶より速くエンコードされます。視聴者が数式の前に幾何学的パターンを見ると、方程式が自然に感じられます。

初回レンダリングでの品質は譲れません。 出力は視覚的に明確で美観的に一貫しており、修正の手間をかける必要はありません。ごちゃごちゃしていたり、タイミングが悪かったり、「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 でナレーションや背景音楽を追加。references/rendering.md を参照
  6. レビュー — プレビュースチルをレンダリングし、計画と照合、調整

プロジェクト構造

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

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

カラーパレット

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

アニメーション速度

コンテキストrun_time後の self.wait()
タイトル/イントロ表示1.5s1.0s
重要な方程式の表示2.0s2.0s
変形/モーフ1.5s1.5s
補助ラベル0.8s0.5s
FadeOut クリーンアップ0.5s0.3s
「アハ体験」表示2.5s3.0s

タイポグラフィスケール

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

フォント

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

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

Text("Fourier Series", 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("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", 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("text", duration=N) または self.play() に subcaption="text"
  • ファイル先頭に共有色定数を定義してシーン間の一貫性を確保
  • すべてのシーンで 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アニメーションと静的表示の使い分け、分解、ペーシング、ナレーション同期
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. この逆転が、標準的なアプローチでは隠れていた何を明らかにするかを探る

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル