VJ & OSC guide
Drive the crowd's phones by hand, or from the professional software you already run — Resolume, TouchOSC, Bitfocus Companion, or any OSC source. Optional WebMIDI maps a hardware fader/pad box.
1 · The VJ pult (nothing to install)
Open the console at /studio (or /operator for the main show), press Start, then open “🎛️ VJ pult” and switch Manual control on. You get four touch layouts — Faders, Colour wheel, XY pad, and Big pads — plus a fullscreen button. Toggle “intervene in preset” (the running preset keeps going and your moves ride on top) or “manual only” (presets off, the colour is purely yours). The Palette section locks the whole crowd to a flag's or a brand's colours — pick them on the wheel or tap a flag.
Everything is safety-clamped on every phone: at most 3 flashes per second, no red strobe — you can't push it past that no matter how hard you ride the faders.
2 · Drive it from Resolume / TouchOSC / Companion (OSC)
A tiny bridge runs on your own laptop. It listens for OSC over UDP and forwards each message to the show over HTTPS — so nothing new is opened on the show server, and it works through NAT and TLS. It's zero-dependency Node; the source is in tools/vj-bridge/.
Run the bridge
Grab your room's token from /studio (it's window.__SESSION__.token in the page), then:
node tools/vj-bridge/bridge.mjs \
--api https://lightshow.flyreelstudio.eu \
--token "$CLS_CONSOLE_TOKEN" \
--osc-port 9000 --osc-host 0.0.0.0
For the main show instead of a /studio room, pass --operator-pass "$OP_PASS" in place of --token.
Point your software at it
- Resolume Arena/Avenue: Preferences → OSC → enable Output, IP = the bridge laptop (
127.0.0.1if it's the same machine), Outgoing port =9000. Then in Shortcuts → Edit OSC, map a fader to/cls/manual/hueor a clip to/cls/fxwith valuesalute. - TouchOSC / Lemur: add an OSC connection, host = the bridge laptop's IP, send port
9000, address your controls/cls/*. - Bitfocus Companion (no bridge needed for buttons): add a Generic HTTP connection to
https://lightshow.flyreelstudio.eu; on a button, POST to/api/console/fxwith headerAuthorization: Bearer <token>and body{"name":"salute"}.
OSC address map (/cls/*)
| Address | Args | Effect |
|---|---|---|
/cls/manual/hue | f 0..1 | colour (×360), auto-enables manual |
/cls/manual/sat | f 0..1 | saturation |
/cls/manual/bri | f 0..1 | brightness |
/cls/manual/flash | f 0..1 | flash (torch) intensity |
/cls/manual/on | f ≥0.5 | enable / disable the manual layer |
/cls/manual/mode | s | intervene or full |
/cls/palette | s | restrict to colours, e.g. "e30613,ffffff" |
/cls/preset | s | pulse, rainbow_chase, color_waves, ocean, off |
/cls/torch | s | beat, strobe, sparkle, off |
/cls/fx | s / button | firework: salute, twinkle, ripple, strobe_burst, color_burst |
/cls/blackout | — | blackout (lights only; music keeps playing) |
/cls/seek | f ms | jump the music + lights |
/cls/mute | f ≥0.5 | mute the music on every phone |
/cls/marquee | s | scrolling text on every phone |
It stays safe. Every command is re-validated and re-governed on the server and is scoped to your own room by a signed token — even hostile OSC can't exceed the epilepsy-safety limits or drive another show.
3 · WebMIDI (a hardware controller)
On the laptop running the console, plug in a USB MIDI fader/pad box (Korg nanoKONTROL, Akai APCmini, …). In the pult's MIDI controller panel press Connect, then Learn a fader for each value — wiggle the control to bind it. Faders map to the four values; note pads fire the flash. Chrome or Edge on desktop only; the mapping is remembered.
4 · Self-host it
The whole app is open source (Apache-2.0). Run it yourself with Docker and drive it exactly the same way — see the repository and the bridge README.