Skip to content

output-processor — Config Reference

Generated from the output-processor.schema.json JSON Schema (vendored in schemas/). This is the authoritative field reference; see the parent topic for worked examples.

Configuration for the output-processor: inputs, compressors, outputs, and pipeline bindings.

FieldTypeRequiredDefaultDescription
$schemastringnoSchema URI (annotation only, stripped before validation)
versionenum: 1no"1"Config schema version. Must be “1”.
log_levelenum: error · warn · info · debug · traceno"info"Default log level (RUST_LOG syntax). Per-component overrides take precedence.
inputsarray of input_configyesOne or more input stream definitions.
compressorsarray of compressor_confignoNamed compressor definitions. May be empty if all pipelines use passthrough.
outputsarray of output_configyesOne or more output sink definitions.
pipelinesarray of pipeline_bindingyesBindings connecting each input to a compressor chain and an output.

A single input stream (VDI or MXL).

FieldTypeRequiredDefaultDescription
idstringyesUnique identifier referenced by pipeline bindings.
typeenum: vdi · mxlyesInput plugin type.
stream_idstringyesVDI or MXL stream identifier passed to plugin_open.
domainstringnoVDI/MXL domain string.
timeout_msintegerno5000Read timeout in milliseconds. Default: 5000.
log_levelenum: error · warn · info · debug · tracenoPer-input log level override.
frame_ratearray of integernoExplicit grain/frame rate as [numerator, denominator] (e.g. [1, 25] for 25 fps). Overrides the rate reported by the plugin. When absent, the plugin-supplied time_base is used.

A named compressor applied to frames from an input.

FieldTypeRequiredDefaultDescription
idstringyesUnique identifier referenced by pipeline bindings.
kindenum: video · audio · passthroughyesCompressor type.
codecstringnoFFmpeg encoder name. E.g. “libx264”, “libx265”, “libvpx-vp9”, “aac”, “libopus”.
bitrateintegernoTarget bitrate in bits/second.
presetstringnoEncoder preset (e.g. “faster”, “medium”).
gopintegernoGOP size in frames.
widthintegernoOutput width in pixels (video only).
heightintegernoOutput height in pixels (video only).
pixel_formatstringnoFFmpeg pixel format string for encoder input (e.g. “yuv420p”).
x264_paramsstringnoExtra x264 parameter string appended to the built-in defaults (e.g. “keyint_min=50”). Merged with repeat_headers=1:scenecut=0; values here take precedence. libx264 only.
sample_rateintegernoAudio sample rate in Hz (audio only).
channelsintegernoAudio channel count (audio only).

An output sink. Type-specific fields are validated by the oneOf subschemas below.

FieldTypeRequiredDefaultDescription
idstringyesUnique identifier referenced by pipeline bindings.
typeenum: file · null · rtp · srt · rtmp · webrtc · wep · yuv · ndiyesOutput type.

Then one of 9 variants:

Variant 1 — when type = "file"

FieldTypeRequiredDefaultDescription
idobjectyes
type"file"yes
pathstringyesOutput file path.
formatstringnoFFmpeg muxer format (e.g. “mp4”, “matroska”). Inferred from extension when absent.

Variant 2 — when type = "null"

FieldTypeRequiredDefaultDescription
idobjectyes
type"null"yes

Variant 3 — when type = "rtp"

FieldTypeRequiredDefaultDescription
idobjectyes
type"rtp"yes
hoststringyesDestination hostname or IP.
portintegeryesDestination UDP port.
containerenum: mpegts · rtpno"mpegts"Container format over RTP.

Variant 4 — when type = "srt"

FieldTypeRequiredDefaultDescription
idobjectyes
type"srt"yes
uristringnoFull SRT URI (e.g. “srt://0.0.0.0:9000?mode=listener&latency=200000”). When set, all other srt_* fields are ignored.
hoststringnoRemote host to connect to (caller mode) or bind address (listener mode, default 0.0.0.0).
portintegernoSRT port.
srt_modeenum: caller · listenerno"caller"Connection mode: ‘caller’ connects to a remote listener; ‘listener’ accepts incoming connections. Default: ‘caller’.
srt_latency_msintegerno200SRT end-to-end latency in milliseconds. Default: 200.
srt_passphrasestringnoStream encryption passphrase (10–79 characters). AES-128 for ≤16 chars, AES-256 for >16 chars.
record_pathstringnoIf set, also write encoded content to this MP4 file path for record_seconds seconds, then close the file. The SRT stream continues.
record_secondsintegerno30Duration of the tee recording in seconds. Default: 30. Requires record_path.

Variant 5 — when type = "rtmp"

FieldTypeRequiredDefaultDescription
idobjectyes
type"rtmp"yes
urlstringyesRTMP ingest URL.

Variant 6 — when type = "webrtc"

FieldTypeRequiredDefaultDescription
idobjectyes
type"webrtc"yes
signalling_urlstringyesWHIP HTTP endpoint for SDP offer/answer.
stun_urlstringnoSTUN server URL (e.g. “stun:stun.l.google.com:19302”).
ice_serversarray of objectnoAdditional ICE servers.

Variant 7 — when type = "wep"

FieldTypeRequiredDefaultDescription
idobjectyes
type"wep"yes
endpointstringyesWEP server base URL.
stream_namestringyesStream name used when constructing the POST path.

Variant 8 — when type = "yuv"

FieldTypeRequiredDefaultDescription
idobjectyes
type"yuv"yes
pathstringnoOutput directory. The file name is derived from the source flow ID. Defaults to the current directory.
framesintegernoMaximum number of frames to write. Pipeline stops after this many frames. Omit for continuous recording.

Variant 9 — when type = "ndi"

FieldTypeRequiredDefaultDescription
idobjectyes
type"ndi"yes
urlstringyesNDI source URL, e.g. “ndi://0.0.0.0/MY-FEED”. The host part is the bind address; the path is the source name advertised on the network.
media_typeenum: video · audiono"video"Sub-stream selector. Default: “video”. “audio” is reserved for a future iteration.

Connects one input to an optional compressor chain and one output.

FieldTypeRequiredDefaultDescription
input_idstringyesMust match an id in the inputs array.
compressor_idsarray of stringnoOrdered list of compressor ids to apply. Empty or absent means passthrough.
output_idstringyesMust match an id in the outputs array.