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

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:

  1. Installs system libraries (libfuse2, libportaudio2) via apt
  2. Downloads the latest KUMA AppImage from GitHub releases
  3. Registers a systemd service that starts KUMA fullscreen on every boot
  4. Redirects port 80 → 5555 so http://<pi-ip>/ reaches the admin panel
  5. 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

Updates & maintenance

Desktop Linux? The ARM64 and x64 AppImage binaries still work as regular apps — download from GitHub Releases, 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.

macOS / Windows: not available. Per-device exclusive HID grab is a Linux-specific kernel feature; on Mac and Windows the OS only exposes "all keyboards merged", which makes a dedicated remote impossible without a kernel extension.
KeyAction
0 … 9 / KP 0 … KP 9Enter digits — live-preview in the big timer display
Enter / KP EnterApply the entered time and start the timer
. / KP . / SpacePause / resume the running timer
Backspace / DeleteHard reset — stop and clear to 00:00
KP ++1 minute (works whether timer is running or paused)
KP −−1 minute (clamps at zero)
EscClear 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:

The display window can be sent to any connected screen and goes fullscreen automatically on secondary screens.


Timer Controls

ButtonAction
STARTStart the timer from the loaded time
PAUSEPause the running timer
RESUMEResume after pause
RESETStop and clear the timer to zero
HIDE TIMERBlank the display window (timer keeps running internally)
SHOW TIMERRestore the display
−1m / +1mSubtract 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.

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…).

InteractionAction
ClickLoad 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.

InteractionAction
Double-click a cueLoad that speaker's time and name into the timer
Drag & dropReorder cues — saved automatically
+ buttonAdd a new cue (name + minutes + seconds)
− buttonDelete the selected cue
Clear buttonRemove all cues (confirmation required)
✎ buttonEdit the selected cue (name, minutes, seconds)
▶ NEXT buttonAdvance 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:

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:

FieldRequired?Aliases acceptedNotes
nameyescue · title · speakerTrimmed and capped at 200 chars.
minyes (or time)minutesInteger ≥ 0.
secdefaults to 0secondsInteger ≥ 0. If sec ≥ 60 the overflow rolls into min.
timealternative to min/secString "MM:SS" or "HH:MM:SS" as a duration (not a wall-clock time).
scheduled_atoptionalschedule · scheduledWall-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.

Excel quirk: if your 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

  1. Click Import on the cuesheet sidebar (or Settings → Cuesheet → Import).
  2. Pick a .json or .csv file. Format is auto-detected by extension; if the extension is unfamiliar the file's first byte decides ({ / [ → JSON, anything else → CSV).
  3. The file is parsed defensively. Rows with missing name or 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.
  4. 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:

ModeDisplay shows
TIMERCountdown (or count-up in overtime)
CLOCKCurrent 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.

StyleAvailable inBest for
TextTimer · ClockDefault — large monospace digits with optional progress bar.
RoundTimer · ClockCircular ring around the digits; great for analog feel.
RounDOT NEWClock onlyFaithful 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.

KUMA Timer RounDOT — BBC pip / Wharton dot-matrix clock face showing 11:57 with 18 seconds elapsed
RounDOT in CLOCK mode — host's main display, 11:57:18.

Once picked on the host, RounDOT renders identically on every surface that mirrors the time of day:

RounDOT only renders when the host has it set and is currently in CLOCK mode. Switching to TIMER reverts every surface to the timer's own visual style (Text or Round).

Progress bar position (v1.12.x)

Settings → Display → Bar Position picks where the bar sits relative to the timer:

Timer size adjustment (v1.12.x)

Settings → Display → Timer size is a signed delta percentage that scales the auto-fit timer font. 0 = auto (default), +50 = 50 % larger (great for picture-in-picture / preview-monitor setups where the auto calc is too small), -30 = 30 % smaller. Range -90…+500 %.


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.

  1. Click SEND SMS — a dialogue opens
  2. Pick a saved or recent message, or type a new one (max 300 characters)
  3. Set duration (1–600 seconds) and optional effects
  4. Click OK

Display modes

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 cut — Glide & Jump

