manim-video について
Manim Community Editionで教育アニメーションや解説動画を制作するワークフローです。数学、アルゴリズム、データ、システム、研究内容の可視化を想定し、シーン計画、レンダリング、結合、任意の音声追加までを扱います。
主な機能
- 01ストーリー展開とシーン構成の計画
- 02数式、アルゴリズム、データ、システムのアニメーション化
- 03Manim Community Editionでのシーン描画
- 04ffmpegによるクリップ結合
- 05任意のナレーションや音楽の追加
- 06計画に沿ったプレビュー画像の確認
活用シーン
- 01数学の概念を視覚的に説明
- 02アルゴリズムの動作を段階的に表示
- 03指標を動きのあるデータストーリーにする
- 04研究成果やシステム構成を紹介
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nousresearch/ hermes-agent --skill manim-videoインストール後、Claude Code で/manim-videoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/animation-design-thinking.mdanimations.mdcamera-and-3d.mddecorations.mdequations.mdgraphs-and-data.mdmobjects.mdpaper-explainer.mdproduction-quality.mdrendering.mdscene-planning.mdtroubleshooting.mdupdaters-and-trackers.mdvisual-design.mdscripts/setup.sh詳細
Manim 動画制作パイプライン
使用する場面
アニメーションによる解説、数学のアニメーション、概念の視覚化、アルゴリズムのウォークスルー、技術解説、3Blue1Brown スタイルの動画、または幾何学・数学的な内容を扱うプログラムによるアニメーションをユーザーが求めた場合に使用します。Manim Community Edition を使って、3Blue1Brown スタイルの解説動画、アルゴリズムの視覚化、方程式の導出、アーキテクチャ図、データストーリーを作成します。
クリエイティブ基準
これは教育映画です。すべてのフレームが学びにつながります。すべてのアニメーションが構造を明らかにします。
コードを一行でも書く前に、物語の流れを明確にしてください。どのような誤解を解消しますか?「なるほど」と思う瞬間はどこですか?どのような視覚的な物語で、視聴者を混乱から理解へと導きますか?ユーザーのプロンプトは出発点にすぎません。教育的な意欲をもって解釈してください。
代数より幾何を先に。 まず形を見せ、次に方程式を示します。視覚的な記憶は記号的な記憶よりも速く定着します。視聴者が公式より先に幾何学的なパターンを見ることで、方程式に納得感が生まれます。
初回レンダリングの品質は妥協できません。 修正を重ねなくても、出力は視覚的にわかりやすく、まとまりのある美しさを備えている必要があります。ごちゃついていたり、タイミングが悪かったり、「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 スクリプトを 1 つ使用します。ブラウザーも Node.js も GPU も必要ありません。
| レイヤー | ツール | 用途 |
|---|---|---|
| コア | Manim Community Edition | シーンのレンダリング、アニメーションエンジン |
| 数学 | LaTeX(texlive/MiKTeX) | MathTex による方程式のレンダリング |
| 動画 I/O | ffmpeg | シーンの結合、形式変換、音声の多重化 |
| TTS | ElevenLabs/Qwen3-TTS(任意) | ナレーションの音声収録 |
パイプライン
PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
- 計画 — ストーリー展開、シーン一覧、視覚要素、カラーパレット、ナレーション台本を含む
plan.mdを作成します - コーディング — 各シーンにつき1つのクラスを含み、それぞれを個別にレンダリングできる
script.pyを作成します - レンダリング — 下書きには
manim -ql script.py Scene1 Scene2 ...、本番には-qhを実行します - 結合 — ffmpeg でシーンクリップを結合し、
final.mp4を作成します - 音声(任意)— ffmpeg でナレーションや BGM を追加します。
references/rendering.mdを参照してください - レビュー — プレビュー画像をレンダリングし、計画と照合して調整します
プロジェクト構成
project-name/
plan.md # Narrative arc, scene breakdown
script.py # All scenes in one file
concat.txt # ffmpeg scene list
final.mp4 # Stitched output
media/ # Auto-generated by 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.5s | 1.0s |
| 重要な数式の表示 | 2.0s | 2.0s |
| 変形/モーフィング | 1.5s | 1.5s |
| 補足ラベル | 0.8s | 0.5s |
| FadeOut によるクリーンアップ | 0.5s | 0.3s |
| 「なるほど」の瞬間の表示 | 2.5s | 3.0s |
タイポグラフィのサイズ
| 役割 | フォントサイズ | 用途 |
|---|---|---|
| タイトル | 48 | シーンタイトル、冒頭のテキスト |
| 見出し | 36 | シーン内のセクション見出し |
| 本文 | 30 | 説明テキスト |
| ラベル | 24 | 注釈、軸ラベル |
| キャプション | 20 | 字幕、注記 |
フォント
すべてのテキストに等幅フォントを使用してください。 Manim の Pango レンダラーでは、プロポーショナルフォントを使うと、どのサイズでもカーニングが崩れます。詳しい推奨事項は references/visual-design.md を参照してください。
MONO = "Menlo" # define once at top of file
Text("Fourier Series", font_size=48, font=MONO, weight=BOLD) # titles
Text("n=1: sin(x)", font_size=20, font=MONO) # labels
MathTex(r"\nabla L") # math (uses 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 # draft
manim -qh script.py Scene1_Introduction Scene2_CoreConcept # production
ステップ 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 # preview still
実装上の重要事項
LaTeX には raw 文字列を使用
# WRONG: MathTex("\frac{1}{2}")
# RIGHT:
MathTex(r"\frac{1}{2}")
画面端のテキストでは buff >= 0.5 にする
label.to_edge(DOWN, buff=0.5) # never < 0.5
テキストを置き換える前に FadeOut する
self.play(ReplacementTransform(note1, note2)) # not Write(note2) on top
追加されていない mobject をアニメーションしない
self.play(Create(circle)) # must add first
self.play(circle.animate.set_color(RED)) # then animate
パフォーマンス目標
| 品質 | 解像度 | FPS | 所要時間 |
|---|---|---|---|
-ql(下書き) | 854x480 | 15 | 5-15s/シーン |
-qm(中画質) | 1280x720 | 30 | 15-60s/シーン |
-qh(本番) | 1920x1080 | 60 | 30-120s/シーン |
常に -ql で反復作業を行ってください。最終出力の場合にのみ -qh でレンダリングします。
参考資料
| ファイル | 内容 |
|---|---|
references/animations.md | 基本的なアニメーション、レート関数、合成、.animate 構文、タイミングパターン |
references/mobjects.md | テキスト、図形、VGroup/Group、配置、スタイル設定、カスタム mobject |
references/visual-design.md | 12 のデザイン原則、不透明度のレイヤリング、レイアウトテンプレート、カラーパレット |
references/equations.md | Manim での LaTeX、TransformMatchingTex、導出パターン |
references/graphs-and-data.md | 軸、グラフ描画、BarChart、アニメーション付きデータ、アルゴリズムの可視化 |
references/camera-and-3d.md | MovingCameraScene、ThreeDScene、3D サーフェス、カメラ制御 |
references/scene-planning.md | 物語の展開、レイアウトテンプレート、シーン遷移、計画テンプレート |
references/rendering.md | CLI リファレンス、品質プリセット、ffmpeg、ボイスオーバーのワークフロー、GIF のエクスポート |
references/troubleshooting.md | LaTeX エラー、アニメーションエラー、よくある間違い、デバッグ |
references/animation-design-thinking.md | アニメーションと静止表示の使い分け、分解、ペース配分、ナレーションとの同期 |
references/updaters-and-trackers.md | ValueTracker、add_updater、always_redraw、時間ベースのアップデーター、パターン |
references/paper-explainer.md | 研究論文をアニメーションにする — ワークフロー、テンプレート、分野ごとのパターン |
references/decorations.md | SurroundingRectangle、Brace、矢印、DashedLine、Angle、注釈のライフサイクル |
references/production-quality.md | コーディング前、レンダリング前、レンダリング後のチェックリスト、空間レイアウト、色、テンポ |
クリエイティブな発想の転換(実験的/創造的/独自の出力をユーザーが求めている場合のみ使用)
ユーザーが創造的、実験的、または型破りな説明方法を求めている場合は、アニメーションを設計する前に戦略を選び、その考え方を整理してください。
- SCAMPER — 標準的な説明に新たな視点を加えたい場合
- 前提の逆転 — 何かが通常どのように教えられるかに疑問を投げかけたい場合
SCAMPER による変換
標準的な数学/技術の可視化を、次のように変換します。
- 置き換える:標準的な視覚的メタファーを置き換えます(数直線 → うねる道、行列 → 街区)
- 組み合わせる:2 つの説明方法を統合します(代数的手法と幾何学的手法を同時に使う)
- 逆転する:逆向きに導出します — 結果から始め、公理へと分解します
- 変更する:パラメーターを極端に変えて、その重要性を示します(学習率を10倍にする、サンプル数を1000倍にする)
- 取り除く:すべての記法を取り除きます — アニメーションと空間的な関係だけで説明します
前提の逆転
- このトピックの可視化で「標準」とされる要素を列挙します(左から右、2D、離散ステップ、形式的な記法)
- 最も根本的な前提を選びます
- それを逆転させます(右から左への導出、2D の概念を3Dに埋め込む、ステップの代わりに連続的に変形させる、記法をゼロにする)
- 逆転によって、標準的な方法では隠れている何が明らかになるかを探ります