DORAH

The lighting console you program by talking.

Tell DORAH what the song needs. It patches the rig, builds the presets, writes the cues and the effects — and what leaves the desk is standards-compliant sACN and Art-Net, at stadium scale. Nothing hits the stage until you press GO.

Join the waitlist See it work ↓ one email · no forms, no tracking

sACN E1.31 · Art-Net · GDTF · MVR · NDI · SMPTE LTC

You talk. It programs. You verify.

The conversation is the command line. Every request becomes real programming — presets, cuelists, effects — and every reply is a verifiable change on the cue sheet. Never a mystery, never a black box.

✳ DORAH AI bridge connected · GM 100%
Operator Chorus: white strobe bump on the back trusses, and keep the amber floor from the verse.
DORAH AI Done — ✓ store cue 7 «CHORUS» --fade 0.5 — strobe bump on 46 spots, amber floor held. It's in blind: review it, then GO.

Three real exchanges on a loop, in the console's own words: the lines are the exact feedback DORAH prints for every executed command — and everything lands in blind until your GO.

\n

How the DMX leaves the desk.

No magic between the cue and the cable: a fixed-rate engine, two standard protocols, and a backup that's already running. The console shows you its own vital signs — this bench lives in the Network page.

The tick every 25 ms
Forty times a second the engine resolves playbacks, effects and programmer for the whole rig and re-serializes every universe — a template-based packer takes ~4.5 µs per universe, with opt-in parallel workers when the count grows.
The wire sACN + Art-Net
sACN E1.31 multicast or unicast with per-machine identity, priority and sequence numbering; Art-Net with compliant ArtPoll/ArtPollReply. Streams terminate cleanly — receivers are told the source is gone. No ghost data, no surprise blackout.
The backup DORAH-Net
Stations find each other by multicast beacon and elect master/backup on their own. The backup replicates showfile and live state, follows the show, and can seize the output mid-song by sACN priority — a hands-free takeover. When one machine isn't enough, universes shard across stations.

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.

RigUniversesCost per 25 ms tickReceptionBandwidth
Stadium show — live, real audience · 388 fixtures705.7 ms median · 7.4 P95 · 23%full show, zero incidents
1,000 modern heads × 50 ch bench1002.7 ms · 11%100% · 40.3 Hz21 Mbit/s
1,000 modern heads × 100 ch bench2003.2 ms · 13%100% · 40.2 Hz41 Mbit/s
4,000 fixtures × 40 ch bench3344.5 ms · 18%100% · 40.3 Hz69 Mbit/s
Output engine alone 8 parallel workers4,0000.71 ms · 2.8%640,000 / 640,000 packets820 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.

Every page of the desk, explained.

Title, what it does, and the real screen — for every view of the console. These screenshots all come from one example showfile — the real stadium production of summer 2026, 388 fixtures across 70 universes — because a real show explains a desk better than a staged demo. Your showfile will look like your show.

Playback

The playback is the show.

Cuelists with fade, snap, follow and per-cue effects — the sheet marks them ∿N. The fader wing fills the column with executors and assignable keys, and the masters column keeps the Grand Master and Programmer Time — a global fade on every programmer gesture — one glance away. GO stays a human key, always.

PLAYBACKseq 1 · cue 5 · 24 cues
DORAH Playback view: a 24-cue cuelist with fades, follows and per-cue effects, the green GO button on standby
Groups

Pools are keycaps.

Every cell is a hardware-style key with an identity light-bar: give any cell its own colour with appearance, rename or update it from its ✎ menu, and batch-edit whole rows — rename with auto-numbering, one colour, one confirm — in Edit mode. Sub-fixture groups address the single cells of a machine.

GROUPScustom + auto per type
DORAH Groups view: pools of custom groups named after trusses and towers, plus automatic groups per fixture type
Preset

Complete pools, per machine.

The AI builds and fills them — dimmer steps, colours, positions, gobos, plates and bulbs — with the category hue on the light-bar and each colour wearing its own appearance. Recalling a preset is one tap; storing into a cell is an armed, two-step gesture.

PRESETpools per machine
DORAH Preset view: dimmer, plate and bulb preset pools at every intensity step, built per machine type
Effects

Effects think in BPM.

No abstract hertz: every wave, rainbow and bump is set in beats, so it stays musical when the tempo changes. Play them live on the selection, tune rate, size and phase on the fader blades, store them into cues — plus the table engine, rows that each play on their own fixtures.

EFFECTSlive FX in BPM
DORAH Effects view: live FX panel with waveform preview and BPM sliders, plus the table effects engine below
Layout

The rig as it stands.

Geometry imported from MVR — trusses, towers, floor — selectable by click or marquee drag, down to the single cell of a multi-instance machine. What you select is what the programmer touches.

