DYNAMIC TIMERS

A refined take on classic OBS timer widgets. Fully controllable, supporting multiple timers, with custom triggers for actions when timers start or end. Compatible with Twitch & YouTube.

  • As many fully controllable timers as you need in one overlay
  • Commands and custom triggers for full control
  • Flexible time input formats (seconds, timestamps, timecodes)
  • OBS dock for timer controls and an overlay editor for the look
Dynamic Timers preview

Quick Access

Action Import String

Import the actions into Streamer.bot.
Loading...

Browser Source URL

Add this as a browser source to OBS.
https://tawmae.xyz/overlays/dynamic-timers

OBS Dock URL

Add this as a custom dock to OBS.
https://tawmae.xyz/overlays/dynamic-timers-dock

Setup Guide

1

Copy the Action Import String

Copy the Action Import text from Quick Access.

2

Import into Streamer.bot

In Streamer.bot, click the Import button at the top of the window. Paste the text into the Import String section and press Import at the bottom.

3

Enable the Commands

Open the Commands tab. Find the imported group. Right-click the group and click Enable All.

4

Review the Settings UI

Open the action [DYNAMIC TIMERS] #0 - Settings. Right-click the Test trigger and hit Test Trigger. Adjust the timer behavior and chat responses, then click Save. You can also keep the defaults and start using the timers straight away.

NoteIf the TawmaeUI.dll is missing, you'll be asked to auto-download. That popup window may appear behind the Streamer.bot window, so make sure to check if nothing appears.
5

Start WebSocket Server

Go to the tab Servers/Clients → WebSocket Server. Enable Auto Start WebSocket Server. Address 127.0.0.1. Port 8080. Optional password. Leave Enforce All Requests unchecked. Start the server.

6

Copy Browser Source URL

Copy the Browser Source URL from Quick Access.

7

Add Browser Source in OBS

In OBS, create a new Browser Source, name it whatever you want. Then paste the copied URL into URL and preferably set the Width and Height to your OBS canvas size.

NoteStreamer.bot keeps the timers running when a browser source reloads. Multiple sources show the same timers; use layout presets if you want a different design in another scene.
8

Customize the overlay

Right-click the browser source in OBS, choose Interact and press S. Arrange the timer cards, adjust their style and use sample timers to see your changes. Press Ctrl+S to save. See Overlay Settings below for the individual tabs.

9

Add the dock to OBS

Copy the OBS Dock URL from Quick Access. In OBS, go to Docks → Custom Browser Docks, give it a name and paste the URL. Hit Apply and put the dock wherever you want.

Using a different WebSocket address, port or a password? Add ?address=127.0.0.1&port=8080&password=YOUR-PASSWORD to the URL and adjust the values to match your server. Leave out the password part if you do not use one.

10

Done!

Open New timer in the dock, enter a name and duration, and start your first countdown. Keep Streamer.bot running: it owns the timers, while the overlay and dock display and control them.

Commands

!createTimer <Time> <Title> Access Mods Only

Start a countdown, or restart an existing timer with the supplied time. Use 5m, 90s, 1h30m or 01:30:00; plain numbers use Numbers Without a Unit in Settings UI. The time can come before or after the title. Edit descriptions in the dock.

Example!createTimer 5m AFK
!addStopwatch <Title> Access Mods Only

Start a timer that counts up. Optionally include a duration to stop at; without one it runs until you pause or remove it.

Example!addStopwatch Speedrun
!pauseTimer <Title> Access Mods Only

Pause the timer specified by title.

Example!pauseTimer AFK
!resumeTimer <Title> Access Mods Only

Resumes the timer specified by title.

Example!resumeTimer AFK
!addTime <Time> <Title> Access Mods Only

Add time to the named timer using the same time formats as !createTimer. Creates a missing timer when Create Missing Timers is enabled. Separate the time and title with a space.

Example!addTime 2min AFK
!removeTime <Time> <Title> Access Mods Only

