Browse documentation

Object types

Every object type, its fields, and what it compiles to in Manim.

Every object you can insert, grouped the way the left sidebar groups them. For each one: the fields you can set, and the Manim Python it compiles to. Fields not listed here (position, rotation, scale, opacity, fill, stroke, strokeWidth, and so on) are universal — see Animations for the full list of what's keyframeable.

Object names in this page match the name used in the generated code's variables, which is also what you'll see in View Manim code….

Text & math

Text — text

Plain text with a font family, weight, italics, line spacing, and alignment.

FieldWhat it controls
textThe string shown
fontFamily, fontWeight, italicTypography
lineSpacing, alignMulti-line layout: left / center / right

Compiles to Text(...). Animate it letter-by-letter with Type on / Erase (AddTextLetterByLetter / RemoveTextLetterByLetter) instead of the usual Write/FadeIn.

Formula — mathtex

A LaTeX formula, rendered by real KaTeX in the editor and real Manim MathTex in the render — what you see is what renders. Double-click one on the canvas to open the formula editor with a symbol palette and live preview.

FieldWhat it controls
texThe LaTeX source
texModemathtex (math mode, the default) or tex (raw text-mode LaTeX)
fontSizeSize
colorPartsColor individual substrings wherever they appear in the equation — e.g. color just x or \sin\theta
lines, linesShown2+ lines switch this into an aligned multi-line block (a LaTeX align* environment, every = lined up vertically) instead of a single expression; linesShown (keyframeable) reveals one more line at a time

Compiles to MathTex(tex, font_size=...) or Tex(...) depending on texMode. Named colorParts compile to set_color_by_tex(...) calls layered on top of the base fill. A lines block compiles to one MathTex wrapped in \begin{align*}...\end{align*}; revealing more lines morphs via TransformMatchingTex, the same mechanism derivation uses for its step morphs — the difference is derivation morphs ONE equation through successive states, while a mathtex line block stacks and reveals several lines at once. See Reveal an aligned derivation.

Derivation — derivation

A step-by-step equation derivation. Write each algebraic state on its own line; keyframe the Step number and the render morphs between states with TransformMatchingTex — matched terms slide to their new position instead of just crossfading.

FieldWhat it controls
stepsAn array of LaTeX strings, one per state
stepWhich state is currently shown (keyframeable)
fontSizeSize

See Build a step-by-step equation derivation for the full workflow, including why some letters need to be "isolated" for the morph to look right.

a2+b2=c2b2=c2a2b=c2a2a^2 + b^2 = c^2 \quad\longrightarrow\quad b^2 = c^2 - a^2 \quad\longrightarrow\quad b = \sqrt{c^2 - a^2}

Shapes

ObjectKey fieldsCompiles to
circleradiusCircle(radius=...)
dotradiusDot(radius=...)
ellipsewidth, heightEllipse(width=..., height=...)
squaresideLength, cornerAngle (≠90° → rhombus)Square(...) or Polygon(...) when sheared
rectanglewidth, height, cornerAngle (≠90° → parallelogram)Rectangle(...) or Polygon(...)
rounded_rectanglewidth, height, cornerRadius, cornerAngleRoundedRectangle(...)
trianglebaseLength, angleA, angleB (solved automatically)Polygon(...) from the solved vertices
regular_polygonsides, radiusRegularPolygon(n=..., start_angle=PI)
polygonpoints — free-form vertex list, relative to centerPolygon(...)
starpoints, outerRadius, innerRadiusStar(...)
arcradius, startAngle, angleArc(...)
sectorradius, startAngle, angleSector(...)
annulusinnerRadius, outerRadiusAnnulus(...)
annular_sectorinnerRadius, outerRadius, startAngle, angleAnnularSector(...)

Lines & marks

ObjectKey fieldsCompiles to
linestart, endLine(...)
arrowstart, end, tipLengthArrow(...)
double_arrowstart, end, tipLengthDoubleArrow(...)
vectorstart, end, tipLengthArrow(...) (drawn from the origin by convention)
curved_arrowstart, end, angleAmount (bend)CurvedArrow(...)
bracewidth, direction, label, targetObjectId (attach to another object instead of a fixed width)Brace(Line(...), direction=...) — or always_redraw(Brace(target, ...)) when attached, tracking the target's live size/position every frame

Coordinates & graphs

