← Blog
Benchmark evidenceStudy October 1, 2026Gavin Bintz

CPU rendering: numbers and receipts

Experimental native renderer · local hardware study

Apple M3 Pro · 11 available logical CPUs · native TextGrid · 1920×1080 · 300 frames at 30fps · software x264 CRF11

The native Helios path is experimental Git source merged in PR #5006. Installing the general browser renderer from npm does not reproduce this benchmark.

Helios delivered this 300-frame TextGrid workload in 4.21 seconds at ultrafast and 11.99 seconds at medium. On the tested Apple M3 Pro, those medians were 1.75× and 1.27× the speed of fframes. Against Remotion, the ratios were 4.31× and 2.00×.

The measurements below cover an experimental native Helios renderer, a pinned fframes CPU renderer and Remotion running in a strict CPU configuration. Each engine used its own rasterizer. These results apply to this local workload and the disclosed settings.

01 / Measured results

Delivered video timings

Three fresh timed rounds per engine and preset. Charts show medians of original delivered process times. Lower is faster. Each preset used balanced orders: Helios/fframes/Remotion, fframes/Remotion/Helios, Remotion/Helios/fframes. One warmup per engine/preset is excluded. Helios finished first in every timed round. Bars use a shared linear scale within each preset.

Speed ratio = competitor median seconds ÷ Helios median seconds. The holdout supplied the comparison statistics. Earlier screens only selected settings.

medium

Median delivered seconds · lower is faster
1.27× vs fframes2.00× vs Remotion

Helios won 3/3 timed rounds vs fframes and 3/3 vs Remotion.

All three original rounds and within-round ratios
RoundH secondsF secondsR secondsF/HR/H
111.9915.2024.181.27×2.02×
211.8815.2023.861.28×2.01×
312.0915.7724.041.30×1.99×

Original timer values are in nanoseconds in the downloadable receipts.

ultrafast

Median delivered seconds · lower is faster
1.75× vs fframes4.31× vs Remotion

Helios won 3/3 timed rounds vs fframes and 3/3 vs Remotion.

All three original rounds and within-round ratios
RoundH secondsF secondsR secondsF/HR/H
14.217.3618.001.75×4.27×
24.547.6218.381.68×4.05×
33.766.9918.171.86×4.84×

Original timer values are in nanoseconds in the downloadable receipts.

02 / Reproducibility

Protocol and settings

The workload

The TextGrid fixture animates 3,334 labels using the pinned fframes benchmark equations and DM Sans font. Output is ten seconds at 1080p, with 300 frames at 30fps. Canvas, CPU SVG and DOM paths draw that fixture through different rasterizers.

The clock

Original external perf_counter_ns timers start with a fresh export process and stop after the final video completes a full decode check. Delivery includes process startup, drawing, software encoding, stitching and that final check. Helios validates internally once; fframes and Remotion receive one external validation. Setup, hashing, encoder inspection and the later fidelity measurement are outside this clock.

Software encoding

All profiles use libx264 at CRF11, GOP24, BT.601 TV-range YUV420P and the stated medium or ultrafast preset. Encoder metadata was inspected. CRF matches the encoding control; it does not imply identical output sizes or pixels.

CPU stages

The tested native Canvas and CPU SVG paths use software rendering. Remotion used a software-only Chromium configuration with compositor/rasterization evidence retained in its receipts. These CPU measurements do not compare either engine’s GPU mode.

Holdout profiles

ProfileEnginePresetWorkersEncoder threadsJPEG quality
H-medium-w4-t4Helios nativemedium44—
F-medium-w11-t2fframes CPUmedium112—
R-medium-w11-t8Remotion CPUmedium118100
H-ultrafast-w8-t2Helios nativeultrafast82—
F-ultrafast-w11-t2fframes CPUultrafast112—
R-ultrafast-w11-t8Remotion CPUultrafast118100

Helios and fframes encoder threads are per worker or segment encoder. Remotion’s eight threads apply to an active encoder. Its eleven renderer workers do not imply eleven concurrent encoders.

These profiles were the fastest eligible settings in the disclosed bounded screens. Tuning was not exhaustive. Remotion used JPEG100 because JPEG80 failed the fixed fidelity floor.

