← All AV apps

R1 Playout Clock — Changelog

What's shipped, when, and why.

These notes cover all three NDI clock apps — R1 Playout Clock for Mitti, R1 Playout Clock for Millumin, and R1 Playout Clock for WATCHOUT. The Mitti and Millumin apps ship paired and share most of their codebase; the WATCHOUT app was forked from the same foundation and has its own version line because its data ingest (HTTP/SSE) is different from OSC. App-specific changes are tagged inline.

WATCHOUT v0.4.1

WATCHOUTFirst release of the WATCHOUT clock

R1 Playout Clock for WATCHOUT is now a real app. It connects directly to a Dataton WATCHOUT 7 Director's HTTP API on port 3019, listens to its SSE event stream, and produces the same dual-purpose HDMI + NDI output as the Mitti and Millumin clocks. No WATCHOUT-side configuration needed beyond having the Director reachable on your network.

WATCHOUTVideo-driven primary clock (not marker-driven)

The Elapsed / Remaining / TRT digits are driven by the video currently playing on the priority layer, not by marker cues. TRT is the playing video's full duration, Remaining is the time until it ends, Elapsed is how long it has been playing. The clock does what an operator expects without requiring any markers to exist in the show — just play a video on a watched layer and the clock follows it.

The previous v0.3.0 development build was marker-driven instead, modeled on what WATCHOUT's documentation sells as "the way" to drive external clocks. A long live testing session against a real WATCHOUT 7 Director revealed that marker-cue mode was the wrong mental model for a touring tech. The v0.4.0 release rearchitects the app as video-driven primary with markers as an optional secondary display — most of the work on this release went into that pivot.

WATCHOUTMarker Mode (optional secondary display)

Settings → Display now includes a Marker Mode dropdown with four options:

  • Off (default) — markers ignored; clean video-only clock
  • Countdown — show only countdown markers
  • Countup — show only countup markers (WATCHOUT markers can be either)
  • Auto — show whichever kind the active marker is

When a matching marker is firing and mode is non-off, a small secondary row appears below the main clock: ● <markerName> −1:25 for countdown or +0:12 for countup. Hidden when no matching marker is active.

WATCHOUTLayer fallback and multi-timeline support