LAYOUTflown · 296 fixtures
DORAH Layout view: the stadium rig with labelled trusses and towers, imported from MVR
3D

Space is an instrument.

The spatial engine computes waves on the true 3D positions of the rig: plane fronts sweep the stage in any direction, radials breathe out of any point, width opens the window — all in BPM, all stored like any effect.

3Dspatial FX engine
DORAH 3D view: the rig lit in amber, with the spatial effects engine panel set on a plane wave
Audio

The song, drum-machine style.

Offline analysis splits the track into stems and finds every onset; each lane has its own threshold, and regions turn a lane into a trigger — kick over the threshold fires a bump on an executor, quantized to the beat. The light breathes with the record, not against it.

AUDIOonsets per stem · 120 BPM
DORAH Audio view: colour-coded onset lanes for kick, snare, hi-hat, toms, cymbals, bass and vocals across the whole song
Patch

Three subpages, one truth.

Fixtures: GDTF profiles, auto-addressing, per-fixture pan/tilt invert and offset — applied at the output, so presets stay clean. Fixture Setup: inspect and edit any channel of a profile. Builder: create a fixture type from scratch — by hand, or described in a sentence to the AI.

PATCH388 fixtures
DORAH Patch view: fixture table with types, modes, universes and addresses, GDTF library search and MVR import
Tools

An hour of pool-building, one key each.

Build the base pools for every machine type, fill the dimmer scale, spread pan patterns across a truss, copy a whole preset family from one fixture type to another — the boring hour of every new rig, compressed to a click.

TOOLSone-key preset ops
DORAH Tools view: one-key operations to build base preset pools, apply pan patterns, quick effects and copy values between machine types
Set

The setlist knows the clock.

Every song carries its sections on timecode: click a row and the show jumps there, transport included. Cue points import straight from your editor's TSV, and live offsets shift a whole song without touching a cue.

SETsections on timecode
DORAH Set view: the song's sections with their timecode start times — click a row and the show jumps there
Network

The desk that watches itself.

Stations find each other by multicast and elect master/backup on their own; the backup replicates show and live state and can seize the output mid-song by sACN priority. The realtime bench is on the page, always — the same numbers shown in the engine section above.

NETWORKsession + realtime bench
DORAH Network view: stations table, master/backup session controls, sACN and Art-Net outputs, realtime engine bench at 70 universes
AI

Pipelines on keys, chat below.

Study the song, program it, prep the rig, run the doctor — each is one key running a full autonomous pipeline with the song brief as context. Everything lands in blind: the AI can propose a show, never arm one.

AIautonomous pipelines
DORAH AI view: one-key autonomous pipelines — study the song, program the song, prep the rig, tidy the layout
Pixel

Video becomes light.

Import a clip or take NDI live, and the stream lands on the rig through UV maps drawn from the real layout — every plate and bulb a pixel, live filters in the chain, floor at black 10% so the video never kills the show.

PIXELvideo → rig
DORAH Pixel view: video-to-rig pixel mapping with clip import, NDI live input, UV maps and sync controls
Setup

Set once, survives the reboot.

Timecode, audio device, network outputs, density — everything persists in the showfile, so the desk comes back up exactly as it went down. The network stays hot from the first tick.

SETUPpersists in the showfile
DORAH Setup view: LTC timecode settings with FPS and channel, audio device, network shortcut, grand master and blackout

Boringly compliant, on purpose.

A console earns trust byte by byte. DORAH speaks the industry's protocols to the letter of the specification — because at showtime, the network is not the place for surprises.

sACN ANSI E1.31
Per-machine source identity, priority, sequence numbering and clean stream termination. Proven at 70 universes.
Art-Net
Compliant ArtPoll / ArtPollReply identity — nodes and visualizers see a well-behaved peer, not a mystery source.
GDTF + MVR
Fixtures from their official descriptions, the rig imported with real positions — down to each sub-fixture.
NDI video-in
Live video mapped onto the rig — pixel-mapping with UV maps, live filters and a delay buffer.
SMPTE LTC
Chases linear timecode from playback, with cue triggers on the timeline and freewheel handling.
Session
Master / backup over the network with automatic takeover — the backup seizes output by sACN priority, mid-show, hands-free.

The AI programs.
Only you arm.

Every irreversible gesture on DORAH is two-step: the first press arms — yellow, unmistakable — the second press fires. Store, update, delete, blackout. The AI writes in blind and previews everything, but it can never arm the stage by itself. That's not a setting; it's the architecture.

Try it. This one is safe here.

Battle-tested where it counts: one stadium stage, 388 fixtures, 70 universes, zero incidents. output measured at the byte level · full show, live audience · summer 2026

Be there when the desk lights up.

DORAH is in private development, heading to a limited beta. The waitlist is one email — tell us who you are and what you light.

Join the waitlist coming 2026 · macOS · built for Apple Silicon