fframes ultrafast needed a stream-copy edit-list repair. Its delivery clock includes the repair and final decode check, and both the original and repaired artifacts remain bound in the receipts.

Pinned versions and bindings

Helios source commit0566d1108f922ea88294d4bbe1f11cdb49849834
fframes revisionbacfc3c3212d3d9429468435bfdc1ae2a21c7b3b
Remotion4.0.529
Node24.19.0
FFmpeg9.0
x264 core165
Chrome149.0.7790.0
DM Sans font SHA-2569ae2da663d64342031e59b5fa680dd355171d021b7ebf83774efc7c0330ae7b5

Nineteen compiled JavaScript files matched the frozen candidate byte for byte. The 115-file native source tree at merge matched the tested head.

03 / Qualification

Every-frame quality

All 24 holdout exports, including six warmups, completed and qualified. Repeated identical outputs share six unique every-frame metric sets, each covering all 300 frames. Actual cadence is checked independently: the video has 300 frames with presentation timestamps n/30.

Each encoded output is compared against its own engine’s lossless rasterizer reference. Every frame must meet SSIM Y ≥ 0.995 and PSNR Y ≥ 40dB, U ≥ 35dB and V ≥ 35dB. These checks qualify encoding fidelity and cadence. Different native rasterizers prevent a claim of cross-engine pixel identity.

The saved Remotion comparison clock was corrected to a shared exact 1/30 timebase after actual cadence had been checked. The correction reused saved outputs and preserved their original performance timers.

04 / Separate paired study

A measured gain inside Helios

The final full-decode check was spending roughly ten seconds on one decoder thread in the medium baseline. We bounded that decoder by available CPU parallelism, capped at eight threads, while retaining the complete check. Packet probes still use one thread.

A separate frozen-baseline study ran three fresh pairs per preset. Median within-pair delivery speedup was 1.59× at medium and 1.67× at ultrafast. All six paired outputs had identical encoded bytes. The original clocks and component measurements are downloadable.

This paired study used medium 4 drawing workers/8 encoder threads per worker and ultrafast 6/4. Its settings differ from the competitor holdout. The decoder change is a measured contributor to delivery performance; this experiment does not attribute the entire competitor advantage to that change.

medium · 3 pairs1.59×
ultrafast · 3 pairs1.67×
const decoderThreads = packets
  ? '1'
  : String(Math.min(8, availableParallelism()));

05 / Audit trail

Receipts and limitations

The experiment covers one ten-second TextGrid workload on one Apple M3 Pro running macOS arm64. Three timed rounds describe this study; they do not establish a population-wide performance distribution.

Arbitrary browser compositions, media-heavy videos and CPU-only remote hosts need separate measurements. A fresh scheduler or Orb superiority result has not been established.

The compact source bundle contains adapted reproduction tooling and original receipts. Its fresh build/export/reference flow has not been executed end-to-end. Large original videos and frozen runtimes are omitted. Review its README before treating it as a reproduced environment.

Source + reproduction bundle

benchmark-reproduction.zip · 290.7 KB (297,712 bytes)

SHA-25619415647a9696a034b46a8ff0cb7f98f481d6a49504a44d39e0127cbd3a50261
Holdout timers + quality receipts

holdout-receipts.json · 2455.5 KB (2,514,483 bytes)

SHA-2566f747d497b2af19628524ef42136c0eeeb2def0578fcd7c2269c60186239bd23
Decoder paired study

decoder-paired-receipts.json · 7.3 KB (7,456 bytes)

SHA-25669de7fafe61556b3fdbec3b83e210e150f418baef5c7184ec9e14c3ad1ae4adf
Merged source bindings

merge-receipts.json · 1.9 KB (1,928 bytes)

SHA-256dd6958aeae8d014cb57a005bcc70ff9a36acef7ba83a3deb6dda248ff232f22c
Machine-readable results

summary.json · 2.3 KB (2,338 bytes)

SHA-256a425d76d2039974eeda1ce230526a3812d73d41675a02e487fb2300235a9b64a

Verify downloads against SHA256SUMS. Original manifest SHA-256: 097fb0d8bd5381203a4755d05267fd04416e56f641be2798f226e510aed90461

Source references