TIMER PLUGIN
Version 6.0Released 3 October 2026
This script is a plugin written in the Lua programming language, designed specifically to run inside OBS Studio (OBS > Tools > Scripts).
Completely customizable timer format & display
New in 6.0
- Reset and hotkeys fixed on OBS 31/32, including with the Scripts window closed.
- Overtime: a countdown can keep counting up after zero.
- Pause at markers: e.g. pause at 45:00 and 90:00 for a football match.
- Expiry audio, then switch scene.
- Frame display, independent hour/minute units, round-up countdown, a 'Set' hotkey, 1-second add/subtract steps, and a Script Description checkbox for small screens.
Feature Overview
This plugin is designed to be highly customizable and versatile, making it suitable for a wide range of scenarios and user preferences. Here are some of the features this plugin has to offer.- Supports Duplication: The plugin can be duplicated and used to run multiple instances simultaneously.
- Customizable Timer Format & Display: The timer format and display are completely customizable, allowing for various configurations.
- Count Up: The plugin can count time upwards.
- Count Down: The plugin can count time downwards.
- Real-Time Count Inversion: The plugin can change the counter direction in real-time.
- Countdown Components: The plugin supports counting down in days, hours, minutes, seconds, and milliseconds.
- Specific Date & Time Countdown: The plugin supports counting down to a specific date and time.
- Overtime (new in 6.0): When a countdown reaches zero, the timer can keep counting up, optionally shown with a '+' and its own colour.
- Round Up Countdown Display (new in 6.0): Countdown formats without seconds (e.g. hours:minutes) show 00:01 until the timer really reaches zero.
- Toggle Visibility of Split Seconds: Triggered by Hotkey or timestamp to show/hide the split seconds.
- Frame Display (new in 6.0): Show split seconds as video frames (e.g. 60 fps) instead of hundredths of a second.
- Events when Timer Expires: Show a message, play a media source, switch scene, cycle lists, start recording, or keep counting as overtime.
- Create a Stopwatch: Features to mark laps and intervals.
- Start Timer from Specific Timestamp: The plugin can be started from a specific timestamp, from the settings or with a 'Set' hotkey.
- Autoload Last Saved Timestamp: The plugin can autoload the last saved timestamp on startup (Count Up). The time is saved regularly, so it survives a crash.
- Cycle Through Source List: The plugin can cycle through a defined source list based on a timer.
- Cycle Through Nested Sources: The plugin can cycle through sources that are placed in a defined group or nested scene based on a timer.
- Cycle Through Scene List: The plugin can cycle through a defined scene list based on a timer.
- Switch to Specific Scene when Timer Expires: The plugin can switch to a specific scene when the timer expires, optionally after the expiry audio has played.
- Play a Media Source at Specified Time: The plugin can play up to two media sources (Marker A and Marker B) at specified times, every time the marker is reached, with an optional playback duration.
- Play a Media Source when Timer Expires: The plugin can play a media source when the timer expires.
- Pause at Specified Time (new in 6.0): The timer can pause itself exactly at Marker A or Marker B, e.g. at half time and full time of a football match.
- Change Timer Text Color: The plugin can change the timer text color at a specified time, allows defining two color changes, and can restore the normal color after a set time.
- Enable Visibility on Another Text Source: The plugin can enable visibility on another text source (a note) at a specified time, and hide it again after a set time.
- Start Recording at Specified Time: In Count Down, the plugin can start recording when the timer expires, at Marker A or Marker B, when the timer becomes visible, or when it starts.
- Custom Message on Timer Expiry: The plugin can display a custom message when the timer expires.
- Custom Timer Prefix/Suffix: The plugin allows defining a custom prefix or suffix for the timer.
- Automatic Timer Start: The plugin can start the timer when the Timer Text Source becomes visible, when its scene (or a specific scene, source or media source) becomes active, or when recording or streaming starts, with an optional automatic reset.
- Export Script Settings: The plugin allows exporting script settings for backup or quick setup.
- Import Script Settings: The plugin allows importing previously saved script settings.
- Add/Subtract Seconds: The plugin can add or subtract time with three preset step sizes each (from 1 second), with optional limits, also while paused.
- Assign Minute Unit Format: The plugin allows assigning a minute unit to create a 90-minute timer or any length minute timer, e.g. {$M90}.
- Assign Hour Unit Format: The plugin allows assigning an hour unit to override the default 24-hour timer with any length hour timer, e.g. {$H100}. Hour and minute units can be used separately or together.
- Debug Logging: Create a local file for debugging issues.
- Dedicated Buttons: Ability to split the 'Start' and 'Pause' button.
- Hotkey Support: The plugin supports hotkeys for starting, pausing, resetting, setting a manual time, split-time, toggling milliseconds, changing time direction, and adding/subtracting time. Hotkeys work while the Scripts window is closed.
- Compact Settings: The script description can be hidden to give the settings more room on small screens.
- Disable Unwanted Features: Ability to completely remove unwanted features.
PLUGIN DESIGN OVERVIEW:
To ensure an optimal user experience, it's important to understand the distinction between two types of objectives some of the properties serve in the plugin UI: those that enhance the user experience and those that directly impact the core functionality and behaviour. Let's delve into these categories to help you navigate the plugin effortlessly.
PROPERTIES FOR ENHANCING USER EXPERIENCE:
These properties focus on providing additional customization options and improving the overall usability of the plugin. While they don't directly affect the core functionality, they play a vital role in tailoring the plugin to a specific purpose.
Here's what you need to know:
The OBS native UI can sometimes become cluttered when using plugins with complex configurability. To address this issue, this plugin has been designed to display or hide certain properties based on their relevance. It's important to understand that some properties, while relevant, are intentionally hidden to prevent an overwhelming amount of information. Therefore, it is crucial to carefully examine each property to determine if it reveals any extendable settings. Each property also has a tooltip: hover over its name for help.
Here's what you need to know:
The OBS native UI can sometimes become cluttered when using plugins with complex configurability. To address this issue, this plugin has been designed to display or hide certain properties based on their relevance. It's important to understand that some properties, while relevant, are intentionally hidden to prevent an overwhelming amount of information. Therefore, it is crucial to carefully examine each property to determine if it reveals any extendable settings. Each property also has a tooltip: hover over its name for help.
Here are some properties that will simplify or expand the available properties:
1. Script Description (top of the settings: show or hide the description)
2. Layout (Basic / Advanced)
3. Timer Settings
4. Marker Settings
5. Timer Manipulation
6. Disable Features
PROPERTIES AFFECTING CORE FUNCTIONALITY AND BEHAVIOR:
These properties directly impact how the plugin operates and can significantly influence its core functionality. Understanding and adjusting these settings will ensure the plugin behaves precisely as you intend.Here's what you should consider:
The plugin provides timer-focused functionality that can be configured for various scenarios.
The plugin provides two modes, each with some unique features and some that overlap between the two modes.
The plugin modes are:
- Count Up
- Count Down
The Basic layout hides additional properties that only become available in the Advanced layout.
Switching between the Basic and Advanced layout has no impact on the features or any defined settings of the plugin; it only shows or hides properties in the plugin settings UI. This removes clutter when only a simple layout is required. This approach was chosen because many of the features are not used by the average user, and having them all displayed in a small area can be overwhelming. The downside is that settings may feel hidden at first: if you cannot find a setting, switch to the Advanced layout and expand the relevant section.
Item | PROPERTIES DESIGN | Version | Mode Available |
|---|---|---|---|
1 |
| 6.0 | Always |
2 |
| 0.2 2.0 (Expanded) | Always |
3 |
| 2.0 | Always |
4 |
| 4.2 | Always |
5 |
| 0.2 | Always |
6 |
| 2.9 | Count Down |
7 |
| 2.9.1 | Count Down |
8 |
| 2.9.1 | Count Down |
9 |
| 2.9 | Count Down |
10 |
| 2.9.1 | Count Down |
11 |
| 2.9.1 | Count Down |
12 |
| 2.0 6.0 (Range) | Count Down |
13 |
| 2.0 6.0 (Range) | Count Down |
14 |
| 2.0 | Count Down |
15 |
| 3.0 (Expanded) 3.3 (Expanded) 4.8 (Expanded) | Always |
16 |
| 4.8 5.6 6.0 (Expanded) | Always |
17 |
| 6.0 | Count Down |
18 |
| 5.x | Always |
19 |
| 5.x | Always |
20 |
| 5.x | Always |
21 |
| 3.9 | Count Down |
22 |
| 1.0 6.0 (Hint) | Count Up |
23 |
| 6.0 | Count Up |
24 |
| 1.0 | Count Up |
25 |
| 4.2 | Always |
26 |
| 5.x | Always |
27 |
| 2.0 | Always |
28 |
| 2.0 | Always |
29 |
| 6.0 | Always |
30 |
| 6.0 | Always |
31 |
| 5.0 6.0 | Always |
32 |
| 5.0 6.0 | Always |
33 |
| 2.0 6.0 | Always |
34 |
| 5.0 | Always |
35 |
| 2.0 6.0 | Always |
36 |
| 5.0 | Always |
37 |
| 4.2 6.0 | Count Down |
38 |
| 2.0 | Always |
39 |
| 2.0 6.0 (fixed) | Always |
40 |
| 2.0 6.0 (fixed) | Always |
41 |
| 4.2 | Count Down |
42 |
| 2.0 | Always |
43 |
| 2.0 | Always |
44 |
| 2.0 | Always |
45 |
| 3.2 | Always |
46 |
| 3.2 | Always |
47 |
| 3.2 | Always |
48 |
| 3.2 | Always |
49 |
| 3.2 | Always |
50 |
| 5.0 6.0 | Always |
51 |
| 5.0 6.0 | Always |
52 |
| 2.0 | Count Down |
53 |
| 2.4 6.0 | Always |
54 |
| 3.0 6.0 | Always |
55 |
| 2.8 | Count Down |
56 |
| 2.8 5.1 (Expanded) 6.0 (Overtime) | Count Down |
57 |
| 6.0 | Count Down |
58 |
| 6.0 | Count Down |
59 |
| 5.1 | Count Down |
60 |
| 2.0 | Count Down |
61 |
| 2.8 | Count Down |
62 |
| 5.1 (Expanded) | Count Down |
63 |
| 4.7 6.0 (Default) | Always |
64 |
| 4.5 4.7 (Expanded) 6.0 | Always |
65 |
| 4.5 4.7 (Expanded) 6.0 | Always |
66 |
| 3.5 6.0 | Count Up |
67 |
| 5.1 | Always conditional |
68 |
| 5.1 (Expanded) | Always |
69 |
| 1.0 | Count Up |
70 |
| 3.9 | Count Down |
71 |
| 4.4 | Always not with Specific Date & Time |
72 |
| 0.2 6.0 | Always |
73 |
| 5.1 6.0 | Always |
74 |
| 3.2 | Count Up |
75 |
| 3.9 | Count Down |
76 |
| 4.4 | Always not with Specific Date & Time |
77 |
| 4.4 | Always not with Specific Date & Time |
78 |
| 3.3 | Always |
79 |
| 5.0 | Always |
80 |
| 3.3 | Always |
81 |
| 3.3 | Always |
82 |
| 5.9 | Always |
83 |
| 3.3 | Always |
84 |
| 3.3 | Always |
85 |
| 0.2 | Always |
86 |
| 5.1 | Always |
- Video tutorial: Download and install the Script
- Getting started with a basic Count Up timer
- Exploring advanced features for a Count Up timer.
- Getting started with a basic Count Down timer
- Exploring advanced features for a Count Down timer [Tutorial Coming Soon]
- Exploring advanced features for any timer mode [Tutorial Coming Soon]
- Upgrading from an earlier version: in OBS > Tools > Scripts, remove the old StopWatch script first, then add StopWatch-[6.0].lua. Running both would give you two timers.
- Need help? Turn on Enable debug logging, reproduce the problem, and attach the log file to your post.