Skip to content

input-processor — Config Reference

The authoritative field reference for the input-processor JSON pipeline config. See input-processor for worked examples and how it fits the pipeline.

Defines one or more media input→output pipelines for the phrame-builder input-processor.

FieldTypeRequiredDefaultDescription
$schemastringnoOptional JSON Schema URI for editor autocomplete.
version"1"no"1"Schema version. Always '1'.
log_levellog_levelno"info"Default log level for all pipelines. Per-output log_level overrides this.
inputsarray of input_configyesInput source definitions.
outputsarray of output_configyesOutput plugin sink definitions.
pipelinesarray of pipeline_bindingyesBindings connecting inputs to outputs. Executed sequentially by default, or in parallel threads when parallel is true.
parallelbooleannofalseRun all pipeline bindings concurrently as parallel threads instead of sequentially. Required when capturing multiple services from a single live source (e.g. multiple DVB services from one multiplex, or multiple simultaneous live streams). When true all pipelines start at the same time; the process exits when all threads complete (or when any non-looping pipeline fails).
rayon_threadsintegernoSize of the rayon global thread pool used for parallel YUV pixel-format conversion in the VideoCompressor. Resolution order at startup: --rayon-threads CLI flag, then RAYON_NUM_THREADS env var, then this field, then a default of 4. Without an explicit value rayon spawns one worker per logical CPU, which over-subscribes large hosts (e.g. 128 threads on a 128-core server, fanning out per frame at 60 fps). Ignored in MQTT mode — the pool is fixed before any config is received.

Definitions

log_level

Logging verbosity level.

One of: error · warn · info · debug · trace

pixel_format

Pixel format for decoded video output.

One of: yuv420p · yuv422p · yuv444p · yuv422p16le · nv12 · nv21 · rgb24 · bgr24 · rgba · bgra · argb · abgr · yuyv422 · uyvy422 · gray8

stream_type

A stream type that can be sent to an output sink. 'av_compressed' is a single muxed stream containing re-encoded video and audio interleaved; requires compress.video and/or compress.audio to be configured.

One of: video · video_compressed · audio · audio_compressed · av_compressed · proxy · proxy_compressed · subtitle

proxy_config

Configuration for the proxy (scaled-down) video stream. Also defines the resolution used by proxy_compressed.

FieldTypeRequiredDefaultDescription
widthintegerno640Proxy frame width in pixels.
heightintegerno360Proxy frame height in pixels.
pixel_formatpixel_formatno"yuv422p"Pixel format for the uncompressed proxy video stream. The compressed proxy always encodes to yuv420p regardless of this setting.

proxy_compressed_config

Configuration for the H.264-compressed proxy stream. Dimensions are taken from the proxy config (default 640x360). The stream is always encoded to yuv420p.

FieldTypeRequiredDefaultDescription
codecstringno"libx264"FFmpeg encoder name. Must be a valid libavcodec encoder identifier. Defaults to 'libx264'.
bitrateintegerno1000000Target encoding bit rate in bits per second. Defaults to 1000000 (1 Mbit/s).

burn_in_stream_list

Which decoded output streams to burn this overlay into. Any subset of ["video", "proxy"]. Defaults to both.

burn_in_font

Font to use for burn-in rendering. 'NimbusMonoPS' is a Courier-compatible monospace font. The 'Technology' variants are a sans-serif display font.

One of: NimbusMonoPS · Technology · Technology-Bold · Technology-Italic · Technology-BoldItalic

burn_in_timecode

Timecode overlay burned into decoded video frames as HH:MM:SS:FF, derived from the TAI origination timestamp.

FieldTypeRequiredDefaultDescription
xintegerno50Pixel distance from the left edge of the frame to the start of the timecode text.
yintegerno50Pixel distance from the top edge of the frame to the top of the timecode text.
font_sizeintegerno32Character height in pixels.
fontburn_in_fontno
apply_toburn_in_stream_listno

burn_in_text

Static text overlay burned into decoded video frames.

