R1 Playout Clock for Millumin — User Guide
For version 0.3.2
This guide walks you through getting R1 Playout Clock for Millumin running, hooked up to Millumin 4 or 5, and displaying timecode on screen. For version info, requirements, and legal details, see the down low.
1. What it does
R1 Playout Clock for Millumin turns Millumin's OSC stream into a giant playout countdown for the entire live event production team — director, TD, A1, stage manager, lighting. Everyone watching multi-view stays in sync on every cue, with yellow/red warning colors as the clock runs out. Nobody has to ask "how long is this?" over comms.
The app is dual-purpose by design — pick the path that fits your show, or use both at once:
- NDI® over the network — broadcast a 1920×1080 clock as an NDI source. Picked up directly by NDI-capable software switchers (vMix, OBS, NDI Studio Monitor) and NDI-native AV systems, or via NDI-to-SDI converters (BirdDog, Kiloview, AJA) into your favourite hi-res switcher — Barco E2 / S3, Spyder X80, PixelHue Q8 / F4 / F8, etc.
- HDMI from the Mac — run the clock app full-screen on a second display and plug that HDMI straight into your favourite hi-res switcher or any HDMI-capable monitor wall. No network configuration at all.
The clock can track a single Millumin layer, a
comma-separated priority list of layers (the first active
layer in your list wins), or any layer with the
* wildcard.
2. Install
- You'll receive a
.zipin your trial email. Download it and double-click to unzip. - Drag R1 Playout Clock for Millumin.app
into your
/Applications/folder. - Double-click the app to launch it.
The first time you open the app, macOS may ask you to confirm because it's downloaded from the internet — click Open in that dialog. Future launches skip this step.
3. Set up Millumin to send OSC
Millumin needs to be told where to send OSC. Steps are
similar in Millumin 4 and 5 — open the Device Manager
with Cmd+K and go to the OSC tab.
- Set the feedback target:
- Same Mac as Millumin →
127.0.0.1 - Different Mac → that Mac's IP address on your network. Both machines must be on the same network.
- Same Mac as Millumin →
- Set the feedback port to 9999 (the clock's default).
- Enable Send Feedback.
- Take note of the exact name(s) of the layer(s) you want
the clock to follow — including spaces and
capitalisation. Millumin OSC addresses are
case-sensitive. The clock can watch a single layer, a
comma-separated priority list of layers, or any
layer using the
*wildcard. See section 5.1 for the full layer-watching reference.
Once Millumin starts playing media on that layer, the clock's status bar should show OSC live with the layer name, and the time fields should start updating.
4. The interface at a glance
- Stage — the clock display itself (Elapsed / Remaining / TRT, plus a progress bar).
- Status bar at the bottom — OSC status (with the active layer name when receiving), NDI status dot, NDI sender stats when running, and the version number on the right.
- Settings panel ⚙ — slides in from the right when you click the gear icon in the top-right of the stage.
5. Settings
All settings live in one panel, organized into four sections: Millumin / OSC, NDI Output, Display, and About.
5.1 Millumin / OSC
- Millumin version — Millumin 4 or Millumin 5. They use different OSC message formats, so this matters. See section 6 for the technical difference.
- Listen Port — UDP port the clock listens on. Must match Millumin's feedback port. Default 9999.
- Layer name to watch — comma-separated
list of Millumin layer names. List order is
priority order: when more than one watched
layer is playing simultaneously, the one earliest in
your list wins. Layers not in your list are ignored
entirely (perfect for ignoring background-loop layers).
- Single layer:
16x9-center - Priority list:
16x9-center, lower-third, fullscreen - Wildcard:
*watches any active layer - Wildcard as fallback:
16x9-center, lower-third, *— prefer the named layers, fall back to anything else playing
16x9-Centerand it'll still match. - Single layer:
Click Apply to restart the OSC listener with the new settings. The status bar shows the currently-followed layer name (e.g. "OSC live (lower-third)"), or what you're watching for when nothing's active (e.g. "no OSC (watching: 16x9-center, lower-third, + any other)").
5.2 NDI Output
The NDI feed is a 1920×1080 progressive Full NDI® source — uncompressed BGRA, not NDI HX. Both Full NDI and NDI HX receivers can ingest it.
- Source Name — how this NDI feed appears in NDI receivers. Default Millumin Clock.
- Frame Rate — match this to your program output. Choices include 23.976, 24, 25 (PAL), 29.97 (NTSC, default), 30, 50, 59.94, 60.
- NDI Clock Size — size of the clock digits in the 1920×1080 NDI feed (default 350). Independent of the operator window's size — tune the NDI feed for the surface receivers will display it on (video wall, FOH monitor, etc.) without affecting your close-up operator view. Applies on the next Start NDI.
Click Start NDI to begin broadcasting. The button changes to Stop NDI while running, and the status bar shows NDI on with a sent / dropped counter.
On the receiving side, open NDI Studio Monitor (or OBS with obs-ndi, or vMix's NDI input). The source named above will appear in the NDI source list once Start NDI has been clicked.
5.3 Display
- Layout — Side by side or Stacked. Stacked is the default; works better on tall, narrow displays and second-screen outputs. Side by side fits a wider operator monitor.
- Operator Clock Size — base size in pixels for the digits in the operator window (default 350). The clock auto-scales with window height; this is the size at 1080-tall. Separate from the NDI Clock Size in the NDI Output section.
- Accent Color — color of the time digits when running normally.
- Show fields — independently toggle Elapsed, Remaining, TRT, the progress bar, and the Now-playing pill. Hide what you don't want on screen or in the NDI feed.
5.4 About
Shows the app version, NDI® attribution (NDI® is a registered trademark of Vizrt NDI AB), and a link to the down-low page for full credits and licenses.
6. Millumin 4 vs Millumin 5
Millumin changed how it sends timecode between versions 4 and 5, so the clock has a version setting.
- Millumin 4 sends a continuous
/millumin/layer:NAME/media/timemessage with elapsed and duration. The clock follows that directly. - Millumin 5 sends discrete events —
mediaStarted,mediaPause,mediaStopped— plus periodicnormalizedTimesync messages. The clock tracks elapsed locally between syncs.
Pick the version that matches the Millumin you're controlling. If you're not sure, try v4 first and switch if nothing matches.
7. Running a show
- Open the clock app.
- In Settings, set Millumin version, port, and the layer name you'll be following. Click Apply.
- Confirm the status bar shows the OSC indicator going live once Millumin starts playing media on that layer.
- If you want NDI output, set the source name and frame rate, then click Start NDI.
- Drag the clock window to the display you want, or fullscreen it via the OS-level window controls.
- Start playing media in Millumin. Time values should appear and update live.
8. Troubleshooting
Status bar shows "no OSC" and never goes live
Millumin isn't sending OSC, or it's sending to the wrong place. Check:
- Send Feedback is enabled in Millumin's Device Manager → OSC tab (not just the port filled in).
- The feedback target in Millumin matches where the clock is running.
- The feedback port matches the clock's listen port (default 9999).
- Millumin is actively playing media — Millumin only sends time feedback during playback.
OSC is arriving but no values appear
OSC is being received, but it's not matching the layer you've configured. The status bar shows the watched layer name in parentheses next to "no OSC". Either:
- Set "Layer name to watch" to
*to match any layer (good for diagnosing what Millumin is actually sending), or - Confirm the exact layer name in Millumin and update the field — names are case-sensitive.
Click Apply to restart the listener with the new layer name.
"Cannot bind to port" error
Another app is already using the listen port. Either quit that app, or change the clock's listen port in Settings → Millumin / OSC (and update Millumin's feedback port to match).
Receiving OSC from another Mac, but no data arriving
Both machines need to be on the same network, and macOS's firewall on the clock Mac must allow incoming UDP on the listen port. Check System Settings → Network → Firewall.
NDI source doesn't show up in OBS / vMix / Studio Monitor
- Make sure Start NDI was clicked — the status bar should show NDI on.
- Confirm the receiving app is on the same network as the clock Mac. NDI relies on multicast / discovery on the local subnet; it doesn't cross routers without additional configuration.
- Check the source name. It's whatever is set in the Settings panel under NDI Output → Source Name. The full discovery name shown in receivers usually combines the Mac's name with the source name.
- If the receiver supports an NDI Discovery Server, make sure both ends are using the same one (or both have discovery server disabled and rely on local broadcast).
Times look wrong, or only Elapsed updates
Likely a version mismatch — the clock is set to Millumin 4 but Millumin 5 is running, or vice versa. Switch the Millumin version in Settings, click Apply, and try again.
Color warnings (yellow / red) don't appear
The warnings trigger only when Remaining is at or below 10 seconds and above 0. Also requires that TRT is being received correctly (so the clock knows what "remaining" means). If TRT shows 00:00, no warnings will fire.
9. Getting help
If something's not working and the troubleshooting above didn't sort it, reply to your trial email — that's the fastest way to reach us during the testing period. For anything else, see the contact page.