This is the exhaustive version of the reference section — every object type with every one of its fields, every animation kind with every one of its fields, and every project-level setting, all in one page. The other reference pages (Object types, Animations, Scene settings) cover the same ground with more narrative; this page trades narrative for completeness, so nothing is left out or summarized away.
Field types use plain names: number, string, boolean, point (an {x, y} pair), point3 (an {x, y, z} triple), color (a hex string or null for none). Where a field only accepts a fixed set of values, they're listed as a | b | c.
Table of contents
- Shared fields every object has
- Text & formula objects
- Path & field objects
- 2D shapes
- Lines, arrows, braces, dots
- Coordinate systems & function graphs
- 3D objects
- Media
- Data & diagram objects
- Teaching annotations & groups
- Animation events — shared fields
- Kind: manim (whole-object animations)
- Kind: property (keyframes)
- Kind: transform
- Kind: matrix
- Kind: graphStyle
- Kind: camera
- Easing and speed ramps
- Every animation preset
- Every motion template
- Every recipe
- Every camera template
- Variable bindings (live links)
- Audio
- Physics — bodies and simulation
- Render settings
- Blocked animation combinations
Shared fields every object has
Every object in the project — every shape, every 3D solid, every chart — carries this same base set of fields, on top of whatever fields are specific to its type (listed type-by-type below).
| Field | Type | Notes |
|---|
id | string | unique, assigned on creation |
type | string | the object type tag (circle, text, sphere, …) |
name | string | shown in the Layers panel; freely renamable |
space | "canvas" or unset | unset = lives in the main scene editor; "canvas" = lives in the separate Canvas studio workspace |
position | point | center, in scene units |
positionZ | number | depth in a 3D scene (default 0) |
rotation | number | degrees, counter-clockwise about the z axis |
rotationX, rotationY | number | degrees — 3D tilt/spin, also available on path objects |
fixedInFrame | boolean | in a 3D scene, pins a 2D object to the screen instead of the 3D world |
dashed | boolean | dashed outline |
scale | point | x/y scale factors, default {1, 1} |
opacity | number | 0–1, overall opacity |
fill | color or null | null = no fill |
fillOpacity | number | 0–1 |
stroke | color or null | null = no outline |
strokeWidth | number | outline thickness |
visible | boolean | hidden objects are skipped entirely |
locked | boolean | protected from accidental drag/edit |
zIndex | number | higher draws on top |
parentId | string or null | for grouping |
metallic, roughness, emission, emissionIntensity, transmission, wireframe | number/color/boolean | PBR material controls — editor preview (WebGL) only, not compiled into the render |
physics | object or unset | rigid-body settings, 3D solids only — see Physics |
bakedMotion | object or null | the solved per-frame motion track after baking a simulation |
bindings | array | live variable links — see Variable bindings |
details | object | per-shape construction extras (coordinates, labels, medians, incircle, etc.) — see Object types for the full flag list |
spawn | object or unset | procedural spawn — compiles this object into N copies via a Python for-loop, each shifted/rotated/scaled/recolored by an expression in the copy index i; see Procedural spawn |
Procedural spawn
Set on any object (Info tab → "Procedural spawn") to turn one placed instance into count copies, each nudged by a rule evaluated at its own index i — the escape hatch for "200 dots following a rule" content, without writing custom Python.
| Field | Type | Notes |
|---|
count | number | total copies, including the base object itself (2–2000) |
dxExpr, dyExpr | string or unset | Python expression in i — x/y offset for copy i |
drotExpr | string or unset | Python expression in i — rotation in degrees |
dscaleExpr | string or unset | Python expression in i — multiplies the template's own scale |
colorExpr | string or null | Python expression in i and count, 0..1 — recolors along a two-stop gradient |
Compiles to a single rewritten assignment: <var> = VGroup(*[<var>.copy().shift(...).rotate(...) for i in range(count)]) — a real Python local named count is bound just before the loop so colorExpr expressions like i / count resolve correctly. Leaving every expression field empty stacks every copy in the same spot (a warning is surfaced for that case).
The default color cycle
New shapes without an explicit color cycle through: MANIM blue #58C4DD, teal #5CD0B3, green #83C167, yellow #FFFF00, gold #F0AC5F, red #FC6255, maroon #C55F73, purple #9A72AC, white #FFFFFF, gray #888888.
Text & formula objects
text
| Field | Type |
|---|
text | string |
fontSize | number |
fontFamily | string |
fontWeight | NORMAL | BOLD |
italic | boolean |
lineSpacing | number |
align | left | center | right |
mathtex
| Field | Type |
|---|
tex | string (LaTeX) |
fontSize | number |
texMode | mathtex | tex — mathtex renders in math mode, tex as raw LaTeX text mode |
colorParts | {tex, color}[] or unset |
lines | string[] or unset |
linesShown | number or unset |
A standalone mathtex with lines set is the "show several aligned steps at once, revealed one at a time" complement to derivation (which morphs ONE equation through states instead of stacking lines) — see Reveal an aligned derivation.
derivation
| Field | Type |
|---|
steps | string[] — one LaTeX string per state |
step | number — current step index, keyframable to morph through the sequence |
fontSize | number |
Path & field objects
path
| Field | Type |
|---|
nodes | array of anchor points, each { x, y, hIn?, hOut? } — hIn/hOut are bezier handle offsets relative to the anchor |
closed | boolean |
Every anchor's x and y are independently keyframable as nodes.0.x, nodes.0.y, nodes.1.x, and so on.
layered_matrix
| Field | Type |
|---|
layers | string[] — one entry per z-stacked layer; rows separated by newlines, cells by | |
layerGap | number — z distance between layers |
fontSize | number |
vector_field
| Field | Type |
|---|
xExpression, yExpression | string — the field's x/y component as a function of (x, y) |
xRange, yRange | [number, number] |
spacing | number — grid spacing between sampled arrows/streamlines |
vectorScale | number — arrow length multiplier (renderStyle: "arrows") or stream line thickness (renderStyle: "streamlines") |
renderStyle | arrows | streamlines or unset |
2D shapes
circle
ellipse
| Field | Type |
|---|
width, height | number |
square
| Field | Type |
|---|
sideLength | number |
cornerAngle | number, degrees — 90 = a true square, anything else skews it into a rhombus |
rectangle / rounded_rectangle
| Field | Type |
|---|
width, height | number |
cornerRadius | number — 0 for rectangle, positive for rounded_rectangle |
cornerAngle | number, degrees — 90 = a true rectangle, anything else skews it into a parallelogram |
triangle
| Field | Type |
|---|
baseLength | number — the base edge (A–B) |
angleA | number, degrees — interior angle at the left base vertex |
angleB | number, degrees — interior angle at the right base vertex |
regular_polygon
| Field | Type |
|---|
sides | number |
radius | number |
polygon
| Field | Type |
|---|
points | point[] — explicit vertices, relative to center |
arc / sector
| Field | Type |
|---|
radius | number |
startAngle | number, degrees |
angle | number, degrees — the sweep |
arc has no fill by default (it's an open curve); sector fills the pie-slice wedge.
star
| Field | Type |
|---|
points | number — point count |
outerRadius, innerRadius | number |
annulus
| Field | Type |
|---|
innerRadius, outerRadius | number |
annular_sector
| Field | Type |
|---|
innerRadius, outerRadius | number |
startAngle | number, degrees |
angle | number, degrees — the sweep |
Lines, arrows, braces, dots
line / arrow / double_arrow / vector
| Field | Type |
|---|
start, end | point — endpoints relative to the object's center |
tipLength | number — arrow-head length (arrow/double_arrow/vector only) |
curved_arrow
| Field | Type |
|---|
start, end | point |
angleAmount | number, degrees — how much the arc curves |
brace
| Field | Type |
|---|
width | number — ignored when targetObjectId is set |
direction | up | down | left | right |
label | string — optional LaTeX label; compiles via Brace.get_tex(...) |
targetObjectId | string or null |
dot
Coordinate systems & function graphs
number_line
| Field | Type |
|---|
min, max | number |
step | number — tick spacing |
length | number |
includeNumbers | boolean |
includeTip | boolean |
showTracker | boolean or unset |
trackedValue | number or unset |
axes / number_plane / complex_plane
| Field | Type |
|---|
xRange, yRange | [min, max, step] |
width, height | number |
includeNumbers | boolean |
includeTips | boolean |
xLabel, yLabel | string |
backgroundLineOpacity | number — number_plane only, the faint grid lines |
plots | array of plotted functions — see Plots below |
Plots on axes objects
axes, number_plane, complex_plane, and threed_axes can each carry a plots array — functions drawn on top of the coordinate system:
| Field | Type |
|---|
id | string |
expression | string — a numpy expression in x |
color | color |
showFormula | boolean |
visible | boolean |
appear | { start, duration } or null — a draw-on window on the timeline |
anim | { from, to, start, duration } or null — sweeps a parameter named a through the expression over that window |
function_graph
| Field | Type |
|---|
expression | string — numpy expression in x |
xRange | [number, number] |
axesId | string or null — which axes object to plot on; null = the scene frame directly |
showArea, areaFrom, areaTo | boolean, number, number — shaded area under the curve |
showRiemann, riemannDx | boolean, number — Riemann rectangles and their width |
showTangent, tangentX | boolean, number — a tangent line and where it touches |
showDerivative | boolean — plots f′(x) alongside f(x) |
showDomain, showRange | boolean |
showRoots | boolean — marks x-intercepts |
showMaximum, showMinimum | boolean |
showIntegralValue | boolean — displays the numeric area value |
showTracker, trackerX | boolean, number — a dot riding the curve at x = trackerX, keyframable to sweep it along (e.g. a limit or a moving particle) — needs axesId set, since placement uses axes.c2p(x, f(x)) |
showTrackerLabel | boolean — shows a live (x, f(x)) coordinate label next to the tracked dot |
parametric_function
| Field | Type |
|---|
xExpression, yExpression | string — numpy expressions in t |
tRange | [number, number] |
axesId | string or null |
3D objects
sphere
ellipsoid
| Field | Type |
|---|
radiusX, radiusY, radiusZ | number — independent radius on each axis |
No native Ellipsoid class exists in Manim, so this compiles to a unit Sphere stretched per axis: Sphere(radius=1).stretch(radiusX, dim=0).stretch(radiusY, dim=1).stretch(radiusZ, dim=2).
cube
| Field | Type |
|---|
sideLength | number |
prism
| Field | Type |
|---|
width, height, depth | number |
cone
| Field | Type |
|---|
baseRadius, height | number |
cylinder
| Field | Type |
|---|
radius, height | number |
torus
| Field | Type |
|---|
majorRadius, minorRadius | number |
polyhedron
| Field | Type |
|---|
solid | tetrahedron | octahedron | dodecahedron | icosahedron | pyramid | custom |
edgeLength | number — edge length for the four named Platonic presets |
baseSide, pyramidHeight | number — base side length and apex height, used when solid = pyramid |
vertices | point3[] — custom mesh vertices, used when solid = custom |
faces | number[][] — custom faces as loops of vertex indices, used when solid = custom |
The four named Platonic presets compile to Manim's own Tetrahedron/Octahedron/Dodecahedron/Icosahedron. pyramid has no dedicated Manim class either, so it compiles the same way a custom mesh does — a Polyhedron(vertex_coords=..., faces_list=...) built from 5 generated points (4 base corners + 1 apex).
threed_axes
| Field | Type |
|---|
xRange, yRange, zRange | [min, max, step] |
width, height, depth | number |
xLabel, yLabel, zLabel | string |
includeNumbers | boolean |
plots | array — same shape as axes plots, drawn in the xy-plane |
showGridXY, showGridXZ, showGridYZ | boolean — background grid planes |
surface3d
| Field | Type |
|---|
expression | string — numpy expression in x and y |
xRange, yRange | [number, number] |
resolution | number — mesh subdivision |
fillA, fillB | color — checkerboard pattern colors |
parametric_surface
| Field | Type |
|---|
xExpression, yExpression, zExpression | string — numpy expressions in u and v |
uRange, vRange | [number, number] |
resolution | number |
fillA, fillB | color — checkerboard pattern colors |
parametric_curve3d
| Field | Type |
|---|
xExpression, yExpression, zExpression | string — numpy expressions in t |
tRange | [number, number] |
line3d / arrow3d
| Field | Type |
|---|
start3d, end3d | point3 |
thickness | number — tube thickness |
tipLength | number — cone-tip length (arrow3d only) |
dot3d
image / svg
| Field | Type |
|---|
assetId | string — id of the uploaded asset |
width, height | number |
video
| Field | Type |
|---|
assetId | string — id of the uploaded video asset |
width, height | number |
trimStart, trimEnd | number — seconds trimmed from the start/end of the source clip |
muted | boolean — mutes the clip's own audio |
volume | number, 0–1 — the clip's own audio volume when not muted |
An embedded video clip. Manim has no native video mobject, so this compiles to an ImageMobject whose pixel_array is swapped every frame by an add_updater that decodes the source with OpenCV (opencv-python-headless, bundled into both the cloud renderer and the desktop Render Agent) — frame selection is keyed by elapsed scene time × the source's own fps, so playback speed is correct even when the source clip's frame rate differs from the scene's. The clip's own audio (unless muted) is muxed with self.add_sound, starting at whichever moment the object actually appears on stage (its own intro animation's start time, or 0 if it has none). The canvas preview shows only a static placeholder — live video playback happens exclusively in the actual render.
Data & diagram objects
counter
| Field | Type |
|---|
value | number — the displayed number, keyframable to count up/down |
decimals | number |
fontSize | number |
graph (network graph)
| Field | Type |
|---|
vertices | number — vertex count, placed evenly on a circle |
edges | string — 1-based edge list, e.g. "1-2, 2-3" |
layoutRadius | number |
showLabels | boolean |
Individual vertices/edges can be recolored over time with a graphStyle animation — see Kind: graphStyle.
table
| Field | Type |
|---|
content | string — rows on separate lines, cells separated by | |
mathMode | boolean — render cells as LaTeX instead of plain text |
fontSize | number |
code
| Field | Type |
|---|
code | string |
language | string |
lineNumbers | boolean |
fontSize | number |
matrix
| Field | Type |
|---|
rows | string[][] — entries row-major, each a number or LaTeX string |
bracket | square | paren | curly | bar | none |
decimal | boolean — render as a decimal matrix |
decimals | number |
fontSize | number |
bar_chart
| Field | Type |
|---|
labels | string — comma-separated |
values | string — comma-separated |
yMin, yMax, yStep | number |
width, height | number |
barColors | color[] — cycled across bars |
showValues | boolean |
pie_chart
| Field | Type |
|---|
labels | string — comma-separated |
values | string — comma-separated proportions |
radius | number |
sliceColors | color[] — cycled across slices |
showLabels, showPercentages | boolean |
innerRadiusRatio | number — 0 = full pie, toward 1 = a thinner donut ring |
box_plot
| Field | Type |
|---|
values | string — raw sample values, comma-separated (quartiles are computed from these, linear-interpolation method — the same convention as numpy/matplotlib's default) |
width, height | number |
orientation | horizontal | vertical |
showOutliers | boolean — marks points beyond 1.5×IQR from Q1/Q3 as dots |
showLabels | boolean — shows a median-value label |
A five-number-summary box plot for probability/statistics content, not a native Manim mobject — compiles to a VGroup of Rectangle (the Q1–Q3 box), Line (median + whiskers), and optional Dots (outliers), built from the computed quartiles the same way pie_chart is hand-built from Sector wedges.
Teaching annotations & groups
callout
| Field | Type |
|---|
text | string |
fontSize | number |
mathMode | boolean — render as LaTeX instead of plain text |
box | boolean — draw the rounded background box |
pointer | boolean — draw a leader arrow to pointTo |
pointTo | point — arrow target, relative to the callout's position |
step | number — an optional "Step N" badge prefix; 0 = none |
highlight
| Field | Type |
|---|
shape | box | ellipse | underline |
width, height | number |
group
Has no fields of its own beyond the shared fields — it's a container used to move/scale/rotate several objects together.
Animation events — shared fields
Every animation event on the timeline — regardless of kind — carries this base set of fields, on top of whatever's specific to its kind (below):
| Field | Type | Notes |
|---|
id | string | |
objectId | string | which object this event animates ("" for camera events) |
start | number | scene-time seconds |
duration | number | seconds |
easing | string | one of the 10 easing names |
easingCurve | object or unset | custom cubic-bezier control points, only read when easing = "custom" |
speedRamp | array or null | CapCut-style time-warp nodes — see Easing and speed ramps |
muted | boolean | disabled without deleting |
locked | boolean | protected from accidental drag |
Kind: manim (whole-object animations)
| Field | Type |
|---|
animation | one of the 23 ManimAnimationName values |
edge | UP | DOWN | LEFT | RIGHT — only used by GrowFromEdge |
shift | point — slide direction/distance, only used by FadeIn/FadeOut |
The full list of Manim animations
Entrances (bring the object from not-there to fully visible):
| Name | What it does |
|---|
Create | Draws the outline on, then fills |
Write | Handwriting-style stroke-on (text/formulas) |
DrawBorderThenFill | Traces the border, then the fill sweeps in |
FadeIn | Opacity 0→1, optional shift slide |
GrowFromCenter | Scales up from a point at its center |
GrowFromEdge | Scales up from one edge (edge field picks which) |
GrowArrow | Grows from tail to tip (arrows only) |
SpinInFromNothing | Scales up while spinning in |
AddTextLetterByLetter | Types on character by character (text only) |
Exits (the reverse):
| Name | What it does |
|---|
FadeOut | Opacity 1→0 |
Uncreate | Un-draws the outline (reverse of Create) |
Unwrite | Reverse handwriting stroke-off |
ShrinkToCenter | Scales down to a point |
RemoveTextLetterByLetter | Erases character by character |
One-shot emphasis (plays in place, doesn't change presence):
| Name | What it does |
|---|
Flash | A light burst around it |
Indicate | An attention pulse |
Circumscribe | Draws a highlight box/circle around it |
ShowPassingFlash | A flash sweeps along the outline |
FocusOn | A spotlight narrows onto it |
Wiggle | A playful shake |
ApplyWave | A ripple runs through it |
Broadcast | Rings pulse outward from it |
Rotating | One full turn in place |
flagEvery exit animation actually removes the mobject from the scene (Manim's remover=True) — not just visually, but from the scene graph. Anything scheduled on the same object afterward needs an entrance animation first to bring it back.
Kind: property (keyframes)
| Field | Type |
|---|
property | which field is being animated — see the full property list below |
from | number, point, color, or null — null means "start at whatever value the property already holds" |
to | number, point, or color — the destination value |
valueDisplay | { enabled, position, label, decimals } or null — an optional on-screen live number readout (numeric properties only) |
Universal properties (every object type)
position (point), positionZ (number), rotation (number, °), rotationX/rotationY (number, °, 3D + path only), scale (point), opacity (0–1), fill (color), stroke (color), strokeWidth (number), fillOpacity (0–1).
Every animatable property, by object type
Beyond the universal set above, each object type exposes its own geometry fields as keyframable properties — this is exactly the field list from the per-type sections above, minus the handful of string/array/boolean fields that can't be smoothly animated (like text, bracket, or solid). The complete per-type list:
| Object type | Extra animatable properties |
|---|
circle, dot, regular_polygon | radius |
ellipse | width, height |
square | sideLength, cornerAngle |
rectangle, rounded_rectangle | width, height, cornerAngle (+ cornerRadius for rounded) |
triangle | baseLength, angleA, angleB |
star | outerRadius, innerRadius |
annulus | innerRadius, outerRadius |
annular_sector, arc, sector | innerRadius/radius, outerRadius, startAngle, angle (as applicable) |
line, arrow, double_arrow, vector | start.x, start.y, end.x, end.y (+ tipLength for arrows) |
curved_arrow | start.x/.y, end.x/.y, angleAmount |
brace | width |
text, mathtex, layered_matrix, derivation, counter, table, code, matrix, callout | fontSize (+ step for derivation, value for counter, linesShown for a mathtex aligned block) |
vector_field | xRange.0/.1, yRange.0/.1, spacing, vectorScale |
layered_matrix | layerGap |
number_line | min, max, step, length (+ trackedValue when a tracker is shown) |
axes, number_plane, complex_plane, threed_axes | xRange.0/.1, yRange.0/.1, width, height (+ zRange.0/.1, depth for threed_axes) |
function_graph | xRange.0/.1, areaFrom, areaTo, riemannDx, tangentX, trackerX |
parametric_function, parametric_curve3d | tRange.0, tRange.1 |
sphere | radius |
ellipsoid | radiusX, radiusY, radiusZ |
cube | sideLength |
prism | width, height, depth |
cone | baseRadius, height |
cylinder | radius, height |
torus | majorRadius, minorRadius |
line3d, arrow3d | start3d.x/.y/.z, end3d.x/.y/.z, thickness (+ tipLength for arrow3d) |
surface3d | xRange.0/.1, yRange.0/.1 |
parametric_surface | uRange.0/.1, vRange.0/.1 |
polyhedron | edgeLength (Platonic presets), baseSide, pyramidHeight (pyramid) |
graph | layoutRadius |
image, svg | width, height |
bar_chart | width, height, yMin, yMax, yStep |
pie_chart | radius, innerRadiusRatio |
highlight | width, height |
path | nodes.0.x, nodes.0.y, nodes.1.x, nodes.1.y, … one pair per anchor point |
| Field | Type |
|---|
transform | one of the 9 transform types |
targetObjectId | string — the object this one morphs into (must already exist in the scene) |
| Name | Behavior |
|---|
Transform | Morphs in place; the source object visually becomes the target's shape, but the source stays the "real" object on stage |
ReplacementTransform | Same morph, but the target object actually replaces the source in the scene afterward |
TransformMatchingTex | Matches LaTeX tokens between two formulas — matched pieces slide into place, the rest crossfades |
TransformMatchingShapes | Same idea for non-text objects, matched by shape structure |
FadeTransform | Crossfades while moving, without shape-matching |
ClockwiseTransform | Morphs while rotating clockwise through the turn |
CounterclockwiseTransform | Morphs while rotating counter-clockwise |
TransformFromCopy | Like Transform, but leaves the source in place and animates a copy of it instead |
MoveAlongPath | Not a morph — the object rides along the target's outline as a motion path |
ReplacementTransform, TransformMatchingTex, TransformMatchingShapes, and FadeTransform are the four replacing transforms — the source object stops existing on stage afterward, and the target takes over. The other five keep the original object on stage with its points morphed to look like the target.
Kind: matrix
| Field | Type |
|---|
matrix | [a, b, c, d] — the 2×2 row-major matrix [[a,b],[c,d]], applied about the scene origin |
matrix3 | 9 numbers, row-major 3×3, or null — optional, for 3D scenes; takes priority over matrix in the render when set |
The 2D canvas preview can only show the 3×3 map's upper-left 2×2 block; the true 3D result only appears once you render.
Kind: graphStyle
| Field | Type |
|---|
target | either { part: "vertex", index } or { part: "edge", from, to } |
from | color or null — null = the vertex/edge's current color at the event's start |
to | color |
Only targets a graph (network graph) object's vertices/edges — chain several with staggered start times to build a BFS/DFS/sorting-style traversal highlight.
Kind: camera
Has no objectId (always "") — it targets the scene camera directly.
| Field | Type |
|---|
camera.position | point — 2D frame center |
camera.z | number — 3D frame-center height |
camera.zoom | number — frame scale, 1 = default |
camera.rotation | number, degrees — 2D frame roll |
camera.phi | number, degrees — 3D polar angle from the z axis |
camera.theta | number, degrees — 3D azimuth about the z axis |
Only the fields you actually set on a given camera event are animated — one that only sets zoom leaves position/rotation/phi/theta exactly where the previous camera event left them.
Easing and speed ramps
The 10 easing names
| Name | Shape |
|---|
linear | Constant speed |
smooth | Manim's real rate_functions.smooth — a normalized sigmoid, gentle ease in and out |
ease_in | Cubic ease-in — starts slow, accelerates |
ease_out | Cubic ease-out — starts fast, decelerates |
ease_in_out | Cubic both ways |
bounce | Ease-out bounce — settles with a few small bounces at the end |
elastic | Overshoots and springs back before settling |
back | Overshoots past the target once, then eases back |
exponential | Very slow start, sharp acceleration near the end |
custom | A hand-drawn cubic-bezier curve — control points {x1, y1, x2, y2}, editable in the Easing editor |
Speed ramp
Every event can also carry a speedRamp — a list of { t, speed } nodes (t = position within the event's own duration, 0–1; speed = playback-rate multiplier, 0.1×–10×). It warps time CapCut-style — accelerating or slow-motioning inside the event — without changing the event's total duration, and composes with easing (the ramp warps time first, then easing shapes the warped result).
The 6 speed-ramp presets
| Preset | Feel | Node shape |
|---|
| Montage | Quick hit, then settle | fast start, sharp slow dip mid-way, settles |
| Hero | Dramatic slow-motion in the middle | slow bookends, deep slow-motion center |
| Bullet | Freeze mid-flight, then release | fast in, near-freeze in the middle, fast out |
| Jump cut | Slow bookends, whip through the middle | slow start/end, very fast middle |
| Flash in | Crawl, then accelerate away | starts almost frozen, races to full speed |
| Flash out | Burst in, land in slow motion | starts fast, eases into near-freeze |
Every animation preset
The Anim tab's quick-animate cards — each inserts one ready-made animation event with tuned duration and easing.
| Preset | Kind | Feel |
|---|
| Fade In | entrance | Soft opacity entrance |
| Pop In | entrance | Grows from center with a slight overshoot |
| Slide ← / → / ↑ / ↓ | entrance | Fades in while sliding from the given direction |
| Create | entrance | Draws the shape on, stroke and fill together |
| Draw+Fill | entrance | Traces the border, then fills in |
| Write | entrance | Handwriting-style reveal (text & formulas) |
| Type On | entrance | Text appears letter by letter |
| Spin In | entrance | Spins up from nothing |
| Pulse | emphasis | An attention pulse |
| Wiggle | emphasis | A playful shake |
| Flash | emphasis | A light burst around it |
| Highlight | emphasis | Draws a highlight box around it |
| Focus | emphasis | A spotlight narrows onto it |
| Wave | emphasis | A ripple runs through it |
| Spin 360° | emphasis | One full turn in place |
| Fade Out | exit | Soft opacity exit |
| Drop Out | exit | Falls away downward while fading |
| Erase | exit | Un-draws the outline (reverse of Create) |
| Shrink | exit | Collapses to the center |
Every motion template
Single, self-contained pieces from the Templates panel's Motion templates section — each inserts a small pre-built group of objects and animations at the playhead.
Text
| Template | What it builds |
|---|
| Title intro | A big title with an underline that writes on, then fades away |
| Chapter intro | A numbered chapter card with an accent bar |
| Lower third | A name + role card sliding in from the left |
| Quote | A large quote with an author credit |
| Typewriter | Text types on letter by letter, monospace |
| Word stagger | A phrase reveals one word at a time |
| Letter cascade | Each letter pops in on its own beat |
Info
| Template | What it builds |
|---|
| Bullet list | A heading with three staggered bullet points |
| Process steps | Three milestones appearing along a timeline |
| Comparison · VS | Two panels facing off around a VS badge |
| Big stat counter | A number counting up over its caption |
| Formula spotlight | A formula writes on, then gets circled |
| Callout arrow | A curved arrow and label pointing at a spot |
| Countdown 3·2·1 | Three numbers popping in sequence |
| Progress bar | A bar filling left-to-right with a label |
| End card | A "thanks for watching" outro screen |
Shapes
| Template | What it builds |
|---|
| Shape trio | A circle, square, and triangle pop in and pulse |
| Shape morph | A circle draws on, then morphs into a square |
3D
| Template | What it builds |
|---|
| 3D graph reveal | Axes and a saddle surface fade in while the camera orbits |
| 3D knot tour | A trefoil knot draws on, then the camera circles it |
| Platonic parade | The four Platonic solids pop in and spin in place |
| 3D vectors | X/Y/Z basis arrows grow, then a vector reaches a marked point |
Every recipe
Multi-step compositions from the Templates panel's Recipes section — several templates and camera moves chained together with tuned timing offsets, shown as numbered step chips.
Math
| Recipe | What it does |
|---|
| Math proof reveal | A formula writes on, gets circled, and a chapter card settles in — a full explainer beat |
| 3D graph tour | Axes and a surface reveal, then an orbiting camera lap around it |
| Compare two approaches | A VS panel, then a stat counter tallying the winner |
Story
| Recipe | What it does |
|---|
| Video opener | A title card, then a chapter "01" hands off right after it fades |
| Talking-head explainer | A lower-third intro, bullet points, then a callout for the key idea |
| How it works | A process-steps walkthrough, ending on a progress-bar payoff |
| Video outro | A stat recap card leading into a thanks-for-watching end card |
Social
| Recipe | What it does |
|---|
| Social hook + reveal | A countdown grabs attention, then kinetic word-stagger text delivers the punchline |
| Punchy stat + CTA | A number counts up, then the end card lands the follow/share ask |
3D
| Recipe | What it does |
|---|
| 3D showcase | The Platonic solids parade in, then a hero-rise camera move caps it off |
| Vector explainer + orbit | Basis vectors build up to a resultant vector, then the camera circles the result |
| Knot reveal + roll | A trefoil knot draws on, then a cinematic roll finishes the shot |
Camera steps within a recipe continue smoothly from wherever the camera was left by the previous step, so a recipe's camera moves never jump.
Every camera template
Single camera moves from the command palette / camera inspector — each is relative to the camera's current position, so they compose with whatever shot you're already in.
| Template | Needs 3D? | Motion |
|---|
| Orbit right | Yes | Swings 90° around the subject |
| Orbit left | Yes | Swings 90° the other way |
| Full orbit 360° | Yes | A complete lap around the subject |
| Hero rise | Yes | Rises and pulls back for a dramatic reveal |
| Top-down spin | Yes | Drops to a top-down angle, then spins underneath |
| Roll 360° → | No | A full clockwise roll |
| Roll 360° ← | No | A full counter-clockwise roll |
| Dutch tilt | No | Tilts off-axis, then straightens back out |
| Spiral push-in | No | Rolls while pushing in closer |
| Pendulum swing | No | Rocks side to side before settling back to level |
Variable bindings (live links)
Set up from the Inspector's Anim tab — see Link one object's property to another for the workflow.
| Field | Type |
|---|
target | follow | x | y | opacity | strokeWidth | value — which of THIS object's fields is being driven |
sourceId | string — the object being read from |
source | x | y | width | height — which of the SOURCE object's variables is read |
scale | number — multiplies the source value |
offset | number — added after scaling (or the X offset, for follow) |
offsetY | number — the Y offset, only used by follow |
A binding recomputes every frame and always overrides a plain keyframe on the same field — see How keyframes and time work for the full priority order against physics and keyframes.
Audio
AudioTrack — one per uploaded music/voiceover clip, shown as a ♪ row on the timeline:
| Field | Type |
|---|
assetId | string — id of the uploaded audio asset |
start | number — scene-time offset, seconds |
trimStart, trimEnd | number — trim within the source file, seconds |
volume | number, 0–1 |
fadeIn, fadeOut | number, seconds (not yet compiled into the render — reserved) |
muted | boolean |
markers | AudioMarker[] or unset — narration timing points, see below |
Compiles to self.add_sound(path, time_offset=start, gain=...).
AudioMarker — a named point dropped on the track's waveform (double-click to add; see Sync animations to a voiceover):
| Field | Type |
|---|
id | Identifier |
time | number — seconds into the source file (not scene time), so the marker stays glued to its word if the clip is later dragged or trimmed |
label | string |
Markers don't compile to anything themselves — they're an editing convenience. An animation event's Start-time field gets a Snap to dropdown listing every marker across every track; picking one resolves to a plain scene-time number (track.start + (marker.time − track.trimStart)), same as typing that number in by hand.
Physics — bodies and simulation
Per-object physics (3D solids only)
| Field | Type |
|---|
enabled | boolean |
bodyType | dynamic | static — dynamic bodies are moved by the solver, static bodies are immovable colliders |
mass | number, kg — ignored for static bodies |
restitution | number, 0–1 — bounciness |
friction | number, roughly 0 (ice) to 1 |
velocity | point3 — initial linear velocity |
angularVelocity | point3 — initial spin |
collider | auto | box | sphere — auto derives a shape from the object's geometry |
Scene-wide simulation settings
| Field | Type |
|---|
gravity | point3, scene units/s² |
ground | boolean — an infinite static floor |
groundZ | number — the floor's height |
duration | number or null — null simulates the whole project length |
substeps | number — solver substeps per rendered frame, for stability |
The 6 gravity presets
| Preset | Vector | Feel |
|---|
| Earth | {0, 0, -9.8} | The realistic default |
| Moon | {0, 0, -1.6} | Floaty, slow-motion falls |
| Zero-G | {0, 0, 0} | No pull — bodies drift on initial velocity only |
| Strong | {0, 0, -20} | Heavy, fast slams |
| Sideways | {6, 0, 0} | Gravity pulls sideways, wind-tunnel feel |
| Reverse | {0, 0, 9.8} | Everything falls upward |
After baking, an object's motion is stored as a dense per-frame track (position + orientation) and replayed directly — see Simulate rigid-body physics.
Render settings
| Field | Type |
|---|
resolution | 480p | 720p | 1080p | 1440p | 2160p |
fps | 24 | 30 | 60 |
aspect | 16:9 | 9:16 | 1:1 | 4:5 | 4:3 | 21:9 |
backgroundColor | color |
backgroundImage | string or null |
backgroundImageOpacity | number, 0–1 |
backgroundImageExposure | number, −1 (dark) to +1 (blown out), 0 = unchanged |
quality | preview | final |
outputFormat | mp4 | gif | webm_alpha — standard video, looping no-audio GIF, or transparent-background WebM |
Aspect ratio presets
| Ratio | Use case |
|---|
| 16:9 | YouTube |
| 9:16 | Reels / TikTok / Shorts |
| 1:1 | Instagram post |
| 4:5 | Instagram portrait |
| 4:3 | Classic |
| 21:9 | Cinematic |
Blocked animation combinations
Some overlaps are rejected before they're ever created, because Manim has no sensible way to run them at the same time on the same object:
| Combination | Why it's blocked |
|---|
Two transform events overlapping on the same object | A mobject can only morph toward one target at a time |
| A replacing transform overlapping anything else on that object | The source mobject stops existing partway through |
| Two entrance/exit animations overlapping | Only one "is this on screen yet" transition can run at once |
| An exit overlapping any other event on that object | Nothing can keep animating an object that's mid-exit |
Two matrix events overlapping | Only one linear map can apply to a mobject's points at a time |
MoveAlongPath overlapping another position-driving event | Two mechanisms can't both own where the object is |
Full explanation and reasoning in Animations → Blocked combinations.