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.
Resources
1Install
npx skillscat add johnlarkin1/claude-code-extensions/manim Install via the SkillsCat registry.
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(orThreeDScenefor 3D) - Implement
construct()method - Create Mobjects (mathematical objects) - shapes, text, graphs
- Animate with
self.play()- use animation classes likeCreate,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:
VGroupto 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 edgeAnimation 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)) # StaggeredCommon 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 squareCLI 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), referencea(now looks likeb), notb - Use ReplacementTransform to avoid confusion: replaces
awithbin scene - Mobjects are mutable: Use
.copy()to avoid unintended changes - LaTeX requires
rprefix:MathTex(r"\frac{1}{2}")notMathTex("\frac{1}{2}") - 3D requires ThreeDScene: Regular
Scenewon't render 3D properly self.add()is instant: Useself.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