Hermes Agent Wiki 非公式・日本語wiki
この skill をそのまま使う: GitHub で原文を見る

英語原文・frontmatter 込みで、Hermes が読み込む実体そのままです(このページの本文は日本語版)。

Manim Video

目次

Manim CE のアニメーションで、3Blue1Brown 風の数学・アルゴリズム動画を作ります。

skill の情報

提供元 最初から入っています
パス skills/creative/manim-video
バージョン 1.0.0
作者 SHL0MS, Hermes Agent
ライセンス MIT
対応プラットフォーム linux, macos, windows
タグ Manim, Animation, Math, Video

参考: SKILL.md 全文

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 による数式の描画
動画の入出力 ffmpeg シーンの連結、形式の変換、音声の多重化
TTS ElevenLabs / Qwen3-TTS(任意) ナレーションの吹き込み

全体の流れ

PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
  1. PLANplan.md に話の流れ、シーンの一覧、使う要素、配色、ナレーション原稿を書きます
  2. CODEscript.py を書きます。シーンごとに 1 クラスとし、それぞれ単独で描画できるようにします
  3. RENDER — 下描きは manim -ql script.py Scene1 Scene2 ...、本番は -qh を使います
  4. STITCH — ffmpeg の concat で各シーンをつなぎ、final.mp4 にします
  5. AUDIO(任意)— ffmpeg でナレーションや背景音楽を足します。references/rendering.md を見てください
  6. REVIEW — 静止画のプレビューを出し、計画と突き合わせて手を入れます

プロジェクトの構成

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/

見た目の作り方

配色

配色 背景 主役 脇役 差し色 向いている題材
Classic 3B1B #1C1C1C #58C4DD (BLUE) #83C167 (GREEN) #FFFF00 (YELLOW) 数学・情報科学全般
Warm academic #2D2B55 #FF6B6B #FFD93D #6BCB77 親しみやすく
Neon tech #0A0A0A #00F5FF #FF00FF #39FF14 システム、構成
Monochrome #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 1 シーンあたり 5〜15 秒
-qm(中) 1280x720 30 1 シーンあたり 15〜60 秒
-qh(本番) 1920x1080 60 1 シーンあたり 30〜120 秒

作り込みは必ず -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 による変換

定番の数学的・技術的な可視化を、次のように変換します。

  • 置き換える: 定番の視覚的な比喩を差し替える(数直線 → 曲がりくねった道、行列 → 街区の地図)
  • 組み合わせる: 二つの説明の仕方を重ねる(代数と幾何を同時に)
  • 逆にする: 逆向きに導く。結果から出発して公理まで分解する
  • 変形する: 効き目を見せるためにパラメータを誇張する(学習率を 10 倍、標本数を 1000 倍)
  • 取り除く: 記号をすべて消し、動きと空間の関係だけで説明する

前提の反転

  1. この題材の可視化で「当たり前」とされていることを挙げます(左から右へ、2D、離散的な段階、形式的な記法)
  2. その中でいちばん根っこにある前提を選びます
  3. それを反転させます(右から左へ導く、2D の概念を 3D に埋め込む、段階ではなく連続的に変形する、記法をいっさい使わない)
  4. 反転によって、定番のやり方では隠れていた何が見えるようになるかを探ります