Guides
How to set a timer in Twitch chat for OBS
Three ways to put a countdown on your stream that mods can drive from chat. They look similar at a glance — the differences only show up when OBS crashes mid-subathon or when you want one timer visible on every scene.
The three options
- OBS's built-in scene timer — a text source with a duration filter. No chat involvement.
- Nightbot / Streamlabs / StreamElements custom timer — chat-driven, but the countdown lives in chat as a message, not on your overlay.
- The toolset Timer overlay — browser source with
!timer,!timerAdd,!timerPausecommands. Deadline lives on the server, so the count survives OBS restarts, scene swaps, and you closing your laptop to grab a snack.
When each one wins
OBS scene timer
Right call for a Pomodoro "stretch in 50 minutes" private countdown that doesn't need to be modded from chat. Wrong call for anything subathon-shaped — the second OBS reloads the source, you lose the deadline.
Nightbot / Streamlabs timer
Right call if the visible artifact you want is a chat message ("15 minutes left until X"). Wrong call when you want something pinned to your scene that doesn't disappear in three messages.
Toolset Timer overlay
Right call for subathons, raffles, follow-train countdowns, stream-ends-in-N-minutes signposting, anything that needs to survive a crash. The whole reason the deadline lives on the server is so you can break OBS and your viewers keep seeing the right number.
The commands
From the Timer tool page:
!timer 1h30m— start a 90-minute countdown. Accepts30m,2h,1h15m30s,90(seconds),2026-08-15T20:00(ISO deadline).!timerAdd 10m— extend by 10 minutes!timerSub 5m— shave 5 minutes off!timerPause/!timerResume— pause and resume!timerStop— clear the countdown entirely
By default, the broadcaster + mods can fire any of these. VIPs and subs are togglable on the tool page if you want them in on!timerAdd specifically (handy for subathon per-sub extension rules).
Why server-side deadline matters
Most overlay timers work by keeping a JavaScript countdown in the browser source itself. When OBS reloads the source — and OBS will reload that source: a scene transition, a crash, you closing OBS for the night — the countdown starts from zero or whatever the default was.
The toolset overlay instead stores the deadline (an absolute ISO timestamp) on the server. The browser source asks the server "what's the deadline?" on load and counts down from now. Restart OBS at hour 4 of an 8-hour subathon: the overlay reloads, asks the server, gets "the timer ends in 4 hours," keeps counting. No state lost.
This is the same architectural pattern we wrote up in Hot-swap overlay config — durable state on the edge, dumb browser source on the client.
Setup
- From the dashboard, open Timer.
- Click Create your first source, copy the URL.
- Add to OBS as a browser source — size it to wherever you want the timer to live on screen. Browser source walkthrough if you're new.
- On the tool page, tune the font, accent color, label ("Subathon ends in" vs "Break:"), and who can fire the commands.
- Type
!timer 5min chat to confirm it ticks.
Pair with
Subathon timer for OBS for the per-sub extension rules, and the event list if you want each extending sub credited on stream.