[Requires QLab 4.2]
This chapter looks at remote control of QLab, using different operating systems on a range of devices. It opens up the possibilities of creating control panels on cheap tablets costing less than 50 dollars.
In addition to QLab, it uses the following software which can be downloaded without charge, using the links below.
Open Stage Control is a desktop OSC bi-directional control surface application. It’s built on web technologies and run as an Electron web server that accepts any number of clients.
What this means is that once you have it up and running, you can log in to the server from a Google Chrome web browser on any device that supports it. Currently, this includes Windows 7 or later, MacOS 10.10 or later, Linux v2.24 or later , iOS10 or later, Android Jelly Bean or later.
This project is going to use an almost identical workspace to that used in this QLab Cook Book chapter
This project uses Open-Stage-Control to synchronise a fader bank remote running on any of the devices listed above with the sliders in the selected cue in QLab. It also displays the number and name of the current cue.
Here’s it is in action (Best Viewed full screen):
Here is the QLab workspace we are going to control.
The workspace contains a main cue list with 3 cues in a fire all group
Each cue is an 8 track WAV file of an instrument with repeated notes. Each of 8 notes of the C major Scale C-C are on separate tracks.
Here’s the Open Stage Control panel running in its own GUI:
And here it is on a Chrome browser on an iPad.
And on a Windows PC
You can have many clients connected to the server simultaneously, and it’s possible to run the server headless.
Open Stage Control
To Launch the server
Open Open-Stage-Control .app
The pre-launch window will open.
In the send field type
This is the IP address for localhost, i.e the computer all these programs are running on followed by a colon and the port number that QLab listens out for OSC messages on (53000)
If we were opening a file we would select it using the button with dots to the right of the load field
We are going to create a new file by ticking the checkbox in Blank
This project requires a custom module which is included in the project download linked at the end of the chapter. The file is named
set the custom module to this file using the file browser dots icon on the right of the field
Now you can hit START
If the editor isn’t visible click the menu icon at the top right and then turn the editor on.
Select the TAB_1 object in the Editor. In the Style section of the menu change the label from auto to QLab Current Cue Faders 1-8
Right-click in the gridded area and add a fader object with
+Add widget/ Sliders/ Fader.
Now we’ll set up all the editor parameters necessary to get out fader to control the master fader of the selected cue in QLab. Click the fader to open the editor window for that object.
Change the widget id to fader_0 to match the QLab sliders designations.
Select the pips checkbox to display the fader legends and the input check box so the fader can be externally controlled.
In the range field type this:
This sets the maximum and minimum values for the fader and also the position and label of the subdivision pips on the legend.
In the OSC section
set the precision to 2
set the address for the fader to
and append a pre argument to the message of 0 so the complete message sent to QLab is
Copy the fader by right-clicking on it and selecting copy then right click again in a blank area of the canvas and select paste/ID +1 repeat the paste another 7 times to create a master and faders 1-8.
For each of the faders 1-8 the only editing you need to do is to change the prearg to the fader number e.g 3 for fader_3
You can now test these control the corresponding sliders in QLab.
We’ll now add some other controls that won’t do anything until we have put the corresponding cues into a QLab workspace.
Cue Information Fields
Right-click in the canvas to create 2 plot/text objects
Label 1 of them current cue number and the other Current Cue Name
set the address of the current cue number to /text_1 and the address of the current cue name to /text_2
Momentary Sync Button
To make a momentary push button to trigger a cue we will make shortly in QLab, to send the data for the current cue:
Right-click in the canvas and select add widget/button/push
Change the label for this button to
SYNC QLab Values for Selected Cue
and set the OSC address to
OSC Stop Start
So it is possible to turn on and off the continuous OSC updating, right click and add widget/buttons/switch
label the switch Continuous QLab Values for Selected Cue
Set its values to
To create 2 switch positions with corresponding values
set the address to
This switch controls the actions of the custom module we loaded
Save the project from the save button in the edit pane and close Open-Stage-Control
Launching the demo Open Stage Control project
In the launcher window, set the load field to the file path of OpSC Faders.json (the project file) using the file selector dots to the right of the field
set the custom-module field to the file path ofsendYourValuesTpMe.js again, using the file selector dots to the right of the field.
Make sure blank isn’t ticked
Click on START
We need to get QLab to regularly report the sliderLevels of the currently selected cue, together with its cue number and name, so that Open-Stage-Control can follow changes in the selected cues and any level changes performed in QLab itself.
In order for QLab to communicate with Open-Stage-Control we have to create a path in settings/network
Name a patch OpSC set the destination address to localhost and the port to Open-Stage-Control’s default receive port (8080)
In QLab create a new cue list and name it OSC.
Create a fire all group cue in this list and number it SYNC
Create a network cue, set it’s destination to OpSC, and set it to send the OSC message
/cue/selected/sliderLevel 0 #/cue/selected/sliderLevel 0#
This uses an OSC query (the bit between the hashes) to get the level of slider 0 (Master) in the currently selected cue and sends that as the argument to the OSC message /cue/selected/sliderLevel 0 which will set the Open-Stage-Control fader with that address i.e Fader0
Copy the cue 8 times to create Network cues for the other 8 Open-Stage-Control faders editing the OSC message appropriately e.g for Fader 1 sliderLevel 1
/cue/selected/sliderLevel 1 #/cue/selected/sliderLevel 1# etc.
2 further network cues are required to send the cue number and name to the objects in Open-Stage-Control
The OSC message for the network cue that sends the currently selected cue number is:
and for the cue name
Note the quote marks around the OSC query. This allows spaces in the result of the query to be sent to Lemur. If you omit them, then only the first word of the cue name is sent.
The example QLab workspace, together with the Open-Stage-Control .json file and the custom module .js file can be downloaded here
Chapter Bonus Project.
A great feature of Open-Stage-Control is its ability to use variables within the address portion of an OSC message. This means, for instance, that you can use an array of 100 numbered push buttons and start a QLab cue by pressing the relevant button on the remote.
Here it is in action:
How it works:
There is a single multipush object in OpenStage Control
The Size of the matrix is set in the matrix field
You can set the start number of the matrix so you could have bigger buttons with, for instance, 16 per Tab
The spacing sets the space around each button
true in the norelease field means only one message will be sent per push
a string in this field will be used to define the widgets’ addresses, replacing dollar signs (
$) with their respective index i.e the number of the button pushed. e.g /cue/3/start
You can download the .json file to load with Open Stage Controller and the example QLab workspace here
Chapter Author: Mic Pool
Chapter Graphic: Electron Logo used under a free Expat License