KUMA gives you two ways to bring a running countdown forward to finish at a specific time. Both are transparent — the audience never sees an explicit "we're cutting time" event. Pick the mode that suits your show:

ModeHow it looksBest for
GLIDE Tick rate accelerates — seconds count down faster than 1 Hz (e.g. 4× to compress 10 min into 2.5 min). Numbers tick smoothly, just quicker. Tight cuts where the audience isn't actively reading the clock, or backstage / monitor-only timers. Simple to grasp, instantly responsive.
JUMP Seconds tick at exactly 1 Hz the whole time. The cut is hidden as a series of small skips (10 / 20 / 30 s blocks) at strategically chosen moments — landing on round boundaries (:00 preferred, then :30) so the eye reads "I just looked away for a second" rather than spotting accelerated digits. Last 3 minutes of any run are always clean — no jumps in the home stretch. On-stage timers, presenter-facing displays, broadcast feeds. When the audience can read the clock and you want the cut to be invisible.

Switching mode

The GLIDE / JUMP segmented control sits at the top of the time-cut panel on the host display, in the web admin's Time cut card, and is reachable on iOS Companion via long-press of the TIME GLIDE / TIME JUMP button. The chosen mode is saved per show, so if you always run hidden cuts, set it once and forget.

Applying a cut

Open TIME GLIDE SETTINGS ▲ (or TIME JUMP SETTINGS ▲ when in jump mode) on the host. Two ways to specify the target:

The panel APPLY button computes the difference and either glides or jumps depending on mode. The same panel exists in the web admin SPA and on iOS — they all drive the same engine.

ButtonAction
APPLYActivate the cut — host + every connected surface (PVM, NDI, web, iOS) follow within ~100 ms
CANCEL GLIDE / CANCEL JUMPDrop the cut campaign immediately and restore plain 1-Hz countdown

How JUMP picks landing points

When you ask JUMP to cut N seconds, the engine plans the campaign in advance:

  1. Reserves the last 3 minutes (180 s) as a "no-jump zone" so your finish reads cleanly.
  2. Picks the largest block size (30 / 20 / 10 s) that divides N cleanly and fits enough jumps into the available time without crowding.
  3. Spreads the jumps roughly evenly across the remaining countdown.
  4. Snaps each landing to a round multiple of 10 s, scoring :00 highest, :30 next, :10/:20/:40/:50 as fallback. The result reads as a series of "I blinked and it skipped a beat" moments, never a visible fast-forward.

Example: cut 5 minutes from a 40-minute timer → 10 jumps of 30 s, spread one every ~3:30, each landing on the nearest :00 minute boundary.

Both modes cancel automatically when the timer enters overtime, on RESET, or when a new preset / cue is loaded — the cut is always tied to the current cycle. JUMP also auto-pauses with PAUSE and resumes ticking afterward, so a paused timer never silently skips.

Overtime

When the timer reaches zero:

SettingBehaviour
Count UpTimer continues with a − prefix and red colour
Stay at 00:00Timer freezes at zero
Stop TimerTimer stops completely

Additional options in Settings → Behaviour: change background colour, blink, show a custom message (e.g. PLEASE WRAP UP), send an OSC trigger to Companion. (Behaviour tab also hosts Scheduled Cues — moved here from the old Misc tab.)

OVERTIME box overlay (v1.12.x — Count Up & Stay at 00:00)

An optional block label that appears next to the digits as soon as the timer enters overtime — meant for stage productions where audience must see an unmistakable "you've gone past time" cue. Available only when Behaviour at 00:00 is Count Up or Stay at 00:00 (Stop Timer drops to STANDBY at 00:00, no overtime to flag).

Configurable in Settings → Behaviour → OVERTIME:

Renders on the host display and PVM. Hidden when SMS is overlaying the screen so messages take priority.


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.

CueFires atDefault sound
Orange transitionRemaining = color_orange_min × 60s (default 3 min)Warm chime
Red transitionRemaining = color_red_min × 60s (default 1 min)Double bell (two-strike)
Time-upRemaining = 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:

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

Mirror to iOS Companion (Monitor mode)

If the speaker has an iPad on the lectern running KUMA Companion in Monitor mode, the host normally plays cues only on its own audio output. Toggle "Play on iOS Companion" to mirror every fired cue to subscribed iPads / iPhones, which then play their own bundled equivalents.

