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. Optional Guard tools can lock a certified look for venue work — off by default on normal events. 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.

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 ~0.12 µ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 bench1000.85 ms · 3.4%100% · 40.2 Hz21 Mbit/s
1,000 modern heads × 100 ch bench2001.32 ms · 5.3%100% · 40.3 Hz41 Mbit/s
4,000 fixtures × 40 ch bench3342.74 ms · 11.0%100% · 40.2 Hz69 Mbit/s
Output engine alone 8 parallel workers4,0000.70 ms · 2.8%640,000 / 640,000 packets819 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. Measured 2026-07-24 on Apple M4 · Node 24.16.

The packet 0.12 µs
Serializing one sACN universe on the template path costs 0.12 µs — the bare UDP sendto costs 3.1 — for a single-thread ceiling around 7,700 universes per tick. The stock-library baseline was 27 µ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 = 819 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 3.4% 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, Fixed Look when you need it, and the backup station — not faith.

Six hubs. One desk.

The rail is not a flat menu of every page. Work is grouped the way a show is run: Show · Prog · FX · Rig · Guard · Sys. Tabs under each hub are the pages — and every screenshot below shows that rail.

▶ Show

Playback & time

Playback, Cuelist, Tracking, Set, Audio — the live show and the clock.

◧ Prog

Pools

Groups, Preset, Tools — what you select and what you store into.

∿ FX

Motion & video

Effects (Live · Table · 3D · Palette), PRG FX, Pixel.

⌗ Rig

Patch & space

Patch and Layout — GDTF, MVR, the geometry the programmer trusts.

◎ Guard

Venue tier

Fixed Look, Pool, House, Emergency, Guest, Desk — optional, default cold.

⚙ Sys

Machine

Network, Setup (Shortcut · MIDI · Visualizer · language), AI.

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.

ShowPlayback · Cuelist · Tracking · Set · Audio

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; the masters rack holds Grand Master, Programmer Time, Speed Masters (BPM clocks FX can LINK to), and a Fixed Look slot for quick lock/unlock without leaving the show. ⚑ Prep parks a dark 0.1 cue with the opener's non-intensity state: GO in the dark, then the first cue rises without parasite moves. Click a cuelist name and it becomes the selected cuelist — keyboard, MIDI and CLI drive that one; ⏱ Timing lays out every fade, snap and follow. GO stays a human key, always.

PLAYBACKShow · seq · GO
DORAH Playback view: cuelist sheet with fades and triggers, GO standby, fader wing and masters with Fixed Look and Speed Master slots
Cuelist

Every cuelist in one list.

The Cuelist view is the inventory of the show: every sequence as a row — create empty ones, open any in Playback with a click, assign to an executor slot to fire. Store still happens from the programmer; this page is where you see the full bank of lists, not a single sheet.

CUELISTShow · all sequences
DORAH Cuelist view: inventory of all sequences in the show with open and assign actions
Tracking

What each cue really holds.

Tracking is the cue under the loupe: pick sequence and cue, then read fixtures as rows — presets and values, with ◂N where content inherits from an earlier cue. Click a cell to change the preset; group, same-content or single-fixture modes keep a stadium sheet readable. It is programming verification at glance speed — the human check after the AI has written.

TRACKINGShow · cue under the loupe
DORAH Tracking view: per-fixture cue content with tracking inheritance marks
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 from your editor's TSV; live offsets shift a whole song without retouching every cue.

SETsections on timecode
DORAH Set view: the song's sections with their timecode start times
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
DORAH Audio view: colour-coded onset lanes for kick, snare, hi-hat, bass and vocals

ProgGroups · Preset · Tools

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 in Edit mode. Sub-fixture groups address the single cells of a multi-instance machine.

GROUPScustom + auto per type
DORAH Groups view: pools of custom groups named after trusses and towers
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, colour and position pools built per machine type
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. Quick effects on the selection still land live for store into the FX pool.

TOOLSone-key preset ops
DORAH Tools view: one-key operations to build base preset pools and pan patterns

