A unified lighting / sound / video controller for theatrical applications
This project stemmed from a necessity to control a sound board, a lighting board, and multiple video projections simultaneously with realtime cues for a theatrical production of "Cesar and Rubin", by Ed Begley Jr.
For the show, we used Qlab4 as the master controller, which sends OSC messages (with SLIP encoding) to Cesar, which interprets the command and translates it to the appropriate device, along with all other cues currently running.
Everything is built around an iPython kernel (using magic functions). On startup, the @line_magic cesar()
function is loaded, which attempts to set up the following:
Connect to QLab over OSC, and
Connect to Allen & Heath QU-32 as a USB midi device.
Connect to EOS Element lighting console over OSC protocol
Create a tkinter GUI, sized to the full resolution of the external monitor
Create a secondary tkinter GUI window for quick access to controls
After everything is connected, Cesar is ready to accept OSC commands, while the python interpreter remains ready to accept new commands, used to change settings on the fly as needed.
All cues sent to Cesar are decoded with the SLIP protocol (RFC 1055) and then translated into its compilable python equivilent. For example, to fade an audio channel, send an OSC message such as: /mix/cesar v
, which becomes mix('cesar', v)
, executed in the iPython namepace against the sound module, which is sent to the sound board over USB with the appropriate midi values according to the A&H spec and the patch list.
The advantage here is many disparate effects can fire simultaneously, and still leave the command line free to execute emergency cues in the context of the live show.