Stages mode never plays cues even with this toggle on — multiple stages chiming at once would be unusable. Audio cues are a Monitor / Controller feature only.

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

ActionResult
Drag centreMove the window
Drag edge or cornerResize — font auto-scales to fill
Hover over windowReveal controls: START/STOP · PAUSE · −1m · +1m
Right-clickBring the main KUMA Timer control panel to the front

Transparent background (v1.12.x)

Settings → Display → Transparent background swaps the solid black PVM panel for full alpha — the slide underneath shows through, only the digits, controls and a hover-only dashed orange frame remain visible. Useful when overlaying PVM on top of a Keynote / PowerPoint slide so the visual context is preserved. Off-hover the frame disappears entirely so the slide is unobstructed; mouse-in re-paints a 3-px dashed border around the window so you can spot the resize edges.

One-time macOS permission prompt (first PVM launch)

The first time you enable PVM on macOS, the system will show a one-time permission dialog asking to allow KUMA Timer to control "System Events":

macOS permission prompt: KUMA Timer wants access to control System Events

Click Allow. This grants the auto-focus-return feature: when you click any PVM button (START / PAUSE / ±1m), focus jumps back to your slideshow within ~2 seconds so the next clicker press advances the slide instead of doing nothing. Without this, you'd have to manually click into Keynote / PowerPoint after every PVM interaction.

The permission is stored once in System Settings → Privacy & Security → Automation → KUMA Timer. You will not see the dialog again on this Mac. If you click Don't Allow, PVM still works — you just lose the auto-focus return; you can re-enable later from the same Privacy & Security panel.

macOS requires this consent for any app to send AppleScript / Apple Events to another app (Mojave 10.14+). KUMA Timer uses it only to read the currently-frontmost app and bring it back to the front after a PVM click — no other automation, no scripting of your slides, no data is read.

Typical workflow

  1. Set your duration and open Keynote / PowerPoint
  2. Enable PVM in Settings → Display — the floating window appears
  3. Position and resize the window (e.g. corner of your laptop screen)
  4. Click into Keynote and start your slideshow
  5. Press START (hover the floating window) or use OSC/Companion
  6. The countdown stays visible — your clicker works as normal
  7. 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

  1. Connect the LTC output of your timecode generator to the line input of your sound card
  2. Open Settings → LTC
  3. Check Enable LTC Input and select the correct audio input device
  4. Click Save Settings

When LTC is active

macOS: On first use, the system will ask for microphone access. Grant it — without this permission the audio input cannot be opened and LTC will not work.

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.

macOS: On first launch macOS may ask to allow incoming network connections. Click Allow — KUMA needs this for the Web Mirror / Companion API (port 5555) and OSC (port 9000).
Multiple KUMA hosts on the same network? Each instance must listen on a different port — leave one on the default 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

  1. Make sure Web Mirror / API Server is enabled in Settings → Connections
  2. Set a Controller Password in the same section (leave blank to disable the controller)
  3. Click Save Settings
  4. Open http://<IP>:<PORT>/control in any browser — the settings dialogue shows the exact link

Available controls

No settings access. The Web Controller can only trigger the controls that the main operator has already configured in the app. It cannot change any settings.

Web Admin SPA — full settings in the browser

Alongside the minimal /control page, KUMA hosts a complete admin single-page app at http://<IP>:<PORT>/admin. This is the same set of settings, presets, cuesheet, and SMS that you'd reach from the desktop's ⚙️ Settings dialog — but in the browser, so a director on a tablet or a producer on a second laptop can edit everything without standing over the operator's shoulder.

Login uses the same Controller Password with username kuma. Default credentials on a fresh install are kuma / kuma — the SPA shows a banner reminding you to change them.

Both URLs (/control and /admin) are shown with one-click QR codes in Settings → Connections. Scan with a phone for instant access.

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.

macOS and Windows only. NDI® output is disabled on Raspberry Pi from v1.10.23 onwards — the November 2024 NDI® Technology License Agreement excludes Linux-based kiosk / appliance devices from royalty-free use. See the pricing FAQ for the full reasoning. If you need NDI® broadcast, run KUMA on a Mac or PC.
The NDI® runtime is bundled inside the app — end users do not need to install the NDI SDK or any separate tools. NDI® is a registered trademark of Vizrt NDI AB.