FXEffects · PRG FX · Pixel · 3D · Palette

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. Four engines live here as tabs — Live, Table, 3D, and Palette — with the same pool of cells under every one of them. Each cell carries its own G/S switch: G plays on whatever you have selected, S binds it to a group. Then ride them cue by cue on the PRG FX page.

EFFECTSlive FX in BPM
DORAH Effects view: Live engine tab with waveform preview and effects pool
PRG FX

Effects ride the cues, on motorized faders.

Every cuelist carries its own bank of effect faders. Raise one and the effect enters the cue at that level — then it tracks through the following cues until you pull it down. Each GO runs the fader like a motor: from the level it's really at to the new target, inside the cue's fade, phase unbroken. Link a playback to a Speed Master when the whole bank should follow one BPM clock.

PRG FXper-cuelist FX bank
DORAH PRG FX view: motorized effect faders next to the cue sheet
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 held so the video never kills the show.

PIXELvideo → rig
DORAH Pixel view: video-to-rig pixel mapping with clip import and NDI
3D

Space is an instrument.

The third tab of Effects 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. One key stores the spatial effect into the pool, where it wears its ⬢ badge and rides the cues like any other.

3Dspatial engine · Effects tab
DORAH Effects view on the 3D tab: the rig in 3D space with the spatial engine
Palette

Colour effects from your presets.

The fourth engine sequences any number of colour presets across the selection: tap green, white, red — hit apply — and the bands lay themselves over the rig. Xfade sets the seams: 0 is hard flag bands, 100 is a continuous gradient in your own colours. Hand it to the 3D engine and the bands follow the real geometry. Preset-first: fix the preset and every palette follows.

PALETTEmulti-preset colour sequencer
DORAH Effects view on the Palette tab: colour preset sequence with xfade and spatial controls

RigPatch · Layout

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
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.

LAYOUTMVR · flown
DORAH Layout view: the stadium rig with labelled trusses and towers, imported from MVR

GuardFixed Look · Pool · House · Emergency · Guest · Desk

Fixed Look

Lock the field. Resume the show.

Program a full look — dimmer, position, colour, everything — from stage, programmer, cue or pool; bake it; turn Fixed Look on. Inside the scope, AI, FX, guest, facility and playback cannot change those bytes until you unlock. Unlock restores the live show underneath — no blackout, no forced re-GO. CLI remains secure (alias match); the UI says Fixed Look.

FIXED LOOKGuard · bake + lock
DORAH Guard Fixed Look: wizard to capture a full look and lock it on the output
Pool

Full looks, ready to GO.

Store complete looks from live stage or programmer — opening, half-time, finale. Pool looks fire from the Desk as large pads; Lock promotes one into Fixed Look memory. This is show-and-venue memory, not a dimmer stack.

POOLGuard · kind=look
DORAH Guard Pool: complete looks stored for Desk GO and Fixed Look promote
House

House and eco — not the lock.

House / Eco facility looks turn on and off for walk-in and service. They are not Fixed Look: they yield to the lock when the field is secured, and they stay optional for normal events. Promote to Fixed Look only when you mean untouchable.

HOUSEGuard · service looks
DORAH Guard House: House and Eco facility service looks
Emergency

Panic, freeze, evac — hard, explicit.

Hard safety modes sit on their own page: panic, freeze, evac, plus restore. With Fixed Look on, panic by default does not black out locked fixtures (field integrity for sport and broadcast); override is an explicit config choice, not a surprise. Emergency is always operator-driven, never AI.

EMERGENCYGuard · panic · freeze · evac
DORAH Guard Emergency: panic, freeze and evac hard safety controls
Guest

Foreign sACN, under policy.

Arm guest input when another desk or system must feed selected universes. Guest merges outside Fixed Look scope — locked fixtures stay locked. Default is disarmed: venue input is opt-in, not ambient risk.

GUESTGuard · sACN in
DORAH Guard Guest: optional sACN guest input, disarmed by default
Desk

Big pads for looks. Small keys for danger.