Coordinate systems

axes, number_plane, and complex_plane share the same shape:

FieldWhat it controls
xRange, yRange[min, max] domain and range
width, heightOn-screen size, scene units
includeNumbers, includeTipsTick labels, arrow tips on the axis ends
xLabel, yLabelAxis titles
plotsAttached function/parametric plots (see below)

number_plane additionally has backgroundLineOpacity for the grid lines. All three compile to their matching Manim class (Axes, NumberPlane, ComplexPlane) and are self-styled — the editor's stroke/fill controls don't apply the way they do to a plain shape.

Number line — number_line

A single labeled axis, independent of the 2D axes/number_plane coordinate systems above.

FieldWhat it controls
min, max, stepDomain and tick spacing
lengthOn-screen length, scene units
includeNumbers, includeTipTick labels, an arrowhead at the end
showTracker, trackedValueA dot riding the line at one value (trackedValue is keyframeable — walk or count along the line)

Compiles to NumberLine(x_range=[min, max, step], length=...), self-styled. The tracked dot compiles to a VGroup(NumberLine(...), Dot(...)) where the dot's position uses NumberLine.n2p(trackedValue).

Function graph — function_graph

y=f(x)y = f(x)

FieldWhat it controls
expressionA Python/numpy expression in x, e.g. np.sin(x)
xRangeDomain to plot over
axesIdWhich axes object to plot on (or none, for a bare scene-space curve)
showArea, areaFrom, areaToShade the area under the curve
showRiemann, riemannDxRiemann approximation rectangles
showTangent, tangentXA tangent line at one x-value (tangentX is keyframeable — slide the tangent along the curve)
showDerivativeA dashed f′(x) curve
showDomain, showRange, showRoots, showMaximum, showMinimum, showIntegralValueNumeric analysis readouts, computed live
showTracker, trackerXA dot riding the curve at one x-value (trackerX is keyframeable — sweep the dot along the curve, e.g. a limit or a moving particle). Needs axesId set
showTrackerLabelA live (x, f(x)) coordinate label next to the tracked dot

Compiles to axes.plot(...) (or a bare FunctionGraph(...) without axes); the calculus extras compile to get_area, get_riemann_rectangles, TangentLine, and a dashed derivative plot respectively. The tracked point compiles to a plain Dot placed via axes.c2p(x, f(x)) — since trackerX is a keyframeable geometry field, moving it re-morphs the whole graph group (curve + tangent + tracker) into a rebuilt clone at the new x, the same Transform-based mechanism tangentX already uses. See Plot a function and shade the area under it.

Parametric curve — parametric_function

(x(t), y(t))\big(x(t),\ y(t)\big)

FieldWhat it controls
xExpression, yExpressionPython expressions in t
tRange[t_min, t_max]
axesIdAttach to an axes object, or leave bare

Compiles to axes.plot_parametric_curve(...) or ParametricFunction(...).

3D

All 3D types force the scene into Manim's ThreeDScene and get a real orbiting camera in the editor preview.

ObjectKey fieldsCompiles to
sphereradiusSphere(...)
ellipsoidradiusX, radiusY, radiusZA Sphere stretched per axis — see note below
cubesideLengthCube(...)
prismwidth, height, depthPrism(dimensions=[...])
conebaseRadius, heightCone(...)
cylinderradius, heightCylinder(...)
torusmajorRadius, minorRadiusTorus(...)
threed_axesxRange/yRange/zRange, width/height/depth, axis labels, showGridXY/XZ/YZThreeDAxes(...) + optional plane grids
surface3dexpression (in x, y), xRange, yRange, resolution, fillA/fillBSurface(...) with checkerboard coloring
parametric_surfacexExpression/yExpression/zExpression (in u, v), uRange, vRangeSurface(...)
parametric_curve3dxExpression/yExpression/zExpression (in t), tRangeParametricFunction(...)
line3dstart3d, end3d, thicknessLine3D(...)
arrow3dstart3d, end3d, thickness, tipLengthArrow3D(...)
dot3dradiusDot3D(...)
polyhedronsolid (tetrahedron/octahedron/dodecahedron/icosahedron/pyramid/custom), edgeLength (Platonic presets), baseSide/pyramidHeight (pyramid), custom vertices/facesTetrahedron(...) etc., Polyhedron(vertex_coords=..., faces_list=...) for pyramid and custom — see note below