Configurable layer fallback ordered list (e.g. Hero, Main, *) — the clock follows whichever named layer in your list is currently playing. The wildcard * walks all layers (top-down by default, matching WATCHOUT's visual stacking). Markers and layer matches can also be filtered by glob — e.g. clock_* matches clock_walkin, clock_q1, etc. Multi-timeline support is built in: the app tracks state across all running timelines simultaneously.

WATCHOUTv0.4.1 — App icon fix

The v0.4.0 build accidentally shipped with Mitti's blue icon (the result of a Phase 1 mechanical fork from the Mitti codebase). v0.4.1 replaces it with the proper WATCHOUT icon — purple 00:05 in Dataton's brand color #6B25DD, with the same [r1] mark and dark navy frame as Mitti and Millumin.

Windows release

PlatformAll three clocks now run on Windows 11

R1 Playout Clock for Mitti, R1 Playout Clock for Millumin, and R1 Playout Clock for WATCHOUT all now ship with Windows 11 (64-bit) builds in addition to the existing macOS builds. Feature parity across both platforms — same NDI output, same HDMI output, same configuration UI, same trial mechanism, same icons.

Each Windows trial build comes as a self-contained .zip per app per expiry. The .exe and the NDI runtime DLL (Processing.NDI.Lib.x64.dll) ship together in the same folder — run the .exe in place; no installer.

PlatformUnsigned trial builds — SmartScreen prompt expected

Trial builds are not code-signed. On first launch, Windows SmartScreen will display "Windows protected your PC" — click More info → Run anyway to continue. This is a one-time prompt per machine. We're evaluating code signing for production builds; for now, trial users get a brief SmartScreen interaction.

PlatformTested configuration

The Windows port has been verified on Windows 11 end-to-end for all three apps: Wails-built .exe launches, NDI source broadcasts to the LAN, frontend renders correctly, trial expiry dialog works. Mitti's OSC reception, Millumin's settings UI, and WATCHOUT's HTTP/SSE connection to a real WATCHOUT 7 Director have all been confirmed working. Windows 10 is not currently tested or claimed.

v0.3.3

BothApp icons added (visible in Dock and Finder)

Both clock apps now ship with proper R1 brand icons instead of the generic Wails default. The new icons share a design system: dark navy field, cyan [r1] mark at the top, brand-color 00:05 timecode at center, integration name across the bottom.

  • Mitti — blue 00:05 (#008bcd), the Mitti brand color
  • Millumin — orange 00:05 (#e57c00), the Millumin brand color

Same source PNG drives the macOS .icns and the Windows .ico — no platform-specific icon work needed. No code changes, no behavior changes, purely a visual upgrade.

v0.3.2

MittiDanger-color stayed red when idle

Mitti's Remaining digit was showing red whenever its value hit 00:00, including when no cue was loaded. The warn (yellow at ≤10 seconds) and danger (red at ≤5 seconds) colors should only fire when a cue is actively counting down. Idle now stays the default white. Millumin already handled this correctly.

MittiTime fields stale when cue selection changed

Selecting a different cue in Mitti without pressing play used to update the now-playing pill but leave the Elapsed / Remaining / TRT digits showing the previous cue's times. The display now zeroes the time fields when the cue name changes, so a new cue's timing data starts from a clean state.

BothDefault clock sizes raised to 350

Both the Operator Clock Size and NDI Clock Size defaults moved from 300 / 280 to 350 / 350. Touring tech feedback was that the previous defaults felt small on typical operator monitors and across-the-room NDI receivers.

Note: this only affects fresh installs. If you've already saved a size preference in Settings, your value is preserved. To pick up the new default, change it manually in Settings.

v0.3.1

BothIndependent NDI Clock Size control

The NDI Output section in Settings now has its own NDI Clock Size control, separate from the operator window's clock size. Two controls, two contexts:

  • Operator Clock Size — was previously just "Font Size." Sizes the digits in the operator window you watch up close.
  • NDI Clock Size — sizes the digits in the 1920×1080 NDI feed sent to receivers like vMix, OBS, or video walls. Applies on the next Start NDI cycle.

Why two: the operator window is typically viewed close-up (laptop, producer monitor); what looks comfortable there isn't always right for an NDI feed going to a video wall, FOH monitor, or LED rig. Two independent controls let you tune each surface for its real audience without fighting one against the other.

v0.3.0

BothNow-playing pill

Both apps now show what's currently playing as a small pill below the progress bar: a green ▶ play symbol followed by the cue or media name. The pill appears in three places (operator window, second-display window, and the NDI feed) and has three states:

  • Bright — a cue is playing and has a name → show the name.
  • Dim (italic "▶ standby") — nothing is playing, or no name is available.
  • Hidden — turned off via the Now-playing checkbox in Settings → Show fields.

Always-visible (rather than fade in/out) avoids flicker during cue transitions.

MittiSource: /mitti/currentCueName

If your Mitti is configured to broadcast cue-name feedback, the pill populates automatically. If not, the pill stays in standby mode. No setup required.

MilluminSource: media name from /mediaStarted

Millumin's /mediaStarted packet already carries [index, "name", duration]. The clock now also captures that name and shows it. Works in both Millumin 4 and 5 mode. When multiple watched layers are playing simultaneously, the priority-list winner (same logic as the timing fields) is the layer whose name appears.

v0.2.1

BothFresh-launch defaults: stacked layout

Fresh installs now come up showing a stacked layout with Remaining + TRT + Progress bar (was: row layout, Remaining + Progress only). Reads better at distance and works better on tall, narrow displays.

Note: existing installs with saved Settings get a one-time prefs reset to pick up the new defaults — your saved values from before this version will be replaced with the new defaults the first time you launch. After that, your saved Settings persist as usual.

v0.2.0

MilluminMulti-layer watch list with priority order

The Layer field in Settings now accepts a comma-separated list of layer names — for example, 16x9-center, lower-third, fullscreen. List order = priority: when multiple watched layers are playing at once, the one earliest in your list wins. Layers not in the list are ignored entirely — perfect for ignoring background-loop layers that you don't want timing from.

  • Single-layer mode (e.g. 16x9-center) and wildcard (*) still work unchanged for backward compatibility.
  • The status bar shows the currently-followed layer (e.g. OSC live (lower-third)) so you can see at a glance which layer the clock is locked to.
  • 2-second inactivity timeout for fast layer-switch response. mediaStopped events instantly deactivate that layer.

Both30-day trial-build mechanism

Trial copies of both apps now expire 30 days after the build date. While the trial is active:

  • A yellow banner at the top of Settings shows the expiry date and days remaining. Goes red at ≤7 days.
  • The bottom status bar shows a small countdown warning when ≤7 days remain.
  • The main clock display itself stays clean — no trial markings show on the running screen, so producers don't see TRIAL across their countdown clock during a live show.
  • On expiry, the app shows a native macOS dialog explaining the trial has expired and refuses to start. No half-broken UI.

BothBranding

Apps now ship as R1 Playout Clock for Mitti and R1 Playout Clock for Millumin. The .app bundle filenames also gained an R1 prefix (R1MittiClockNDI.app, R1MilluminClockNDI.app).

The default NDI source name (what receivers see in Studio Monitor / vMix dropdowns) intentionally stays short — Mitti Clock and Millumin Clock — for receiver-UI compatibility. Change it in Settings if you want a different name in the receiver list.

BothVersioning scheme

Dropped the -rev_N suffix entirely. From here on, both apps use plain semantic versioning (MAJOR.MINOR.PATCH) and step up together — R1 Playout Clock v0.2.0 is a single coherent release across both apps.

BothNDI attribution + About panel

The About section in Settings now shows the app version and links out to this site for credits and licenses. The NDI Output section also includes the required NDI® trademark attribution.

v0.1.0

The initial NDI release line. This collected all the early rev-by-rev work that established the working build chain, OSC pipeline, NDI output, and the core UI before commercial branding.

BothNDI video output

The clock display is rendered as a 1920×1080 NDI source on the network, pickable by vMix, OBS, TriCaster, Resolume, NDI Studio Monitor, and similar. Configurable source name, frame rate (29.97 NTSC default; 25, 30, 50, 59.94, 60 also available), Start/Stop NDI button.

BothLive cue display

Elapsed, Remaining, TRT (total running time), and a progress bar driven by OSC.

MittiOSC forwarder / splitter

Relays incoming OSC packets to a downstream listener (e.g. Bitfocus Companion at a configurable IP:port), so Mitti's single OSC destination doesn't have to be sacrificed.

MilluminV4 and V5 OSC support

Per-layer media tracking, with version-aware handling of Millumin 4's continuous time updates vs. Millumin 5's discrete media events.