Core Objects
- - Circle, Square, Rectangle, Line, Arrow, Dot, Polygon, RegularPolygon
- - Text, Tex, MathTex
- - ImageMobject, SVGMobject
- - Group and VGroup
Supported features with runnable examples. Previews are lazy and only compile when you click Render preview, so opening docs does not trigger a flood of compile requests.
Entry/exit primitives for basic scene staging.
scene = Scene(duration=4, width=640, height=360, fps=30) circle = Circle(radius=1.25, color=BLUE).shift(LEFT * 1.9) square = Square(side_length=2.2, color=GREEN).shift(RIGHT * 1.9) scene.play(Create(circle), FadeIn(square), run_time=1.5) scene.play(FadeOut(square), run_time=1) scene.wait(1)

Combine shift, rotate, and scale in one motion.
scene = Scene(duration=3, width=640, height=360, fps=30) rect = Rectangle(width=5.8, height=2.1, color=YELLOW) scene.add(rect) scene.play(rect.animate.shift(UP * 0.8).rotate(PI / 6).scale(1.12), run_time=2) scene.wait(1)

Morph one shape into another.
scene = Scene(duration=4, width=640, height=360, fps=30) a = Circle(radius=1.3, color=BLUE) b = Square(side_length=2.4, color=GREEN) c = Rectangle(width=6, height=2.1, color=ORANGE) scene.add(a) scene.play(Transform(a, b), run_time=1.5) scene.play(ReplacementTransform(a, c), run_time=1.5) scene.wait(1)

Stagger timing to create rhythm.
scene = Scene(duration=4, width=640, height=360, fps=30)
g = VGroup(
Square(side_length=1.5).shift(LEFT * 2.3),
Square(side_length=1.5),
Square(side_length=1.5).shift(RIGHT * 2.3)
)
scene.add(g)
scene.play(LaggedStart(
g[0].animate.shift(UP * 1.1),
g[1].animate.shift(UP * 1.1),
g[2].animate.shift(UP * 1.1),
lag_ratio=0.2
), run_time=2)
scene.wait(1)
Drive a mobject over a geometric path.
scene = Scene(duration=4, width=640, height=360, fps=30) path = Circle(radius=2.7, color=GREY_B) dot = Dot(radius=0.18, point=LEFT * 2.7, color=RED) scene.add(path, dot) scene.play(MoveAlongPath(dot, path), run_time=2, rate_func=there_and_back) scene.wait(1)

Text-specific animation helpers.
scene = Scene(duration=4, width=640, height=360, fps=30)
title = Text("Manim Web Docs", font_size=74, color=BLUE)
scene.play(Write(title), run_time=1.5)
scene.wait(1)
scene.play(Unwrite(title), run_time=1)
Programmatic camera movement and zoom helpers.
scene = Scene(duration=4, width=640, height=360, fps=30) left = Dot(radius=0.2, point=LEFT * 4.2, color=BLUE) right = Dot(radius=0.2, point=RIGHT * 4.2, color=YELLOW) scene.add(left, right) scene.move_camera(position=RIGHT * 2.5, run_time=1, rate_func=linear) scene.zoom_camera(zoom=2.2, run_time=1) scene.wait(1)

HUD elements stay fixed while camera moves.
scene = Scene(duration=4, width=640, height=360, fps=30)
world = NumberPlane(
x_range=[-8, 8, 1],
y_range=[-5, 5, 1],
x_length=16,
y_length=10
)
hud = Text("HUD", color=YELLOW, font_size=54).to_corner(UL)
scene.add(world)
scene.add_fixed_in_frame_mobjects(hud)
scene.play(scene.camera.frame.animate.shift(RIGHT * 3), run_time=1.5)
scene.wait(1)
Continuous motion with per-frame updates.
scene = Scene(duration=3, width=640, height=360, fps=30) dot = Dot(radius=0.2, point=LEFT * 3.8, color=RED) scene.add(dot) dot.add_updater(lambda m, dt: m.shift(RIGHT * 2.2 * dt)) scene.wait(1) dot.clear_updaters() scene.wait(1)

Coordinate transforms with graph primitives.
scene = Scene(duration=4, width=640, height=360, fps=30)
axes = Axes(x_range=[0, 6, 1], y_range=[0, 4, 1], x_length=10.5, y_length=5.8)
line = Line(axes.c2p(0, 0), axes.c2p(5, 3), color=GREEN)
label = Text("y = 0.6x", font_size=36).next_to(line, UP)
scene.play(Create(axes), run_time=1)
scene.play(Create(line), Write(label), run_time=1.5)
scene.wait(1)