{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://render-cadence.local/schemas/runtime-host.schema.json", "title": "Render Cadence Runtime Host Configuration", "description": "Startup configuration for the Render Cadence native host. This schema documents the settings currently read by AppConfigProvider.", "type": "object", "additionalProperties": false, "properties": { "$schema": { "type": "string", "description": "Editor-only schema reference. The native host ignores this field." }, "shaderLibrary": { "type": "string", "default": "shaders", "description": "Path to the shader package library directory. Relative paths are resolved from the process/repo working location." }, "serverPort": { "type": "integer", "minimum": 1, "maximum": 65535, "default": 8080, "description": "Preferred HTTP control server port." }, "oscBindAddress": { "type": "string", "default": "0.0.0.0", "description": "OSC bind address reserved for the control surface. The current native host reports this through an OSC status stub but does not start the UDP listener yet." }, "oscPort": { "type": "integer", "minimum": 0, "maximum": 65535, "default": 9000, "description": "OSC UDP port reserved for the control surface. Use 0 to mark the OSC stub disabled." }, "oscSmoothing": { "type": "number", "minimum": 0, "default": 0.18, "description": "Reserved OSC smoothing amount reported through the OSC status stub." }, "input": { "$ref": "#/$defs/input" }, "output": { "$ref": "#/$defs/output" }, "windowOutput": { "$ref": "#/$defs/windowOutput" }, "colorPipeline": { "$ref": "#/$defs/colorPipeline" }, "autoReload": { "type": "boolean", "default": true, "description": "When true, the runtime control layer may automatically rescan/reload shader packages when requested by the app flow." }, "maxTemporalHistoryFrames": { "type": "integer", "minimum": 0, "default": 12, "description": "Maximum temporal history frames exposed to shaders that request history." }, "previewEnabled": { "type": "boolean", "default": false, "description": "Starts the optional preview window on its own thread." }, "previewFps": { "type": "number", "exclusiveMinimum": 0, "default": 59.94, "description": "Target repaint rate for the optional preview window. It does not change render/output cadence." }, "runtimeShaderId": { "type": "string", "default": "", "description": "Optional startup shader package id used only when no saved runtime layer stack is restored. Leave empty to keep the simple fallback renderer until layers are added or restored." } }, "required": [ "shaderLibrary", "serverPort", "input", "output" ], "$defs": { "inputBackend": { "type": "string", "enum": [ "decklink", "ndi", "window", "fullscreen", "borderless", "none", "disabled", "off" ] }, "outputBackend": { "type": "string", "enum": [ "decklink", "ndi", "none", "disabled", "off" ] }, "resolution": { "type": "string", "enum": [ "720p", "1080i", "1080p", "2160p", "4k", "uhd" ] }, "frameRate": { "type": "string", "enum": [ "23.98", "24", "25", "29.97", "30", "50", "59.94", "60" ] }, "input": { "type": "object", "additionalProperties": false, "description": "Video input backend configuration. DeckLink uses the configured resolution/frameRate as a capture mode. NDI adapts to the received source shape and logs if it differs from these expected values.", "properties": { "backend": { "$ref": "#/$defs/inputBackend", "default": "decklink", "description": "Input backend. Use 'decklink' for Blackmagic capture, 'ndi' for NDI receive, or 'none'/'disabled'/'off' for black fallback input." }, "device": { "type": "string", "default": "default", "description": "Input device/source selector. DeckLink currently uses 'default'. NDI accepts 'default'/'auto' for the first discovered source or an exact NDI source name." }, "resolution": { "$ref": "#/$defs/resolution", "default": "1080p", "description": "Expected input resolution/mode. For NDI this is advisory only; received source dimensions are used." }, "frameRate": { "$ref": "#/$defs/frameRate", "default": "59.94", "description": "Expected input frame rate. DeckLink uses this to resolve the hardware mode; NDI currently treats it as an expectation for logging/state." } }, "required": [ "backend", "device", "resolution", "frameRate" ] }, "output": { "type": "object", "additionalProperties": false, "description": "Video output backend configuration.", "properties": { "backend": { "$ref": "#/$defs/outputBackend", "default": "decklink", "description": "Output backend. Use 'decklink' for Blackmagic playout, 'ndi' for NDI send, or 'none'/'disabled'/'off' to disable scheduled output." }, "device": { "type": "string", "default": "default", "description": "Output device selector. DeckLink currently uses the first compatible/default output device. NDI uses this as the advertised sender name; 'default' becomes 'Render Cadence'." }, "resolution": { "$ref": "#/$defs/resolution", "default": "1080p", "description": "Output render and video mode resolution." }, "frameRate": { "$ref": "#/$defs/frameRate", "default": "59.94", "description": "Output render cadence and video mode frame rate." }, "pixelFormat": { "type": "string", "enum": [ "auto", "bgra8", "uyvy8" ], "default": "auto", "description": "Requested system-memory output pixel format. Auto uses UYVY8 for DeckLink/NDI unless Output alpha is enabled, then BGRA8." }, "keying": { "type": "object", "additionalProperties": false, "description": "Output alpha options. The control UI exposes these as a single Output alpha control.", "properties": { "external": { "type": "boolean", "default": false, "description": "DeckLink external-keyer backing field. The control UI only writes this true for DeckLink output." }, "alphaRequired": { "type": "boolean", "default": false, "description": "General output alpha request. When true, automatic output pixel-format selection uses an alpha-carrying system-frame format." } }, "required": [ "external", "alphaRequired" ] } }, "required": [ "backend", "device", "resolution", "frameRate" ] }, "windowOutput": { "type": "object", "additionalProperties": false, "description": "Reserved settings for a future full-resolution/full-frame-rate borderless or fullscreen video output backend. These are not used by the preview window.", "properties": { "fullscreen": { "type": "boolean", "default": true, "description": "When the future window backend is implemented, request exclusive/fullscreen-style presentation." }, "borderless": { "type": "boolean", "default": true, "description": "When true, the future window backend should create a borderless output window." }, "display": { "type": "string", "default": "default", "description": "Display/monitor selector for the future window backend." }, "x": { "type": "integer", "default": 0, "description": "Window X position used when fullscreen is false or when a backend needs explicit placement." }, "y": { "type": "integer", "default": 0, "description": "Window Y position used when fullscreen is false or when a backend needs explicit placement." }, "width": { "type": "integer", "minimum": 0, "default": 0, "description": "Optional window width override. Zero means use output resolution." }, "height": { "type": "integer", "minimum": 0, "default": 0, "description": "Optional window height override. Zero means use output resolution." }, "vsync": { "type": "boolean", "default": true, "description": "Presentation sync request for the future window backend." }, "allowTearing": { "type": "boolean", "default": false, "description": "Allow tearing for the future window backend when the graphics API and OS support it." } } }, "colorPipeline": { "type": "object", "additionalProperties": false, "description": "Reserved color-management settings for a future OCIO-backed linear RGBA16F render pipeline.", "properties": { "ocioEnabled": { "type": "boolean", "default": false, "description": "Enable future OpenColorIO transforms. Currently parsed and reported only." }, "ocioConfig": { "type": "string", "default": "", "description": "Path to an OCIO config file or package-relative config identifier." }, "inputColorSpace": { "type": "string", "default": "scene_linear", "description": "Input/video color space to convert from at the input edge." }, "workingColorSpace": { "type": "string", "default": "scene_linear", "description": "Linear working space shader packages should be able to assume." }, "outputColorSpace": { "type": "string", "default": "rec709", "description": "Output transform target color space for scheduled video output." }, "display": { "type": "string", "default": "sRGB", "description": "OCIO display name for preview/window/display transforms." }, "view": { "type": "string", "default": "Rec.709", "description": "OCIO view name for preview/window/display transforms." }, "look": { "type": "string", "default": "", "description": "Optional OCIO look name." }, "exposure": { "type": "number", "default": 0, "description": "Reserved display transform exposure adjustment." }, "gamma": { "type": "number", "exclusiveMinimum": 0, "default": 1, "description": "Reserved display transform gamma adjustment." }, "workingFormat": { "type": "string", "enum": [ "rgba16f", "rgba32f" ], "default": "rgba16f", "description": "Future render target/intermediate working format." }, "linearWorkingSpace": { "type": "boolean", "default": true, "description": "Documents the intended linear-light working pipeline." } } } } }