Vindral Composer Reference Guide

Vindral Composer

Welcome to the Composer Reference Guide — the home for everything you need to install, learn, run, and integrate with Vindral Composer.

Pick a manual from the cards below, browse with the panel on the left, or press Ctrl+K on any page to search the whole site.

Latest changes

Composer R3 2026, Version 2.7.9774.35170-prerelease, Release date 2026-10-05

   News and Improvements:

       New Window Capture input (Device capture): brings any application window, or a whole display, into Composer as a live video source — including while the window sits behind others. Use it for content that needs a signed-in browser or an interactive application; Windows only, video only.

       New Background Match operator (Color Correction): tints a keyed foreground to match the layer directly above it in the layer list. It measures a black, a mid and a white point per colour channel on both layers and remaps the foreground toward the background's, as lift, gamma and gain. The mid point is what carries a lit room's colour cast.

       New Light Wrap Mask operator (Chroma Keying): computes a light wrap's edge mask once, in a keyer scene, so that Background Match operators in other scenes apply it instead of each working it out. Most common use case is when several scenes share one keyed source.

       New Speech To Text (Nemotron) operator (AI): transcribes audio in real time and displays the result as live captions with automatic punctuation, using NVIDIA's Nemotron speech model. Recognition runs locally, so no audio leaves the machine and no captioning service is involved.

       Connector groups: Connectors now have a Group name. With the connector behaviour set to "On invoke, stop already running connectors in the same group", invoking a Connector stops only the running Connectors that share its group — so two lower-thirds can be mutually exclusive while a sting keeps rolling. Leaving Group empty keeps a Connector ungrouped, so existing projects are unaffected. Connectors can also be stopped explicitly, by group, name or id, from the HTTP API and the Script Engine.

       Improved Distort operator: Added user interface handles to manually edit the distortion. Also, the distortion can now exceed the layers boundaries, and are no longer limited to the layer's bounding box. 
     
       Improved Chroma Keyer: HSV Keyer: 
          Added an Edge Softness option that pre-blurs the key signal to clean up noisy or compressed green-screen edges, without softening the foreground image itself. Found under the advanced options.
          Added an "Alpha channel gamma" control alongside the existing ped and gain. Gamma reshapes the mid-values of the alpha matte — raise it to soften edges (for example fine hair) or lower it to harden the matte — without moving the fully-transparent or fully-opaque ends. Found under the operator's advanced properties; 1.0 (the default) leaves the matte unchanged.
          Added Edge Recovery: a new advanced option that attempts to restore the original color of pixels that were partially keyed away, for example hair or semi-transparent objects. 

       Network audio: added support for Aes67 network audio input and output. Aes67 is a standard for high-performance audio-over-IP and interoperability between various IP-based audio networking systems.

       NDI multichannel audio: the NDI Input and NDI Target now support up to 8 discrete audio channels, not just stereo. Select the channel count with the new "Number of audio channels" setting on each component. The NDI Input also reports the number of channels the source is actually sending (Received Audio Channels) and logs it whenever a source connects.

       NDI Input smoother playback: added a "Buffered frames" advanced setting that holds a few frames in reserve to absorb clock differences and network jitter, which would otherwise show up as an occasional repeated or skipped frame. The default of 2 suits almost every setup and each frame of reserve costs one frame of latency, so raise it to 3 on a busy or wireless network, or set it to 0 for the lowest latency with repeats and drops left uncorrected.

       NDI Input: new advanced setting "Freeze frame on lost connection" chooses between keeping the last frame and black output when the input stops receiving. The default keeps the last frame, as before.

       NDI 6: Composer now uses the NDI 6 runtime on both Windows and Linux. Sources from newer NDI devices and applications that earlier versions could not find will now appear in the NDI Input's source list.

       Media File Input: added a "Show first frame when loaded" option. When enabled (and "Start playing when loaded" is off), the input decodes and shows the first frame — at the In Time, if one is set — as soon as a file is loaded, and holds it without playing and without audio, instead of showing black until you press Play. Off by default.

       The scenes layer list has a new Running State column for each layer's input. It uses 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.
       
       Grading LUT operator:
          Added support for importing .cube LUT files (the standard Adobe/Iridas LUT format). Imported .cube files are converted to Composer's native LUT format (a 4096x4096, 24-bit RGB image) and stored in the new Media\Lut folder. Import via File > Import .cube LUT..., or directly from the operator's LUT image file picker. Importing a LUT that is already in the library is skipped (a notification is shown) rather than overwriting the existing file.
          Added a library of bundled LUTs in the Media\Lut folder.
          Added "Browse LUTs" Previous/Next buttons for quickly auditioning the LUTs found in the Media\Lut folder.

       Added a Bloom filter for soft blurring and haze effects

       Added an OCR (text recognition) operator: reads printed text and numbers from the video using GPU-accelerated PaddleOCR models and reports the result as a read-only value that can be read from a script, over the HTTP API, or from the property panel. The scan can be limited to a rectangular area so it only reads where the text is (a caption, scoreboard, clock, or burned-in frame counter), which also keeps it fast. Two scan modes are available: Single line (fastest, for a tightly-cropped word or number) and Detect text regions (finds and reads text anywhere in the area). The image passes through unchanged unless the scan-area outline or the recognized-text overlay is enabled.

       Color curves operator: Improved automatic color calibration method, including configuration of the number of calibration points.

       SRT (Secure Reliable Transport):
          SRT Target: added support for HEVC (h265) video encoding using Nvidia NVENC, in addition to the existing H.264. HEVC provides better compression and quality at the same bitrate.
          SRT Target: added support for embedding SMPTE timecode in the outgoing stream, carried either as in-stream video SEI (S12M, HEVC only) or as a codec-agnostic SMPTE ST 2038 ancillary stream that also works with H.264. Selectable via Timecode transport. The timecode can start from zero or from the time of day.
          SRT Input: added support for showing the SMPTE timecode received in the incoming stream (Captured Time Code), along with the received video codec. SEI timecode requires software decoding, whereas SMPTE ST 2038 timecode is read back with hardware decoding too.
          SRT Input synchronization: multiple SRT inputs can now be frame-synchronized against each other for remote-studio production, where several genlocked cameras (sharing the same embedded timecode) are sent to Composer over separate SRT links whose latency differs and varies over time. Enable the new "Synchronize with other SRT inputs" option on each input to join a shared synchronization group: Composer holds each source back in an adaptive buffer and plays them out on the matching timecode, so all cameras stay frame-aligned and each stream's audio stays locked to its own video. Synchronization is off by default, so existing projects are unaffected. A congestion policy (Hold sync, which grows latency to keep everyone aligned, or Low latency, which lets a lagging source re-lock) controls behaviour when a link falls behind, and the buffer is bounded by configurable minimum/maximum limits. Best results use SMPTE ST 2038 timecode, which aligns exactly and works with hardware decoding. A new SRT Synchronization window (Application menu) lets you enable inputs and follow live lock state, offset, buffer usage, group latency and per-source timecode; the same values are exposed as input statistics, a periodic synchronization log, and Prometheus metrics.

       Audio operators:
          Added a De-Esser operator for reducing harsh sibilance ("s", "sh", "t" sounds) in vocal audio. Supports wideband, split and bell modes, with adjustable frequency, Q, threshold and range.
          Added a Stereo Imager operator for adjusting the perceived stereo width of an audio signal, from mono (collapsed) through the original image to widened.
          Improved Frequency Analyzer: detects sub-frame seams (dropped or repeated samples, short gaps) in a steady test tone.
       
       Improved Speech to Text operator:
          Added support for multilingual Whisper models: the operator now transcribes 99 languages, not just English. Select the spoken language under Source Language, or Auto-detect to let the model identify it from the audio.
          Added Detected Language, which reports the language used, and Allowed Languages, which restricts what Auto-detect may show.
          Added support for right-to-left captions, with a new Text Alignment option to anchor the captions to the left or right edge, and a new Font Family option for the caption font.
          Added a Decode Only at Pauses option that recognises each utterance once instead of continuously, which lowers the GPU load with the larger models.
       
       Added the Target Overview window (Windows > Target overview...): one list of every target in the project, across all scenes. Sort or filter it to bring anything unhealthy to the top. Start and stop targets from their row, and expand a row to edit its key properties in place. Some properties, such as an SRT server address, can only be changed while the target is stopped.
       
       Detachable scene preview and audio mixer: the scene preview together with its toolbar, and the audio mixer together with the Channel Strip Inspector, can each be moved into a window of their own and put on a second screen. Both stay fully usable there and carry Composer's own frame rather than a plain dialog border. Detaching the audio mixer hands the main window back to the compositor layout, so the compositor and the mixer can be worked on side by side instead of being swapped with CTRL+M. Dock either one back from its Dock Back button, by closing its window, or from the Layout menu. The scene preview stays detached when another project is loaded; the audio mixer returns to the main window.
       
       Added new operator: Unmultiply operator. The Unmultiply operator takes an input image and divides the RGB channels by the alpha channel, effectively removing the premultiplication. This is useful for compositing images that have been premultiplied with a background color, and allows for more accurate color correction and blending.

       Added new chroma keyer: Matte Paint Keyer. Conventional keyers describe the background with a formula - a key colour, a tolerance and a softness around it - which struggles as soon as the screen is not one colour. The Matte Paint Keyer takes the opposite approach: instead of describing the background, you paint it. It holds a selection volume covering the whole of RGB space, and you mark the colours that are background by dragging over them in the preview. Add marks colours as background, Exclude protects colours the key must never touch (skin, hair, a prop sharing a shade with the backdrop), and Erase removes part of the selection. Grow then expands the selection through colour space to reach the shades you did not paint, and Blur softens the boundary to give the matte a soft edge. An unevenly lit cyclorama, a repainted flat, or a shot needing both a green and a blue screen keyed at once are no harder than a clean screen, because nothing in the selection assumes the background is a single colour.
       
       Runtime version
          Added API:s for running and monitoring Composer runtime.

          HTTP Api:
             api/startup (alias /startupz) — startup probe: passes once CUDA + engine init are done and the main loop has been entered.
             api/health (alias /livez, and /) — liveness probe: passes while the main loop has ticked within the last 30 s.
             api//ready (alias /readyz) — readiness probe: passes when startup is complete and state is Idle or Running (Idle counts as ready).
             api/getstatistics — now also reports ProcessRamMb / ProcessRamBytes (process RAM) alongside the GPU VRAM fields (GpuRamUsedGb / GpuRamTotalGb / GpuRamFreeGb). Both RAM and VRAM are read live/on-demand when the endpoint is called, so they reflect the exact current usage (useful for monitoring and memory-leak checks) rather than a periodically-sampled value.
             api/srtsync/status — returns the live state of the SRT input synchronization group in one call: whether the group is locked, the number of synchronized and locked sources, the shared target frame, group latency and congestion policy, plus per-source name, timecode, lock state, offset and buffered frames. Lets an operator or automated test confirm all synchronized SRT sources are frame-aligned. Also surfaced through the ComposerTestSDK (GetSrtSyncStatusAsync).
             api/targets/getstatistics — now reports SRT, NDI and MoQ targets as well as RTMP. The response carries one list per output type (RtmpTargets, SrtTargets, NdiTargets, MoQTargets), each covering every scene, and every entry names the scene that owns the target and the kind of target it is. Existing RTMP integrations are unaffected: the RtmpTargets list keeps its name and its fields. An NDI target now reports its channel name, the number of receivers watching it, frames sent and its tally state, and a MoQ target its sink, connection state, packets sent and queue depths.

          Added support for new environment variables:
             COMPOSER_HEALTH_PORT — same as --health-port (CLI wins); enables the health endpoint
             COMPOSER_FFMPEG6p2 — FFmpeg 6p2 install root; now resolved env-first, ahead of the Windows registry (D.1) and the Linux .vindralcomposerruntime
             COMPOSER_SETTINGS_FILE — path to settings.xml, honored even by the early startup reads; --settings-file takes precedence 

          Added composer-cli — a small, scriptable, cross-platform command-line tool for controlling and monitoring a running Composer Runtime over its HTTP Runtime API (status, start/stop/reload/load, project management, and the new health probes). composer-cli is bundled with the Runtime package; see the included COMPOSERCLI_USERGUIDE.md for usage.

          Runtime events over a live connection: the Runtime API can now push its lifecycle events — project loaded, started and stopped, reload completed, first frame rendered, runtime exiting — to a subscriber as a Server-Sent Events stream at /runtime/events/subscribe, instead of the subscriber polling /runtime/status for changes. Unlike the project API's event stream, this one is served in every runtime state, including when no project is loaded, so a supervisor or deployment dashboard can follow a runtime from startup through to exit. The stream opens with a snapshot of the current state, so a subscriber that joins late still knows where things stand. The same events continue to be sent to WebSocket clients, unchanged.

       API access control (roles): API keys in apikeys.json can now carry a role that limits which endpoints (HTTP API, Runtime API and WebSocket) a key may call. Alongside the existing bare-string keys (which keep full admin access), keys can be written in a scoped form declaring a role and an optional label, for example { "key": "abc123", "role": "operator", "label": "studio-panel" }. Four role tiers are available, each a superset of the one below: viewer (read only), operator (read + control), editor (adds project/settings config and the builder API) and admin (everything). Existing key files and open mode (no keys defined) are unchanged. See the API documentation for the full permission model.
       
       Expected state for inputs and targets: every input and target now reports the state it was last asked to be in - Running, Stopped, or Unknown until someone asks - alongside the status it already reported. The pair separates a source nobody started from one that was started and has since failed. Shown in the status and statistics APIs, the InputStatistics and TargetStatistics log entries, two new Prometheus metrics, and a new Expected column in the Target Overview window.

       Input statistics over the HTTP API: the new /api/inputs/getstatistics reports what every input is measuring - buffer depths, reconnects, decode errors, measured frame rate - in one call, as the counterpart of /api/targets/getstatistics. Streaming inputs are grouped by family (RTMP, SRT, NDI, MoQ), with every other input listed alongside them. These figures were previously only available in the log.

       Prometheus, added metrics:

          composer_skipped_frames_total — frames skipped due to high compute time; the per-instance "dropping work" autoscale signal 
          composer_build_info — constant 1 carrying version/hostname/os labels
          composer_runtime_ready — 1 when ready (startup complete + Idle/Running)
          composer_runtime_live — 1 when the main loop is live (ticked within the window)
          composer_srt_sync_members — number of SRT inputs currently in the synchronization group
          composer_srt_sync_locked_members — how many of those are locked to the group
          composer_srt_sync_group_latency_frames — current group latency (freshest buffered frame minus the shared target)
          composer_srt_sync_target_frame — the shared source frame number all synchronized inputs emit
          composer_srt_sync_congestion_policy — active congestion policy (0 = Hold sync, 1 = Low latency)
          composer_ext_input_expected_state — what an input was last asked to be (0 = Unknown, 1 = Running, 2 = Stopped)
          composer_ext_target_expected_state — the same for a target
       
       Script Engine: project scripts now get code completion, parameter hints and hover documentation in Visual Studio Code, with nothing to install - just open the project folder and start typing. Composer places the type information next to your script and keeps it up to date when you upgrade.

       Improved Performance Report: the report now says 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 reason an input appears frozen.

       Decklink Target v4: new "Playback method" setting. Scheduled plays picture and sound from the card's own clock, so they no longer drift apart when the project runs on the system clock, at the cost of a few frames of delay. Synchronous, the previous behaviour, stays the default.
   
   Bugfixes: 
      Logging: in a project with more than five targets or inputs, the TargetStatistics and InputStatistics entries listed only the first five. The rest were taken for repeats of the same message and left out. Every target and input is now logged.
      SRT Target: the embedded timecode ran ahead of the clock in a 30 fps project. 30 fps was treated as if it were 29.97 and given drop-frame counting, which advances slightly faster than real time, so a "Time of day" timecode drifted further ahead the later in the day it got - around half a minute by mid-morning and up to a minute and a half just before midnight, starting over at midnight. 30 fps now uses non-drop counting, like 24, 25, 50 and 60; 29.97 and 59.94 are unchanged.

   Other changes/news:
      Platform: updated to .NET 10, NVIDIA CUDA 13.3 and Chromium 149. Chromium powers the Web Page inputs, and this version brings its security fixes and performance improvements.

      Point Tracker: the position and luminance warnings are now named as warnings rather than errors, in the property panel and in scripts. Projects saved with an earlier version lose these four settings and return to the defaults, with both warnings enabled, and scripts that set them must use the new names.

What's new

The features worth knowing about in the latest Composer release, and what they change for you.

Get started

New to Composer — install it, learn the Desktop interface, and work through tutorials and how-to videos.

Component reference

Every input, operator, and target you can drop into a project, with screenshots and per-section property tables.

Run in production

For operators and administrators deploying, monitoring, configuring, and tuning Composer for live operation.

Develop & integrate

For developers driving and extending Composer from their own code — the HTTP, Runtime, and WebSocket APIs, the embedded Script Engine, and the data types they share.

Reference & help

What changed in each release, and fixes for common problems.