A virtual QLab, or Go Button, driving the real firmware of every device on one shared clock. Press GO and watch the Buddy, the Mini and the relay follow. Every other control is in the director panel below.
Try this
Matinee.qlab5 · 192.168.1.45:53000
CueNameNotes
Space is GO · Esc is Panic, anywhere on this page
OSC out
QLAB Buddy480×320 · touch
Physical BOOT
tap = GO · hold 5 s = PANIC
its GO drives QLab, same as the real one
⏻
Physical PWR
short press toggles the backlight
the firmware keeps drawing behind it
↻
Physical RST
hard reset — reboots the chip
RAM clears, splash runs
RF Relay320×170 · encoder
Turn the knob in the ring (scroll or drag it — dragging the screen works too), tap to press, hold for a long press. No touchscreen on this board.
⏻
Side power button — hold 2 s to sleep
asleep, press and keep holding until the gold bar fills to wake it
RF Relay
Slot
Setup menu playing on the relay…
Network cue

This is a QLab Network cue, typed the way you would type it into QLab. The relay’s own firmware reads the address: /rf/1/stop fires the slot’s OFF code, /rf/1/stpo is refused rather than firing the ON code by accident, a bare /rf/learn/3 sweeps every band while /rf/learn/3/868 locks to one, and /rf/stop aborts a fire that is already running. Set a passcode and the relay refuses every cue that does not lead with it (the reason lands in the log); turn QLab sends it on to pass.

Band traffic
Clear
Light
Busy
Hostile
Band held

The four-segment meter in the status bar, and the RF BAND rows on a slot’s SETUP screen (NOISE, MIN, FLOOR, PEAK, LEVEL). The relay’s own floor tracker reads every band once a second, so the floor settles on the quiet reading, PEAK keeps the worst since boot, and a step down waits out the hysteresis.

Connection & pairing
Follow the network
Booting
Joining saved WiFi
Unpaired, looking for a Buddy
Reconnecting
Leaving

Unpair at the relay is the encoder gesture: hold 5 s for the slider, 5 s more to fill it, then UNPAIR on the confirm screen. The relay says goodbye (LEAVING), wipes its WiFi and reboots unpaired. Its RF slots are kept, as they are on the device.

Springboard lock
Radio & power
CC1101 present
CC1101 absent (NO RF)
Battery only
Cabled, QLab idle
Cabled, QLab live
Battery
78%
Voltage curve
BQ27220 gauge

The slider is the charge in the pack, and it drains (or fills on the cable) as the sim runs. What the relay shows is its own battery.cpp reading that pack: a bolt on the cable, a bare “%” for 30 s after unplugging while the voltage settles, a 20 s average, and on battery a number that only falls. Raise the slider unplugged and the relay holds its last reading, as it does on the device. With a fuel gauge fitted the number is the gauge’s, with no settle or average.

QLAB Buddy Mini368×448 · touch
Physical BOOT
tap = next page · hold 3 s = unpair
or re-hunt when unpaired; fires on release
⏺
Physical USER
tap = panel off / on
a hold does nothing — by design
PWR
Physical PWR
press = panel off / on
SOLO
Unplug the buddy
the Mini keeps the show on its own
Touch the screen like glass: tap, swipe sideways for the next page, drag from the top or bottom edge for brightness, drag the middle to scroll a list. With the buddy’s OSC on CTRL the REMOTE page is in the cycle (hold GO for panic). The buddy is ONBOARDING, not a tether: press SOLO to switch it off and the Mini reads QLab itself.
QLAB Buddy Mini
Network
On the venue WiFi
WiFi out of range
USB cable to the Mac only
On the buddy’s pairing AP
Battery
64%
Pairing & reset
Buddy content

The springboard grid is the buddy’s, pushed over /mini/sb; Guest PIN 1234. A drawing is fetched from the buddy while the Peek page is open.

Universal ControllerNULLLAB · 4 motors · 4 servos
NULLLAB ESP32192.168.1.70:8000
BOOT
Physical BOOT — hold to test-fire
every motor at 25 %, every servo sweeping, until you let go
■
/stop — halts every motor and servo
lands mid-cue, as it does on the board
Universal Controller
Board
NULLLAB ESP32
Romeo Mini ESP32-C3

One sketch, two builds: -DBOARD_ROMEO_MINI picks board_config_romeo.h — two PH/EN motors, four servos, no addressable LEDs, and an RST button that fires motor 1 as a failsafe. Switching powers this board off and boots the other.