Setup

  1. Open Settings → Connections and scroll to the NDI Output section
  2. On first enable, a licence acceptance dialogue appears — scroll through and click Accept
  3. Check Enable NDI Output and click Save Settings
  4. The status bar shows NDI ● (amber while initialising, green when active)
  5. In your NDI receiver, look for the source named KUMA Timer

What the NDI stream includes

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.

NDI initialises in the background on a separate thread — the UI never freezes. The stream becomes active a few seconds after enabling.

Wireless Secondary Displays

KUMA can mirror the countdown to dedicated hardware screens over Wi-Fi — no cables, no extra software on the display side. Two device types are supported:

Both mirror: countdown value, zone colours, background colour, overtime blink, progress bar and SMS messages. Both support Local mode (same LAN as host, UDP) and Cloud mode (different Wi-Fi network, polls the relay).

Flash your device

Chrome or Edge required. Open the flasher page, connect the device via USB, click Install.

⚡ Flash Ulanzi TC001 or ESP32-S3-BOX → Takes about 30 seconds. No Arduino IDE or drivers needed.

Connect to KUMA host

  1. After flashing, the device broadcasts a Wi-Fi hotspot (KUMA-Display-XXXX or KUMA-TC001-XXXX).
  2. Connect your phone or laptop to that hotspot and open http://192.168.4.1.
  3. Enter your Wi-Fi credentials and (for Cloud mode) the Poll URL from Settings → Connections → ESP32-S3-BOX / Ulanzi TC001 → Cloud → Copy URL.
  4. The device reboots and joins your network. It appears in KUMA's bottom status bar when active.

Ulanzi TC001 button controls

The three buttons on top of the TC001 (left / middle / right):

ActionResult
Left or Right — single clickToggle Local ↔ Cloud mode, then scroll the device's IP address
Left — double-clickShow battery % (colour-coded: green > 50, amber 20–50, red < 20)
Left — long press (1.5 s)URL SETUP — re-enter the Poll URL / screen name (magenta flash on entry)
Right — long press (1.5 s)WIFI SETUP — change Wi-Fi network (blue flash on entry)

