oxframe vs Manim
Pick oxframe when you want a live editor with a timeline, a browser playground with nothing to install, and video, sound and charts in one scene. Pick Manim when the video is a math lecture with typeset formulas, or the Python ecosystem around it is the point.
At a glance
| oxframe | Manim | |
|---|---|---|
| Language | Rust | Python |
| Renderer | Own renderer, CPU or GPU | Cairo, or OpenGL |
| Install | Rust and ffmpeg; or nothing, in the browser playground | Python with Cairo and Pango; LaTeX for formulas |
| Formulas | Not yet: no LaTeX or Typst | LaTeX, and Typst as an optional extra |
| Plots and axes | Axes, plot, point_on, bars, scatter | Axes, plot, ValueTracker, many more |
| Morphing shapes | Any path into any path, and text | Transform between mobjects |
| Editor | oxframe dev: timeline, markers, tunables | No timeline editor |
| Sound and voice | Mixer, sounds on cues, TTS synced to words | Plugins (manim-voiceover) |
| An agent sees the frames | oxframe check with a JSON report, MCP server | You wire that yourself |
| Frame shapes | 16:9, 9:16 and 1:1 from one scene | The scene size |
| License | MIT or Apache-2.0 | MIT |
| Community | New | Large: 3Blue1Brown style, years of examples |
One scene in both
The two scenes from the Manim migration guide: a circle drawn on and turned into a square, then a sine curve with a dot that rides it. 1080p at 60 fps.
Manim
from manim import *
class Hello(Scene):
def construct(self):
circle = Circle(radius=1.5, color=RED)
self.play(Create(circle))
self.play(Transform(circle, Square(side_length=3, color=BLUE)))
self.play(circle.animate.shift(RIGHT * 2))
self.wait()
class Graph(Scene):
def construct(self):
axes = Axes(x_range=[-3, 3], y_range=[-1.5, 1.5])
sine = axes.plot(lambda x: np.sin(x), color=BLUE)
self.add(axes)
self.play(Create(sine))
x = ValueTracker(-3)
dot = always_redraw(lambda: Dot(axes.i2gp(x.get_value(), sine)))
self.add(dot)
self.play(x.animate.set_value(3), run_time=2)
self.wait(0.5)oxframe
use oxframe::prelude::*;
fn circle(r: f64) -> BezPath {
use oxframe::core::kurbo::Shape;
oxframe::core::kurbo::Circle::new((0.0, 0.0), r).to_path(0.1)
}
#[oxframe::scene]
pub async fn hello(view: View) {
let shape = view.add(
Path::new()
.data(circle(150.0))
.fill(Color::TRANSPARENT)
.stroke(color!("#e13238"))
.line_width(6.0)
.end(0.0),
);
shape.draw_on().await; // Create(circle)
all((
// Transform(circle, Square(...)): any path morphs into any other
shape.data().to(BezPath::from_svg("M-150 -150 H150 V150 H-150 Z").unwrap(), 1.0),
shape.stroke().to(color!("#68abdf"), 1.0),
))
.await;
shape.x().to(300.0, 1.0).await; // circle.animate.shift(RIGHT * 2)
wait_for(1.0).await; // self.wait()
}
#[oxframe::scene]
pub async fn graph(view: View) {
let axes = view.add(
Axes::new()
.x_range(-3.0..3.0)
.y_range(-1.5..1.5)
.width(pct(80))
.height(pct(60)),
);
let sine = axes.plot(|x| x.sin()).stroke(Accent);
sine.draw_on().await; // Create(sine)
let x = Signal::new(-3.0); // ValueTracker(-3)
axes.point_on(&sine, x.clone()); // the dot follows x, like always_redraw
x.to(3.0, 2.0).await; // x.animate.set_value(3), run_time=2
wait_for(0.5).await;
}
pub fn project() -> Project {
Project::new("hello").scene(hello()).scene(graph())
}Render time
| Tool | Command | Time |
|---|---|---|
| Manim 0.22.0 | manim render -r 1920,1080 --fps 60 -a scene.py (both scenes) | 4.30 s |
| oxframe 0.20.4 | render --cpu | 1.30 s |
| oxframe 0.20.4 | render (GPU) | 3.42 s |
Each time is the whole render command, start to file. oxframe's scene is already compiled;
after a one-line edit, cargo build adds about 0.6 s. On a scene this short the
GPU spends more time starting than drawing, so the CPU renderer wins. The script is bench/vs/measure.sh: run it to time both on your machine.
Where each one is strong
Manim is the tool behind the 3Blue1Brown style, and its community has years of scenes, plugins and answers. If the video is about equations, Manim's LaTeX and Typst support is the reason to use it: oxframe does not typeset formulas yet.
oxframe's case is the workflow around the scene. oxframe dev shows the video with a timeline, markers you drag to retime it, and tunables you change without rebuilding; the playground runs the same scene in a browser with nothing to install. One scene can hold a plot, a code block, a video clip and a voice line, and render 16:9, 9:16 and 1:1. And oxframe check tells an agent what is wrong in a frame before you watch it.
Cairo is quick on simple scenes; most of the gap below is start-up and encoding. Manim's real cost is its install, which the playground avoids altogether.
When to pick Manim
- The video is about formulas and needs LaTeX or Typst.
- You write Python and want its scientific libraries in the scene.
- You want the 3Blue1Brown look and the largest set of examples to learn from.
When to pick oxframe
- You want a timeline editor, or a playground in the browser with nothing to install.
- The video mixes plots with code, clips, sound and a voice.
- An agent writes the scenes and should check them itself.
- You need vertical and square versions of the same scene.
Moving from Manim
The Manim migration guide maps Scene, self.play, Transform, Axes and ValueTracker to oxframe and ports both scenes above. Formulas do not carry over yet.
FAQ
Can oxframe render LaTeX formulas?
Not yet. Typst formulas are planned but postponed while their cost to the browser playground is weighed. For formula-heavy videos, Manim is the better fit today.
Do I need to install anything to try oxframe?
No. The playground on oxframe.dev compiles and plays a scene in the browser. To render video locally you need Rust and ffmpeg.
What does Manim need installed?
Python with Cairo and Pango development libraries (pkg-config, cairo and pango on Linux and macOS) and, for typeset formulas, a LaTeX distribution. Typst support is an optional Python extra.
Does oxframe have something like ValueTracker?
Yes: signals. A Signal holds a value that animates over time, and other properties can be bound to it, as the dot bound to the sine curve in the scene above.
Is oxframe faster than Manim?
On the guide scenes on one laptop, oxframe is faster; the numbers and the script are on this page. For long scenes with many objects, measure your own: Manim's OpenGL renderer and caching change the picture.
Can I make a 3Blue1Brown-style video in oxframe?
The parts are there: axes, plots, morphing paths, a moving camera, transforms of the plane. Typeset formulas are the missing piece.
Sources
Checked on October 22, 2026. Found something out of date? Open an issue on oxframe-web.
- Manim Community on GitHub
- Manim releases
- Manim installation
- oxframe license and what leaves your machine
- oxframe-sdk on GitHub