Manim
Build mathematical animations programmatically using Python. Manim renders scenes to video files with precise control over every visual element.
Quick Start
from manim import *
class MyScene(Scene):
def construct(self):
# Create objects
circle = Circle(color=BLUE)
text = MathTex(r"e^{i\pi} + 1 = 0")
# Animate
self.play(Create(circle))
self.play(Write(text))
self.wait(1)
self.play(FadeOut(circle, text))
Run with: manim -pql scene.py MyScene
Workflow
- Define a Scene class inheriting from
Scene (or ThreeDScene for 3D)
- Implement
construct() method
- Create Mobjects (mathematical objects) - shapes, text, graphs
- Animate with
self.play() - use animation classes like Create, Transform, FadeIn
- Render using CLI:
manim -pqh scene.py SceneName
Core Concepts
Mobjects
All visible objects inherit from Mobject. Common types:
- Geometry:
Circle, Square, Line, Arrow, Polygon
- Text:
Text, MathTex, Tex
- Graphs:
Axes, NumberPlane, FunctionGraph
- 3D:
Sphere, Cube, ThreeDAxes
- Groups:
VGroup to combine objects
Animations
Pass to self.play():
- Creation:
Create, Write, FadeIn, GrowFromCenter
- Transform:
Transform, ReplacementTransform, MoveToTarget
- Indication:
Indicate, Flash, Circumscribe
- Removal:
FadeOut, Uncreate
Positioning
obj.move_to(ORIGIN) # Move to point
obj.shift(RIGHT * 2) # Relative shift
obj.next_to(other, UP) # Position relative to another
obj.align_to(other, LEFT) # Align edge
Animation Parameters
self.play(Create(obj), run_time=2) # Duration
self.play(Create(obj), rate_func=smooth) # Easing
self.play(anim1, anim2) # Simultaneous
self.play(Succession(anim1, anim2)) # Sequential
self.play(LaggedStart(*anims, lag_ratio=0.5)) # Staggered
Common Patterns
Mathematical Equation
eq = MathTex(r"\int_0^1 x^2 \, dx = \frac{1}{3}")
self.play(Write(eq))
Function Graph
axes = Axes(x_range=[-3, 3], y_range=[-1, 5])
graph = axes.plot(lambda x: x**2, color=BLUE)
label = axes.get_graph_label(graph, label="x^2")
self.play(Create(axes), Create(graph), Write(label))
Value Tracking (Animated Numbers)
tracker = ValueTracker(0)
number = DecimalNumber(0).add_updater(
lambda m: m.set_value(tracker.get_value())
)
self.add(number)
self.play(tracker.animate.set_value(10), run_time=2)
3D Scene
class My3D(ThreeDScene):
def construct(self):
axes = ThreeDAxes()
sphere = Sphere()
self.set_camera_orientation(phi=75*DEGREES, theta=45*DEGREES)
self.play(Create(axes), Create(sphere))
self.begin_ambient_camera_rotation(rate=0.2)
self.wait(3)
Transform Between States
circle = Circle()
square = Square()
self.play(Create(circle))
self.play(Transform(circle, square)) # circle becomes square
CLI Reference
manim scene.py SceneName # Render scene
manim -p scene.py SceneName # Preview after render
manim -s scene.py SceneName # Save last frame only
# Quality flags
-ql # Low (480p @ 15fps)
-qm # Medium (720p @ 30fps)
-qh # High (1080p @ 60fps)
-qk # 4K (2160p @ 60fps)
Key Gotchas
- Transform mutates first object: After
Transform(a, b), reference a (now looks like b), not b
- Use ReplacementTransform to avoid confusion: replaces
a with b in scene
- Mobjects are mutable: Use
.copy() to avoid unintended changes
- LaTeX requires
r prefix: MathTex(r"\frac{1}{2}") not MathTex("\frac{1}{2}")
- 3D requires ThreeDScene: Regular
Scene won't render 3D properly
self.add() is instant: Use self.play(FadeIn(...)) for animated appearance
References
- Full API (animations, mobjects, scenes, colors, constants): See references/api.md
- Quick lookup (tables, patterns, CLI): See references/quick-reference.md
1---2name: manim3description: Create mathematical animations and visualizations using Manim (ManimCE - Community Edition). Use this skill when users want to build Manim visualizations, create math animations, animate equations, graphs, geometric proofs, 3D objects, or any programmatic video animation. Triggers on requests mentioning "manim", "mathematical animation", "animate equation", "visualize algorithm", "create animation of", "3D visualization", or building explanatory math videos.4---56# Manim78Build mathematical animations programmatically using Python. Manim renders scenes to video files with precise control over every visual element.910## Quick Start1112```python13from manim import *1415class MyScene(Scene):16 def construct(self):17 # Create objects18 circle = Circle(color=BLUE)19 text = MathTex(r"e^{i\pi} + 1 = 0")2021 # Animate22 self.play(Create(circle))23 self.play(Write(text))24 self.wait(1)25 self.play(FadeOut(circle, text))26```2728Run with: `manim -pql scene.py MyScene`2930## Workflow31321. **Define a Scene class** inheriting from `Scene` (or `ThreeDScene` for 3D)332. **Implement `construct()`** method343. **Create Mobjects** (mathematical objects) - shapes, text, graphs354. **Animate with `self.play()`** - use animation classes like `Create`, `Transform`, `FadeIn`365. **Render** using CLI: `manim -pqh scene.py SceneName`3738## Core Concepts3940### Mobjects41All visible objects inherit from `Mobject`. Common types:42- **Geometry**: `Circle`, `Square`, `Line`, `Arrow`, `Polygon`43- **Text**: `Text`, `MathTex`, `Tex`44- **Graphs**: `Axes`, `NumberPlane`, `FunctionGraph`45- **3D**: `Sphere`, `Cube`, `ThreeDAxes`46- **Groups**: `VGroup` to combine objects4748### Animations49Pass to `self.play()`:50- **Creation**: `Create`, `Write`, `FadeIn`, `GrowFromCenter`51- **Transform**: `Transform`, `ReplacementTransform`, `MoveToTarget`52- **Indication**: `Indicate`, `Flash`, `Circumscribe`53- **Removal**: `FadeOut`, `Uncreate`5455### Positioning56```python57obj.move_to(ORIGIN) # Move to point58obj.shift(RIGHT * 2) # Relative shift59obj.next_to(other, UP) # Position relative to another60obj.align_to(other, LEFT) # Align edge61```6263### Animation Parameters64```python65self.play(Create(obj), run_time=2) # Duration66self.play(Create(obj), rate_func=smooth) # Easing67self.play(anim1, anim2) # Simultaneous68self.play(Succession(anim1, anim2)) # Sequential69self.play(LaggedStart(*anims, lag_ratio=0.5)) # Staggered70```7172## Common Patterns7374### Mathematical Equation75```python76eq = MathTex(r"\int_0^1 x^2 \, dx = \frac{1}{3}")77self.play(Write(eq))78```7980### Function Graph81```python82axes = Axes(x_range=[-3, 3], y_range=[-1, 5])83graph = axes.plot(lambda x: x**2, color=BLUE)84label = axes.get_graph_label(graph, label="x^2")85self.play(Create(axes), Create(graph), Write(label))86```8788### Value Tracking (Animated Numbers)89```python90tracker = ValueTracker(0)91number = DecimalNumber(0).add_updater(92 lambda m: m.set_value(tracker.get_value())93)94self.add(number)95self.play(tracker.animate.set_value(10), run_time=2)96```9798### 3D Scene99```python100class My3D(ThreeDScene):101 def construct(self):102 axes = ThreeDAxes()103 sphere = Sphere()104 self.set_camera_orientation(phi=75*DEGREES, theta=45*DEGREES)105 self.play(Create(axes), Create(sphere))106 self.begin_ambient_camera_rotation(rate=0.2)107 self.wait(3)108```109110### Transform Between States111```python112circle = Circle()113square = Square()114self.play(Create(circle))115self.play(Transform(circle, square)) # circle becomes square116```117118## CLI Reference119120```bash121manim scene.py SceneName # Render scene122manim -p scene.py SceneName # Preview after render123manim -s scene.py SceneName # Save last frame only124125# Quality flags126-ql # Low (480p @ 15fps)127-qm # Medium (720p @ 30fps)128-qh # High (1080p @ 60fps)129-qk # 4K (2160p @ 60fps)130```131132## Key Gotchas1331341. **Transform mutates first object**: After `Transform(a, b)`, reference `a` (now looks like `b`), not `b`1352. **Use ReplacementTransform** to avoid confusion: replaces `a` with `b` in scene1363. **Mobjects are mutable**: Use `.copy()` to avoid unintended changes1374. **LaTeX requires `r` prefix**: `MathTex(r"\frac{1}{2}")` not `MathTex("\frac{1}{2}")`1385. **3D requires ThreeDScene**: Regular `Scene` won't render 3D properly1396. **`self.add()` is instant**: Use `self.play(FadeIn(...))` for animated appearance140141## References142143- **Full API** (animations, mobjects, scenes, colors, constants): See [references/api.md](references/api.md)144- **Quick lookup** (tables, patterns, CLI): See [references/quick-reference.md](references/quick-reference.md)