On connect the device scrolls its IP for a few seconds so you can find it on the network. In a frame-accurate (FR) clock format the LED shows the plain MM:SS / HH:MM:SS (frame digits don't fit the matrix). When the screen is mounted upside-down, enable Settings → Connections → Ulanzi TC001 → Rotate display 180°.

Full licence required. Wireless displays are gated behind the Full licence. They're visible in Settings on Lite/Trial but push is disabled.

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

  1. Open Settings → Connections → KUMA Live
  2. Click Generate QR Code — a unique session URL is created
  3. Share the QR code or URL with up to 2 remote viewers
  4. 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

Controls

KUMA Live requires an internet connection. No account or login is needed. The session is temporary and deleted when you close it or the app.

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.

KUMA Companion Controller view on iPad portrait — large green 10:00 timer with START / PAUSE / RESET / HIDE row and preset buttons
Controller view (iPad portrait)
KUMA Companion Monitor view on iPad portrait — full-screen 10:00 countdown in green with STANDBY label
Monitor view (iPad portrait)
KUMA Companion REMOTE pairing screen — saved licence and four-character pairing code BHVM ready to connect via the cloud relay
Cloud pairing (iPhone)

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

Modes

After connecting, choose one of two views:

Note: the iOS Companion Monitor mirrors timer text, colour states, SMS overlays and (in CLOCK mode) the BBC RounDOT face — but always renders on a black background. Custom background images set on the host (Settings → Display → Background type → Image) appear on the host display, web mirror, and NDI output, but not on the iPad. This keeps the Monitor readable at any brightness and avoids streaming wallpaper bytes over the relay.

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.

KUMA Companion Stages mode on iPad portrait — colour-coded list of saved hosts with a transport icon, current timer state and pairing code per row
Stages list (iPad portrait)
KUMA Companion Stages mode on iPad landscape — Stage list permanently on the left, full Controller surface on the right with active Stage banner across the top
Stages with active Controller (iPad landscape)

How it works

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.

KUMA Companion Controller view on iPad landscape — two-column layout with CUES list (Opening 10:00, Maureen 45:00) on the left and transport, ±1 min, Load Time / Time Glide, TIMER/CLOCK toggle and presets on the right
Controller view — iPad landscape. Cuesheet on the left, full transport surface on the right.
KUMA Companion Monitor view on iPad landscape — full-screen 10:00 countdown in green with STANDBY label, edge-to-edge for visibility from the back of the room
Monitor view — iPad landscape. Edge-to-edge countdown for the talent or stage manager.

Features

Requirements

LITE-tier note: the Companion app refuses to connect to a host running in LITE tier (free tier, no licence and no active trial). The host's API surfaces this as 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.

TCP / UDP Show Control Full

KUMA Timer can receive plain-text ASCII commands over TCP or UDP — ideal for integration with show control systems that support custom string output: Dataton Watchout, QLab, Cue Pilot, Green Hippo, and similar.

Enable in Settings → Connections → TCP / UDP Show Control. Default listen port: 36702 (TCP + UDP, same port).

Command reference

One command per line, terminated with \r\n or \n. UDP packets may omit the newline. Commands are case-insensitive.

CommandExampleAction
STARTSTARTStart the timer
STOPSTOPStop / pause
PAUSEPAUSEAlias for STOP
RESETRESETReset to loaded duration
HIDEHIDEToggle display visibility
SET MM:SSSET 10:00Stop timer and load new time
SET HH:MM:SSSET 1:30:00Stop timer and load new time
SETRUN MM:SSSETRUN 5:00Update time while timer keeps running
LOAD <seconds>LOAD 600Load exact number of seconds
ADD <seconds>ADD 60Add time (+1 min)
SUB <seconds>SUB 30Remove time (−30 sec)
PRESET <index>PRESET 0Load preset by 0-based index
CUE <index>CUE 2Load runsheet cue by 0-based index
CUE NEXTCUE NEXTAdvance to next cue

TCP connections receive a response to each command (OK START, ERR unknown command etc.). UDP is fire-and-forget.

Watchout V6 setup

  1. In Watchout, open the Output window and add a String Output.
  2. Set Protocol to TCP (or UDP), IP to your KUMA machine's IP, Port to 36702.
  3. In the Data to Send field, enter the command followed by CR+LF: e.g. START$0D$0A or SET 10:00$0D$0A.
  4. Place the String Output cue at the point on the Watchout timeline where you want KUMA to react.

Test from Terminal

# TCP
echo -e "START\r" | nc localhost 36702

# UDP (Python — most reliable on macOS)
python3 -c "import socket; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.sendto(b'START\n', ('127.0.0.1',36702))"

Frame-accurate countdown Full

For broadcast and video production workflows where frames matter (Watchout, QLab, vMix), KUMA Timer can display countdowns with SMPTE-style frame digits.

Enabling

  1. Open Settings → Display
  2. Change Clock Format to MM:SS:FR or HH:MM:SS:FR
  3. Pick your project's Frame Rate: 23.976 / 24 / 25 / 29.97 / 30 / 50 / 60 fps

Direction

Frames count down through each second (at 25 fps: 00:05:00:24 → 00:05:00:23 → … → 00:05:00:00 → 00:04:59:24). The standby display always shows :00 so the set value looks clean before you press START; the moment START is pressed the digit jumps to fps−1 and races toward :00. In Count Up overtime the frame digit behaves the same way, counting down within each elapsed second.

Where frames are shown

Where frames are NOT shown

Network and small-display surfaces always render HH:MM:SS regardless of the clock format. Wire latency would race the frame digits and the result wouldn't be reliable enough to cue from.

Limitations

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)

