Benchmarks: measured, not promised.
Every number below comes from the production output engine —
full pipeline, packets counted at the receiver, 100% reception verified —
on the machine the console is built for: a Mac mini M4 (10-core), Node 24.
Two kinds of truth, kept apart on purpose: what ran live on a stage, and
what the bench measures at the limit.
| Rig | Universes | Cost per 25 ms tick | Reception | Bandwidth |
| Stadium show — live, real audience · 388 fixtures | 70 | 5.7 ms median · 7.4 P95 · 23% | full show, zero incidents | — |
| 1,000 modern heads × 50 ch bench | 100 | 2.7 ms · 11% | 100% · 40.3 Hz | 21 Mbit/s |
| 1,000 modern heads × 100 ch bench | 200 | 3.2 ms · 13% | 100% · 40.2 Hz | 41 Mbit/s |
| 4,000 fixtures × 40 ch bench | 334 | 4.5 ms · 18% | 100% · 40.3 Hz | 69 Mbit/s |
| Output engine alone 8 parallel workers | 4,000 | 0.71 ms · 2.8% | 640,000 / 640,000 packets | 820 Mbit/s |
Bench rows: synthetic rigs, full pipeline (playback merge + two effects on every
fixture + resolver + real sACN send, reception counted). The green row is not a bench — it is
the show. Repeatable: scripts/bench-network.js ships with the console.
- The packet 0.12 µs
- Serializing one sACN universe on the template path costs 0.12 µs — the bare UDP
syscall costs 3.6 — for a single-thread ceiling around 6,800 universes per
tick. The stock-library baseline was 27.8 µs: that wall was software,
and it was demolished in software.
- The real wall the network, not the CPU
- 4,000 universes = 2,048,000 DMX channels at 40 Hz = 820 Mbit/s: gigabit
Ethernet is the first honest limit. Past it the answer is 10GbE — or sharding universes
across session stations, the way the pro world has always scaled.
- The jitter said out loud
- Median and P95 are excellent; the occasional worst tick can spike — that's the macOS
scheduler, and pretending otherwise would be marketing. The professional answer is the
session backup, which also covers "machine died", not just "tick was slow".
Why a Mac with Apple Silicon — and why an M4 is enough.
- Single-core by design
- The critical path — resolving the whole rig 40 times a second — is deliberately
single-thread: deterministic, testable, no lock roulette mid-show. So the console
scales with single-core speed, and the M4 is among the strongest single-core CPUs
made — bigger "Ultra" machines actually do worse where it counts.
- The GPU stays free
- The engine never touches the GPU. The tower with the big graphics card belongs to
your visualizer — Capture, previz — not to the console.
- How you grow
- Not a bigger Mac: another station in session. Shard the universes,
keep a backup that can seize the output by sACN priority. Distribution, not
gigahertz.
Limits and potential, in the open.
- Proven live
- One full stadium production — 388 fixtures, 70 universes, LTC-chased, full show
with a real audience, zero incidents. That is the live track record so far, and we
say so: one show, done right.
- Measured potential
- A 1,000-head modern rig uses about a tenth of the tick budget with two effects
running on every fixture — headroom left for pixel-mapping, timecode and the audio
bump engine together. The output ceiling sits far beyond any realistic rig.
- What DORAH is not
- No physical DMX ports — the output is network (sACN / Art-Net) and the nodes are
yours. macOS-only today, Apple Silicon first. And the AI never fires a cue: on a
critical show your safety is the two-step arm and the backup station, not faith.