Remove time from the named timer using the same time formats as !createTimer. Separate the time and title with a space.

Example!removeTime 2min AFK
!deleteTimer <Title> Access Mods Only

Delete the timer specified by title.

Example!deleteTimer AFK

Settings UI

General

Timer behavior lives here. Open the browser source's settings panel to change the overlay's appearance.

  • Remove Finished Timers Automatically remove finished timers after 1–600 seconds. Enabled with a 10-second delay by default. Turn it off to keep them until you remove them yourself.
  • Create Missing Timers Let Add Time create a countdown when the named timer does not exist. Enabled by default; turn it off to change existing timers only.
  • Default Timer Name The name used when a command creates a timer without a title. Defaults to Timer; a number is added if the name is already taken.
  • Numbers Without a Unit Choose whether a bare number means seconds or minutes. Defaults to Seconds. Explicit units such as 5m and timestamps such as 01:30:00 work either way.
  • Maximum Timers Limit how many timers can exist at once, from 1 to 50. Defaults to 20. Both commands and the dock respect this limit.

Chat Responses

Edit each response and use its switch to turn it on or off. The available variables are listed below each text box. Replies come from Streamer.bot, so the overlay does not need to be open.

  • Timer Controls Customize replies for starting countdowns and stopwatches, adding or removing time, pausing, resuming, restarting and removing timers. Responses use variables such as %timerName%, %timerTime% and %amount%.
  • Status & Bulk Actions Set replies for a timer's status, the timer list, and pausing, resuming or removing all timers. Use %timers% for the list or %count% for bulk actions where shown.
  • Timer Finished Announce when a timer finishes on every connected platform. Disabled by default. Supports %timerName% and %timerTime%.
  • Errors & Missing Input Customize replies for an unknown or ambiguous timer, an empty timer list, unreadable time, or reaching the timer limit.
  • Reset Chat Responses Restore all chat response defaults using the Reset button and confirm the dialog.

Overlay Settings

Elements & Arrangement

Right-click the OBS browser source, choose Interact and press S to open the editor. Save with Ctrl+S.

Show or hide the box, icon, title, description, clock, progress bar and state icon. Drag and resize each part to update every timer card. Sample timers let you check the layout before creating real ones.

Stack cards from an anchor point, choose down or across, wrapping and spacing, or use Free mode to place each card separately. Save up to five layout presets and add ?layoutPreset=2 to a source URL to use another preset.

Timer

Choose the default time format, when a timer enters its warning state, the text shown when it finishes and its animations. Set default icons for timers, paused timers, finished timers and stopwatches.

A timer's own icon and time format can override these defaults. Set those for individual timers in the dock.

Style

Choose fonts and colors for the title, description and clock. Customize the card's background, opacity, corners, blur, outline, shadow and background image, then style the progress bar and warning and finished states.

Move a card to reposition the stack, use its green corner to scale it and the amber handles to change its dimensions. Ctrl+Z and Ctrl+Y undo and redo changes; F hides the outlines.

Files

Use your own uploaded images for timer icons or the card background. Connect your tawmae.xyz File Upload API key to access your files. Upload new files in a regular browser; you can select existing uploads inside OBS.

The cog menu also contains templates, design export and import, and a reset option.

OBS Dock

Control your timers in OBS

Add the OBS Dock URL from Quick Access through Docks → Custom Browser Docks. The dock also works in a regular browser connected to Streamer.bot.

Open New timer to create a countdown or stopwatch. Enter durations in days, hours, minutes and seconds. Use the controls on each timer to pause or resume it, add or remove time using the selected Step, and restart it.

The eye hides a timer from the overlay while it keeps running. The pencil opens its editor: change the title, description, icon or time format, set its time, move it up or down, or remove it. Removing a timer requires a second click.

The top controls show or hide the whole overlay, pause or resume all timers, and clear the list. Timers are stored in Streamer.bot, so reloading a source or closing the dock does not stop them. Keep Streamer.bot running.