Desk is the ops surface: large pool pads fire instant GO (no confirm). Critical actions — House, Fixed Look, Panic, Freeze, Evac, Clear — sit small, top-right, with confirm. Full-screen mode for a dedicated security monitor; Esc exits.

DESKGuard · ops surface
DORAH Guard Desk: large pool pads and small confirmed critical keys for House, Fixed Look and emergency

SysNetwork · Setup · Shortcut · MIDI · AI

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
Setup

Set once — including the language.

Timecode, audio device, network outputs, density — everything persists so the desk comes back up exactly as it went down. Setup ▸ General → Language: Italiano | English, stored on the machine, not in the show. Tabs: ⌨ Shortcut, 🎹 MIDI, ⬢ Visualizer — one key launches the external 3D visualizer pointed at the current show.

SETUPlanguage · TC · audio
DORAH Setup view: language segment, LTC timecode, audio device and general settings
Shortcut

Your keyboard is the front panel.

The computer keyboard is a remappable console surface, and Setup draws it key by key: every cap shows the function it carries, click one for the assignment menu, ⇧/⌃/⌥ open the combo layers. Learn works sampler-style — arm LS, click any lit target, press the key, done. Factory defaults follow the console model: letters write the keyword — S 5 ⏎ is store 5. The map is a per-machine file, never part of the show; Space stays GO, hard-wired.

SHORTCUTdrawn keyboard · learn
DORAH Setup Shortcut tab: the Mac keyboard drawn key by key with mapped functions
MIDI

Controllers that talk back.

Any MIDI control maps to anything: notes, CCs and pitch-bend live in the same keymap as the keyboard, with the same learn — arm LM, click a target, move the control. Factory profiles seed a Behringer X-Touch (MCU) family or Akai APC (mini / mk2): faders onto executors plus Grand Master, and the physical faders follow the executor page. Motor echo moves X-Touch faders by themselves; LED feedback paints APC pads from live state — GO, armed, on — semantic colours, not decoration.

MIDIX-Touch · APC LED
DORAH Setup MIDI tab: controller profiles, motor echo and LED feedback for APC pads
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. The engine card shows account and model; touched chips list exactly what changed, one key shows the diff, one key rolls the whole run back. The AI never toggles Fixed Look or emergency by default.

AIautonomous pipelines
DORAH AI view: one-key autonomous pipelines with engine identity card and run history

Venue when you need it.
Off when you don’t.

Stadium and house work demand hard locks, service looks and guest input. DORAH adds that as an optional tier on top of the same show engine — default stays a normal event: nothing armed until you say so. See Guard in the tour ↓

Default = normal event
Fixed Look off · no facility active · guest disarmed · safety off. Same showfile, same AI, same GO discipline. Guard stays cold until you open it.
Fixed Look Secure Mode
Bake a complete programmed look, lock the scope, keep output alive. Creative layers cannot move locked fixtures. Unlock resumes the live stack underneath — no blackout.
Look pool + Desk
Save full looks; fire from large Desk pads without confirm; promote any pad to Fixed Look. Ops can run house looks without touching the creative sheet.
House / Eco
Facility service lighting for walk-in and power-save — distinct from the lock. On and off, optional.
Emergency
Panic / freeze / evac with explicit confirm. By default panic does not override Fixed Look (protect the field); hard override is config only if you need it.
Guest sACN
Optional armed input and merge policy; never paints over Fixed Look scope. Disarmed by default.

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.

The desk also tells you what state it is in, always: a persistent arm strip under the transport names the armed mode — every gesture graded by risk — and survives view changes; Highlight, Blind, Solo and Fixed Look pin their own rack banners (no emoji, colour + text), so a forgotten mode can't ambush you three songs later. And when something lands wrong anyway, the ⟲ Oops list holds the last fifty gestures — human and AI, each with its author — and undoes back to any point you pick.

Venue stays optional: for a normal tour Guard can stay cold. When Fixed Look is on, panic by default does not black the locked field — lock and emergency are different tools, not the same switch.

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