Free · Open source · macOS

The look engine for Resolume.

LIGHT sits between Arena and your lighting rig. Build looks in a clip grid, fire them from columns, MIDI pads, or Resolume itself — with beat-synced effects, real 3D previz, and rock-solid Art-Net output at 40 Hz.

Universal (Apple Silicon + Intel) · signed and notarised by Apple — opens on a double-click.

Lighting that plays like Resolume.

No cue stacks, no virtual consoles, no channel spreadsheets mid-set. Looks live in a grid of layers × columns — a column is a cue, a cell is a look, and everything follows the beat.

Clip-grid looks

Layers stack bottom-to-top with blend modes: washes replace, FX multiply over whatever colour is up, strobes ride on top. Crossfades per layer or per look. Flash cells are momentary — hold to hit.

Beat-synced effects

Sine, saws, square, chase, and random waves in musical units — from 1/4 beat to 8 bars — with size, phase-spread, and width per fixture group. Tap tempo, drag the BPM, or let Arena drive it.

Real previz

A 3D beam view with spinning derby fans in true macro colours, plus a 2D plan where you drag fixtures to place them. See the show without powering the rig.

Art-Net + sACN out

Continuous 40 Hz output, broadcast or unicast per universe, with live DMX meters and engine health (refresh rate, tick jitter) always visible.

MIDI learn everywhere

Arm learn, click any cell, column, or fader, touch your controller — done. Mappings live in the project. Native CoreMIDI in the app keeps pads working even with the window closed.

Follows Resolume

Point Arena's OSC output at LIGHT: column launches fire matching light cues and Arena's BPM drives every effect. One clip grid runs video and lights together.

Two engines. One truth.

The DMX core is written twice — a TypeScript reference and the production Rust engine — speaking one protocol. A differential test boots both and requires byte-identical output on all 512 channels before anything ships.

  • Engine ≠ UI. DMX renders in its own real-time process. Close the window, kill the browser — output never stutters.
  • 7.9 MB native app. Tauri 2 + Rust core. No Electron, no garbage-collector pauses in the hot path.
  • Cues can't misfire. Columns skip momentary flash looks by design — a cue can never latch a blinder on.
  • Autosave with rotating backups. Every edit persists within seconds, five generations deep.
$ npm run test:parity
both engines up
ok   idle output identical
ok   column 1 (amber wash)
ok   derby macro + motor
ok   grand master 50%
ok   blackout
ok   manual haze
ok   bpm parity
ok   blinder held
ok   blinder released
ok   live column state parity
Parity: Rust core matches the Node reference.

Installing.

Download, drag, open. The build is signed with an Apple Developer ID and notarised by Apple, so there is no Gatekeeper detour and nothing to allow in System Settings.

Download

One universal build for Apple Silicon and Intel — no wrong version to pick.

Drag

Open the .dmg and drag LIGHT into Applications, the way it opens expecting you to.

Open

Double-click it. macOS confirms once that it came from the internet — click Open and that is the last you will hear of it.

First launch also asks to use the local network. Say yes: Art-Net and sACN are how LIGHT reaches your rig, and it cannot light anything without it.

Up in three steps.

One patch, a bank of looks, and Arena talking to it — the default project ships with a working rig and looks so there's something moving the moment it opens.

Patch

Pick fixture profiles, set universe and address, drag fixtures into place on the 2D plan. Address conflicts light up red.

Build looks

Select a cell, pick a fixture group, set colour and intensity, stack effects. Everything edits live — if the look is playing, the rig follows your faders.

Play

Fire cells and columns from the grid, keys 1–8, MIDI pads, or Arena's own clip grid over OSC. Tap tempo or let Resolume set the pace.

# run from source
git clone https://github.com/legofsalmon/light && cd light
npm install
npm run dev    # engine + UI → http://localhost:5173
# build the macOS app (needs Rust)
npm run app:build  # → target/release/bundle/macos/LIGHT.app

Documentation.

Everything lives in the repo and reads well on GitHub.