Custom Triggers

Timer Created

Fires when a new countdown or stopwatch is created.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

Timer Time Changed

Fires when time is added, removed or set, or a timer is restarted.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

Timer Paused

Fires when a timer is paused.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

Timer Resumed

Fires when a paused timer resumes.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

Timer Finished

Fires when a countdown reaches zero or a stopwatch reaches its stop time.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

Timer Removed

Fires when a timer is removed manually or automatically after finishing.

%timerId% Type: string

The timer's unique ID.

Example 9c80f4d2a9304d47878cf211ea9e9d62
%timerName% Type: string

The timer's title.

Example AFK
%timerDescription% Type: string

The timer's description.

Example Be right back
%timerCountUp% Type: bool

True for a stopwatch; false for a countdown.

Example false
%timerState% Type: string

The current state: running, paused or finished.

Example running
%timerChange% Type: string

The change that fired the trigger: created, changed, restarted, paused, resumed, finished or removed.

Example changed
%timerSeconds% Type: int

Remaining seconds for a countdown, or elapsed seconds for a stopwatch.

Example 120
%timerTime% Type: string

The current time formatted as a clock.

Example 02:00
%timerTotalSeconds% Type: int

The countdown's reference duration, or the stopwatch's stop time in seconds. 0 for an unlimited stopwatch.

Example 300
%timerChangeSeconds% Type: int

The time change in seconds. Negative when time is taken off.

Example 60
%timerChangeTime% Type: string

The size of the time change formatted as a duration, without a minus sign.

Example 1m
%timerSource% Type: string

Where the change came from: chat, action, dock or auto.

Example dock
%user% Type: string

The user who ran the chat command. Only present for changes from chat.

Example tawmae

FAQ & Examples

How can I create a timer via different means, e.g. via channel point reward? (Advanced)
For that, we use custom arguments in a new action.

1. Create a new action

2. Create a Core -> Arguments -> Set Argument subaction. Actually, create as many as you need, because you can define quite a few parameters:

• timerTime (required): a number (seconds by default)
• timerName (optional): Title of the timer
• timerDescription (optional): Description of the timer
• timerFormat (optional): Format of the timer (hh:mm:ss or mm:ss:ms)
• timerIcon (optional): Image link
• timerCountUp (optional): Boolean if this is a stopwatch or not (true/false)

3. At last, create the subaction  Core -> Actions -> Run Action and select the action [DYNAMIC TIMERS] 1 - Add Time

Example here:
Subactions

Changelog

v3.0.2 latest

  • Fix Fixed arguments when creating own timers with different triggers. `timerCountUp` set to `True` will now ignore `timerTime` and always start at `00:00:00` and will only stop when ended manually.
  • New Added an example action on how to create custom timers with different triggers, like a channel reward.
  • New Added a quick action button to end individual timers to the dock.
  • New Added legacy support for `timerValue` which was renamed to `timerTime`. If `timerTime` doesn't exist, it will attempt to fetch `timerValue`.

v3.0.1

  • Fix Fixed command format to match up with docs/examples

v3.0.0

  • New Added new dock to manage timers
  • New Added settings panel to the overlay for customization (accessible by pressing S)
  • Changed Internal overhaul
  • New Added new command to start a stopwatch
  • Changed Changed command formats slightly to make it easier

v2.0.2

  • New Added YouTube support
  • Changed Bumped required DLL to v.1.7.0

User Reviews

5.0 (9 reviews)

Great timer, with an amazing design and a wide range of possible applications. Currently starting to use it with some automations and channel point rewards :D

I am using this Dynamic Timer within my LIVE Events and I simply love it! The new version is sleek as heck and super performant! Thank you!!! <3

Thanks for this simple, but very helpful overlay! I use it for my "no talking" and "word ban" effects primarily right now. :)

Before you post your review

Please make sure this is not a support issue. If you have trouble getting it to work, join my Discord, open a support post and attach your logs.

Join the Discord for support ↗