# Advanced Video Features

Configure auto video packing, output alignment, video composition, color handling, chroma keying, AI inference, and hardware decoding.

Last validated: 2026-05-05

Use this page when a project needs more than a single camera input and a simple encoded output. These features are still configuration tasks, so they live with the rest of the camera, scene, layout, and stream settings.

## Auto Video Packing

Auto Video Packing lets the Player report which videos are visible and how much screen space they occupy. The Streamer then scales and packs those video sources into the encoded output so small or hidden feeds do not consume full resolution.

Use it when:

-   A Player layout shows several camera feeds and the visible layout changes at runtime.
    
-   The operator UI can show the same source at different sizes.
    
-   The Streamer should avoid sending full-resolution video for feeds that are off-screen or visually small.
    

Configure it from the Player project settings:

Automatic Video Packing

Enables Player-driven packing.

Apply Auto Crop

Takes viewport crop into account when calculating video size. When disabled, Oden sends the full video source and estimates screen occupation from the visible area instead of cropping the source to that area.

Use Fixed Streamer Resolution

Keeps the output resolution fixed instead of allowing dynamic output size.

Fixed Streamer Resolution

The fixed output size used when fixed resolution is enabled.

On the Streamer, the `Output` panel shows the current packed output resolution, maximum Streamer resolution, Player screen resolution, and per-video packing data. When Auto Video Packing is enabled, use `Per Megapixel Bitrate` in [Bitrate Control and Auto Video Packing](stream-settings.md) so bitrate follows the dynamic packed resolution. Prefer auto packing over maintaining separate Streamer scenes only to change camera layouts. The screen analyzer also works through Virtual Cameras that are visible in the Player viewport.

Per-video packing data includes the original resolution, screen occupation, crop percentage, cropped resolution, downscale factor, scale, and scaled resolution. `Downscale` is a priority multiplier from `0.0` to `1.0`; the default `1.0` keeps normal priority, while lower values tell the packer that the source may be reduced more aggressively.

Important limits:

-   Auto packing supports up to 16 video sources.
    
-   Hidden videos are sent at no more than `32x32`.
    
-   Showing the same video several times can make that source consume more output resolution.
    

## Output Alignment

Use `Output Alignment` on the Streamer when several 2D videos must be placed precisely inside the encoded output. Make the `2D Video` entities children of the `Output Alignment` entity.

The entity sends alignment metadata with the stream so the Player can split the incoming encoded texture back into named sub-streams. The Player can receive:

LLTP

The complete encoded output texture.

Stream

A cropped sub-stream corresponding to one aligned video source.

Focus Region Composite

A region-of-interest stream assembled from one or more focus-region sources.

Key settings:

Enabled

Locks the camera to the output-alignment layout. Keep it enabled while streaming or alignment metadata will be wrong.

Snap to Output

Adjusts focus-region placement to avoid encoder artifacts. Keep it enabled when using focus regions.

Auto-Layout

Attempts to place child 2D videos automatically inside the output area.

Id

The sub-stream identifier shown on the Player side.

Position, Scale, Rotation, Mirror

Pixel placement and orientation for each source. Per-source settings appear after a child `2D Video` has an active input source. The output coordinate origin is the upper-left corner. Sources may be placed partly outside the encoded output when a project intentionally crops them. Scale can be edited as pixels or percentage while keeping aspect ratio. Rotation is limited to right-angle rotations, and rotation or mirror settings also affect focus-region placement. Output Alignment affects child `2D Video` entities; other child entity types are not remapped into the encoded output.

Focus regions are useful when one part of a camera needs more detail than the rest. Use one 2D video as the full source and another clone-stream 2D video as the focus source, then tune `Focus Center` and `Focus Size`. Validate every resolution scale used by bandwidth control, because encoder block boundaries can create artifacts at focus-region edges.

## Video Composition and Virtual Cameras

Use `Video Composition` when multiple video inputs should become one larger texture before being cloned or displayed. The composition entity does not display video by itself; clone it into another video input or layout entity.

Common settings:

Resolution

Output texture size.

Background

RGBA background color for empty areas.

Add Source

Adds a source video to the composition. The source behaves like a clone of the selected video source.

Origin

Upper-left pixel position for a source inside the composed texture.

Size

Pixel size for the source inside the composed texture. Preserve aspect ratio unless the project intentionally stretches the image.

Texture preview

Shows the composed texture.

Save Texture as png

Writes the current composed texture to an image file for inspection or support.

