Communitygithub.com

manimgl-best-practices

ManimGL(3Blue1Brown版)のベストプラクティス、ルール、テンプレートをまとめた開発支援スキル。シーン作成、アニメーション、3D、対話型開発などをカバー。

manimgl-best-practices とは?

このスキルは、ManimGL(3Blue1Brownによる数学アニメーションライブラリ)の開発者向けベストプラクティス集です。シーン構造、モブジェクト操作、アニメーション、数式レンダリング、3Dシーン、カメラ制御、対話型開発ワークフローなど、ManimGL特有のAPIやパターンを詳細なルールファイルと実用的なサンプルコードで解説しています。ManimCE(コミュニティ版)との違いも明確に示されており、特に`ShowCreation` vs `Create`、`Tex` vs `MathTex`、`self.frame` vs `self.camera.frame`などの混乱しやすいポイントを避けるための注意点がまとめられています。また、対話型モード(`-se`フラグ)や`self.embed()`を使ったデバッグ手法、`fix_in_frame()`による3Dシーン中の固定表示など、ManimGLの強力な機能を活用するための実践的なテクニックが含まれています。このスキルはCLIツール(manimgl)やプログラミングエディタ(VS Code、Neovim)と組み合わせて使用することを想定しており、ルールファイルを個別に読むことで必要な知識を段階的に習得できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/adithya-s-k/manim_skill/tree/main/skills/manimgl-best-practices

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

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

ドキュメント

使い方

個別のルールファイルを読むと、詳細な説明とコード例が得られます。

基本概念

  • rules/scenes.md — InteractiveScene、Sceneの種類、constructメソッド
  • rules/mobjects.md — Mobjectの種類、VMobject、グループ、配置
  • rules/animations.md — アニメーションクラス、アニメーションの再生、タイミング

生成と変形

テキストと数式

  • rules/tex.md — Texクラス、生文字列 R"..."、LaTeXレンダリング
  • rules/text.md — テキストモブジェクト、フォント、スタイル
  • rules/t2c.md — 数式の色分けのための tex_to_color_map (t2c)

スタイルと外観

  • rules/colors.md — 色定数、グラデーション、RGB、16進数、GLSL色指定
  • rules/styling.md — 塗りつぶし、線、不透明度、バックストローク、グロス、影

3Dとカメラ

  • rules/3d.md — 3Dオブジェクト、サーフェス、球体、トーラス、パラメトリックサーフェス、ライティング
  • rules/camera.md — frame.reorient()、オイラー角、fix_in_frame()、カメラアニメーション

対話型開発

設定とCLI

  • rules/cli.md — manimgl コマンド、フラグ(-w, -o, -se, -l, -h)、レンダリングオプション
  • rules/config.md — custom_config.yml、ディレクトリ、カメラ設定、品質プリセット

実用的なサンプル

一般的なパターンを示す、完全でテスト済みのサンプルファイル:

シーンテンプレート

新しいプロジェクトを始める際は、これらのテンプレートをコピーして修正してください:

クイックリファレンス

基本的なシーン構造

from manimlib import *

class MyScene(InteractiveScene):
    def construct(self):
        # モブジェクトを作成
        circle = Circle()

        # シーンに追加(静的)
        self.add(circle)

        # またはアニメーション
        self.play(ShowCreation(circle))  # 注意: Create ではなく ShowCreation

        # 待機
        self.wait(1)

レンダリングコマンド

# レンダリングしてプレビュー
manimgl scene.py MyScene

# 対話モード - 15行目でシェルに入る
manimgl scene.py MyScene -se 15

# ファイルに書き出し
manimgl scene.py MyScene -w

# テスト用の低品質
manimgl scene.py MyScene -l

ManimCEとの主な違い

機能ManimGL (3b1b)Manim Community
インポートfrom manimlib import *from manim import *
CLImanimglmanim
数式テキストTex(R"\pi")MathTex(r"\pi")
シーンInteractiveSceneScene
生成アニメーションShowCreationCreate
カメラself.frameself.camera.frame
フレーム内固定mob.fix_in_frame()self.add_fixed_in_frame_mobjects(mob)
パッケージmanimgl (PyPI)manim (PyPI)

対話型開発ワークフロー

ManimGLのキラーフィーチャーは対話型開発です:

# 20行目から開始し、状態を保持
manimgl scene.py MyScene -se 20

対話モードでは:

# コードをクリップボードにコピーしてから実行:
checkpoint_paste()                 # アニメーション付きで実行
checkpoint_paste(skip=True)        # 即時実行(アニメーションなし)
checkpoint_paste(record=True)      # 実行中に録画

カメラ制御(self.frame)

# カメラフレームを取得
frame = self.frame

# 3Dで方向変更(phi, theta, gamma, center, height)
frame.reorient(45, -30, 0, ORIGIN, 8)

# カメラ移動をアニメーション
self.play(frame.animate.reorient(60, -45, 0))

# 3D移動中にモブジェクトを画面空間に固定
title.fix_in_frame()

TexクラスによるLaTeX

# 大文字Rの生文字列を使う
formula = Tex(R"\int_0^1 x^2 \, dx = \frac{1}{3}")

# t2cで色分け
formula = Tex(
    R"E = mc^2",
    t2c={"E": BLUE, "m": GREEN, "c": YELLOW}
)

# アニメーション用に部分文字列を分離
formula = Tex(R"\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}")
formula.set_color_by_tex("n", BLUE)

よくあるパターン

デバッグのための埋め込み

def construct(self):
    circle = Circle()
    self.play(ShowCreation(circle))
    self.embed()  # ここでIPythonシェルに入る

3D用の床面設定

self.set_floor_plane("xz")  # xyを表示平面にする

テキストの可読性向上のためのバックストローク

text = Text("Label")
text.set_backstroke(BLACK, 5)  # テキストの後ろに黒い輪郭

インストール

# ManimGLのインストール
pip install manimgl

# インストール確認
manimgl --version

よくある落とし穴と回避策

  1. バージョンの混同 — manimgl(コミュニティ版ではなく)を使用していることを確認
  2. ShowCreation vs Create — ManimGLでは Create ではなく ShowCreation を使用
  3. Tex vs MathTex — ManimGLでは大文字Rの生文字列とともに Tex を使用
  4. self.frame vs self.camera.frame — ManimGLでは self.frame を直接使用
  5. fix_in_frame() — シーンではなくモブジェクトに対して呼び出す
  6. 対話モード — 対話型開発には -se フラグを使用

ライセンスと帰属

このスキルには、Grant Sandersonによる3Blue1Brownの動画リポジトリから改変したサンプルコードが含まれています。

ライセンス: CC BY-NC-SA 4.0

  • 帰属必須 — 3Blue1Brownと改作者の両方をクレジット
  • 非営利 — 商用利用は不可
  • 継承 — 派生作品は同じライセンスを使用

詳細は LICENSE.txt を参照してください。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル