How to Add a Countdown Timer to OBS: 5 Methods (2026)

Last updated: June 2026 · 12 min read

OBS Studio does not ship with a visible countdown widget in your scene. But you have five practical ways to get one on screen, ranging from a built-in Lua script that takes 2 minutes to a browser source overlay that handles full Pomodoro session management automatically.

This guide covers all five methods, the countdown vs stopwatch distinction, subathon timer setup, Streamlabs OBS compatibility, and how to test your timer before going live. Pick the method that fits your use case.

Key Takeaways

  • OBS ships with a countdown.lua script (Tools → Scripts) — fastest path for a simple countdown with zero installs.
  • The Ashmanix Countdown Timer plugin adds a dockable timer panel inside OBS with scene-switch-on-zero support. Good for "BRB" scenes.
  • Browser source overlays (like Focusdoro) give you a live, updatable Pomodoro timer you control from your browser. No OBS interaction mid-stream.
  • Subathon timers are a separate use case — they respond to subs and bits. A regular countdown timer cannot serve as a subathon timer.
  • Everything here works in Streamlabs OBS via Browser Source. Plugin installs differ, but browser-based timers are fully compatible.

Countdown vs Stopwatch: Which Do You Need?

Before picking a method, know which timer type fits your stream.

  • Countdown timer — starts at a set duration (e.g., 25:00) and counts toward zero. Used for: "BRB, back in 5" scenes, structured work blocks, Pomodoro intervals, pre-stream countdowns before going live.
  • Stopwatch / count-up timer — starts at 0:00 and counts up. Used for: showing how long a coding session has been running, speedrun timing, elapsed stream time.
  • Subathon timer — a countdown that grows when viewers subscribe or donate. Not a standalone timer — it requires a Twitch API integration. Covered separately in Method 5.

Most streamers asking "how to add a timer to OBS" want a countdown. The OBS Lua scripts and browser source overlays all default to countdown mode, but most also support count-up. Speedrunners specifically need count-up with millisecond precision — the OBS Lua scripts handle this; a simple browser source does not.

Five Ways to Add a Timer to OBS

  1. OBS Built-In Lua Script — uses OBS's included countdown.lua. No downloads.
  2. OBS Text Source + Community Script — downloads a more capable Lua or Python script for advanced features (count-up, milliseconds, hotkeys).
  3. Ashmanix or StreamTimer Plugin — installs a plugin that adds a dedicated dockable timer panel inside OBS.
  4. Browser Source Overlay — runs a timer in a separate browser tab and exposes it to OBS via URL. Best for Pomodoro streaming with session management.
  5. Subathon Timer (Event-Driven) — a subscription-powered countdown that connects to your Twitch channel. Requires a third-party service.

Method 1: OBS Built-In Lua Script (Zero Downloads)

OBS Studio includes a countdown.lua script out of the box. No extra downloads. This is the fastest path to a working countdown.

Steps

  1. In OBS, add a Text (GDI+) source to your scene. Name it Countdown. Style the font, size, and color to match your overlay.
  2. Go to Tools → Scripts in the OBS menu bar.
  3. Click the + button at the bottom of the Scripts panel.
  4. Navigate to your OBS installation's scripts folder. On Windows, it is usually at C:\Program Files\obs-studio\data\obs-plugins\frontend-tools\scripts\. On macOS, look inside the OBS app bundle. Select countdown.lua.
  5. In the Scripts panel on the right, configure the Duration (in seconds), choose your Text Source from the dropdown, and optionally set a message to display when the countdown reaches zero.
  6. Use the Start / Stop / Reset buttons in the Scripts panel to control the timer.

Limitations

  • Countdown only — this script does not support count-up (stopwatch) mode. For count-up, use Method 2.
  • No hotkeys — you control the timer from the Scripts panel, not from a keybind. Mid-stream control means switching to OBS.
  • No auto-reset between intervals — when it hits zero, it stops. You manually restart it for the next segment.

Best for: simple "stream starts in X minutes" pre-stream countdowns where you set it once and let it run.

Method 2: Text Source + Community Lua Script (Advanced)

The OBS community has built significantly more capable timer scripts than the built-in one. The two most widely used are:

  • Comprehensive Stopwatch & Countdown Timer — supports countdown, count-up, real-time inversion (switch direction mid-session), milliseconds, split times, and hotkeys for start/pause/reset. Available on the OBS Forums.
  • Advanced Timer (cg2121) — supports countdown, count-up, specific-time mode (count to a clock time), streaming timer (shows elapsed recording/stream time), and recording timer mode. Available on GitHub.

Steps

  1. Download your chosen script from the OBS Forums or GitHub. It will be a .lua file.
  2. Add a Text (GDI+) source to your scene. Style it to match your overlay.
  3. Go to Tools → Scripts, click +, and load the downloaded .lua file.
  4. In the script settings panel, select your Text source from the dropdown. Set the duration, mode (countdown or count-up), and configure hotkeys in Settings → Hotkeys for mid-stream control without touching the Scripts panel.

Count-up / Stopwatch mode

Both scripts above let you switch to count-up. Select Stopwatch or Count Up in the script's mode dropdown. The Text source then counts from 0:00:00 upward. This is the standard approach for speedrun timing in OBS — combined with a hotkey for split-time, it covers most speedrunner overlay requirements without a separate tool.

Pros and cons

  • Pros: Highly capable. Countdown, count-up, milliseconds, hotkeys, no external service required. Fully self-contained.
  • Cons: Script quality varies by author. Text appearance is limited to what OBS's Text source supports. No Pomodoro phase logic — it is a single timer, not a cycle manager.

Method 3: Ashmanix or StreamTimer Plugin (In-OBS Widget)

If you prefer a dedicated timer panel inside OBS rather than the Scripts interface, two free plugins deliver this.

Ashmanix Countdown Timer is the more maintained option. It adds a dockable panel to OBS with multiple independent timer instances, start/stop/reset controls, and an option to switch scenes or display a custom message when a timer reaches zero.

StreamTimer (by exeldro) adds a "StreamTimer Source" type that you add directly in the Sources panel like any other source.

Steps (Ashmanix)

  1. Download the Ashmanix Countdown Timer plugin from the OBS Forum resources page. Follow the OS-specific install instructions.
  2. Restart OBS Studio.
  3. Find the new Countdown Timer dock panel. If it is not visible, go to Docks → Countdown Timer.
  4. Click Add Timer, set the duration, and configure what happens at zero (scene switch, display message, or nothing).
  5. Use the panel controls to start, pause, and reset without touching your scene.

Auto-reset behavior

Ashmanix does not auto-reset by default. When the timer reaches zero, it stops. You reset it manually or configure a scene switch. For automatic cycling (Pomodoro-style work/break rotation), a browser source overlay like Focusdoro handles this better — it transitions between intervals automatically without any manual reset.

Pros and cons

  • Pros: Everything lives inside OBS. No external browser tab or service. Multiple independent timers. Scene-switch-on-zero is useful for "BRB" scene automation.
  • Cons: Plugin-dependent — if the maintainer stops updating it, you're on your own. Still requires switching to OBS to reset between segments. No Pomodoro cycling logic.

Method 4: Browser Source Overlay (Recommended for Pomodoro Streamers)

The most flexible approach for streamers running structured sessions: run a timer app in a browser tab and expose it to OBS as a Browser Source. You control the timer from your browser; OBS renders it as a transparent overlay.

How it works

Apps like Focusdoro generate a unique overlay URL for your account. You paste that URL into OBS as a Browser Source. When you start, pause, or end a session in the app, the overlay on your stream updates in real time. No touching OBS between Pomodoro intervals.

Steps

  1. Sign up free at focusdoro.app.
  2. Copy your personal overlay URL from the header (the Overlay URL button). It looks like https://focusdoro.app/overlay/your-unique-token. This URL is persistent — set it up once per OBS scene.
  3. In OBS, add a new Browser Source in your scene.
  4. Paste your overlay URL into the URL field.
  5. Set Width to 220 and Height to 140.
  6. In the Custom CSS field, paste:
body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; overflow: hidden; }

This CSS makes the overlay background transparent. Without it, OBS renders a white box behind your timer. Both the Custom CSS field and the Focusdoro Overlay Settings (Background: Transparent) need to be set for a fully clean result.

  1. Click OK. Your timer appears on the OBS canvas.
  2. Drag it to your preferred corner and scale it to roughly 15% of your canvas width for readable but non-intrusive sizing.

For a full walkthrough with screenshots, see the OBS Pomodoro setup guide.

What a browser source overlay adds over a Lua script

  • Automatic work/break cycling. Focusdoro transitions from a 25-minute focus block to a 5-minute break and back without you resetting anything. A Lua script does not know what a Pomodoro is.
  • Task display on the overlay. Type your current task in Focusdoro and it appears below the timer on stream. Viewers know what you are working on.
  • No OBS interaction mid-stream. Start, pause, and skip phases from your browser. Your scene stays untouched.

For Twitch-specific setup, the Twitch Pomodoro overlay guide covers positioning, theme customization, and chat engagement patterns for this method. If you currently use StreamElements and are looking for Pomodoro break-cycle support it cannot provide, the StreamElements Pomodoro alternative guide walks through the difference and a 5-minute swap.

Pros and cons

  • Pros: Timer control from a separate browser tab. Automatic Pomodoro cycling. Task display for viewers. Customizable appearance. Free tier includes full core feature set.
  • Cons: Requires an internet connection and an external account. Depends on the timer service being online. Not suitable for offline streaming.

Method 5: Subathon Timer (Event-Driven Countdown)

A subathon timer is a countdown that grows when viewers subscribe, donate bits, or send channel point redemptions. It is fundamentally different from a regular countdown timer. It requires a live connection to your Twitch channel events.

A regular OBS countdown timer — whether Lua-based, plugin-based, or browser-source — cannot serve as a subathon timer. It has no awareness of Twitch events.

How subathon timers work

Subathon services connect to the Twitch EventSub API (or PubSub). When a subscription comes in, the service adds a configured number of minutes (e.g., 5 minutes per Tier 1 sub) to the running countdown. The overlay URL you paste into OBS reflects this in real time.

Tools for OBS subathon timers

  • StreamElements Subathon Widget — available at widgets.streamelements.com. Configure time-per-event (subs by tier, bits, tips), copy the browser source URL, and paste it into OBS. Free with a StreamElements account.
  • Subathon Timer (subathontimer.com) — standalone service, free for Twitch streamers. WebSocket-based updates. Supports pause, manual time adjustment, and milestone goals.
  • Streamer.bot Extension — for streamers already running Streamer.bot, the Subathon Countdown Timer extension integrates directly with your existing bot infrastructure.

Setup (StreamElements)

  1. Go to widgets.streamelements.com, find the Subathon Widget, and connect your Twitch account.
  2. Configure seconds or minutes added per Tier 1 / Tier 2 / Tier 3 sub, per bits amount, and per tip amount.
  3. Set your starting countdown duration.
  4. Copy the browser source URL from the widget editor.
  5. In OBS, add a Browser Source. Paste the URL. Set dimensions to 1920×1080 (or your stream resolution). The background is transparent by default.

Subathon timers are a distinct use case from Pomodoro timers. If you are running a subathon, this is the only method that actually works. If you want structured focus sessions on stream, the browser source overlay in Method 4 is the right choice.

For a dedicated walkthrough of subathon timer setup — including time-per-event configuration, pause behavior, and running a Pomodoro overlay alongside a subathon timer — see the subathon timer for OBS guide.

Does This Work in Streamlabs OBS?

Yes. Streamlabs is built on OBS Studio and supports Browser Sources with the same workflow.

  • Browser source overlays (Methods 4 and 5): Paste your timer URL into a Browser Source in Streamlabs exactly as you would in OBS Studio. The setup is identical.
  • Lua scripts (Methods 1 and 2): Streamlabs supports the OBS scripting interface, but the scripts folder location differs. Check your Streamlabs installation directory for the scripts path.
  • Plugins (Method 3): Streamlabs uses its own plugin system. OBS plugins do not install into Streamlabs directly. Check the Streamlabs plugin marketplace for equivalent timer plugins, or use a browser source overlay instead — it is fully compatible and requires no plugin install on either platform.

If you use Twitch Studio as your streaming software, it also supports Browser Sources. Paste your overlay URL and the timer will appear on your scene the same way.

Which Method Should You Use?

  • Simple "BRB, back in 5" countdown: Method 1 (OBS built-in Lua script) or Method 3 (Ashmanix plugin). Free, no signup, contained within OBS.
  • Count-up / stopwatch or millisecond precision (speedruns): Method 2 (community Lua script — Comprehensive Stopwatch or Advanced Timer). These support count-up with hotkeys.
  • Subathon stream: Method 5. A regular countdown timer cannot do this.
  • Structured Pomodoro sessions (coding, art, study streams): Method 4 (browser source overlay). Automatic work/break cycling, task display, control from your browser without touching OBS.
  • Completely offline or no external dependencies: Method 2 (community Lua script). Everything runs inside OBS with no network requirement.

Test Your Timer Before You Go Live

A timer that breaks mid-stream is worse than no timer. Spend 3 minutes on this before you go live.

  • Start the timer in OBS preview. Enable the Studio Mode (View → Studio Mode) and confirm the timer appears in the preview pane before the transition to live.
  • Check the transparency. White box behind the timer? Custom CSS is not applied. Go back to Browser Source properties and paste the CSS.
  • Verify it updates in real time. For browser source overlays, start a session in the app and confirm the OBS preview updates within 1 second. If it does not, right-click the source and click Refresh.
  • Test the scene switch (Ashmanix plugin only). If you configured a scene switch at zero, start a short 10-second test timer and confirm OBS transitions to the correct scene when it hits zero.
  • Multi-scene check. If you use the timer across multiple scenes (e.g., main scene and BRB scene), add the Browser Source to each scene separately. Sources in OBS are scene-specific by default.

Taking It Further: Countdown Timers with Pomodoro Logic

A plain countdown timer counts down. That is all it does. When it hits zero, you reset it manually and start again.

If you stream focused work — coding, art, writing, studying — you do not want to be resetting a timer every 25 minutes. You want a system that manages the full cycle: focus block, short break, focus block, long break after four rounds. That is what Pomodoro timers built for streaming do.

Focusdoro handles the full cycle automatically. When a work block ends, it transitions to the break timer. When the break ends, it queues the next work block. Your OBS overlay reflects each phase without you touching anything.

The overlay also shows your current task name so viewers know what you are working on. That detail changes how people engage with your stream. They can follow your progress across a full session, not just watch a number count down.

If you stream on Twitch and want the full setup walk-through including scene positioning and chat engagement patterns, see the Twitch Pomodoro overlay guide.

For study streams and lo-fi aesthetic setups, the study with me overlay guide covers overlay positioning, background scenes, and how to structure a "study with me" session for maximum watch time. If you are building a YouTube channel around study streams specifically, the YouTube study stream setup guide covers gear, recording workflow, and channel consistency from scratch.

For the full theory behind why the Pomodoro technique works for live streaming specifically, including session length decisions and break management, see the Pomodoro technique for streaming guide.

If you want a side-by-side comparison of every Pomodoro timer tool that works with OBS, the best Pomodoro timers for streamers guide covers that.

Try Focusdoro free

Join streamers who use Focusdoro to keep their audience engaged during focus sessions.