| name | manimgl-best-practices |
| description | Trigger when: (1) User mentions "manimgl" or "ManimGL" or "3b1b manim", (2) Code contains `from manimlib import *`, (3) User runs `manimgl` CLI commands, (4) Working with InteractiveScene, self.frame, self.embed(), ShowCreation(), or ManimGL-specific patterns.
Best practices for ManimGL (Grant Sanderson's 3Blue1Brown version) - OpenGL-based animation engine with interactive development. Covers InteractiveScene, Tex with t2c, camera frame control, interactive mode (-se flag), 3D rendering, and checkpoint_paste() workflow.
NOT for Manim Community Edition (which uses `manim` imports and `manim` CLI).
|
How to use
Read individual rule files for detailed explanations and code examples:
Core Concepts
Creation & Transformation
Text & Math
Styling & Appearance
3D & Camera
- rules/3d.md - 3D objects, surfaces, Sphere, Torus, parametric surfaces, lighting
- rules/camera.md - frame.reorient(), Euler angles, fix_in_frame(), camera animations
Interactive Development
Configuration & CLI
- rules/cli.md - manimgl command, flags (-w, -o, -se, -l, -h), rendering options
- rules/config.md - custom_config.yml, directories, camera settings, quality presets
Project Workflow
Working Examples
Complete, tested example files demonstrating common patterns:
Scene Templates
Copy and modify these templates to start new projects:
Quick Reference
Basic Scene Structure
from manimlib import *
class MyScene(InteractiveScene):
def construct(self):
circle = Circle()
self.add(circle)
self.play(ShowCreation(circle))
self.wait(1)
Render Command
manimgl scene.py MyScene
manimgl scene.py MyScene -se 15
manimgl scene.py MyScene -w
manimgl scene.py MyScene -l
Key Differences from ManimCE
| Feature | ManimGL (3b1b) | Manim Community |
|---|
| Import | from manimlib import * | from manim import * |
| CLI | manimgl | manim |
| Math text | Tex(R"\pi") | MathTex(r"\pi") |
| Scene | InteractiveScene | Scene |
| Create anim | ShowCreation | Create |
| Camera | self.frame | self.camera.frame |
| Fix in frame | mob.fix_in_frame() | self.add_fixed_in_frame_mobjects(mob) |
| Package | manimgl (PyPI) | manim (PyPI) |
Interactive Development Workflow
ManimGL's killer feature is interactive development:
manimgl scene.py MyScene -se 20
In interactive mode:
checkpoint_paste()
checkpoint_paste(skip=True)
checkpoint_paste(record=True)
Camera Control (self.frame)
frame = self.frame
frame.reorient(45, -30, 0, ORIGIN, 8)
self.play(frame.animate.reorient(60, -45, 0))
title.fix_in_frame()
LaTeX with Tex class
formula = Tex(R"\int_0^1 x^2 \, dx = \frac{1}{3}")
equation = 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)
Common Patterns
Embedding for debugging
def construct(self):
circle = Circle()
self.play(ShowCreation(circle))
self.embed()
Set floor plane for 3D
self.set_floor_plane("xz")
Backstroke for text readability
text = Text("Label")
text.set_backstroke(BLACK, 5)
Installation
pip install manimgl
manimgl --version
Common Pitfalls to Avoid
- Version confusion - Ensure you're using
manimgl, not manim (community version)
- ShowCreation vs Create - ManimGL uses
ShowCreation, not Create
- Tex vs MathTex - ManimGL uses
Tex with capital R raw strings
- self.frame vs self.camera.frame - ManimGL uses
self.frame directly
- fix_in_frame() - Call on the mobject, not the scene
- Interactive mode - Use
-se flag for interactive development
License & Attribution
This skill contains example code adapted from 3Blue1Brown's video repository by Grant Sanderson.
License: CC BY-NC-SA 4.0
- Attribution required - Credit both 3Blue1Brown and the adapter
- NonCommercial - Not for commercial use
- ShareAlike - Derivatives must use the same license
See LICENSE.txt for full details.