Simple Theater Timer for Events and Shows
This is a simple timer that can keep track of a theater performance (or really any sequential event). It outputs all of it's data via OSC and via a simple web interface. Interaction is OSC message based, although some simple interactions are available in the "admin" web interface. OSC output is specifically tailored to work well with Vor
- Countdown to absolute time timers (show start)
- Countup from zero timers (Acts, Scenes, whatever)
- Countdown to an absolute number of minutes (intermissions)
- Toggle switches that can optionally be tied to timers (places, house open, etc)
- Audio feedback on the main process for switches and countdown timers ("10 Minutes, please"; "This is your places call")
- Configuration auto save with an easy option to update all timers to reference "today"
- Configuration save to file / load from file. Drag-and-drop supported.
Switches are ON/OFF Data points. You can activate of deactivate them manually, and they can also be deactivated when another switch is thrown, or a timer is started. As a note, the documentation assumes you won't have more than 99 switches - this isn't a real limit, but 2-digit padding is used for output.
- Active / Inactive Text : The text displayed when the switch is active or inactive
- Color : Standard is to use green when on, and red when off. Reversing does the opposite
- Speak : A text string that will be machine-spoken when the switch is toggled active
- Reset Switch(es) : These are the switches that will be set to inactive when this switch is set active
Timers keep time. They can track time until an event, or time elapsed in an event. You can only have 1 timer active at a time, but there are provisions for running inactive timers, depending on type.
- Count Down : This timer type counts down to a pre-specified DateTime. For instance, your event starts today at 7:30PM. You can have multiple count-down timers, and they all run automatically from start, and stop when marked inactive.
- Count Up : This timer type tracks elapsed time. Only one count-up timer can be active at a time. For instance, an act timer.
- Count Minutes : This timer type counts down to a pre-specified number of minutes. For instance, a 15 minute intermission. Only one minute count-down timer can be active at a time.
Additional options are available on some timers
- Sound : The system will speak
"## Minutes Please. ## Minutes"for 90, 60, 30, 20, 15, 10, and 5 minutes remaining. This setting is unavailable on count-up timers. You may specify an additional text to be spoken after the chime and before the generated response. This is particularly helpful when running multiple shows or events concurrently. - Reset Switch(es) : These are the switches that will be set to inactive when this timer is set active. This setting is available on all timers, but will not function on the first timer.
- Minutes : The number of minutes to count (plus 2 seconds, so audio plays correctly). This settings is only available on minute count-down type timers.
- Target : The target DateTime to count-down to. This setting is only available on count-down type timers.
The recommended method of interacting with TheaterTime is to use OSC messages.
- Toggle a switch active :
/theaterTime/switch/on [int:1..99] - Toggle a switch inactive :
/theaterTime/switch/off [int:1..99] - Toggle a switch to it's opposite state :
/theaterTime/switch/toggle [int:1..99]
- Advance to the next timer :
/theaterTime/timer/next - Return to the previous timer :
/theaterTime/timer/previous - Stop all timers :
/theaterTime/timer/stop
- Reset all timers and switches :
/theaterTime/reset - Speak an arbitrary string :
/theaterTime/speak [string]
TheaterTime is intended for use with Vor - but it can talk to any application that consumes OSC. Configuration of which items to send are on the settings page, their output is explained here.
/theaterTime/switch/[01..99] [s:Title] [s:Active/Inactive Text] [i:0/1]- Inactive Example
/theaterTime/switch/01 [s:"House"] [s:"House is NOT Open"] [i:0]
- Active Example
/theaterTime/switch/01 [s:"House"] [s:"House is OPEN"] [i:1]
- EOS Variant
/theaterTimer/EOSswitch/01 [s:Active/Inactive Text]/theaterTimer/EOSswitch/01 [s:"House is OPEN"]
/theaterTime/toggle/[01..99] [s:Active text/empty] [s:Inactive Text/empty]- Inactive Example
/theaterTime/toggle/01 [s:""] [s:"House is NOT Open"]
- Active Example
/theaterTime/toggle/01 [s:"House is OPEN"] [s:""]
- Reverse Color
/theaterTime/toggle/[01..99] [s:Inactive Text/empty] [s:Active text/empty]
/theaterTime/currentTimer [i:Seconds] [s:Title] [s:Time String]- Example
/theaterTime/currentTimer [i:19607] [s:"Pre-Show"] [s:"↓ - 05:26:47"]
- Expired Example
/theaterTime/currentTimer [i:-2141] [s:"Pre-Show"] [s:"↓ + 00:35:41"]
- Blink Example
/theaterTime/currentTimer [i:-2187] [s:""] [s:""]
- EOS Variant
/theaterTimer/EOSTimer [s:Title - Time String]/theaterTime/EOSTime [s:"Pre-Show - ↓ - 05:26:47]
Do whatever you like with this code. If it might be helpful to others, maybe open a pull request.
Most of the power saving features of chromium (electron renderer) have been disabled for this application. This is done so that audio announcements play even if TheaterTime is hidden or minimized. The down side of this is that TheaterTime will always use the CPU, and if you are running it on a laptop, a bit more battery.
Most of this is very straightforward - you just need a proper network entry
OR you can use the .qlabnetwork file included in the project repository (qlab folder). It goes in ~/Library/Application Support/Qlab/Network Library/
If you wish to use the "speak arbitrary message" function, and would like to have qLab prompt you for the message, you will need 2 cues:
- SPEAK - A network cue pointed to the TheaterTime Patch
- ??? - A script cue with the following script in it:
tell application id "com.figure53.QLab.5" to tell front workspace
set prevCommand to notes of cue "SPEAK"
if prevCommand is "" then set prevCommand to "Hello"
display dialog "" default answer prevCommand with title "Text to speak" buttons {"Cancel", "OK"} default button "OK" cancel button "Cancel"
set theCommand to text returned of result
set notes of cue "SPEAK" to theCommand
set oscCommand to "/theaterTime/speak " & quote & theCommand & quote
set parameter values of cue "SPEAK" to {oscCommand}
start cue "SPEAK"
end telltell application id "com.figure53.QLab.5" to tell front workspace
set prevCommand to notes of cue "SPEAK"
if prevCommand is "" then set prevCommand to "Hello"
display dialog "" default answer prevCommand with title "Text to speak" buttons {"Cancel", "OK"} default button "OK" cancel button "Cancel"
set theCommand to text returned of result
set notes of cue "SPEAK" to theCommand
set parameter values of cue "SPEAK" to {"/speak", theCommand}
start cue "SPEAK"
end tell







