KUMA Timer — User Guide
Version 1.10.14 · Professional stage countdown for live events
Installation
KUMA Timer ships as direct downloads only — no third-party storefront required. The macOS and Windows builds are code-signed, so Gatekeeper and SmartScreen will not flag them; the Linux and Raspberry Pi AppImage is unsigned, which is standard practice on desktop Linux.
Every install includes a 30-day Full trial with every feature unlocked. After the trial ends, KUMA Timer keeps working in Lite mode — core countdown, OSC, Companion — or you can enter a £8 licence to stay on Full forever. See pricing for the full feature matrix.
macOS
Signed & Apple-notarized .dmg. Open the disk image, drag KUMA Timer.app to Applications, launch. No Gatekeeper warning. First launch starts the 30-day Full trial automatically — no sign-up needed.
When the trial ends (or earlier, if you already have a code): Settings → License Info → Activate with key. Codes arrive by email from Stripe within seconds of checkout.
Windows
Signed via Azure Trusted Signing. Standard Windows installer .exe, runs without SmartScreen warnings. First launch starts the 30-day Full trial.
The same £8 licence code works on macOS, Windows and Raspberry Pi — one code, one machine at a time. Switch any time via the deregister portal.
Raspberry Pi (kiosk mode, one-liner)
KUMA runs as a dedicated kiosk appliance on Raspberry Pi: fullscreen timer on boot, zero desktop, controlled entirely from the web admin panel at http://<pi-ip>/.
Kiosk mode requires a Full licence — the web admin is a Full feature. The same £8 code that activates your Mac or PC also activates your Pi (one machine at a time). During the 30-day trial everything works with no code; after that, enter the licence via the web admin's License panel.
What you need
- Raspberry Pi 4 (1 GB RAM minimum, 2 GB recommended — 2 GB is required if you want NDI output) or Pi 5
- 16 GB SD card or larger, flashed with Raspberry Pi OS Bookworm 64-bit (Lite or Desktop both work)
- Network — Ethernet or Wi-Fi configured via Pi Imager's advanced options
Install (one command)
SSH into the Pi (or open a local Terminal) and paste:
curl -fsSL https://raw.githubusercontent.com/pltech-dev/kuma-timer-releases/main/install-pi.sh | sudo bash
The installer:
- Installs system libraries (
libfuse2,libportaudio2) via apt - Downloads the latest KUMA AppImage from GitHub releases
- Registers a
systemdservice that starts KUMA fullscreen on every boot - Redirects port 80 → 5555 so
http://<pi-ip>/reaches the admin panel - Seeds default admin credentials kuma / kuma (change under System after first login)
Takes 2-3 minutes on a good connection. Reboot when prompted.
After reboot
- Pi boots straight to a fullscreen timer (black background,
00:00) - From any device on the same network, open
http://<pi-ip>/→ log in as kuma / kuma → admin panel - Need the Pi's IP? The Pi's hostname is
kuma-timer.localon most networks — tryhttp://kuma-timer.local/first
Updates & maintenance
- One-click update: admin panel → System → Update KUMA Timer → Update now
- SSH update:
sudo /opt/kuma-timer/update-kuma.sh - Sync settings from your Mac/Windows: on the source machine open the web admin, System → Download this device's config. On the Pi, System → Import & Restart, select the downloaded JSON. Presets, cues, colours, integrations — everything portable — copy over. Password stays local.
- Emergency exit (plug a USB keyboard into the Pi): hold Ctrl+Alt+Q for 3 seconds
- Uninstall:
sudo /opt/kuma-timer/install-kiosk.sh --uninstall --user kuma
chmod +x, run. The kiosk installer above is optimised for dedicated Pi appliances.Quick-Entry Keyboard (Pi-only)
Plug a USB or Bluetooth numeric keypad into a Pi running KUMA in kiosk mode and you get a dedicated remote for time entry and transport — no second screen, no admin panel, no touch needed. Works equally well with a full keyboard, a USB-numpad, an Elgato Stream Deck Pedal, or any HID device that emits standard key codes.
Pick the device under Settings → Devices → Quick-Entry Keyboard. Once selected, KUMA grabs that device exclusively via the Linux evdev kernel interface — keystrokes never reach the desktop or any other application, so there is zero conflict with whatever else might be running on the Pi.
| Key | Action |
|---|---|
| 0 … 9 / KP 0 … KP 9 | Enter digits — live-preview in the big timer display |
| Enter / KP Enter | Apply the entered time and start the timer |
| . / KP . / Space | Pause / resume the running timer |
| Backspace / Delete | Hard reset — stop and clear to 00:00 |
| KP + | +1 minute (works whether timer is running or paused) |
| KP − | −1 minute (clamps at zero) |
| Esc | Clear the current digit-entry preview without resetting the running timer |
Live-preview rule of thumb: numeric keypads use the rightmost two digits as seconds, the next two as minutes, and any further digits as hours. Type 5 Enter → 00:05. Type 500 Enter → 05:00. Type 10000 Enter → 1:00:00.
Overview
KUMA Timer has two windows:
- Control Window — your operator view
- Display Window — the output sent to a projector or second screen
The display window can be sent to any connected screen and goes fullscreen automatically on secondary screens.
Timer Controls
| Button | Action |
|---|---|
| START | Start the timer from the loaded time |
| PAUSE | Pause the running timer |
| RESUME | Resume after pause |
| RESET | Stop and clear the timer to zero |
| HIDE TIMER | Blank the display window (timer keeps running internally) |
| SHOW TIMER | Restore the display |
| −1m / +1m | Subtract or add 60 seconds while timer is running |
Setting the Time
Use the H / M / S spinboxes to enter the desired duration, then click SET to load it without starting.
- In MM:SS mode the H field is hidden
- In HH:MM:SS mode (Settings → Display) the H field appears
The status label above the controls shows the current state: STANDBY, LIVE, PAUSED, or the active speaker name.
Presets
Six quick-load buttons (e.g. 5M, 10M, 20M…).
| Interaction | Action |
|---|---|
| Click | Load that duration and set the manual input fields |
| Hold (0.6 s) | Edit the preset value — enter new minutes in the dialogue |
Presets are saved automatically to config.
Cuesheet / Runsheet
The left column is a runsheet of named speakers with individual times.
| Interaction | Action |
|---|---|
| Double-click a cue | Load that speaker's time and name into the timer |
| Drag & drop | Reorder cues — saved automatically |
| + button | Add a new cue (name + minutes + seconds) |
| − button | Delete the selected cue |
| Clear button | Remove all cues (confirmation required) |
| ✎ button | Edit the selected cue (name, minutes, seconds) |
| ▶ NEXT button | Advance to the next cue in the runsheet |
The sidebar can be hidden in Settings → Display → Show Runsheet. The cue name can be shown above the timer on the display window — toggle in Settings → Display → Show Cue Name on Display.
Import / Export
Cuesheets can be saved to disk and reloaded later — useful for re-running the same show, sharing between Mac / PC / Pi installs, or building your runsheet in a spreadsheet first. Two formats are accepted on import; export writes whichever extension you pick.
Download example files as a starting point and edit them in any text editor or spreadsheet:
- cues-example.json — JSON format (recommended; supports schedule fields)
- cues-example.csv — CSV format (opens directly in Excel / Numbers / Google Sheets)
JSON format
Wrapped object with a cues array (recommended), or a bare list of cue objects. Each cue needs at minimum name plus a duration:
{
"kind": "cuesheet",
"cues": [
{ "name": "Welcome speech", "min": 5, "sec": 0 },
{ "name": "Maureen Fitzgerald", "min": 30, "sec": 0, "scheduled_at": "10:15" },
{ "name": "Coffee break", "min": 15, "sec": 0 },
{ "name": "John — keynote", "min": 45, "sec": 0, "scheduled_at": "11:00" }
]
}
Field reference — most have aliases so casual hand-writing works:
| Field | Required? | Aliases accepted | Notes |
|---|---|---|---|
name | yes | cue · title · speaker | Trimmed and capped at 200 chars. |
min | yes (or time) | minutes | Integer ≥ 0. |
sec | defaults to 0 | seconds | Integer ≥ 0. If sec ≥ 60 the overflow rolls into min. |
time | alternative to min/sec | — | String "MM:SS" or "HH:MM:SS" as a duration (not a wall-clock time). |
scheduled_at | optional | schedule · scheduled | Wall-clock auto-fire time, 24-hour "HH:MM". The cue loads + starts automatically when the host clock reaches this time. Skip the field for cues with no fixed start time. |
CSV format
One row per cue. Header row is optional but recommended — the importer auto-detects column meaning from header names. Without a header it expects column order: name, minutes, seconds, scheduled_at. Comma, semicolon and tab delimiters are all auto-detected, and a UTF-8 BOM (Excel's "Save as CSV UTF-8") is stripped silently.
name,minutes,seconds,scheduled_at
Welcome speech,5,0,
Maureen Fitzgerald,30,0,10:15
Coffee break,15,0,
John — keynote,45,0,11:00
Q & A,20,0,
Same field aliases as JSON: column header name / cue / title / speaker, minutes / min / m, seconds / sec / s, scheduled_at / schedule / scheduled / start / start_time. A column called time / duration / length is treated as a single "MM:SS" / "HH:MM:SS" string and replaces separate min/sec columns.
scheduled_at column shows up as 10:15:00 instead of 10:15, that's Excel auto-formatting it as Time. Format the column as Text before saving (Format Cells → Text), or save and edit the raw CSV in a plain text editor. The importer accepts both forms regardless.How import works
- Click Import on the cuesheet sidebar (or Settings → Cuesheet → Import).
- Pick a
.jsonor.csvfile. Format is auto-detected by extension; if the extension is unfamiliar the file's first byte decides ({/[→ JSON, anything else → CSV). - The file is parsed defensively. Rows with missing
nameor non-numeric durations are skipped with a warning rather than aborting the whole import — you'll see a summary dialog if any rows were skipped. - Imported cues replace the current cuesheet. The previous list is overwritten — make a quick Export first if you want a backup.
Display Modes
Use the TIMER / CLOCK toggle in the control panel:
| Mode | Display shows |
|---|---|
| TIMER | Countdown (or count-up in overtime) |
| CLOCK | Current wall-clock time (HH:mm:ss) |
Visual styles
Each mode has its own visual style picker in Settings → Display. Pick separately for the timer and for the clock — the count-down look does not have to match the time-of-day look.
| Style | Available in | Best for |
|---|---|---|
| Text | Timer · Clock | Default — large monospace digits with optional progress bar. |
| Round | Timer · Clock | Circular ring around the digits; great for analog feel. |
| RounDOT NEW | Clock only | Faithful BBC pip / Wharton broadcast clock — dot-matrix HH:MM with two concentric red rings ticking the seconds. |
RounDOT — BBC pip / Wharton clock face
The classic broadcast countdown look — black panel, red LED-style dots. The outer ring of 60 dots ticks one per second; the inner ring of 12 dots lights every 5 seconds, marking the pip moments. The big HH:MM in the centre and the smaller SS below are 5×7 dot-matrix glyphs. RounDOT is time-of-day only — it doesn't make sense for a count-down, so the picker only offers it on the Clock side.
Once picked on the host, RounDOT renders identically on every surface that mirrors the time of day:
- Main display window — Mac / Windows secondary screen, Raspberry Pi kiosk in fullscreen.
- NDI output — vMix / OBS / Resolume see the same dot-matrix face on their video bus.
- KUMA Live web viewer — anyone you've shared the QR / link with sees RounDOT on their phone.
- Web mirror served from the host (
http://<host-ip>:5555). - iOS / iPadOS Companion Monitor mode — iPhone or iPad on the lectern shows the same look.
- Presenter View Mode (PVM) floating window for the operator.
Screen Selection
The dropdown at the top of the control panel lists all connected screens (e.g. Primary 2560×1600, Ext 2 3840×2160). Select a screen to move the display window there. On a secondary screen it goes fullscreen automatically; on the primary screen it opens as a regular window.
Send Message to Screen
The SEND SMS button sends a text message to the display window.
- Click SEND SMS — a dialogue opens
- Pick a saved or recent message, or type a new one (max 300 characters)
- Set duration (1–600 seconds) and optional effects
- Click OK
Display modes
- Bar (default) — message appears in a horizontal bar at the top or bottom of the display window, scrolling from right to left if wider than the container
- Fullscreen — check Fullscreen to take over the entire display window; the timer is hidden and the message auto-scales to the largest readable font size that fits the screen. The timer reappears automatically when the message expires or is cancelled.
Enable Scroll to force scrolling even for short messages. Enable Flash for a flashing background effect. The button changes to CANCEL SMS while the message is active.
Display defaults (text colour, border colour, size, position) and saved messages are managed in Settings → SMS. The Invert scroll direction option is available there for right-to-left languages (Arabic, Hebrew).
The browser mirror page (http://<ip>:5555) shows both the bar and fullscreen SMS overlay in sync with the display window.
Time Glide
Time Glide adjusts the timer's tick speed so it reaches zero at a target moment — without changing the displayed value.
Click TIME GLIDE SETTINGS ▲ to expand the panel.
Duration Glide
Enter how many real minutes/seconds remain until the end of the session. KUMA recalculates the tick speed so the timer expires exactly then.
Clock Time Glide
Enter the wall clock time at which the timer should reach zero. KUMA calculates the difference from now and adjusts speed accordingly.
| Button | Action |
|---|---|
| APPLY | Activate glide — replaced by CANCEL GLIDE |
| CANCEL GLIDE | Restore normal 1-second tick speed |
Overtime
When the timer reaches zero:
| Setting | Behaviour |
|---|---|
| Count Up | Timer continues with a − prefix and red colour |
| Stay at 00:00 | Timer freezes at zero |
| Stop Timer | Timer stops completely |
Additional options in Settings → Behavior: change background colour, blink, show a custom message (e.g. PLEASE WRAP UP), send an OSC trigger to Companion. (Behavior tab also hosts Scheduled Cues — moved here from the old Misc tab.)
Audio Cues
Settings → Audio Cues — audible chimes that fire at the same moments the display changes colour, so the speaker hears the warning without watching the screen. Full-tier feature.
How it works
Cues are tied to the colour-transition thresholds you've already set in Settings → Display (Orange at N min remaining and Red at N min remaining). Because the thresholds derive from the colour settings, they scale with event length automatically — a 10-minute talk and a 60-minute keynote use proportional warning windows.
| Cue | Fires at | Default sound |
|---|---|---|
| Orange transition | Remaining = color_orange_min × 60s (default 3 min) | Warm chime |
| Red transition | Remaining = color_red_min × 60s (default 1 min) | Double bell (two-strike) |
| Time-up | Remaining = 0:00 (one-shot, never repeats) | Soft gong (long warm decay) |
Bundled sounds
Six procedurally-generated samples ship with KUMA Timer — designed for stage-friendly, not aggressive sirens:
- Warm chime — Tibetan-bowl style, soft 1-min warning
- Bright chime — sharper alternative
- Double bell (two-strike) — classic 30-second pattern
- Soft gong — long warm decay, time-up
- Three-beep alarm — harder time-up alternative
- Subtle tick — used for GTS pips and red-zone beeps
Each cue has a volume slider (0–100) and a Test button so you can preview before showtime.
Custom WAV / MP3 upload
Click Add custom sound… at the bottom of the Audio Cues tab to import your own sample. The file is copied into ~/.kumatimer/sounds/ and added to all three sound dropdowns as Custom: yourfile.wav.
Two opt-in extras
- BBC GTS pips — last 5 seconds: short clicks at remaining 5, 4, 3, 2, 1, the same Greenwich Time Signal pattern broadcast by the BBC since 1924. Off by default; broadcast operators turn it on for live TV / radio handovers.
- Red-zone continuous beep: every other second while remaining is in the red zone (Limitimer-style). Off by default; useful when the speaker isn't watching the screen and a single chime won't cut through.
Mirror to iOS Companion (Monitor / Stages mode)
If the speaker has an iPad on the lectern running KUMA Companion in Monitor or Stages mode, the host normally plays cues only on its own audio output. Toggle "Also play on iOS Companion" to mirror every fired cue to subscribed iPads / iPhones, which then play their own bundled equivalents.
What happens after time-up
By industry convention (matches BBC, Stagetimer, DSAN Limitimer defaults): after the time-up gong, audio goes silent. Visual overtime cues continue (background colour change, blink, OVERTIME label), but no further chimes — the gong already signalled "time's up" and additional beeps would be antagonistic. Operators who specifically want to keep nudging the speaker should enable the red-zone continuous beep, which fires every other second leading up to zero.
Presenter View Mode
Settings → Display → Enable Presenter View Mode
PVM creates a small floating window that stays always on top of all other applications — including PowerPoint and Keynote in fullscreen. The window does not steal keyboard focus, so your presentation clicker continues to work normally.
Window controls
| Action | Result |
|---|---|
| Drag centre | Move the window |
| Drag edge or corner | Resize — font auto-scales to fill |
| Hover over window | Reveal controls: START/STOP · PAUSE · −1m · +1m |
| Right-click | Bring the main KUMA Timer control panel to the front |
Typical workflow
- Set your duration and open Keynote / PowerPoint
- Enable PVM in Settings → Display — the floating window appears
- Position and resize the window (e.g. corner of your laptop screen)
- Click into Keynote and start your slideshow
- Press START (hover the floating window) or use OSC/Companion
- The countdown stays visible — your clicker works as normal
- Right-click the floating window to bring the control panel back
LTC Receiver Mode
KUMA Timer can read incoming LTC (SMPTE Linear Timecode) from a sound card and display it on the output screen — useful as a timecode reader in broadcast or live production rigs.
Setup
- Connect the LTC output of your timecode generator to the line input of your sound card
- Open Settings → LTC
- Check Enable LTC Input and select the correct audio input device
- Click Save Settings
When LTC is active
- The display window shows the timecode as HH:MM:SS:FF in cyan
- The status label shows ● LTC RX
- All timer controls are disabled — KUMA is in read-only mode
Web Mirror
When enabled (Settings → Network → Enable Web Mirror Server), KUMA runs a local HTTP server. Open http://localhost:<port> in any browser on the same network to see the timer — useful for confidence monitors, tablets, or phones.
The progress bar in the web view follows the global Enable Progress Bar setting.
5555 and bump the others (5556, 5557, …) under Settings → Connections → Web Mirror port. If two hosts try to bind the same port, the second one's web server, Companion module endpoint, and OSC bridge will all silently fail to start. Same rule applies to the OSC port (default 9000).Web Controller
The Web Controller is a browser-based control panel protected by a password — useful for a second operator, a director's tablet, or a phone on the production desk.
Setup
- Make sure Web Mirror / API Server is enabled in Settings → Connections
- Set a Controller Password in the same section (leave blank to disable the controller)
- Click Save Settings
- Open
http://<IP>:<PORT>/controlin any browser — the settings dialogue shows the exact link
Available controls
- Live timer display with progress bar
- START · PAUSE · RESET · HIDE TIMER
- −1 min / +1 min
- Preset buttons (loaded dynamically from app config)
- PREV CUE / NEXT CUE navigation
- Scrollable cue list — click any cue to load it directly
NDI Output
KUMA Timer can broadcast a full 1920×1080 NDI® video stream that mirrors the display window — timer, cue name, SMS bar and progress bar — to any NDI-compatible application on the network (vMix, OBS with NDI plugin, Resolume, Wirecast, etc.). Powered by NDI® — learn more at ndi.video.
Setup
- Open Settings → Connections and scroll to the NDI Output section
- On first enable, a licence acceptance dialogue appears — scroll through and click Accept
- Check Enable NDI Output and click Save Settings
- The status bar shows
NDI ●(amber while initialising, green when active) - In your NDI receiver, look for the source named KUMA Timer
What the NDI stream includes
- Timer text — same font, colour and size as the display window
- Cue name (if enabled in Settings → Display)
- Progress bar (respects the Show Progress Bar setting)
- SMS bar when a message is active
Timer Font
Choose the font used in both the display window and the NDI stream in Settings → Display → Timer Font. All available options are monospace — the font size stays perfectly consistent regardless of which digits are displayed.
KUMA Live (Cloud Relay)
Share your timer with remote speakers over the internet. KUMA Live pushes the timer state to the cloud so anyone with the link can watch the countdown in a browser — no LAN or VPN required.
How it works
- Open Settings → Connections → KUMA Live
- Click Generate QR Code — a unique session URL is created
- Share the QR code or URL with up to 2 remote viewers
- Viewers open the link on any device — the timer mirrors in real-time
Remote messaging
Enable Allow remote viewers to send messages in settings. Viewers can type a message in their browser which appears on your timer display — useful for stage managers or producers giving timing cues to speakers remotely.
Session limits
- Maximum 2 viewers per session (additional viewers see "Session Full")
- Sessions auto-close after 60 minutes of inactivity (no active countdown)
- Time-of-Day (clock) mode does not stream to save bandwidth
Controls
- Generate QR Code — starts a new session and shows the QR code
- Save QR as PNG — save the QR code image to disk
- End Session — immediately stops the relay and disconnects all viewers
iOS Companion App
KUMA Companion is a free iPhone & iPad app that turns your phone or tablet into a remote control surface for the host. Use it from front-of-house, the green room, the production gallery — anywhere on the same Wi-Fi or, with KUMA Live enabled, anywhere with internet.
Getting it
Currently in TestFlight beta while we collect operator feedback. Email pawel@lygan.co.uk with the Apple ID address you use for the App Store and we'll add you to the test group within a day. App Store release follows after the beta loop.
Pairing modes
- LAN (Bonjour) — open the app, tap the host that appears in the discovery list. Zero configuration, but only works on the same network.
- Manual IP — type the host's IP and port directly. Useful when Bonjour is blocked by the venue's switch (common at large conferences).
- Pairing code (cloud / KUMA Live) — host generates a 4-character code in Settings → Connections → Remote Control. The Show Caller types the code into the app and connects through the relay — no port forwarding, works anywhere with internet. Saving your licence in the app pre-loads the host list automatically next time.
Modes
After connecting, choose one of two views:
- CONTROLLER — full control surface mirroring the host's web admin: START / PAUSE / RESET / HIDE, ±1 minute, count-up, presets row, cuesheet with prev / next / tap-to-load, Send Message, Time Glide, mode toggle (TIMER / CLOCK).
- MONITOR — fullscreen timer with the same colour states as the host display. No controls, designed for the talent or stage manager who needs the same readout the speaker sees.
Stages mode iPad only
Stages turns the iPad into a multi-host control surface — one app, several KUMA hosts, one swipe between them. Built for multi-room conferences, multi-stage festivals, A/B redundant timer setups and any situation where the same operator runs more than one timer at once. iPad only; the iPhone build deliberately keeps a single-host-per-app model.
How it works
- Add a stage — tap +, give it a nickname (e.g. Hall A), enter the host's 4-character pairing code from Settings → Connections → Remote Control, optionally set a colour and a per-stage password. Up to eight stages per device.
- Tap a row to take control of that host. The right pane (or full screen on portrait) becomes the same Controller surface single-host mode uses — START / PAUSE / RESET / cuesheet / presets / Send Message — wired to that specific host. A coloured banner across the top reminds you which stage is active.
- Swipe a row left or right for quick actions: Edit (rename / change password / change colour) or Delete. Long-press and drag to reorder.
- Live mini-status on every row shows the host's current timer state and a transport icon — wifi for direct LAN, cloud for relay — without needing to open each stage.
- LAN auto-promote — when the iPad and a host land on the same Wi-Fi, the Companion discovers the host via Bonjour, fetches its
/api/status, matches the returnedremote_control_codeagainst your stored stages, and quietly upgrades that stage's connection from cloud relay to a direct LAN WebSocket. Latency drops from typical 50-150 ms to sub-20 ms. The transport icon flips from cloud to wifi to confirm. Falls back to cloud automatically if the LAN host disappears (laptop closed, switched networks, etc.). - Connection states per stage: connected, connecting, interrupted (host went silent — kept the last known timer extrapolating locally for ~30 s), lost (gave up, will retry on tap or server-push notification when the host comes back). Operators see exactly which stage is healthy at a glance.
- Per-stage password — if a host requires a password (set in its Settings → Connections), the Companion saves it per-stage so each tap into that row authenticates without re-typing.
Use cases: a single operator at front-of-house running parallel session timers in two breakout rooms; a touring AV tech bringing one iPad to a festival with three KUMA hosts on three stages; a redundancy setup with a primary and standby host on the same network where switching between them is one tap.
iPad in landscape (single stage)
Rotate an iPad to landscape and the Controller switches to a two-column layout: the cuesheet sits permanently on the left, transport and presets fill the right two-thirds. Both columns are tappable simultaneously, so the operator can advance cues while the other hand is on START / PAUSE without swapping screens. Monitor view stays full-screen and simply uses the wider canvas for an even larger countdown.
Features
- Latency chip in the Controller header shows round-trip to the host in milliseconds — green < 30 ms, amber 30-150 ms, red > 150 ms. Most LAN setups stay under 20 ms; cloud relay is typically 50-120 ms depending on geography.
- Live Activity on iPhone Lock Screen and Dynamic Island — countdown stays visible without unlocking the phone.
- Authoritative colour mirroring — when the host display goes orange or red, the Companion timer flips at the same moment using the host's
display_colorfield. - Optimistic action feedback — START / PAUSE / RESET reflect on the iPad instantly, then reconcile with the host's authoritative state on the next status push (~200 ms).
- SMS-style quick messages — tap a saved message preset to send "Wrap up" or "2 minutes left" to the host's on-screen banner.
- Universal Links — tapping a pairing-code QR link from the host's Settings opens the app directly with the code pre-filled.
Requirements
- iPhone or iPad on iOS / iPadOS 17 or newer.
- Same Wi-Fi network as the host for LAN mode, or any internet connection for cloud mode.
- Host running KUMA Timer 1.10.10 or newer for full feature parity (latency chip, authoritative colours, Universal Links). Older hosts work with reduced features.
tier:"lite" and the app shows a "Full required" sheet. Activate a 30-day trial or enter a £8 licence on the host to enable Companion access.OSC Reference
OSC is supported for integration with third-party show control systems and lighting desks. For Bitfocus Companion, the dedicated HTTP module (see below) gives richer control and feedback.
Incoming OSC — external device → KUMA
Default listen port: 9000 (Settings → Connections)
| Address | Argument | Action |
|---|---|---|
/kuma/start | — | Start timer |
/kuma/pause | — | Pause / resume toggle |
/kuma/reset | — | Reset to zero |
/kuma/hide | — | Toggle display visibility |
/kuma/time/add | — | +1 minute |
/kuma/time/sub | — | −1 minute |
/kuma/warp | int seconds | Load duration (e.g. 300 = 5:00) |
/kuma/preset | int ≥ 0 | Load preset by index (0 = first). Valid range depends on how many presets you've configured — max 10 in Lite, unlimited in Full. |
/kuma/cue | int index | Load cue from runsheet by index |
/kuma/cue/next | — | Advance to next cue |
/kuma/settime | string HH:MM:SS | Load exact time (e.g. "01:30:00") |
/kuma/sms | string text · int duration | Send message to display |
Outgoing OSC — KUMA → external
Default target: 127.0.0.1 : 12321
| Address | Value | Sent when |
|---|---|---|
/kuma/status | "LIVE" · "PAUSED" · "STANDBY" · "HIDDEN" | On state change |
/kuma/overtime | 1 | On overtime start (path configurable) |
Bitfocus Companion Module
The KUMA Timer Companion module communicates over HTTP/JSON — no OSC configuration needed. It polls KUMA's built-in web server for live state and sends commands via HTTP POST.
5555). KUMA and Companion must be on the same network.Until then, install the module manually using the
.tgz package — instructions below. We'll update this page
the moment Bitfocus accepts the module.Installation (manual import — current path)
- Download the
.tgz(importable package) from the Download page - Open the Companion admin page (
http://localhost:8000on the machine running Companion) - In the left sidebar click Modules, then the yellow Import module package button at the top — select the downloaded
.tgz - Go to Connections, add a new connection and search for KUMA Timer; enter KUMA's IP address and port (default
5555)
.tgz packages — no developer-mode folder wiring required. Once the module is accepted into the official Companion library this manual import step disappears.Actions
| Action | Options | Description |
|---|---|---|
| Start | — | Start the timer |
| Pause / Resume | — | Toggle pause state |
| Reset | — | Stop and reset to zero |
| Hide / Show Display | — | Toggle display window visibility |
| +1 Minute | — | Add 60 seconds |
| −1 Minute | — | Subtract 60 seconds |
| Load Time (seconds) | seconds | Load a duration in seconds |
| Load Time (MM:SS) | minutes · seconds | Load duration as MM:SS |
| Load Preset | index ≥ 0 | Activate a preset button by index (0 = first). Range depends on how many presets the app has — up to 10 in Lite, unlimited in Full. |
| Load Cue | index | Load runsheet cue by index (0 = first) |
| Next Cue | — | Advance to the next cue in the runsheet |
| Previous Cue | — | Go back to the previous cue in the runsheet |
| Set Display Mode | TIMER · CLOCK | Switch between countdown timer and wall clock |
| Send Message (SMS) | text · duration · colour · border colour · size · position · flash · scroll | Send a styled text message to the display |
| Cancel SMS | — | Remove the current on-screen message |
Feedbacks
| Feedback | Active when |
|---|---|
| Timer is LIVE | Timer is running |
| Timer is PAUSED | Timer is paused |
| Timer in STANDBY | Timer is stopped / reset |
| Display is HIDDEN | Display window is hidden |
| Timer in OVERTIME | Timer has passed zero |
| Cue is active (by index) | The specified cue index is currently loaded |
| Low time warning | Progress percentage is below a set threshold (e.g. <20%) |
| SMS message active | A message is currently shown on screen |
Variables
| Variable | Value |
|---|---|
$(pltech-kumatimer:timer) | Live countdown string, e.g. 04:32 |
$(pltech-kumatimer:timer_seconds) | Timer value in seconds |
$(pltech-kumatimer:status) | LIVE · PAUSED · STANDBY · HIDDEN · OFFLINE |
$(pltech-kumatimer:display_mode) | TIMER or CLOCK |
$(pltech-kumatimer:cue_name) | Name of the currently loaded speaker / cue |
$(pltech-kumatimer:cue_index) | Index of the current cue (−1 if none) |
$(pltech-kumatimer:overtime) | true / false |
$(pltech-kumatimer:progress) | Progress bar percentage (100 → 0) |
$(pltech-kumatimer:sms_active) | true while a message is on screen |
Settings Reference
Display
- Clock format: MM:SS or HH:MM:SS
- Timer Font — Courier New, Menlo, Monaco, Consolas; applies to display window and NDI output
- Timer Style — Text (digits + progress bar) or Round (circular ring)
- Background — choose Solid Color or Image (JPEG/PNG/GIF, max 5 MB); image fills the display window without preserving aspect ratio. Background image is available in both Text and Round styles. Presenter View always uses a solid colour.
- Text colour
- Progress bar and colour warnings (orange at N min, red at N min)
- Show/hide sidebar (runsheet)
- Show cue name above the timer on the display window
- Enable Presenter View Mode
Misc
- Touch keyboard — shows on-screen numeric keyboard next to time input fields (for touch screens)
- Time of Day Timezone — IANA timezone name used in Time of Day (Clock) mode, e.g.
Europe/Warsaw,US/Eastern,Asia/Tokyo. Leave blank to use the system timezone.
Connections
- Web Mirror / Companion API — enable and set port (default 5555); Companion polls
/api/statusand posts to/api/command - Web Controller Password — set a password to enable the browser control panel at
IP:PORT/control; leave blank to disable - NDI Output — enable to broadcast a 1920×1080 NDI stream; one-time licence acceptance required on first use
- OSC — enable for external show control devices; set listen port (default 9000) and feedback target IP:port
SMS
- Default text colour, border colour, size, position for all messages
- Invert scroll direction (for Arabic / Hebrew right-to-left text)
- Saved messages list — always available in the Send Message dialogue
- Clear Recent — removes the automatic last-10 message history
Integrations
- Interspace Ind (CDEther) — enable and set device IP; use RESCAN to auto-detect on the local network
-
Dsan Limitimer — enable and select the RS-485 serial port (USB adapter supported);
KUMA sends a 55-byte DSAN PCT-2 packet at 19 200 baud every 250 ms with countdown time, run/pause state and overtime blink flag.
Driver requirement: The Limitimer USB adapter uses an FTDI chip. If the serial port does not appear in the list, you need to install the FTDI VCP driver first — download it from ftdichip.com/drivers/vcp-drivers (check the chip model printed on your adapter — most common are FT232R or FT231X). - Quick-Entry Keyboard (Pi kiosk only) — pick a USB or Bluetooth keypad here to use as a dedicated remote for time entry and transport. Full key map and entry rules are documented in the Pi installation section's "Quick-Entry Keyboard" sub-heading.
Overtime
- Behaviour (count up / freeze / stop), message, background colour, blink, OSC trigger path
LTC
- Enable LTC receiver mode and select an audio input device
- Select output screen for the LTC timecode display
- Note: LTC mode disables the cue list — cue names are not shown during LTC playback
Tips & Shortcuts
- Double-click a cue to instantly load a speaker — no typing needed
- Hold a preset button to change its value without opening Settings
- HIDE TIMER keeps the timer running internally — useful during breaks
- Time Glide is transparent to the audience — the display always shows the original countdown value
- OSC feedback (
/kuma/status) lets Companion buttons reflect the real timer state with no polling - On Windows, if the title bar is hidden behind the taskbar: right-click the taskbar icon → Move, then use the arrow keys