A cue playback engine for Windows.

Video, audio, images and text on a native C++ engine - plus OSC, MIDI, LTC/MTC timecode and NDI/Spout output to drive the rest of the rig. The editor is a separate process: closing it does not stop the show.

v0.1.0-beta.6 ↓ · Windows 10/11 ·installer is unsigned, SmartScreen will warn

2Opening video0:09/ 0:45
Next3Fade house to 0
fades out 1 · House out
Resource → Action → Trigger

One model behind every cue.

What can be controlled

Resource

Media - video, audio, images - plus text, an LTC generator and a live audio input. Resources live in the library and are reused across cues instead of being reconfigured in each one.

Four kinds today; the model is built to take more.

What changes

Action

Three kinds. Command plays, pauses or stops. Set jumps a parameter to a value. Transition moves it over time on a curve. The engine clamps every value to the parameter registry.

command · set · transition

When it happens

Trigger

Nine, and only nine - a closed set, so an action’s timing is always one of a handful of things you can read off the cue.

On Cue Start · On Play · On Cue Stop · On Finished · At Time · Timecode · OSC · MIDI CC · Manual

Animatable parametersOpacity · Scale · Position X · Position Y · Rotation · Volume · Pan
Addressable live/resource/{id}/opacity   /cue/{id}/volume

A media cue plays because the cue lifecycle plays it, not because you added a Play action. Actions are what you build around that lifecycle.

Under pressure

What the operator can rely on.

A show-control system earns trust by being specific about what it is doing - and about what has stopped working.

Aim, then fire

  • Space fires the armed cue, and the GO button names it: GO - 5 · Score.
  • Clicking a cue arms it. and re-aim without firing.
  • Esc is PANIC - but with a menu or the palette open, Esc only closes that. It cannot fall through and stop the show.
  • STOP counts its blast radius before you press it: STOP · 3.

When something breaks

  • If the engine link drops, the clocks dim to LAST KNOWN and the progress bar freezes. A stopped clock is never mistaken for a paused show.
  • The status bar reports what is true: OSC ✕ not listening when the bind failed, MIDI not built when it was compiled out.
  • LIVE appears only when an input is actually listening.
  • Warnings are a queue, not a slot - +3 older - so a burst never eats the first one.

Editing without fear

  • Show mode locks editing and grows the transport for reading at a distance. Every blocked action explains itself.
  • Selecting a cue is never firing it: prepare the next one without losing the live context.
  • Del removes a whole selection as a single undo step.
  • Deleting a resource takes two clicks: used by 3 cues - delete?
v0.1.0-beta.6

The editor.

Cue list, transport and live system state, as the current beta draws them. Click a cue to arm it, or press GO.

Showmesh - Hamlet - Act I.showOpen full screen ↗
Reactive triggers

Live input can drive a parameter while the cue runs.

Three of the nine triggers are reactive - OSC, MIDI CC and Manual. They arm when the cue starts playing and can fire repeatedly until it stops.

Press ◎ Learn on an action, move the controller, and it binds that channel and CC. GO and PANIC learn the same way; over OSC they are /go and /panic.

If chased timecode drops out, the internal generator freewheels from the last frame, so timecode-armed cues keep firing through the gap.

Example mappings
MIDI CCch 1 · cc 21/cue/{id}/opacity0…127 mapped into the parameter’s range
OSC/scene/2 0.4/resource/{id}/volumethe float argument drives the value
Timecode00:04:12:00arms cue 7freewheels through a dropout
Native engine

The engine owns the show.

Playback, timing and show state live in a separate native C++ process. The editor is a protocol client that draws the interface, and a headless runtime runs shows with no interface at all.

Composited once

The project defines one canvas - width, height and frame rate. The program is composited once at that resolution and every output adapts it.

One thread owns the device

A render coordinator owns the D3D11 device, context and swapchains, composites once and blits to each output, rather than a thread per output contending for the GPU.

GPU decode, with a way back

Decoding runs on a dedicated NVDEC device, so several clips do not serialise against Present. A clip that decodes badly there is caught when it opens and falls back to CPU on its own.

Decoding toward the canvas

Frames are decoded at the size the canvas actually needs - measured at roughly 4× on 4K down to 1080p.

Recovery

Documents are op-based, journalled and saved atomically, so a crash leaves the show recoverable. The engine runs under a watchdog that restarts it after an abnormal exit and gives up on a crash loop rather than thrashing. A fault writes a minidump, a log and a report bundle to the operator’s own disk - offline, no server involved.

Measured

A six-hour operator soak at 3440×1440 with NDI and Spout running, on GPU decode: no leaks, no handle growth, zero underruns, and a monitor topology change recovered without a restart.

Not yet

A real GPU device loss. A monitor power-cycle is a topology change, not a device loss, so that path remains untested.

Interoperability

What connects, and what does not.

Working in the beta

  • Video, audio, images and text
  • Display output, NDI send, Spout send
  • OSC in and out
  • MIDI in and out - note, CC, program, MSC
  • LTC and MTC chase, and LTC generation
  • Art-Net output - built and verified over loopback, but never yet run against a real fixture

Already reachable, today

  • Anything that speaks OSC or MIDI - TouchDesigner, Unreal, lighting desks, media servers - is drivable now.
  • There is nothing to integrate: a cue sends the message, and the other system does what it already does.

Not available

  • NDI receive
  • sACN
  • HTTP / REST
  • MTC output - MIDI out sends note, CC, program and MSC, but not quarter-frame
  • Audio routing matrix and per-bus EQ
  • Crop, corner pin and edge blend

The manual keeps the full list, feature by feature, with what each one does and does not do: Capabilities and limitations ↗

Frequently asked questions

Help shape the product

Become a beta tester.

For operators who today run QLab, Resolume or a media server - in theatres, on tour, in installations and in corporate AV.

Test a real Windows build, complete a 60–90 minute test mission and speak directly with the developer.

Get a beta license

The key arrives by email and activates two computers. Questions rather than a license? [email protected].