Browse documentation

Scene settings

Render settings, camera, lights, and physics simulation fields.

Project-wide settings, edited from the Scene Settings panel (shown when nothing is selected) and the Camera inspector.

Render settings

RenderSettings — resolution, format, and quality. The resolution/quality/format presets and their manim CLI mapping are documented in full in Render formats; the fields are summarized here for completeness.

FieldValues
resolution480p, 720p, 1080p, 1440p, 2160p
fps24, 30, 60
aspect16:9, 9:16, 1:1, 4:5, 4:3, 21:9
backgroundColorScene background color
backgroundImageAsset stretched to fill the frame behind everything, or null
backgroundImageOpacity0–1
backgroundImageExposure−1 (fully dark) … 0 (as-is) … +1 (blown out)
qualitypreview or final
outputFormatmp4, gif, webm_alpha

Camera

CameraState — the 2D camera, always present:

FieldMeaning
position2D frame center
z3D scenes only: height of the frame center above the ground plane
zoomFrame scale multiplier, 1 = default frame
rotationFrame roll, degrees
followObjectId2D scenes only: when set (Camera panel → Follow), the camera frame stays centered on this object every frame instead of only moving via keyframes — compiles to self.camera.frame.add_updater(lambda m: m.move_to(target.get_center())). Zoom/rotation keyframes still apply on top; a position keyframe active at the same time will fight the follow updater, so use one or the other. Not available in 3D scenes — ThreeDScene's self.move_camera has no persistent frame object an updater could attach to

Camera3DState — the initial 3D camera, used whenever the scene contains a 3D object:

FieldMeaning
phiPolar angle from the z axis, degrees (0 = top-down, like 2D)
thetaAzimuth about the z axis, degrees
ambientRotationDegrees per second of automatic orbit; 0 = off

Optional "cinematic" extras — editor-preview conveniences, some of which map to real Manim camera settings:

FieldMeaning
fovPerspective field-of-view, degrees; unset = orthographic (Manim's default)
focalDistanceDepth-of-field focus distance, scene units (Manim focal_distance)
apertureDepth-of-field strength, 0 = off, larger = more blur (editor preview only)
nearClip, farClipNear/far clip planes, scene units (editor preview only)
safeAreaShow title-safe + rule-of-thirds guides on the camera frame

Camera moves are keyframed like any other event — see the camera animation kind in Animations.

Lights

SceneLight — lights shape the editor's shaded 3D preview only. Manim's Cairo renderer has no light objects, so lights are not compiled to Python; a rendered video ignores them entirely.

Lights are editor-preview only. If a 3D scene looks flat, unlit, or differently shaded after rendering compared to the live preview, this is why — nothing is wrong with the render, Manim simply doesn't model lighting the way the WebGL preview does.
FieldMeaning
kindpoint, sun, spot, or area
positionWorld position, scene units
targetAim point for sun/spot (direction = target − position)
colorLight color
intensityBrightness multiplier
rangePoint/spot falloff distance; 0 = infinite
angleSpot cone half-angle, degrees
penumbraSpot edge softness, 0–1
width, heightArea light size, scene units
radiusSoft-shadow source radius
castShadowWhether the light casts shadows in the preview

Environment/HDRI (project.environment) is likewise editor-preview only — an image-based lighting preset name, never compiled.

3D environment

The ground you stand a solid on while building it, set in Scene ▸ 3D Environment. Judging a shape floating in an empty void is genuinely hard — a floor gives you depth cues, and the reference lines tell you which way is up. Different work wants different scaffolding, which is why this is a set of presets rather than one fixed grid.

The floor is editor scaffolding only. It is never rendered into your video — none of these settings are compiled. If you pick the Isometric floor because it looks right behind your figure, it will not appear in the export; the scene will sit on your chosen background color instead. Nothing is broken when this happens.

Floor styles:

StyleLooks like
GridThe classic square lattice — a good default under most solids
DotsA mark at each intersection — quieter under detailed geometry
PolarRings and spokes — the right frame for anything rotational
IsometricA triangular lattice, for isometric and crystal figures
PlaneA filled ground with no ruling, for when only the horizon matters
NoneEmpty space — nothing but your objects

Alongside the style:

SettingMeaning
ExtentHow far the floor reaches out from the origin, in scene units
SpacingDistance between grid lines, in scene units
AxesDraw the colored X/Y/Z reference lines through the origin
Drop linesA faint vertical line from each solid straight down to the floor — the quickest way to see where something actually sits, rather than where it appears to sit
Horizon fadeFades the floor toward its outer edges so distance reads instead of ending at a hard rim

Simulation / physics

SimulationSettings — one physics world per project:

FieldMeaning
gravityVec3, scene units/s² (default: {x:0, y:0, z:-9.8} — the app is z-up, so gravity points down the −Z axis)
groundAdds an infinite static floor at groundZ that bodies rest/bounce on
groundZFloor height
durationSimulated seconds; null = the whole project duration
substepsSolver substeps per rendered frame — higher is more stable but slower

PhysicsBody — per-object, on 3D solids only:

FieldMeaning
enabledParticipates in the simulation
bodyTypedynamic (moved by the solver) or static (immovable collider — floors, ramps, walls)
massKilograms; ignored for static bodies
restitutionBounciness, 0 (dead) … 1 (perfectly elastic)
frictionSurface friction, 0 (ice) … ~1 (grippy)
velocityInitial linear velocity, scene units/s
angularVelocityInitial angular velocity, radians/s
colliderauto (derived from the object's geometry), box, or sphere

Running "Bake simulation" steps a Rapier physics world across the timeline and writes the result onto each dynamic object as bakedMotion — a dense per-frame track of positions and orientation quaternions, sampled at the project's fps. Once an object has baked motion, both the preview and the compiler drive it from that track instead of its keyframes; re-baking overwrites it, and clearing it restores keyframe control. See Use physics for the end-to-end workflow.

Timeline markers

TimelineMarker — named points on the timeline ruler, used as chapter/section breaks:

FieldMeaning
idIdentifier
timeScene-time seconds
labelDisplayed name
colorMarker color on the ruler

By default, each marker compiles to a self.next_section(label) call at that point in the generated scene, splitting the render into named sections within ONE continuous class (useful with manim's -s/--save_sections flag for scrubbing to a chapter in the output).

Multi-scene export: the "View generated Python" modal (Scene panel → Export) shows a Split into chapters checkbox whenever the project has markers. Turning it on compiles one independent Scene subclass per chapter instead of a single continuous class — each chapter is separately manim render -s <ChapterName>-able, and the class name comes from the marker's own label (de-duplicated automatically if two markers share a label). A marker that isn't already sitting at a rest point (no animation in flight at that instant) is silently snapped to the nearest one, with a warning shown in the modal — Manim can't reconstruct a scene's state mid-animation for a fresh class to pick up from, so an arbitrary cut point isn't safe to split on. See Render formats for how this fits into the rest of the export flow.