Vindral Composer · RealSprint
Paint the key instead of describing it. Settle a keyed subject into the plate behind it. Then run the finished project on a runtime that answers for itself.
Composer R3 2026 puts most of its weight on the shot that will not key cleanly. The Matte Paint Keyer lets you paint the background away by hand rather than searching for a colour and a tolerance that work everywhere, Background Match brings a keyed subject into agreement with the plate it is sitting on, and Unmultiply recovers fill and edges that an upstream key left dark. Around them, the HSV Keyer gains edge controls, Grading LUT imports .cube files, and Color Curves calibrates against the chart you actually own.
The second half of the release is for the people who keep a deployment alive. Separate startup, liveness and readiness probes, API keys with roles, expected state and statistics for every input and target, a live lifecycle stream and environment variables for runtime configuration all land together. On the desktop, the scene preview and audio mixer detach to a second screen, the layer list shows running state at a glance, and the performance report names what Render Tuning has paused.
- Matte Paint Keyer
- Background Match
- Unmultiply
- Grading LUT
- Window Capture
- AES67 audio
- NDI 6
- SRT timecode
- OCR
- API keys with roles
Chroma keying and colour
Paint the key, match the shot
Most of the work in this release sits at the moment a foreground is separated from its background and made to belong in the scene. There is a keyer you paint instead of describe, an operator that tints a keyed subject to the layer behind it, finer control over the edge of the matte, and a grading library you can audition one preset at a time.
-
Matte Paint Keyer: paint the background instead of describing it New
Conventional keyers describe the background with a formula — a key colour, a tolerance, a softness around it — and that falls apart the moment the screen is not one colour. The Matte Paint Keyer takes the opposite approach: you paint it. Drag over the preview with Add to mark colours as background, Exclude to protect skin, hair or a prop sharing a shade with the backdrop, and Erase to take part of the selection back. Grow then reaches through colour space to the shades you missed. An unevenly lit cyclorama, a repainted flat, or green and blue keyed in one shot are no harder than a clean screen. Blur is the only source of partial transparency, so it is what gives the matte a soft edge at all.
-
Background Match settles a keyed subject into its plate New
A keyed subject rarely belongs to the picture behind it: it was lit in a different room, and its edges are too clean. Background Match measures a black, a mid and a white point per colour channel on the layer directly above it in the layer list, then remaps the foreground towards those levels. The mid point is the one that does the work, because that is where a lit room's colour cast sits — matching only the endpoints barely moves a presenter who already uses the full range. Edges are handled by a light wrap whose shape comes from a Light Wrap Mask operator placed upstream in the keyer scene, so many branded scenes share one set of edges. Without that operator upstream there is no wrap.
-
HSV Keyer gains three edge controls Improved
Three additions sharpen what the HSV Keyer, Composer's default chroma keyer, does at the edge of the matte. Edge Softness pre-blurs the key signal to settle noisy or compressed green-screen edges, without softening the foreground picture itself. Alpha channel gamma reshapes the mid-values of the matte — raise it to soften edges such as fine hair, lower it to harden the cut — while leaving the fully transparent and fully opaque ends exactly where they are. Edge recovery restores the original colour of pixels that were only partly keyed away, which is where hair and semi-transparent objects live. All three sit under Show advanced options, and their defaults leave an existing key unchanged.
-
Unmultiply fixes darkened fill and key edges New
A fill+key source stores its colour already multiplied by alpha, and Composer's compositor multiplies by coverage again. Opaque pixels survive, which is why it is easy to miss on a title card, but hair, motion blur, glass, smoke and anti-aliased type all come out too dark. The Unmultiply operator divides the colour back out and hands the compositor the straight alpha it expects. Dividing is the right answer when the fill was laid over black, which is the default and covers almost every feed; where a graphics system composited over a solid colour instead, set the Background picker to that colour. Put it at the head of the operator chain — anything above it, a keyer most of all, is reading colours still scaled by coverage.
-
Grading LUT imports .cube files Improved
The Grading LUT operator applies a finished colour grade in a single step, and it no longer needs that grade in Composer's own LUT image format. Import a standard .cube file through File, Import .cube LUT, or pick one straight from the operator's LUT image browser, and Composer converts it and files it in the LUT folder ready to use like any other. A small library of ready-made LUTs is installed there to start from. Previous and Next buttons step through that folder, loading each one, so a look can be auditioned without reopening the file browser each time. A .cube that is already in the library is kept rather than overwritten, and Composer says so.
-
Color Curves calibration matches the chart you own Improved
Color Curves can build its correction for you. With a grey-scale reference chart in shot and the yellow markers dragged onto its grey patches, Calibrate gray levels samples each one and produces a master curve plus red, green and blue curves that flatten the camera's response towards neutral. This release improves the calibration itself and lets you set how many patches it reads — anywhere from two to ten, six by default — so it matches the chart in front of the camera rather than an assumed one. It needs the chart in the frame, and it sits under Show advanced options. If the rest of the frame is still over- or under-exposed afterwards, that is the lighting rather than the curves.
Also new
Three arrivals outside the compositor
-
Remote production
SRT cameras that stay frame-aligned
Remote production over SRT means every camera arrives at its own delay, and that delay drifts. Turn on Synchronize with other SRT inputs and those inputs join one sync group: Composer holds the fast feeds back and releases every camera on the same source timecode, each camera's audio still locked to its own video. It is off by default, so existing projects are untouched, and the group runs at the delay of its most delayed feed, bounded by a maximum you set. A congestion policy decides what happens when a link falls behind: hold everyone aligned, or keep latency and let the lagging camera re-lock. The cameras must be genlocked and carry embedded timecode — sent as SMPTE ST 2038 it locks with hardware decoding left on. The SRT Synchronization window shows lock state, offset and buffer use live.
-
Live captions
Captions in 99 languages, and a second local model
Speech To Text now transcribes 99 languages, not only English. Load a multilingual Whisper model and set Source Language to what is being spoken, or leave it on Auto-detect — Detected Language reports what it settled on, and Allowed Languages holds it to the languages your show can actually contain. Captions can be anchored to the left or right edge for right-to-left languages, with a font that covers them. Decode Only at Pauses recognises each utterance once rather than continuously, about 40 percent less GPU on a large model, at the cost of live text. The model included with Composer is English-only, so a multilingual file has to be loaded first, and accuracy varies sharply between languages — test the ones you use. A separate Speech To Text (Nemotron) operator captions with automatic punctuation using NVIDIA's Nemotron model, also entirely on the machine.
-
Device capture
Window Capture brings any application window into Composer
The Window Capture Input brings any application window — or a whole display — into Composer as a live, uncompressed video source. It is how you put content on air that Composer cannot fetch for itself: a page behind a login or multi-factor authentication, an interactive session, a desktop application with no stream output of its own. You sign in by hand, once. Because the input reads the window's own composition rather than the screen in front of it, a captured window keeps being captured while it sits behind others — though an application that is completely covered may throttle its own drawing, which is why Composer can open and hold the browser itself. Windows only, video only, and video marked as protected by streaming services composes as black.
Along the signal path
From source to output
Capture
Getting the signal in
-
AES67 network audio, in and out
Composer now sends and receives uncompressed PCM audio over AES67, the open Audio-over-IP standard. The AES67 Target streams up to four scene channel pairs as 48 kHz multicast, on Windows and on the headless Linux runtime, and the AES67 Input brings an AES67 stream — including from Dante equipment, with no Dante-specific software — in as a normal audio input. It carries audio only, no video, and timing is not yet PTP-locked, so independent AES67 sources cannot be cross-locked sample-accurately.
-
NDI 6, and up to eight audio channels
Composer now uses the NDI 6 runtime on Windows and Linux, so sources from newer NDI devices and applications that earlier versions could not find appear in the source list. The NDI input and NDI Target each carry up to eight discrete audio channels, set with Number of audio channels — enough for several independent language or commentary tracks in one stream. The channels travel as independent tracks; Composer does not encode or decode surround formats such as 5.1 or 7.1.
-
Steadier pictures on the NDI input
Two settings cover what an operator fixes on a network feed. Buffered frames holds a few frames in reserve to absorb clock differences and jitter that otherwise show as an occasional repeated or skipped frame; the default of 2 suits almost every setup, each frame of reserve costs one frame of latency, and 0 gives the lowest delay with repeats and drops left uncorrected. Freeze frame on lost connection chooses between holding the last frame, as before, and going to black.
-
Video File Input holds the first frame on load
The Video File Input can now decode and show a clip's first frame — at the In Time, if one is set — as soon as the file is loaded, and hold it there rather than showing black until you press Play. Nothing plays and no audio is heard, so a cued clip can be checked before it rolls. Off by default, and it applies when the input is not set to start playing when loaded.
Compose
Building the picture
-
Corner Distort gets on-screen handles
Corner Distort warps a picture by moving each of its four corners independently — the classic four-point perspective warp. You can now drag those corners directly in the preview instead of typing eight offsets, and a corner may be pushed outside the layer's original bounding box, so the warped image is no longer clipped to where the layer started. Handy for screen replacement, keystone correction and faked camera angles.
-
Bloom
A new Bloom operator adds soft blurring and haze, for the glow that bright light picks up around it. Use it to take the hard digital edge off graphics and highlights, or as an atmospheric wash over a whole composition.
-
OCR reads text and numbers out of the picture
The new OCR operator reads printed text and numbers from the video and keeps the result current every frame — a scoreboard, a caption, a clock, a burned-in frame counter — ready to read from a script, over the HTTP API, or on the property panel. Restrict the scan to a rectangle and it reads only where the text is, which is both more accurate and faster. It recognises printed fonts, not handwriting, and passes the image through untouched.
-
De-Esser and Stereo Imager
De-Esser tames the harsh "sss" and "shh" in a voice without dulling its brightness, in wideband, split or bell mode. Stereo Imager sets how wide a mix sounds, from collapsed mono through the original image out to a broad spread, with a correlation read-out so you can widen and still survive mono playback. It reshapes width that is already there — it cannot make a mono voice stereo.
-
Frequency Analyzer catches sub-frame seams
Frequency Analyzer verifies that a steady test tone is still the right pitch, shape and level. It now also watches the tone's phase and level every few milliseconds and counts a seam wherever either steps — the signature of a dropped or repeated sample, a short gap, or a cut that splices the tone. It needs a steady tone to judge, and a splice of exactly whole cycles leaves no trace.
Deliver
Sending it out
-
HEVC encoding on the SRT Target
The SRT Target can now encode HEVC (H.265) as well as H.264, giving better quality per bit on a contribution link that has to live within a fixed bitrate. HEVC here always runs on NVENC, so it needs an NVIDIA GPU; the x264 software path remains H.264. Confirm the receiver decodes HEVC before switching a live feed over.
-
SMPTE timecode carried over SRT, sent and read back
Switch on Embed timecode and the SRT Target stamps a SMPTE timecode into the outgoing stream, counting from zero or seeded from the time of day at connect. Sent as SMPTE ST 2038 ancillary data it works with H.264 as well as HEVC, and the SRT input reads it back as Captured timecode with hardware decoding still on. The older video SEI route is HEVC only and requires software decoding at the receiver.
Operate
Running the show
-
Connectors can be grouped
Every Connector now carries a Group name. With the connector behaviour set to stop already running connectors in the same group, invoking one stops only the others in its group, so two lower thirds can be mutually exclusive while a sting keeps rolling. Leave the Group empty and a Connector stays ungrouped, which is why existing projects behave exactly as before. Connectors can also be stopped explicitly by group, name or id from the HTTP API and the Script Engine.
-
Target overview lists every target in the project
The Target overview window, opened from the Windows menu, puts every target in the project, across all scenes, in one list. Sort or filter it to bring anything unhealthy to the top, start and stop a target from its row, and expand a row to edit its key properties in place. Some properties, an SRT server address among them, can only be changed while the target is stopped.
-
Scene preview and audio mixer detach to a second screen
The scene preview with its toolbar, and the audio mixer with the Channel Strip Inspector, can each move into a window of their own on a second screen, fully usable and carrying Composer's own frame. Detaching the mixer hands the main window back to the compositor layout, so both can be worked on side by side. Dock either one back from its Dock Back button or the Layout menu. The preview stays detached when another project is loaded; the mixer returns to the main window.
-
Running state at a glance in the layer list
The scenes layer list has a new Running State column showing the state of each layer's input, using the same indicator as the Inputs panel: a spinning circle while running, a triangle on a warning, a red circle on an error. You can see which sources in a scene are live without leaving the layer list, and the column stays visible in audio mixer mode.
-
The performance report names what Render Tuning has paused
The performance report, generated from the Analysis menu, now states whether Render Tuning is active and, when it is, how many inputs it has paused and how many are under manual control. An unexpectedly high paused count is the usual explanation for an input that looks frozen, and it is quicker to read here than to work out from the input itself.
-
Script completion and hover documentation in the editor
Open a project folder in Visual Studio Code and the project script gets completion, parameter hints and hover documentation for the whole script API: every helper, every enum value, every object property. Nothing to install — Composer puts the type information beside the script and refreshes it when you upgrade. It only helps while you type. It never reports a working script as broken, and it cannot tell you that a scene or layer name is misspelled.
Operations
What a headless runtime now tells you
A Composer Runtime in a deployment can be probed, followed, measured and scoped. It answers startup, liveness and readiness checks, pushes its lifecycle events to a subscriber, publishes metrics, separates a source nobody started from one that was started and has since failed, and limits what each API key is allowed to do.
-
Separate startup, liveness and readiness probes
A headless runtime now answers three different questions on a small port of its own: has it finished initialising, is its main loop still ticking, and should it be sent work. Keeping those apart is what lets an orchestrator wait out a slow start instead of killing the process, and pull a wedged one out of rotation. The probes need no API key and answer on every licence tier, but only if you give them a port. An idle runtime counts as ready, so it stays available to be handed a project.
-
Runtime lifecycle as a live stream
A supervisor can now follow a headless runtime rather than poll it. Project loaded, started and stopped, reload finished, first frame rendered, runtime exiting — each arrives as it happens, over one long-lived connection. It is served in every state, including with no project loaded at all, so a machine can be watched from boot through to exit. The stream opens with a snapshot of where things currently stand, so a dashboard that connects late is not left guessing. There is no replay of what it missed while disconnected.
-
API keys with roles
An API key can now carry a role, so the panel in the control room is not also able to rewrite the project or read a stream key back out. Four tiers, each a superset of the one below: read only, read and control, configuration and project building, and full administration. One key file covers the HTTP API, the Runtime API and the WebSocket. Existing plain keys keep full access, and a deployment that defines no keys at all remains open to anyone who can reach the port.
-
Expected state for every input and target
Every input and target now reports the state it was last asked to be in, beside the state it is actually in. That is the difference between a feed nobody started and a feed that was started and has since failed — and at three in the morning only the second one is worth waking someone for. It reads Unknown until something asks, and the inputs nothing ever starts, such as a still image or a text source, do not report it at all. Visible in the status responses, the logs, the metrics and the Target Overview window.
-
Statistics for every input and target, not just the first five
One call now returns what every input in the project is measuring — buffer depths, reconnects, decode errors, measured frame rate — grouped by protocol family, matching what targets already reported. Those figures were previously reachable only by reading the log. The log itself was quietly short, too: in a project with more than five inputs or targets, the periodic statistics entries listed the first five and dropped the rest as repeats of the same message. Every one of them is now written.
-
New metrics for build, readiness and dropped work
Four additions to the Prometheus output. A counter for frames skipped because compute time ran long — the per-instance signal that a machine is shedding work and the fleet needs another one. Two gauges mirroring the readiness and liveness probes, so an alert and an orchestrator can never disagree about whether a runtime is healthy. And a constant carrying version, hostname and operating system as labels, so a graph can tell you which build a problem belongs to.
-
The SRT synchronization group in metrics
When several genlocked SRT cameras are being held frame-aligned, the group's health is now on the metrics endpoint: how many inputs are in it, how many have locked, how far behind the group is running, the shared source frame they are all emitting, and which congestion policy is in force. Enough to alert on a camera that has fallen out of lock, or on latency creeping up as one link congests. Synchronization is opt-in per input, so a project that has not enabled it reports an empty group.
-
Environment variables for runtime configuration
Three more settings can be supplied through the environment instead of the command line, which is how a container wants to be configured: the health probe port, the FFmpeg install root, and the path to the settings file. The settings path is read early enough to affect the first reads at startup, not just later ones. A command-line argument still wins where both are given, so an existing launch script behaves exactly as it did before.
New tool
Drive a runtime from the shell
composer-cli is a small, scriptable, cross-platform command-line tool for controlling and monitoring a running Composer Runtime over its HTTP Runtime API. It comes with the Runtime package, with its own user guide.
-
composer-cli reports status and health in one command
composer-cli is a new command-line tool for a running Vindral Composer Runtime, on Windows and Linux. A single invocation reports runtime state, the loaded project and its statistics, lists the GPU, NVENC, NVDEC and FFmpeg the machine actually has, or prints recent errors and warnings. The health command queries the startup, liveness or readiness probe and exits zero or one, so a shell script can branch on it; pass it the health port the Runtime was started with.
-
Project lifecycle from a script
composer-cli loads a project onto a Vindral Composer Runtime and starts it, stops it to idle, reloads it from disk after an edit, or shuts the process down. Saved contexts hold each instance's URL and API key, so a fleet is addressed by name rather than by retyping URLs. Exit codes distinguish a refused action from an unreachable host. Only the headless Runtime answers, and only when it was started with a Runtime API port.
-
Project files handled over the network
composer-cli manages project files on a Vindral Composer Runtime without filesystem access to the machine: list what is there, upload a project, download the one currently loaded, parse a file to check it before loading, and confirm that every asset it references resolves on that host. Encrypted projects cannot be validated without their decryption key, and the file commands need an API key with editor rights.
# Save an alias for a remote runtime, once $ composer-cli context-add enc1 \ $ --url http://enc1:9101 --apikey $KEY --default# Pre-flight a project before it goes live $ composer-cli validate EveningShow.prj valid: true 50 fps 2 scenes 5 inputs $ composer-cli assets EveningShow.prj 12 assets referenced, 0 missing
# Load it, confirm it runs, check readiness $ composer-cli load EveningShow.prj Project loaded and started: EveningShow.prj $ composer-cli status Running EveningShow.prj up 0.00:02:15 $ composer-cli health --health-port 8088 ready: ok (state Running)
Talks to the headless Composer Runtime, not Composer Desktop. Bundled with the Runtime, with its own user guide.
Before you upgrade
Platform and fixes
Updated .NET, CUDA and Chromium runtimes
Composer now builds on .NET 10 and NVIDIA CUDA 13.3. The Web Page input, which is Windows only, moves to Chromium 149 and picks up that version's security fixes and performance improvements. Nothing in a project needs changing for this, but the GPU driver on the machine has to be recent enough for CUDA 13.3 before Composer will use the card.
- CUDA 13.3
- Chromium 149
SRT Target timecode is now exact at 30 fps
The SRT Target embeds an SMPTE timecode in the outgoing stream. At 30 fps it was counted as though it were 29.97, so a Time of day timecode ran ahead of the clock by up to a minute and a half late in the day. 30 fps now counts non-drop and tracks exactly, as 24, 25, 50 and 60 already did. 29.97 and 59.94 are unchanged.
Point Tracker warning settings reset on upgrade
The Point Tracker's position and luminance warnings are now named as warnings rather than errors, both in the property panel and in scripts. Opening a project saved with an earlier version resets these four settings to their defaults, with both warnings enabled. After upgrading, reapply the values you had on each Point Tracker, and update any script that sets them to the new names.
Composer R3 2026
The difficult shot and the long-running deployment both got easier.
This release is worth taking for the keying alone: a keyer you paint rather than describe, a background match that settles the subject into its plate, and an unmultiply that recovers edges and fill a previous key darkened. Around that sit the signal paths a show depends on, with AES67 network audio in and out, NDI 6 carrying up to eight audio channels, SMPTE timecode sent over SRT and read back at the far end, and HEVC encoding on the SRT Target. For anyone operating Composer rather than building in it, the runtime now reports expected state and statistics for every input and target, exposes startup, liveness and readiness separately, and accepts API keys scoped by role. Window Capture is Windows only; everything else here runs where Composer already runs.
Vindral Composer R3 2026
RealSprint AB · Döbelnsgatan 19 · 903 30 Umeå · Sweden