StopWatch 6.0 is a big maintenance and feature release. It fixes the long-standing Reset and hotkey problems on OBS 31/32 and adds several features you asked for. Thank you to everyone who reported bugs, sent ideas and contributed code. Your names are below.
Highlights
- Reset works again: on new installs, with current Text (GDI+) sources, on OBS 32, and when the script is added while OBS is running.
- Hotkeys work with the Scripts window closed: Reset, Add/Subtract and the others, including from Advanced Scene Switcher. No more "Failed to call timer_cb".
- Overtime: let a countdown keep counting up after zero.
- Pause at markers: for example, a football match that pauses at 45:00 and 90:00.
New features
- Overtime: Timer Expire Event > Continue counting (overtime). At zero the timer keeps running and counts up, optionally with a "+" and the Marker B colour. Reset ends overtime.
- Pause timer at Marker A / B: the timer stops exactly on the marker time, and the marker's audio keeps playing. Press Start to continue.
- Play Timer Expired Audio first, then switch: when a scene is your Timer Expire Event, the audio plays before the scene switch.
- Frames instead of hundredths: in Custom Time Format, use
{$F60}for 60 fps frames, or{$F}for your OBS frame rate.- Hour and minute units, separately:
{$H100},{$M200}, or both, e.g.{$H100}:{$M200}. Your existing{M90}/{H100M200}formats still work.- "Set" hotkey: applies the "Manually set timer" time without opening the settings.
- 1-second add/subtract steps.
- Round up displayed countdown: a
$H:$Mcountdown shows 00:01 until it really reaches zero.- Script Description checkbox at the top of the settings: untick it and press Reload Scripts to hide the title and links on small screens.
Fixes
- Add/Subtract Seconds hotkeys now work out of the box, and also update the display while paused.
- Marker audio plays again each time the marker is reached, without pressing Reset.
- Marker A/B audio Duration now actually stops the audio after the set time.
- Marker colour and note now clear on time after you pause and continue.
- Typing in Time Format no longer moves the cursor to the end.
- Prefix and suffix are restored after an OBS restart.
- "Autoload last time stamp" is saved every 30 seconds and whenever the timer stops, so it survives a crash.
- Manual Set now matches custom units (e.g.
{M90}with HH=1, MM=89 shows 01:89:00), and large hour units such as{H200}can be entered.- The Split Source list explains when no Text source is free (it must differ from the timer source), and has a Refresh sources button.
- Start/Pause hotkey names are correct without restarting OBS.
Before you update
- Timer Manipulation now defaults to Hidden (it was Disabled), so the Add/Subtract hotkeys work. If you never changed this setting, they are now active.
- Hotkeys: Start and Pause are now named "Start (Start/Pause if not split)" and "Pause (Start/Pause if not split)". Your key bindings are kept.
- Units above 100 are zero-padded to a fixed width, e.g.
{$M200}shows 005 instead of 05.- Marker A/B audio Duration now applies. If you had a duration set, the audio will now stop after it.
- File name: the script is now StopWatch-[6.0].lua. Remove the old version from OBS > Tools > Scripts before adding the new one, so you don't run two timers.
Good to know
- Marker and expiry audio durations count real time. Pausing the timer does not pause them.
- Using "audio first, then switch" with looping audio? Set an End Audio Duration, or the switch waits forever.
- A control dock is not possible from a Lua script. Use Stream Deck, obs-websocket or Advanced Scene Switcher with the hotkeys instead.
- Marker audio in Studio Mode: if it is silent for you, please post your OBS version, OS and steps so I can reproduce it.
Thank you
Code contributions (GitHub): brohirrim (prefix/suffix fix, Reset readiness idea, typo fixes), DominikKriss / deekei (hour and minute units), ccpaging ("Set" hotkey).
Reports and ideas (forum): @RobertWilliams, @RavenStreamer, @ViniJusty, @RICHIMAGES, @Guilherme Santos, @almothafar, @sgort87, @KOR3S, @jmsflms, @AkashicStreaming, @Leduit, @SheriMJ, @rez1dev, @viscountexx, @Brancix, and @DrQuota plus everyone who reported the broken download link.
Reports (GitHub): aidivas (#21) and Kaelum (#20).
Found a problem? Post here or open an issue on GitHub. If you can, turn on Enable debug logging and attach the log.
--------------------------------------------------------------------------------
Thank you @RobertWilliams, @rez1coder and @goods0ul for your valuable feedback and help on the bugs and issues related to this update.
To access the 'Split Time' flat file feature you need to check the checkbox for "Backup Mode" which will reveal or hide the checkbox for "Export Split Time"
The file will be created and be overridden on each startup, reset and split action. The file can be found under the script default location, or directory specified by the user.
If you like this update, please consider leaving a review. Let's see if we can smash the reviews for this release!!
This update has not been comprehensively tested prior to release, please report any issues.
NEW FEATURES
- Export split time to text file (opt-in) @RobertWilliams
USER EXPERIENCE & FEATURE ENHANCEMENTS
- Updated script description @rez1coder
BUGS
- Fixed error on load for setting 'Autoload last time stamp when OBS starts' @goods0ul
Thank you Sweboy for your valuable feedback and help on the bugs and issues related to this update.
If you like this update, please consider leaving a review. Let's see if we can smash the reviews for this release!!
This update has not been comprehensively tested prior to release, please report any issues.
NEW FEATURES
- Timer Expire Events ('Source List', 'Scene List', 'Auto List') has been expanded to exit out of the timer loop when source list contains only one item.
BUGS
- Fixed hour input limit for count down mode
- Fixed minute input limit for count down mode
- Fixed bug related Timer Expire Events ('Source List', 'Scene List', 'Auto List')
- Fixed an issue when Timer Expire Events ('Source List', 'Scene List', 'Auto List') contains only one item.
NOTES
When Timer Expire Events is set to 'Source List', 'Scene List' or 'Auto List' and only one source/scene is defined/available,
the timer will not reset. If the timer does not reset it will display the timer's expired timestamp. If a userbase requires the timestamp to
change, then this feature refactoring for the script will be considered for future updates.
To access this feature / update:
Set timer to 'Count Down'
![]()
Set 'Layout' to 'Advanced' and set 'Timer Settings' to 'Expanded'
![]()
Assign a 'Timer Source'
![]()
Set 'Timer Expire Event' to 'Source List, Scene List' or 'Auto List'
![]()
For 'Timer Expire Event' set to either 'Source List or Scene List' you must add the source/scene names manually. Ensure the spelling is correct!!
![]()
It does not matter what is listed in the 'Cycle List' as it will only act upon valid names that exist in available 'Sources' or 'Scenes' depending on the selected value 'Source List' or 'Scene List'
![]()
Use 'Auto List' to cycle through all items contained inside of either 'Nested Scenes' or 'Groups'
![]()
To access 'Auto List' set 'Timer Expire Event' to 'Auto List' and then a new 'select input' will be available to select which Nested Scene or Group items will by cycled/used.
![]()
Thank you christhevr for your valuable feedback and help on this bug.
BUGS
- Fixed hour input limit for count down mode
- Fixed minute input limit for count down mode
Thank you Seamas73 for your valuable feedback and help on this bug.
Fixed Bugs
- Fixed timer callback bug.
NEW FEATURES
- Custom Hour Unit
There is a low probability that this update may break something, so please report any issues so it may be mended.
Thank you @phagtheodnoque from my Youtube Channel for the great feature suggestion/request.
Overview:
Set Timer Format to Custom Time Format
![]()
In Time Format, override the default hour unit by adding curly brackets '{ instructions }'
- Instructions accepted is 'H' (Overriding Hour Unit) followed by numeric value that you want the hour unit to be limited at.
- Instructions accepted is 'M' (Overriding Minute Unit) followed by numeric value that you want the minute unit to be limited at.
Valid Input Format
- Instructions Format: The input string should contain a segment enclosed in curly brackets {}.
- Data Encoding: Inside the curly brackets, the function looks for a pattern comprising the target_char followed immediately by one or more digits (e.g., M123, H456).
- Examples of Valid Strings:
- "$H:$M:$S,$F{M90}" (with target M, extracts 90)
- "$H:$M:$S,$F{H100M200}" (with target H, extracts 100 and with target M, extracts 200)
- "$H:$M:$S,$F{M90H999}" (with target H, extracts 999 and with target M, extracts 90)
- Select Target Character: Decide the uppercase character (target_char) you're interested in. This should be a single uppercase letter like 'M' (Minute) or 'H' (Hour)
![]()
Thank you johnhuibers5325 and CrabbyPatty_777 from my Youtube channel for the great feedback.
Added ability to set days for Count Up Mode via Set Timer Manually
Mode new item is available:
![]()
To reveal Form Property Set Timer Manually
![]()
Where new item can be found.
![]()
New Item Added:
![]()
Remember, to see this applied to the timer you need to set Timer Format to Custom Time Format
![]()
And you need to include the symbol: $D to show days:
![]()
Thank you lcalder for your valuable feedback and help on this bug.
OPTIMIZATION
- Some small changes
BUGS
- Fixed Macintosh Compatibility issue for text sources