AddressArgumentAction
/kuma/startStart timer
/kuma/pausePause / resume toggle
/kuma/resetReset to zero
/kuma/hideToggle display visibility
/kuma/time/add+1 minute
/kuma/time/sub−1 minute
/kuma/warpint secondsLoad duration (e.g. 300 = 5:00)
/kuma/presetint ≥ 0Load preset by index (0 = first). Valid range depends on how many presets you've configured — max 10 in Lite, unlimited in Full.
/kuma/cueint indexLoad cue from runsheet by index
/kuma/cue/nextAdvance to next cue
/kuma/settimestring HH:MM:SSLoad exact time (e.g. "01:30:00")
/kuma/smsstring text · int durationSend message to display

Outgoing OSC — KUMA → external

Default target: 127.0.0.1 : 12321

AddressValueSent when
/kuma/status"LIVE" · "PAUSED" · "STANDBY" · "HIDDEN"On state change
/kuma/overtime1On 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.

Live show set-up — KUMA Timer running on a tablet in the background showing the cuesheet and 10:00 countdown, with an Elgato Stream Deck in the foreground laid out with KUMA buttons (START / PAUSE / STOP, 5M-50M presets, WRAP UP / PLEASE END NOW / CANCEL SMS, ±1m / ±5s and timer-mode controls).
A typical show desk: KUMA host on the operator's tablet, Bitfocus Companion driving an Elgato Stream Deck for hands-on transport, presets and saved messages.
Make sure Web Mirror is enabled in Settings → Connections and note the port (default 5555). KUMA and Companion must be on the same network.
✓ pltech-kumatimer v1.8.0 is now in the official Bitfocus registry. Search for KUMA Timer in Companion's built-in module search and install in one click — no manual import required.

Installation

  1. Download the .tgz (importable package) from the Download page
  2. Open the Companion admin page (http://localhost:8000 on the machine running Companion)
  3. In the left sidebar click Modules, then the yellow Import module package button at the top — select the downloaded .tgz
  4. Go to Connections, add a new connection and search for KUMA Timer; enter KUMA's IP address and port (default 5555)
Since Companion 3.2, third-party modules are imported directly as .tgz packages — no developer-mode folder wiring required. Once the module is accepted into the official Companion library this manual import step disappears.

Actions

ActionOptionsDescription
StartStart the timer
Pause / ResumeToggle pause state
ResetStop and reset to zero
Hide / Show DisplayToggle display window visibility
+1 MinuteAdd 60 seconds
−1 MinuteSubtract 60 seconds
Load Time (seconds)secondsLoad a duration in seconds
Load Time (MM:SS)minutes · secondsLoad duration as MM:SS
Load Presetindex ≥ 0Activate 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 CueindexLoad runsheet cue by index (0 = first)
Next CueAdvance to the next cue in the runsheet
Previous CueGo back to the previous cue in the runsheet
Set Display ModeTIMER · CLOCKSwitch between countdown timer and wall clock
Send Message (SMS)text · duration · colour · border colour · size · position · flash · scrollSend a styled text message to the display
Cancel SMSRemove the current on-screen message

Feedbacks

FeedbackActive when
Timer is LIVETimer is running
Timer is PAUSEDTimer is paused
Timer in STANDBYTimer is stopped / reset
Display is HIDDENDisplay window is hidden
Timer in OVERTIMETimer has passed zero
Cue is active (by index)The specified cue index is currently loaded
Low time warningProgress percentage is below a set threshold (e.g. <20%)
SMS message activeA message is currently shown on screen

Variables

VariableValue
$(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

Misc

Connections

SMS

Integrations

Overtime

LTC


Tips & Shortcuts

Keyboard shortcuts (host, v1.12.x)

Global shortcuts — work regardless of which widget has focus, including while typing in the H/M/S time fields:

KeyAction
SpaceStart · Pause · Resume the timer
RReset timer (Ctrl+R is reserved and excluded)
HHide / show display window
SJump focus to the first time-input field (M for MM:SS, H for HH:MM:SS) and select its value — type the new value immediately

Manual time-entry workflow

  1. Press S — focus lands on M (or H), value pre-selected
  2. Type the minutes — auto-replaces the highlighted value
  3. Press Tab — focus jumps to seconds, value pre-selected
  4. Type the seconds
  5. (Tab again to reach SET if you want explicit confirmation; otherwise the auto-update fires on each keystroke)
  6. Press Space — timer starts

Click on a time field also selects its value, so you can mix mouse + keyboard freely.

General tips