Manim has no built-in Ellipsoid or Pyramid class, so those two are built from what Manim does have: an ellipsoid compiles to a unit Sphere stretched independently on each axis (Sphere(radius=1).stretch(radiusX, dim=0).stretch(radiusY, dim=1).stretch(radiusZ, dim=2)), and a pyramid compiles to a Polyhedron built from 5 generated points (4 base corners + 1 apex) — the same generic vertex/face mechanism a custom mesh uses. Both were checked against a real Manim render to confirm they come out the expected size and shape.

Media

ObjectKey fieldsCompiles to
imageassetId, width, heightImageMobject(...)
svgassetId, width, heightSVGMobject(...)
videoassetId, width/height, trimStart/trimEnd, muted, volumeAn ImageMobject whose frame is swapped every scene-frame by an OpenCV-decoding add_updater — see below

Manim has no native video mobject, so video compiles to the community-standard workaround: an ImageMobject seeded from the first frame, with add_updater(lambda m, dt: setattr(m, "pixel_array", reader.tick(dt))) swapping its pixels every frame. The reader tracks elapsed scene time, not "one decode per Manim frame," so a 24fps source plays back at real speed even inside a 60fps scene. The clip's own audio is muxed with self.add_sound, timed to whenever the object actually appears on stage. The canvas preview shows only a static placeholder — playback only happens in the real render.

Data & educational

ObjectKey fieldsCompiles to
countervalue (keyframeable), decimals, fontSizeDecimalNumber(...) — driven by a ValueTracker when animated
graphvertices (count), edges ("1-2,2-3" style list), layoutRadiusGraph(...) on a circular layout
tablecontent (rows on lines, cells split by |), mathMode, fontSizeTable(...) or MathTable(...)
codecode, language, lineNumbers, fontSizeCode(code_string=..., language=...)
matrixrows, bracket (square/paren/curly/bar/none), decimal, decimals, fontSizeMatrix(...) or DecimalMatrix(...)
layered_matrixlayers (one matrix per layer), layerGap, fontSizeA VGroup of Matrix(...) shifted along OUT — forces a 3D scene
bar_chartlabels, values, yMin/yMax/yStep, barColors, showValuesBarChart(...)
pie_chartlabels, values, radius, sliceColors, innerRadiusRatio (donut hole)A VGroup of Sector/AnnularSector wedges
box_plotvalues (raw samples, comma-separated), width/height, orientation, showOutliers, showLabelsA VGroup of Rectangle (Q1–Q3 box), Line (median + whiskers), optional outlier Dots — quartiles computed from values
vector_fieldxExpression/yExpression (in x, y), xRange, yRange, spacing, vectorScale, renderStyle (arrows / streamlines)ArrowVectorField(...), or StreamLines(...) (flowing particles) when renderStyle is streamlines
F(x,y)=(fx(x,y), fy(x,y))\mathbf{F}(x, y) = \big(f_x(x,y),\ f_y(x,y)\big)

Annotations

ObjectKey fieldsCompiles to
callouttext, mathMode, box, pointer, pointTo, step (numbered badge)A VGroup of text/formula + optional box + leader arrow
highlightshape (box/ellipse/underline), width, heightRectangle/Ellipse/Line

Every object also has a details field for the annotation system — medians, angle bisectors, heights, diagonals, incircle/circumcircle, coordinate labels, side labels — described per-shape in the Shape inspector tab. These compile into extra submobjects grouped with the shape.

Canvas studio only

Path — path

A free-form bezier shape drawn with the pen or pencil tool, or imported from an SVG. Every anchor point is independently keyframeable.

FieldWhat it controls
nodesAn array of anchors — each has x, y, and optional bezier handles hIn/hOut
closedWhether the last anchor connects back to the first

Compiles to VMobject().set_points(...), built from the anchors and handles as cubic bezier segments. Each anchor's position is independently keyframeable as nodes.N.x / nodes.N.y — see Import an SVG and animate its points. Paths can also take a 3D rotation (rotationX/rotationY) even though they're 2D-drawn, which forces the scene to 3D — see Work in 3D.

Groups

group is a container with no geometry of its own — grouping (Ctrl+G) folds selected objects into one, which you can then move, scale, or animate as a unit while keeping each member's own animations intact.