Why not Remotion?
Remotion is excellent, and ONDA deliberately preserves its developer experience: you write React, components are pure functions of the current frame, and you assemble a timeline with <Sequence>. What ONDA changes is the architecture underneath.
The architectural difference
Section titled “The architectural difference”Remotion renders through a browser:
React → DOM → headless Chromium → screenshot per frame → encodeThat model is powerful — developers already understand React, and the browser gives you all of CSS for free — but it carries unavoidable costs: browser and DOM overhead, CSS interpretation, IPC for each screenshot over the DevTools protocol, hundreds of MB of memory per worker, and a GPU that headless Chrome disables by default.
ONDA renders natively:
React → scene graph → native renderer → GPU → frameNo browser anywhere. The per-frame cost scales with what you actually draw, not with fixed browser overhead.
The honest “100×” framing
Section titled “The honest “100×” framing”The “100× better than Remotion” claim is architectural, and it is measured against Remotion — not against ONDA’s own CPU path. It is a trajectory, not a single headline number.
Measured today (Apple M4 Pro, 1920×1080, 120 frames)
Section titled “Measured today (Apple M4 Pro, 1920×1080, 120 frames)”| Backend | fps | ms/frame |
|---|---|---|
| Remotion (Chromium, 1 worker) | 26.8 | 37.30 |
| Remotion (Chromium, default pool) | 85.5 | 11.69 |
| ONDA — CPU (1 thread) | 101.8 | 9.82 |
| ONDA — CPU (all cores, rayon) | 865.6 | 1.16 |
| ONDA — GPU (offscreen + readback) | 298.0 | 3.36 |
This is a trivial scene (a title plus a few shapes) — Remotion’s best case. The honest read:
- ~3.8× per-thread (ONDA CPU 1-thread vs Remotion 1-worker) and ~10× machine-throughput (all cores vs Remotion’s default pool) — already, on the easy case. On a complex scene the per-thread gap widens to ~8.5× (ONDA GPU vs a Remotion worker).
- Remotion’s ~37 ms/frame/worker is mostly fixed browser overhead independent of content; ONDA’s cost scales with what is actually drawn.
- ONDA’s parallel scaling (~6× with
rayon) also beats Remotion’s (~3×): its per-worker browser tax makes concurrency sublinear.
Where the gap widens toward 100×
Section titled “Where the gap widens toward 100×”- Scene complexity — a complex DOM balloons Remotion’s layout/paint/screenshot cost; ONDA grows gently.
- The GPU path — real-time present (not the readback-bound number above).
- Cold start — ONDA pays ~milliseconds (font load) vs a Chromium launch + bundle + warmup frames (seconds), which dominates short and serverless renders.
- Memory — one process + shared GPU buffers vs a full browser per worker, so far higher concurrency per machine → fewer machines → lower cost per video.
So: lead with the measured per-thread multiple and the trajectory; claim 100× as the realized ceiling on real workloads (complex scenes × GPU × parallel × cold start), not as a trivial-scene headline.
Structural wins Remotion can’t patch
Section titled “Structural wins Remotion can’t patch”- GPU-first rendering — headless Chrome disables the GPU by default.
- Determinism by construction — no time-API patching, no compositor “warmup”; identical output every run and every machine (use
--backend cpufor bit-identical results — see Backends). - Native media — encoding/decoding is Remotion’s most fragile subsystem and a natural strength for a native engine. ONDA now draws
<Image>and<Video>and composes audio (FFT spectrum, beat-sync, a declarative synth) directly in the graph.
What ONDA does not claim yet
Section titled “What ONDA does not claim yet”Speed is the easy structural win; DX parity is the moat and the open risk. Remotion gets all of CSS/flexbox, a mature Studio, and a Player for free. ONDA today has the reconciler, the animation primitives, the vector renderer, a cinematic effects stack, and native media — but not CSS-style layout or a hosted Studio. See What is ONDA? for the precise list of what exists.
Numbers above are from the repository’s benchmark suite (apps/benchmark). No performance claims without benchmarks.