A theatre cue stack lives or dies on the operator. They sit in the booth, follow the SM's cue calls in their cans, and press GO at the right moment for every sound, light state, and video clip in the show. The traditional setup is a QLab laptop with a spacebar and an iPad. A theatre cue gamepad setup replaces the spacebar with something that lives in the operator's hand instead of on the desk — and it turns out a DualSense is unreasonably well-suited to the job. Here's the full operator workflow.
- Cross = GO, the most-pressed button in the run.
- Circle = STOP (clean), Triangle = PANIC (everything off, house lights up).
- D-pad navigates the cue list; L1/R1 swaps cue layer focus (sound / lights / video).
- Sticks ride live parameters — lighting intensity, sound bed gain — never navigation.
- L2-hold-to-arm prevents resting-thumb accidents during quiet scenes.
Why a gamepad belongs in the booth
QLab's spacebar workflow has been the small-theatre standard for over a decade. It works. But the operator's hand lives chained to the laptop, the spacebar is a 14 mm strip, and the keyboard is a stack of failure modes (sticking keys, accidental nudges, accidental shortcuts). A DualSense in the operator's hand puts every function under a labelled button, leaves the eyes free for the script and the SM's cue calls, and survives being thrown into a Pelican case at the end of strike. The Universal Controller MIDI bridge sends standard MIDI cues that QLab consumes natively — covered in detail in the QLab show control guide.
The cue map — what every input does
| Input | Function | QLab action | Frequency in a typical 90-min show |
|---|---|---|---|
| Cross (X / A) | GO | Fire current cue, advance cursor | ~60 presses |
| Circle | STOP | Stop current cue with fade-out | ~4 presses |
| Triangle | PANIC | Kill all running cues, raise house | 0 (hopefully) |
| Square | LOAD | Preload next heavy cue (video file) | ~6 presses |
| D-pad up/down | Cue cursor | Move selection without firing | ~12 presses |
| D-pad left/right | Act jump | Jump to Act II / Act I markers | ~2 presses |
| L1 | Layer cycle | Sound → Lights → Video focus | ~10 presses |
| R1 | Layer confirm | Lock layer focus visually | matches L1 |
| L2 (hold) | Arming | Required for cross/triangle to fire | held during cues |
| R2 | Live fade | Ride master fader (lights or sound) | ~8 cues use it |
| Left stick Y | Sound bed level | Live underscore gain | ~3 scenes |
| Right stick Y | Light master | Intensity ride during transitions | ~5 transitions |
| Touchpad click | Cue list refresh | Re-sync to QLab if displaced | 0 (failsafe) |
QLab MIDI input — the bridge config
QLab consumes MIDI on a per-cue basis via MSC (MIDI Show Control) triggers or simple Note On bindings. Notes are easier to reason about for a cue list. Map each DualSense button to a unique Note number in the bridge, then bind those notes to QLab cues with the inspector's MIDI tab. The bridge config below is the canonical theatre preset.
# Theatre operator preset — DualSense → QLab
[buttons]
cross = { note = "C2", channel = 1, action = "go" }
circle = { note = "C#2", channel = 1, action = "stop" }
triangle = { note = "D2", channel = 1, action = "panic", require = "L2" }
square = { note = "D#2", channel = 1, action = "load" }
[dpad]
up = { note = "E2", channel = 1 } # cursor up
down = { note = "F2", channel = 1 } # cursor down
left = { note = "F#2", channel = 1 } # prev act
right = { note = "G2", channel = 1 } # next act
[shoulders]
L1 = { note = "G#2", channel = 1 } # layer cycle
R1 = { note = "A2", channel = 1 } # layer confirm
L2 = { mode = "modifier" } # arming hold
R2 = { cc = 7, channel = 1 } # live fade (volume)
[sticks]
left_y = { cc = 7, channel = 2, polarity = "positive" } # sound bed gain
right_y = { cc = 7, channel = 3, polarity = "positive" } # light master
[safety]
double_press_guard = "200ms" # debounce GO
panic_requires = "L2" # both buttons or no panic The arming model — preventing the wrong cue at the wrong time
The operator's thumb rests on cross for most of the show. That's fine — that's the point — until a quiet scene where an accidental press would be catastrophic. The fix is L2-hold-to-arm: cross only fires when L2 is held. During cued moments the operator squeezes L2 with their index finger and is armed; during long quiet scenes they release L2 and the cross is inert. Triangle (panic) always requires L2 — there's no universe where an accidental panic is acceptable.
Operator workflow — three layers, three colours
QLab projects with 60+ cues benefit from layered organisation. Sound on one cue list, lights on another, video on a third. L1 cycles which layer the d-pad cursor is currently in. R1 visually confirms the focus (the bridge changes the DualSense lightbar colour: teal for sound, amber for lights, magenta for video). The operator never has to look at the laptop to know what GO will fire next. Cue colours match across the production stylebook — see the Stage Lighting Primer's cue sheet conventions for the canonical scheme.
Tech week — how to rehearse the rig itself
- Monday (paper tech): SM and op walk the cue list cold. No actors. Op holds the DualSense and dry-fires every cue at the right moment. Find the cue numbers that need re-labelling.
- Tuesday (dry tech): Run cues with set and lights but no actors. Op presses GO on every cue. Identify any cue that's hard to find on the d-pad.
- Wednesday (wet tech): Add sound and video. Op now runs all three layers via L1 cycling. Time the layer flips.
- Thursday (Q2Q): Cue-to-cue with actors. Op runs the full stack. SM watches op's right hand and confirms button presses match call sheet.
- Friday (dress): Full run. Op runs the show end-to-end. Any failover drill (USB cable yank, pad reconnect) happens here, not at preview.
Failure modes and how they get handled
| Failure | Detection | Recovery | Audience impact |
|---|---|---|---|
| USB-C dislodged | QLab MIDI input idle | Auto-reconnect <1.5 s, or fall to keyboard backup | One missed beat at worst |
| Pad battery dies | Bridge shows red battery indicator | Cannot happen on USB-C | n/a |
| Op presses wrong layer's GO | Wrong cue fires | Op hits triangle (PANIC) only if catastrophic, else ride through | Minor — most wrong cues are recoverable |
| QLab crashes | Hard silence | SM holds for line, op reloads QLab from autosave (~30 s) | Visible pause, recoverable |
| Sticky cross button | Double-fire on GO | Bridge's 200 ms debounce eats it | Invisible |
What the operator carries to the booth
- DualSense (primary) on a 2 m USB-C tether to the QLab Mac.
- DualSense (spare), unpowered, on the desk — emergency swap-in.
- Wired USB keyboard mapped to the same GO macro in QLab — last-resort fallback.
- Printed cue list, A3, in a script-stand binder.
- Cans (single-side, so they can still hear the room).
- Penlight clipped to the script binder.
- A bottle of water — booth gets hot under the cue light.
Pre-show checklist (the laminated A5 next to the laptop)
- QLab project loaded; cue 1 selected.
- Bridge UI shows DualSense connected, lightbar = teal (sound layer focused).
- Test fire: cue 0.5 ("preset check") fires from cross.
- Test panic: triangle + L2 raises house lights, no audio, no video.
- Reset panic: SM calls "house out", op fires cue 1.
- Confirm with SM over cans: "Op ready."
A gamepad in the booth is the difference between an operator chained to a laptop and an operator with their eyes on the actors. Universal Controller MIDI ships the theatre preset out of the box — load it, point QLab at the MIDI input, run your tech. The QLab show control deep-dive covers MSC routing for multi-machine productions. The DMX lighting bridge covers driving the lighting board directly if you don't have a separate LX op. Back at the homepage — the bridge is the bit that doesn't change between a festival and a fringe theatre. Same software, different room.