manim
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 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), 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
More from johnlarkin1/claude-code-extensions
textual
Build terminal user interface (TUI) applications with the Textual framework. Use when creating new Textual apps, adding screens/widgets, styling with TCSS, handling events and reactivity, testing TUI apps, or any task involving "textual", "TUI", or terminal-based Python applications.
146tauri
Comprehensive Tauri v2 development skill for building cross-platform desktop applications with Rust backends and web frontends. This skill should be used when creating new Tauri apps, adding commands and IPC communication, developing plugins, managing application state, or integrating Rust with JavaScript/TypeScript frontends. Triggers on tasks involving #[tauri::command], invoke(), Tauri plugins, desktop app development, or Rust-WebView integration.
11excalidraw
Generate Excalidraw diagrams (.excalidraw JSON files) for whiteboarding, flowcharts, architecture diagrams, sequence diagrams, mind maps, wireframes, and org charts. Use when user requests diagrams, visual documentation, system architecture visualization, process flows, or any hand-drawn style diagram. Triggers on requests mentioning Excalidraw, diagram creation, flowcharts, architecture diagrams, sequence diagrams, wireframes, or visual documentation.
11ics-generator
Generate ICS calendar files (.ics) from natural language descriptions. Use when user wants to create calendar events, meetings, appointments, reminders, recurring events, or schedule items. Triggers on requests mentioning "calendar event", "ICS file", ".ics", "meeting invite", "appointment", "recurring event", "schedule", "RRULE", "reminder", "RSVP", "calendar invite", "block my calendar", or "add to calendar".
9graphviz
Generate GraphViz DOT files (.dot) for directed/undirected graphs, hierarchical layouts, network diagrams, dependency graphs, state machines, and complex graph visualizations. Use when precise node positioning is needed, when rendering to PNG/SVG/PDF is required, when complex graph algorithms (clustering, ranking) are needed, or when dealing with large graphs (100+ nodes). Triggers on requests mentioning GraphViz, DOT language, network diagrams, dependency graphs, or when sophisticated graph layout is required.
6mermaid
Generate Mermaid diagrams (.mmd, .mermaid files, or markdown code blocks) for flowcharts, sequence diagrams, class diagrams, ER diagrams, state diagrams, Gantt charts, pie charts, mindmaps, timelines, and git graphs. Use when user requests diagrams for documentation, markdown files, README visualizations, or any text-based diagram format that renders in GitHub/GitLab. Triggers on requests mentioning Mermaid, markdown diagrams, documentation diagrams, or when output needs to be embedded in markdown.
5