Cuedrift is a minimal, reliable video player for live productions. Queue a playlist, punch it to your program display, and trust every clip to end exactly how you told it to.
borderless · above the Dock & menu bar · ignores clicks
The control window on your Mac, and the status page a floor manager opens on their phone — same countdown, same clock, two screens.
Enable the status web page above first — control uses the same local server.
The control window — idle, before a playlist is loaded
The status page — final 10 seconds, on a phone or stage monitor
Every feature here answers a specific, recurring annoyance from running video playout during an actual live show — not a checklist someone drew up in advance.
Hold last frame, loop, auto-advance, or show a dedicated end-card image — set individually on every row, not as one global rule.
The output window sits at the system-maximum level on your chosen display — above the Dock, menu bar, and Notification Center. Nothing macOS draws punches through it.
A built-in HTTP server pushes clip name, progress, and a synced countdown to any phone or stage monitor on the network — over Server-Sent Events, no polling lag.
Stream a low-res JPEG copy of the actual output picture to the status page — a monitoring feed for "what's about to go out," toggled off by default to save CPU.
Plain HTTP endpoints for GO, stop, next/previous, and output toggle — wire them into Companion's Generic HTTP module with no custom module to install.
AVFoundation can't demux MXF at all. Cuedrift remuxes or transcodes automatically on import and caches the result, so re-adding a file is instant.
Clip paths, on-end actions, and end-card references save to a readable JSON file — easy to diff, version, or hand-edit between shows.
The read-only status page needs no auth; the control API can require a shared token so only your Stream Deck can trigger GO on the trusted venue network.
The countdown — in the app and on the status page — is driven by the same clock, not a client-side timer that drifts out of sync over a long show.
Turn on the status page and open it on a phone, a tablet taped to a podium, or a stage monitor. A floor manager sees exactly how much time is left without leaning over the operator's shoulder.
/statusThe same live data as plain JSON, for piping into anything else you run on the network.No dedicated Companion module needed — every endpoint is plain HTTP GET, so Companion's built-in Generic HTTP module, a browser bar, or curl all work identically. Clips are addressed by playlist position, since a clip's internal ID is a fresh UUID every launch.
| Endpoint | Effect |
|---|---|
/control/go?index=N | Select clip N and play it immediately — the GO button. |
/control/select?index=N | Select clip N without playing it. |
/control/stop | Stop and reset to the beginning. |
/control/playpause | Toggle play/pause on the current clip. |
/control/next / previous | Move the selection by one, without playing. |
/control/output/toggle | Toggle sending video to the output display. |
/playlist | JSON list of {index, name} — build your Companion buttons from this. |
/status | Same live JSON the status page uses — wire up button color or text feedback. |
AVFoundation decodes ProRes directly — nothing special needed. MXF is a container AVFoundation can't demux at all, whatever codec is inside, so every import runs the same fallback chain:
The fast path — covers .mov, .mp4, ProRes, H.264, and HEVC directly.
If that fails — currently any .mxf — Cuedrift remuxes into .mov via ffmpeg -c copy: a lossless container swap, seconds not minutes. Covers ProRes-in-MXF, DNxHD-in-MXF, and similar.
If the codec inside still isn't something QuickTime accepts — MPEG-2 XDCAM, uncompressed — it transcodes to ProRes HQ. Results are cached by source path, so re-adding a file skips straight to ready.