manimgx
Fast Manim-compatible 3D animation renderer on a Rust GPU engine
TLDR
SYNOPSIS
manimgx [--version] [command] [options]manimgx render file [scene] [-o video.mp4] [-r WxH] [--fps n] [--preset preset] [--crf n]manimgx inspect file [scene] [-t time] [-o storyboard.png]manimgx preview file [scene] [-t seconds] [-r WxH] [--fps n]manimgx present file [scene] [-o video.mp4] [-r WxH] [--fps n] [--pdf] [--open|--no-open]
DESCRIPTION
manimgx is the command-line interface for ManimGX, a 2D and 3D animation engine that targets the Manim Community Edition Python API and renders with a Rust + wgpu core. Install with `pip install manimgx` (Python 3.13 or newer). The console script is manimgx (`manimgx.cli:main`, Typer). The published package version is 0.1.1.A scene file is ordinary Manim CE-style Python: `import manimgx as m`, a class deriving `m.Scene` (or `m.ThreeDScene`), and a `construct` method. render writes an MP4 beside the file named after the scene class, plus a storyboard PNG (the frame at each play's end, with layout problems outlined) and, if the scene speaks or has subcaptions, an .srt file. inspect does the same checks without encoding video. preview opens a window that reruns the scene when the file (or a module it imports from beside it) is saved. present renders the video and an HTML page that stops at each `self.next_section(...)`.Default picture size is 1920x1080 at 60 frames per second, unless the scene sets `m.config` or -r / --fps override it. Width and height must be even and positive (`WIDTHxHEIGHT`). Video encoding is H.264 (x264); output must be named .mp4. Text and math use Typst (LaTeX input is translated); no system LaTeX install is required. Fonts and encoding libraries ship in the wheel. Linux wheels bundle Mesa lavapipe so rendering still works without a GPU driver.What a command writes goes to stdout, one line per file, then its report; errors go to stderr. Exit 0 on success, 1 when the scene fails or inspect finds layout problems, 2 when the command is wrong. Help is plain text when piped, rich on a terminal. render, inspect, and present start the GPU before loading the rest of the CLI (not for --help, --version, or preview).
PARAMETERS
file
Python file defining ManimGX scenesscene
Scene class name. Required only if the file defines more than one scene-o, --output path
With render and present, the MP4 (must end in `.mp4`). With inspect, the storyboard PNG (must end in `.png`). Defaults are `<Scene>.mp4` or `<Scene>.storyboard.png` beside the scene file. present writes `<Scene>.html` beside the video-r, --resolution WxH
Pixels, for example `1280x720`. Width and height must be even and positive. Default: the scene's `config`, 1920x1080 unless set--fps n
Frames per second (integer ≥ 1). Default: the scene's `config`, 60 unless set. A video needs a whole-number frame rate--preset preset
x264 encoding speed for render. Faster presets encode sooner but produce larger files. Values: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo--crf n
x264 constant rate factor for render, 0–51. Lower is higher quality and a larger file. Default 18-t, --time time
With inspect: seconds from the start, or `end`. Repeat -t or separate with commas. With preview: where the playhead starts, in seconds (default 0)--pdf
With present, also write a PDF: the picture each slide ends on, one page each--open / --no-open
With present, open the HTML page in the browser (default --open)-h, --help
Print usage. Every subcommand also accepts -h / --help--version
Print `manimgx` and the package version and exit
CONFIGURATION
Scenes set render size and frame rate on manimgx.config.config (`m.config`) before constructing the scene:pixel_width / pixel_height
Video size in pixels. Default 1920 × 1080. For 9:16, swap them (`1080, 1920`)frame_rate
Frames per second. Default 60. Video export needs a whole numberbackground_color
Scene background. Dictionary-style access works as in Manim CE (`config["pixel_height"] = 720`)The CLI resets `config` to defaults, then runs the scene file, then applies -r / --fps for the take. Fonts ship as the manimgx-fonts (and manimgx-fonts-cjk) packages pinned by the wheel.
COMMANDS
render file [scene]
Render a scene to an MP4, with its sound. Also writes a storyboard beside the video and lists layout problems the same way inspect does. Default output is `<Scene>.mp4` beside fileinspect file [scene]
Inspect without video: annotated PNG storyboard, timeline, and 2D layout checks (clipped content, overlapping text, lines or fills over text, small labels). Samples play and wait endings by default. -t inspects the frames a player would show at those times; `end` is the last frame. 3D scenes get pictures and a timeline; layout checks are skipped. Exits 1 when layout problems are found; notes such as a graph leaving the frame do not countpreview file [scene]
Play the scene in a window, rebuilt each time its code is saved. The window keeps its place across rebuilds; an error shows over the last good picture. In a file of several scenes, N and P switch scenes. Keys: Space play/pause, ← → 5 s, `,` `.` a frame, Option (or Ctrl) with ← → a play, `?` the rest. Closing the window or Ctrl+C stopspresent file [scene]
Render the video, write a page that plays it as slides (one section each), and open it. Keys: → or Space next, ← back, F full screen, B black, Shift+P presenter view, C captions, `?` help. Begin a section with `self.next_section(...)` in the scene
CAVEATS
Python 3.13 or newer is required. render and present write MP4 only; a different suffix is a usage error. inspect storyboards must be .png.inspect exits 1 when 2D layout problems are found. 3D scenes skip those checks. Only sampled moments are checked.Video encoding uses x264 (GPL). Native wheels therefore ship as GPL-3.0-or-later even though the ManimGX Python/Rust sources are MIT. Linux wheels include lavapipe for CPU Vulkan when no suitable GPU is available. The browser package (`npm install manimgx`) runs scenes in Pyodide with WebGPU; it is not this CLI.A file with several scenes must name one on the command line (preview can switch with N/P after starting). `import manim` is the wrong module: use `import manimgx as m`.
HISTORY
Manim was created by Grant Sanderson (3Blue1Brown). ManimGX targets the API of Manim Community Edition and is developed by the Academa team. First release 0.1.0 was tagged on 7 October 2026; 0.1.1 followed the same day. The renderer uses wgpu; 3D lighting is adapted from Google's Filament. Typst typesets text and math; mitex translates LaTeX input.