FieldTypeRequiredDefaultDescription
contentstringyesThe text string to render. Supports ${variable} placeholders: ${width} (hi-res frame width), ${height} (hi-res frame height), ${frame_rate} (rate reported by stream, e.g. '25' or '29.97'), ${measured_frame_rate} (actual measured rate from a rolling window, updated per-frame), ${codec} (e.g. 'h264'). Unknown placeholders are left as-is.
xintegerno50Pixel distance from the left edge of the frame to the start of the text.
yintegerno50Pixel distance from the top edge of the frame to the top of the text.
font_sizeintegerno32Character height in pixels.
fontburn_in_fontno
apply_toburn_in_stream_listno

burn_in_config

Burn-in overlays rendered into uncompressed video before sending to the output plugin. Both timecode and text are optional and independent.

FieldTypeRequiredDefaultDescription
timecodeburn_in_timecodenoTimecode overlay (HH:MM:SS:FF). Omit to disable.
textburn_in_textnoStatic text overlay. Omit to disable.

input_config

Describes one media input source.

FieldTypeRequiredDefaultDescription
idstringyesUnique identifier referenced by pipelines[].input_id.
pluginenum: network · mxl · ndiyesInput plugin. 'network' reads any file/device/URL via FFmpeg. 'mxl' reads a live MXL stream. 'ndi' reads a live NDI source via the phramendi plugin (libphramendi.so).
sourcestringyesFor 'network': a file path, device path (/dev/video0), or network URL (rtsp://, rtmp://, …). For 'mxl': the MXL stream name (stream_id). For 'ndi': the NDI source URL (e.g. 'ndi://192.168.1.10:5961/HOST (Source Name)').
formatstring / nullnonullFFmpeg input format hint, e.g. 'v4l2', 'rtsp', 'lavfi', 'mpegts'. Omit to let FFmpeg auto-detect.
optionsobjectno{}Arbitrary FFmpeg AVOption key/value pairs applied to the input.
videovideo_input_configno
audioaudio_input_configno
realtimebooleannofalsePace output to the source's native timestamps (real-time playback). Useful for live sources replayed from file.
loopbooleannofalseRestart from the beginning when EOF is reached.
frame_limitintegerno0Stop after this many decoded video frames. 0 means unlimited.
labelstringnoHuman-readable label for this input. Passed to output plugins as the 'label' field in their open configuration. When absent, the pipeline derives a label from 'source' (file basename for file inputs, stream name for MXL inputs).
flow_idstringnoMXL flow UUID. Required when plugin is 'mxl'.
domainstringnoMXL domain string. Required when plugin is 'mxl'.
media_typeenum: video · audiono"video"NDI sub-stream selector. Each NDI reader instance is bound to a single media type — open two inputs if both are required. Only meaningful when plugin is 'ndi'.
log_levellog_levelnoPer-input log level override. Falls back to the top-level log_level when absent.
dvbdvb_configno

dvb_config

DVB-T/T2 tuning parameters for a network input backed by a DVB USB receiver (e.g. RTL2832U). When present the pipeline tunes the front-end, opens the demux, and reads the MPEG-TS stream from /dev/dvb/adapterN/dvr0. The source field is ignored — set it to the adapter path as a human-readable label.

FieldTypeRequiredDefaultDescription
adapterintegerno0DVB adapter index (0-based). Selects /dev/dvb/adapterN/frontend0, demux0, and dvr0.
frequency_hzinteger / nullnoChannel centre frequency in Hz (e.g. 578000000 for 578 MHz). Omit or set null to skip tuning (device must be pre-tuned externally). The demux filter is still configured.
bandwidth_hzintegerno8000000Channel bandwidth in Hz. Default 8000000 (8 MHz) — standard for UK/EU DVB-T. Use 7000000 or 6000000 for other regions.
dvb_t2booleannofalseUse the DVB-T2 delivery system instead of DVB-T. Enable for UK Freeview HD and other DVB-T2 multiplexes.
service_idintegerno0MPEG-TS program/service number to decode. Passed to FFmpeg as program_num. 0 means auto-select the first available program.

video_input_config

Video stream decode settings.

FieldTypeRequiredDefaultDescription
enabledbooleannotrueWhether to decode and forward the video stream.
pixel_formatpixel_formatno"yuv422p"Decoded video pixel format.
widthintegernoRequired output width for the hi-res video stream in pixels. Must be set together with height. When the source differs and scale_to_fit is false, a warning is logged; when scale_to_fit is true the frame is scaled to this resolution.
heightintegernoRequired output height for the hi-res video stream in pixels. Must be set together with width.
scale_to_fitbooleannofalseWhen true and width/height are set, scale input frames to the desired resolution. When false (default), only log a warning if the source resolution differs.
frame_rateobjectnoExplicit frame rate override (numerator / denominator). When set, replaces whatever frame rate the source reports. Example: { "numerator": 25, "denominator": 1 } forces 25 fps.
convert_frame_rateobjectnoConvert the video frame rate by dropping or duplicating decoded frames to achieve the target rate. Use frame_rate to correct wrong metadata without changing delivery rate; use convert_frame_rate to actually change the frame delivery rate.
min_widthintegernoHLS/multi-bitrate variant selection: reject video streams narrower than this (pixels). Among streams that pass all constraints the highest-bitrate one is used.
max_widthintegernoHLS/multi-bitrate variant selection: reject video streams wider than this (pixels).
min_heightintegernoHLS/multi-bitrate variant selection: reject video streams shorter than this (pixels).
max_heightintegernoHLS/multi-bitrate variant selection: reject video streams taller than this (pixels).
min_bitrateintegernoHLS/multi-bitrate variant selection: reject video streams with a bitrate below this value (bits/s).
max_bitrateintegernoHLS/multi-bitrate variant selection: reject video streams with a bitrate above this value (bits/s).

audio_input_config

Audio stream decode settings.

FieldTypeRequiredDefaultDescription
enabledbooleannotrueWhether to decode and forward the audio stream.
sample_rateintegerno48000Target sample rate in Hz for decoded audio. If the source rate differs the pipeline resamples via libswresample. Default: 48000.

output_config

Describes one plugin output sink.

FieldTypeRequiredDefaultDescription
idstringyesUnique identifier referenced by pipelines[].output_id.
pluginenum: vdi · mxl · nullyesOutput plugin backend. 'null' logs every frame and discards it — useful for validation.
stream_idstringyesStream identifier passed to plugin_open (the VDI/MXL stream name).
streamsarray of stream_typeno["video","video_compressed","audio","audio_compressed"]Which stream types to create. Defaults to all four when omitted.
log_levellog_levelnoPer-output log level override. Falls back to the top-level log_level when absent.
flow_idstringnoMXL flow UUID. Required when plugin is 'mxl'.
domainstringnoMXL domain string. Required when plugin is 'mxl'.
proxyproxy_confignoProxy video stream settings. Used when 'proxy' or 'proxy_compressed' is listed in streams. Defines the scaled-down resolution; defaults to 640×360 yuv422p when omitted.
proxy_compressedproxy_compressed_confignoCompressed proxy stream settings. Active when 'proxy_compressed' is listed in streams. Defaults to libx264 at 1 Mbit/s when omitted.
compressobjectnoRe-encode decoded frames for the video_compressed and/or audio_compressed VDI streams. When absent the existing passthrough behaviour applies (compressed packets from the input are forwarded unchanged).
burnburn_in_confignoBurn-in overlays (timecode and/or text) rendered into uncompressed video frames. Omit to disable all overlays.
yuv_dump_filestringnoPath to a raw YUV dump file. When set, every uncompressed decoded video frame (after burn-in) is written as planar YUV with no stride padding before being sent to the output plugin. Works with any output plugin. Playback: ffplay -f rawvideo -pixel_format yuv422p -video_size WxH -framerate N file.yuv
mqtt_brokerstringnoMQTT broker URL for stats publishing (null plugin only). E.g. 'tcp://localhost:1883'.
mqtt_topic_prefixstringno"stats"MQTT topic prefix for stats (null plugin only). Defaults to 'stats'.
mqtt_client_idstringnoMQTT client ID for stats publishing (null plugin only). Defaults to the stream_id.
frame_ratenumbernoNominal frame rate used to compute the speed ratio in stats (null plugin only). 0 disables ratio.

pipeline_binding

Connects one input source to one output sink.

FieldTypeRequiredDefaultDescription
input_idstringyesMust match an inputs[].id value.
output_idstringyesMust match an outputs[].id value.