Use `Virtual Camera` when a scene view should become a video source. Typical uses are extracting a 2D view from stitched video, rendering a subset of the scene, or creating a camera view that can be cloned into a Player layout.

Virtual Camera settings to check:

Resolution

Output texture size.

Field of View

Camera field of view.

Only Render

Restricts rendering to entities with matching reference names to reduce load.

Set To Current View

Copies the current viewport position, rotation, field of view, and resolution into the virtual camera.

Keep Aspect Ratio

Preserves the configured aspect ratio when the rendered target changes size.

Background

Sets the virtual camera background.

Texture preview and Save Texture

Inspect or export the rendered virtual camera texture.

Move View to Virtual Camera

Moves the viewport to the virtual camera position. It does not change the viewport aspect ratio or field of view.

A Virtual Camera does not display anything by itself. Consume it through a `2D Video`, `Clone Stream`, composition, or plugin workflow.

## Color and Keying

Oden processes video and color internally with high-precision floating point color. Most camera and output color-format defaults are correct, but some sources expose color-standard choices such as BT.601 or BT.709, reduced or full range. Change them only when the source or display path is known to use a different standard. Common YCbCr choices are SD or HD, reduced or full range, with BT.601 usually matching SD sources and BT.709 usually matching HD sources.

Color tools are available on video-oriented entities, including 2D Video and stitched video:

Opacity

Adjusts texture transparency.

Use LUT

Applies a `.cube` 3D lookup table.

Curve

Adjusts contrast and brightness response.

Contrast, Brightness, Gain, Hue, Saturation

Basic color correction.

These controls are post-adjustments in Oden; they do not change camera firmware settings. Use LUTs from grading or calibration tools after basic correction when the same look should be reused across projects. For stitched video, individual per-camera RGB gain controls can be used where exposed to correct camera-to-camera mismatch before applying global corrections.

For multi-camera stitched video, a typical color workflow is:

1.  Synchronize colors between cameras.
    
2.  Make global corrections until the image is neutral.
    
3.  Apply a 3D LUT for the final look.
    

Chroma Key removes a colored backdrop from a video surface. Tune it in this order:

1.  Match the key color to the real backdrop color, including hue.
    
2.  Increase hue and saturation tolerance before increasing value tolerance.
    
3.  Raise `Threshold: Cut` until the backdrop becomes transparent.
    
4.  Adjust `Threshold: Blend` for a smooth edge.
    
5.  Use color correction and `Threshold: Color` to reduce colored fringes on retained objects.
    

Matte and chroma-key settings should be validated on the real camera and lighting setup, not only on a still frame.

## AI Inference

Oden can run neural networks through NVIDIA TensorRT when the build and hardware support it. Supported model formats are ONNX and TensorRT engine files. ONNX models are converted to a device-optimized TensorRT engine at runtime, which can take several minutes.

Requirements:

-   NVIDIA GPU on desktop or Jetson.
    
-   TensorRT available to the Oden process.
    
-   CUDA and cuDNN available when ONNX import/conversion is needed.
    

On Windows, install the TensorRT release supported by the deployed Oden version and make sure the TensorRT `lib` directory is on `PATH`.

Inference settings:

Add Neural Network

Loads an ONNX or TensorRT model.

IO Tensors

Shows input/output tensors and lets you select a video stream as input.

Info

Shows network UUID and runtime duration.

Manually Trigger

Runs inference only when triggered through the plugin API instead of every frame.

Use the plugin API to retrieve inference output. For plugin loading and project deployment details, see [Plugins](plugins.md).

## Hardware Decoding

Oden supports hardware decoding for H.264/AVC, H.265/HEVC, and MJPEG on supported NVIDIA, Intel, and AMD paths. Current GPU drivers matter; install and validate drivers before diagnosing decode behavior.

Hardware decoder settings can appear on supported inputs:

Preferred Decoder

Selects which GPU decodes when the computer has more than one supported GPU. Restart Oden after changing it.

Skip Frame

Drops decoded frames to reduce decoder load. This is mainly useful for MJPEG sources running faster than the needed stream frame rate.

Decode Device

NVIDIA CUDA device ID for NVDEC.

FPS Match

Matches decode cadence to render cadence where available.

Min Queue, Max Queue, Decode Queue

Queue sizes that trade latency against stability.

Max Dec. Surfaces

Number of decode surfaces held by NVDEC. Higher values can improve performance but use more memory.

CUDA Buf. Depth

Extra CUDA buffering when decoding on a non-default device.

For camera-specific hardware decode options, see [Camera Inputs](camera-inputs.md).
