A free stage timer and speaker countdown for live events, conferences, presentations and OBS.
Send a clear timer to a projector, confidence monitor, browser source or phone from one local app.
Latest release: ProTimer 2.5.0 — free, open source, no account and no watermark.
Stream Deck is included in 2.5.0. Colorful LCD controls, separate ACTIVE/SET readouts and one-touch commands, including T1 LIVE −/+10, −/+5 and −/+1 minute. Both desktop installers include the native Elgato plugin and a genuine editable XL Full 32 profile. No Node, terminal or Companion required; Elgato Stream Deck 7.6+ is required. Simple setup guide.
Srpski · Product page · AlternativeTo · Download · Quick start · Support · Community · Press kit · Changelog
Download one recommended installer for your computer. GitHub's automatic
Source codeZIP and TAR.GZ files are for developers and will not install ProTimer.
| Your computer | Recommended download | Install |
|---|---|---|
| Apple Silicon Mac (M1 or newer) | Download the macOS DMG | Open the DMG and drag ProTimer to Applications. |
| Windows 10/11 x64 | Download the Windows installer | Run Setup and follow the installer. |
Need a Windows build that does not install? Use the portable EXE. Most Windows users should choose Setup.
Every installer is built by the public release workflow. You can verify a download with the ProTimer 2.5.0 SHA-256 checksums.
First-launch security warning
The current downloads are not Apple-notarized or Windows Authenticode-signed.
- On macOS, confirm the DMG came from this repository. If Gatekeeper blocks the app, use System Settings -> Privacy & Security -> Open Anyway.
- On Windows, SmartScreen may show Unknown publisher. Continue only for the installer downloaded from this repository.
- Native Stream Deck control: install the bundled plugin from Control → Stream Deck, pair and manually activate the XL profile. Each executable key has one function and one tap. No automatic profile takeover.
- LIVE speaker corrections: the second row is dedicated to Timer 1: −10m / +10m / −5m / +5m / −1m / +1m. The countdown keeps running; SET and Timer 2 are unchanged. Customize any key in Control or Elgato.
- Separate ACTIVE and SET: prepare a preset or enter HH:MM:SS without interrupting the speaker. LOAD READY loads without playing; START SET loads and starts. PAUSE and PLAY ACTIVE control the already loaded time.
- Real output commands: LIVE T1, LIVE T1 + T2 and LIVE T2 use the displays and presentation mode chosen in Control. Separate BLACK ON/OFF keys hide and restore the picture without stopping the timer.
- Independent zero alerts: choose flashing red, a natural synthesized bell and negative overtime separately for each timer. Turn any of these off; red overtime can remain steady.
- Output-quality diagnostics: check output dimensions and digit clipping, with per-screen pixel-density handling. The app check cannot certify a downstream switcher or TV signal.
Install the same recommended ProTimer download, then Control → Stream Deck → Install / update plugin. Confirm Elgato's installation, Set up integration, select XL and Activate ProTimer profile. The plugin/profile comes with ProTimer; no development tools are needed. For plugin-only installation use the native Stream Deck package. English guide · Srpski.
Customized layouts and existing settings are preserved. Only untouched starter layouts receive the new T1 LIVE row automatically. To opt in on a customized board, use Edit layout → Restore defaults → Apply, or configure individual keys deliberately.
- Two timers, two screens: send Timer 1 to one connected display and Timer 2 to another, from the same Control window.
- Independent outputs: open, close, resize and fullscreen each window separately without restarting either countdown.
- Keep your current setup: the combined left/right or top/bottom view, rundown, phone control, OBS, QR and all existing settings remain available. No output opens automatically at startup.
- A calmer, clearer Control: refined typography, dark native controls and higher-contrast buttons, with the familiar two-column layout and all existing settings retained.
- Safer rundown operation: select without interrupting the live timer; load, run, edit, duplicate, reorder and undo deletion. Start/Pause/Resume, Previous/Next and schedule controls stay together.
- Clearer connection roles: private phone control, view-only Timer/OBS and Backstage links have separate sections, labeled QR codes and explicit copy/error feedback.
Rundown and connection controls →
- 2.2.1 · Control-only startup: launching ProTimer opens only Control. Choose a monitor and click Send to screen when you are ready; no audience window opens automatically.
- Exact output size: type the window width and height, or choose HD / Full HD. The frameless screen still moves and resizes with the mouse.
- Precise digits: scale and position the timer independently of its window, while the operator preview stays large and centred.
- Two timers on one screen: independent durations and transport controls, split left/right or top/bottom, with separate digit layouts.
- Clearer phone control: choose the right network address, check the local server, reconnect automatically and see invalid-link or command errors.
- Safer online startup: wait for a new tunnel hostname to become ready before its first lookup. Online sharing remains experimental; keep a local control path for shows.
The scrollable rundown, duration picker, Colors/Text, Grid, Thresholds, Message, audience QR and Backstage controls remain available.
See the complete 2.5.0 release notes.
How to size the output, position digits, use two timers and connect a phone →
- Install and open ProTimer — only Control opens, so you can prepare before showing anything on a desktop monitor.
- Open Duration, set hours/minutes/seconds (or choose a quick preset), then press START or
Space. - Select a monitor and click Send to screen when ready. Then drag/resize the frameless Screen window or use fullscreen from Control.
- To let people follow on phones, open the network panel, select the view-only Timer or Backstage QR, then choose Show QR to audience.
- Countdown, stopwatch and clock with warning colors, overtime and an exact end-time mode.
- Dedicated stage output for a projector, second display or confidence monitor.
- Transparent OBS browser-source timer for livestream and recording overlays.
- Phone remote and QR access over the local production network, including an audience QR on the stage output.
- Simple event rundown with NOW, NEXT, planned times and over/under status.
- Backstage view for crew, green room, stage manager or lobby display.
- Native Stream Deck plugin and editable XL profile, with Companion, HTTP and OSC still available.
- Excel/Sheets rundown paste, speaker messages, grid placement and a compact output option.
- English and Serbian interface, no account, no subscription and no watermark.
ProTimer is designed for small and medium live events that need reliable speaker timing without a complex show-control system.
The control window keeps timer transport, display output, rundown and network links in one place:
The Backstage view shows NOW, NEXT, the schedule and over/under status on any browser:
- Free stage timer for Mac and Windows
- OBS stage timer and transparent countdown overlay
- Bitfocus Companion stage timer for Stream Deck
- Add a free OBS countdown timer with a phone remote
- Set up a stage timer for conference speakers
- Control ProTimer with Bitfocus Companion and Stream Deck
- Configure warning colors, overtime, and speaker messages
- Sample conference rundown CSV and OBS Browser Source checklist
📖 Open the full operator guide — display, OBS, phones, rundown, automation and shortcuts
- Countdown — the main mode. Open Duration and set
HH:MM:SS, use the+/−controls, or choose a minute preset. - Stopwatch — counts up from zero.
- Clock — shows the current time of day.
- "End at" — enter a time (e.g. 20:30) and it counts down to that moment.
The desktop output is always a clean frameless window: drag anywhere on it to move it and drag its edges or corners to resize it. At the top of Control, pick a monitor and click Send to screen, or use the fullscreen button / F. Fullscreen is deliberately controlled only from Control, so accidental clicks on the audience screen cannot change it.
The "Network → OBS · Phone" panel shows a URL (e.g. http://192.168.1.50:7878).
- In OBS, add a Browser Source and paste that URL.
- Enable "Transparent background" in ProTimer → the timer becomes a clean overlay over your video.
- For NDI: run that browser source through OBS and enable OBS NDI output (DistroAV plugin).
Open the same URL on any computer/TV on the network as a confidence monitor.
The same panel has a Remote URL (…:7878/remote). Open it in your phone's browser (same Wi-Fi). You get big buttons: Start/Pause, Reset, ±time, GO next, blackout, quick durations, and messages to the speaker. (The main ProTimer must stay open on the computer.)
Choose the correct network adapter and use Check local address before scanning the Remote QR. Allow local-network access in macOS privacy settings / the Windows firewall. Guest Wi-Fi can isolate devices even when they share the same network name. Scan a fresh QR after restarting ProTimer; never give the private control link to the audience. Connection and dual-timer guide.
Every command is a simple HTTP GET — the network panel shows a ready-made API URL (with your session token) to copy:
http://<ip>:7878/cmd?type=start&t=<token>
Available type values: start (toggles start/pause), reset, go (next cue), blackout, adjust&value=<seconds> (e.g. -60), setDuration&value=<ms>, mode&value=countdown|countup|clock, message&value=<text>, clearMessage, text&value=<text>, clearText.
Stream Deck via Bitfocus Companion: two options:
- Dedicated module — download the packaged ProTimer module, then in Companion 4 open Modules → Import module package and select the
.tgzfile. It adds named actions, starter presets, live feedbacks (running = green, blackout = red), and a$(protimer:time)variable for the button face. The official repository has been requested; catalogue submission remains pending. - Zero-install — add a Generic HTTP connection, create a button with an HTTP GET action, and paste the API URL (change
typeper button).
Works from curl, Keyboard Maestro, or any automation too. The token changes on every app launch (security), so re-copy the URL after restarting ProTimer.
ProTimer listens for OSC on UDP port 7879. Addresses mirror the HTTP API:
/protimer/start /protimer/reset /protimer/go
/protimer/blackout /protimer/adjust 60 /protimer/setDuration 600000
/protimer/message "WRAP UP" /protimer/clearMessage
Arguments: int/float/string (first argument = value). OSC has no token — it's LAN-trusted like QLab/Ontime, so keep the machine on a network you control.
- Colors: pick the background and digit color. "Warning colors" turn yellow/red near the end (you can turn them off).
- Transparent background: removes the black fill for a clean OBS or desktop overlay. The desktop output remains frameless, movable and resizable with or without transparency.
- On-screen text: type a message (e.g.
BREAK) — it sits above the time, or enable "Text only" to replace the time entirely. - Message to speaker: a short line at the bottom of the screen, with an optional flash.
Build your run on the right: each item has a name, duration, an optional note and a color. The duration uses the same clear HH:MM:SS picker as the main timer. Set a planned show start and ProTimer fills in the clock times for every item. START RUNDOWN always starts the first item; GO (N) jumps to and starts the next one. Long rundowns keep every row at full readable height inside their own scrollable list. Optional auto-advance. The Over / Under badge shows whether you'll finish ahead or behind your planned end.
Turn on "NOW / NEXT on screen" to show the current and next item under the timer on the stage screen.
Next to every link in the network panel there's a QR button. For the view-only Timer and Backstage links, choose Show QR to audience to place a large scannable code on the stage output; Hide QR from screen restores the timer. The control-only Remote URL can never be sent to the audience output. Need someone off your network (a remote client, another venue)? Click Share online and ProTimer creates a public, view-only https:// link through a Cloudflare Quick Tunnel. The public link is beta and has no uptime guarantee; for a live show, LAN + QR remains the dependable path.
The public viewer receives the timer and rundown state, including cue names and notes, and can open the /backstage path. Do not include sensitive notes when sharing online. The command token is not included in the public viewer link. Click Stop sharing when the remote viewer is finished.
The network panel has a Backstage URL. Open it on any screen, laptop or phone and everyone sees the same picture: the current item with its live timer, what's next, the full schedule with clock times, and the planned vs projected finish with the over/under indicator. Ideal for a green room, a stage manager, or a lobby screen.
Switch between SR / EN with the toggle next to the logo, top-left. The choice is remembered and also applies to the phone remote.
| Key | Action |
|---|---|
Space |
Start / pause |
R |
Reset |
N |
Next cue |
↑ / ↓ |
± 1 minute |
← / → |
± 10 seconds |
B |
Blackout |
F |
Toggle fullscreen from Control |
M |
Message (Enter sends) |
C |
Clear message |
You need Node.js 24 LTS or newer.
git clone https://github.com/srdjankotarlic/protimer.git
cd protimer
npm install
npm start # run the app
npm run smoke # automated test (windows + network + remote)
npm run dist:mac # build the macOS .dmg
npm run dist:win # build the Windows installer + portableClean stack, almost no dependencies: Electron + plain HTML/CSS/JS + a Node http server. LAN viewers use SSE; public HTTPS viewers use reliable versioned long-polling because Cloudflare Quick Tunnels do not support SSE. Browser clocks synchronise to the ProTimer host, preventing phone-clock drift. qrcode, a bundled and verified official cloudflared binary and a localtunnel fallback provide the share features. All the logic lives in controller.html (control), output.html (screen/OBS), backstage.html (crew schedule), remote.html (phone), and main.js (windows + server).
ProTimer 2.5.0 includes the optional native Elgato SDK plugin, separate ACTIVE/SET preparations for both timers, an 8×4 editor inside Control and colorful live LCD buttons. The starter's second row provides T1 LIVE −/+10, −/+5 and −/+1 minute corrections. The timer remains independent of Stream Deck and Companion.
- Install the recommended ProTimer app for your computer. The plugin is included.
- Open Control → Stream Deck → Install / update plugin and confirm in Elgato Stream Deck 7.6+.
- Click Set up integration, choose your XL, select ProTimer XL · Full 32 and click Activate profile. Confirm Elgato's first profile-install prompt. No need to place 32 actions manually. Configure individual ProTimer keys directly in Elgato or use the Control layout editor.
Daily use: select T1/T2 → choose a preset or enter SET → START SET. The second row corrects T1 LIVE by −/+10, −/+5 and −/+1 minute. Separate PAUSE, PLAY ACTIVE, LOAD READY and BLACK ON/OFF keys remove guesswork. LIVE T1 / T1+T2 / T2 use the output choices in Control. Every native command is one tap, including reset and replacing running time; use deliberately. ACTIVE and SET are read-only LCDs.
The plugin builds and packages with Elgato's official CLI. The native Full 32 profile is an unchanged real Elgato export. Standard 28 + 4 free remains a logical template: duplicate Full 32 in Elgato and remove its last-column actions to make those four keys genuinely free. Physical XL/Windows acceptance and clean-machine setup still need hardware testing. Installation, app focus and reconnect never automatically select a profile.
Guides: English · Srpski · SDK constraints · 2.5.0 verification results · Historical editor screenshot.
npm run deck:build
npm run deck:test
npm run deck:package
npm run deck:validate
npm run smoke:deckUse --publish never for local Electron builds. The desktop packaging includes the resulting .streamDeckPlugin; end users do not install Node or launch a server.
Ideas on the list (feedback very welcome — open an issue to vote or suggest):
- Signed / notarized builds (no “unidentified developer” warning)
-
Paste a rundown from Excel / Google Sheets— done (tab-separated rows paste directly into the rundown card) - Groups/blocks in the rundown (e.g. Morning Sessions, Lunch)
-
HTTP control API— done (works with Companion's Generic HTTP module + Stream Deck) -
Native OSC + dedicated Bitfocus Companion module— done (module repo; official repository request #2110 open, catalogue submission pending) - More languages
- Multiple independent timers
Being honest about where it's at:
- Unsigned builds. macOS shows “unidentified developer” (right-click → Open) and Windows shows SmartScreen (More info → Run anyway) on first launch. Code signing is on the roadmap.
- Network sharing needs the same Wi-Fi — unless you use the optional Share online link, which is beta. It uses a Cloudflare Quick Tunnel (or a labelled fallback), passes viewer traffic through that provider and has no uptime guarantee. The public viewer can see timer/rundown data, including cue names and notes. For shows, LAN + QR is the dependable and private path.
- Remote control is link-based. Anyone with the exact
…/remote?t=…link can control the timer — share it deliberately. - OSC has no authentication (UDP, LAN-trusted — same model as QLab/Ontime). Anyone on your network can send OSC commands; use it on networks you control.
- Single operator — no real-time multi-user collaboration (see Ontime/StageTimer if you need that).
- Builds: macOS (Apple Silicon) and Windows (x64). No Intel-mac or Linux builds yet.
Issues and pull requests are welcome — bug reports, feature ideas, translations, docs.
- Open an issue (there are templates for bugs and features).
- For code: fork,
npm install, make your change, runnpm run smoke, open a PR. - Keep it simple — the whole point of ProTimer is that it stays small and obvious.
If you use ProTimer on a show, a ⭐ or a quick note about what worked (or didn't) genuinely helps.
For PowerPoint and PDF presentation playback inside OBS, see PPTBridge SK, the free presentation-source plugin from the same author.
ProTimer is created and maintained by Srdjan Kotarlic — built from real live-production needs.
- GitHub: @srdjankotarlic
- LinkedIn: Srdjan Kotarlic
If it helps your show, a ⭐ on the repo means a lot. Issues and ideas are welcome.
© 2026 Srdjan Kotarlic. Released under the MIT License — free to use, modify and share, with attribution. Bundled third-party components retain their own licenses; see Third-party notices.



