To install the plugin, install the plugin folder for your system. The files are available here. Installation instructions can be found here.
You can have multiple timers, but there will always be at least one in the list.
The main widget (which hosts the list of timers) contains the following buttons:
To set up a timer, follow these steps:
OBS Text Source to your scene.Docks menu and click on Countdown Timers. (This will display the countdown dockable widget.)up and down arrow buttons next to each timer display.Delete timer button on that timer (this button is disabled if it’s the only timer).P (period) button to manually set the counter.set/reset button (left button) to update the timer and text field.play button (right button) to start the timer.pause button will pause the timer. To resume, press play again.set/reset will reset the timer to the values in the input fields.D (datetime) button to set the target time.play button (right button) to start the countdown.stop button will pause the timer. To resume, press play again—this updates the timer and continues the countdown.
Click the Settings button (cog icon) to open the settings dialog for each timer. The following options are available:
Modify the timer ID using the text edit field. A warning will appear if you try to set an ID that duplicates an existing one.
Select the text source for the timer from the Source dropdown menu. This can be left blank if no text source is desired.
Enable the Start On Stream Start feature by ticking the corresponding checkbox. This will start the timer automatically when you start streaming.
Enable the Reset feature by ticking the corresponding checkbox. This works only for period type timers and will reset the timer when a stream starts (if start on stream start is enabled).
Enable the End Message feature by ticking the corresponding checkbox. Then enter the message you’d like displayed when the timer reaches zero. Use the keyword %time% to include the formatted time in the message.
Enable the Scene feature by checking the box next to the Scene dropdown. Choose the scene to which OBS will automatically switch when the timer expires.
Choose which time units to display (days, hours, minutes, seconds) on the Text Source by checking the appropriate boxes. For example, selecting minutes and seconds only will display the time as mm:ss. Additionally, you can toggle the display of leading zeros by checking or unchecking the Leading Zero option. If you wish to show a message instead of the timer count, enable Format Output and define the output format, using %time% as a placeholder for the formatted time.
Tick the Count Up checkbox to have the timer count up toward the set time.
set button resets the timer to zero; then clicking play starts counting up.play resets the timer to zero and then counts up toward the difference between the start time and the specified datetime.
The Steady Second Increment (Period Timer) option changes the period timer’s behaviour from timestamp-based countdown to incrementing by 1 second per loop. This provides smoother counting at the cost of some accuracy.
Tick the Enable Text Colours checkbox to toggle enabling setting the timer text font colour.
Main Text Colour to select a main text colour that will be used outside of colour rules.plus button to add as many colour rule as desired. Each rule has a delete button to allow you to remove that specific rule from the list.min and max.min and max times the rule will automatically change the other times to make sure no times overlap.The following are the global hotkeys for the plugin:
add timer button.start all timers button.stop all timers button.Each individual timer has these hotkeys:
period start button.period pause button.period set button.time start button.time stop button.add timer button.Connect to OBS via the websocket using the instructions provided OBS Websocket.
Note: The timer_id field in the examples below is optional. It represents the timer name displayed at the top of each timer. If omitted, the first timer in the list will be used.
The vendor name for the plugin is: ashmanix-countdown-timer. To activate a function, send a JSON message formatted as follows:
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "{{customId}}",
"requestData": {
"vendorName": "ashmanix-countdown-timer",
"requestType": "{{requestType}}",
"requestData": {
"timer_id": "option_timer_id"
}
}
}
}
Replace:
{{customId}}
with your custom ID string and:
{{requestType}}
with one of the following request type strings:
period_playperiod_pauseperiod_setto_time_playto_time_stopAdd Time Example:
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "{{customId}}",
"requestData": {
"vendorName": "ashmanix-countdown-timer",
"requestType": "add_time",
"requestData": {
"timer_id": "option_timer_id",
"time_to_add": "00:01:01:01"
}
}
}
}
Request Type: set_time
Set Timer Time Example:
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "{{customId}}",
"requestData": {
"vendorName": "ashmanix-countdown-timer",
"requestType": "set_time",
"requestData": {
"timer_id": "option_timer_id",
"time_to_set": "00:02:02:02"
}
}
}
}
Request Type: play_all
Start All Timers Example:
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "{{customId}}",
"requestData": {
"vendorName": "ashmanix-countdown-timer",
"requestType": "play_all"
}
}
}
Request Type: stop_all
Stop All Timers Example:
{
"op": 6,
"d": {
"requestType": "CallVendorRequest",
"requestId": "{{customId}}",
"requestData": {
"vendorName": "ashmanix-countdown-timer",
"requestType": "stop_all"
}
}
}
The plugin emits messages from each timer:
Emitted when a timer starts, pauses, stops, or completes. The message structure is:
{
"op": 5,
"d": {
"eventData": {
"inputName": "{{NameOfTextSource}}",
"inputSettings": {
"state": "{{stateChangeType}}",
"text": "01:00:00:00",
"timer_id": "{{timerID}}"
}
},
"eventIntent": 8,
"eventType": "InputSettingsChanged"
}
}
Emitted with each tick of the timer. The message structure is:
{
"op": 5,
"d": {
"eventData": {
"eventData": {
"time_display": "00:00:00:01",
"time_left_ms": 1000,
"timer_id": "{{timerID}}"
},
"eventType": "timer_tick",
"vendorName": "ashmanix-countdown-timer"
},
"eventIntent": 512,
"eventType": "VendorEvent"
}
}