Network cue

The controller’s own onMotorDispatch() and onServoDispatch() read the address: a bare /sN/<angle> moves a servo, /sN/velocity spins a continuous one, /m* hits every motor, and the legacy /start, /reverse, /test drive M1. Arguments after the address go as OSC arguments (numbers as numbers).

Status LED
Pairing (white pulse)
Connecting (yellow blink)
WiFi dropped (red blink)
Reconnecting (yellow)
Connected (green)
QLab open (blue)
Director panel network, timers, pairing and the Buddy’s buttons
Network
QLab open
WiFi, no show
Cabled (LAN)
Pairing mode
WiFi lost (red)
Never configured (grey)
Internet check
Confirmed (green dot)
Not confirmed (white dot)

Only shows while QLab is open: the dot beside QLAB in the status bar turns green once the Buddy has reached the internet; the label stays white.

Workspace
Workspace discovery

A Buddy that remembers no show does not take the first Mac that answers. That Mac could belong to another rig on the same network. It asks every Mac for 2.5 seconds. If more than one offers a show, it opens the Workspace picker and lets the operator choose. Tap a row to connect.

WiFi switch

Tap a saved network on the Buddy to switch to it. Before any prop is told, the Buddy joins the new network to check it is real, then goes back and tells the props, then joins for good. If the network never answers, the Buddy goes back and nobody moves. Tap the row again while it is checking to cancel.

Pinned workspace

A Buddy pinned to one Mac ignores every other QLab. While the pinned one is silent and another is answering, the Settings Workspace row says so in amber, Pinned, ignoring the other address, rather than leaving the Buddy quiet for no visible reason.

Show timer

Each pill is a #timer/ note on the current cue. start and a duration arm and wait for the playhead to leave the cue; pause, resume, end and clear act at once. The Buddy shows the timer top-left straight away. The relay shows it on its screensaver, which it only enters after 30 s untouched: leave the wheel alone and the countdown fills its screen.

Buddy buttons
OSC access
CTRL
VIEW only

VIEW silences GO and PANIC, on screen and on the BOOT button. The Buddy still follows the show.

Devices

PING is the Buddy’s own /identify, three packets to the board’s address, and the board’s firmware answers: the relay’s ring and the controller’s strip flash white three times, the Mini blinks its frame. Nothing fires. The rows stay green because each board answers the Buddy’s /ping every 750 ms; one that stops answering greys out after 6 s, as on the device. The same buttons on the Buddy’s Devices screen do the same thing.

Jump to a screen

Every one of these is the firmware’s own screen. The last five were compiled into this simulator all along with no way to open them.

Software update

Opens the Software update screen and puts it in that state. Install is only offered when the manifest carries a checksum, which is why “update available” can be tapped and the others cannot. The second row sets what the website says instead: tap Check Again on the Buddy and it checks, finds it, and Install fills its bar, reboots into a trial and confirms it.

Magic API feeds

The Buddy polls web APIs the browser cannot reach, so the page plays the servers. A changed value moves that feed’s time stamp; a repeated one does not. A failing feed keeps its last good value through three transient misses, then turns red. A peer’s offer puts Accept Sync / Deny Sync on the page; Accept brings its feeds across.

QPAL peek

The Peek screen is the Buddy showing what someone drew on a QPAL. A symbol reaction is a codepoint the emoji artwork does not cover, which the device draws from its own symbol font.

Passcode
Accepted
Refused by QLab

When every controller the Buddy can reach refuses its passcode, the show is replaced by a takeover screen saying so. The status badge turns red with it.

Clock
Internet time
No internet time

With no internet time, the clock at the bottom right of the screen shows --:-- --. Tap it to set the time by hand: type four digits, pick AM or PM, then press OK. Tap the clock again to hide it.

Screen brightness

The real backlight range, driven through the firmware’s own setBrightness().

Pairing

In order: tap + on Devices, let a prop join the Buddy’s hotspot, tap SYNC. The prop gets your WiFi and a fixed address.

Show hotspot

Opens the Hotspot page. Move on a row (or Move All) sends that prop to the hotspot: it shows Moving until it is heard there. Unplug a resident and rename the hotspot and its row turns red, MISSED: it will look for the old name until it is paired again. Hold to turn off with a resident unplugged and the Buddy refuses, because that prop would be stranded.

Paired device
Reset