Created by Roman Alurkoff ยท GitHub
A polished, fully customisable stage timer for live presentations. Control the countdown from OBS while displaying a beautiful full-screen timer to your presenters via a monitor, projector, or NDI feed.
- Quick Presets โ One-click buttons for 5, 10, 15, 20, 30, 45, 60, 90 minutes
- Manual Time โ Set any custom duration (minutes + seconds)
- Transport Controls โ Start, Pause/Resume, Reset, ยฑ1 min, ยฑ5 min adjustments
- 7 Polished Themes โ Modern Dark, Neon Glow, Minimal Light, Broadcast Red, Elegant Gold, Cyberpunk, Clean Blue
- Custom Theme โ Full colour picker for every element (normal, warning, danger, overtime, background)
- Warning Phase โ Colour changes when time is running low (configurable threshold)
- Danger Phase โ Distinct colour + optional flashing when critically low
- Overtime / Negative Time โ Timer continues past zero with a dedicated colour
- Flash Effects โ Screen flashing during danger and overtime phases
- Pulse Animation โ Subtle scale pulse in the last 10 seconds
- Pause Blink โ Timer blinks when paused so presenters know it's intentional
- End Message โ Customisable "TIME'S UP" message displayed at zero
- Progress Bar โ Colour-coded bar along the bottom
- Count Up Mode โ Stopwatch mode for open-ended sessions
- Hotkey Support โ Bind Start, Pause, Reset, +1 min, -1 min to keyboard shortcuts
- Configurable Font Size โ Scale the timer from small to massive
| File | Purpose |
|---|---|
presenter-timer.lua |
OBS Lua script โ all controls, settings, and timer logic |
timer-display.html |
Browser Source โ the visual timer display |
timer-state.json |
Auto-generated state file (created on first run) |
README.md |
This file |
- OBS Studio 28+ (with Lua scripting support โ included by default)
- No additional plugins or dependencies required
-
Download/Copy all files into a single folder, for example:
C:\OBS-Scripts\presenter-timer\ โโโ presenter-timer.lua โโโ timer-display.html โโโ README.md -
Add the Script to OBS:
- Open OBS Studio
- Go to Tools โ Scripts
- Click the + button (bottom-left)
- Navigate to your folder and select
presenter-timer.lua - The script will load and you'll see all the controls in the Scripts panel
-
Add the Timer Display to your Scene:
- In your scene, click + under Sources
- Select Browser (Browser Source)
- Check "Local file"
- Click Browse and select
timer-display.html - Set the resolution (recommended: 1920ร1080)
- Important: Leave the "Custom CSS" field empty (clear the default)
- Click OK
-
Done! The timer display will now respond to your controls in the Scripts panel.
- Go to Tools โ Scripts and select Presenter Timer
- Use a Quick Preset button (5, 10, 15, 20, 30, 45, 60, 90 min), or
- Enter custom Minutes and Seconds in the Manual Time section and click Set Manual Time
| Button | Action |
|---|---|
| โถ Start | Begins the countdown |
| โธ Pause / Resume | Toggles pause (timer blinks when paused) |
| โน Reset | Stops and resets to the set time |
| +1 / -1 Minute | Adjust time on the fly while running |
| +5 / -5 Minutes | Larger adjustments while running |
Set up keyboard shortcuts in Settings โ Hotkeys โ search for "Presenter Timer":
| Hotkey | Action |
|---|---|
| Presenter Timer: Start | Start the countdown |
| Presenter Timer: Pause/Resume | Toggle pause |
| Presenter Timer: Reset | Reset timer |
| Presenter Timer: +1 Minute | Add 1 minute |
| Presenter Timer: -1 Minute | Subtract 1 minute |
Select your theme in Tools โ Scripts โ Appearance โ Theme:
| Theme | Description |
|---|---|
| Modern Dark | Clean white-on-black with subtle glow |
| Neon Glow | Cyan neon on deep dark โ sci-fi look |
| Minimal Light | Light background, thin font โ corporate feel |
| Broadcast Red | Red on black with Impact font โ broadcast TV |
| Elegant Gold | Gold serif text โ awards ceremony style |
| Cyberpunk | Hot pink with scanlines โ retro-future |
| Clean Blue | Calm blue tones โ professional events |
| Custom | Use the Colour pickers to define every colour yourself |
| Setting | Description | Default |
|---|---|---|
| Theme | Visual style preset | Modern Dark |
| Font Size (vw) | Timer text size in viewport-width units | 20 |
| Show Label | Display the label above the timer | Yes |
| Label Text | Custom label text | "TIME REMAINING" |
| Show Progress Bar | Animated bar at the bottom | Yes |
| Always Show Hours | Show hours even when < 1 hour | No |
| Setting | Default |
|---|---|
| Normal Colour | White |
| Warning Colour | Amber |
| Danger Colour | Red |
| Overtime Colour | Hot Pink |
| Background Colour | Near Black |
| Setting | Description | Default |
|---|---|---|
| Warning at (seconds) | When to enter warning phase | 120 (2 min) |
| Danger at (seconds) | When to enter danger phase | 30 |
| Flash on Danger | Screen flash during danger phase | Yes |
| Flash on Overtime | Screen flash when past zero | Yes |
| Allow Negative Time | Continue counting past zero | Yes |
| Pulse Last 10 Seconds | Scale animation in final 10s | Yes |
| Count Up | Stopwatch mode (count up instead of down) | No |
| Setting | Description | Default |
|---|---|---|
| Show End Message | Display message when time expires | Yes |
| End Message | Text to display | "TIME'S UP" |
Scene: "Stage Timer"
โโโ Browser Source: timer-display.html (1920x1080)
Output to a second monitor / projector via:
- Fullscreen Projector (right-click scene โ Fullscreen Projector)
- or Windowed Projector dragged to the presentation monitor
Scene: "Presentation"
โโโ Display Capture / Window Capture (slides)
โโโ Browser Source: timer-display.html
- Resize and position in a corner
- Or use as an overlay strip at the bottom
If using the obs-ndi plugin, you can send the timer scene to any NDI-capable monitor on your network โ perfect for confidence monitors.
- Make sure
presenter-timer.luais loaded in Tools โ Scripts - Verify both files are in the same folder
- Check the Browser Source is pointing to the correct
timer-display.html
- In the Browser Source properties, ensure "Local file" is checked
- Clear the Custom CSS field (remove the default OBS CSS)
- Try clicking Refresh cache of current page in the Browser Source properties
- Make sure you're using the Custom theme if you want colour picker values to apply
- The 7 built-in themes use their own fixed palette
- OBS 28+ is required
- Go to Tools โ Scripts โ Script Log tab to check for errors
- Ensure the file extension is
.lua(not.lua.txt)
- Quick Theme Switching โ Change themes live during the event; the display updates instantly
- Pause for Q&A โ Pause the timer during audience questions, resume when the speaker continues
- Overtime Awareness โ Enable negative time + flash so the speaker sees exactly how far over they are
- Multiple Timers โ You can add multiple Browser Sources pointing to the same HTML for different output views
- Custom Messages โ Change the end message to "WRAP UP", "QUESTIONS", or the next speaker's name
- Full Screen โ Right-click the scene preview โ Fullscreen Projector (Scene) to fill a confidence monitor
- Scale for Visibility โ Increase Font Size to 30+ vw for timers viewed from far away on stage
MIT License ยฉ Roman Alurkoff โ free for personal and commercial use.