Files
Strix/webui/CONFIG_GENERATORS.md
T
eduard256 7fd1d78ffa Add dual-stream support for Frigate with optional sub-stream selection
Features:
- Optional sub-stream selection from already discovered streams
- No additional scanning required - reuse existing results
- UI: "Add Sub Stream" button to select secondary stream
- UI: "Remove Sub Stream" button to clear selection
- Smart stream routing in Frigate configs
- Go2RTC: generates _main and _sub stream names
- Frigate: detect on sub (CPU efficient), record on main (quality)
- Frigate: auto-detection of stream resolution
- Object detection: person, car, cat, dog
- Motion-based recording by default
- Live view streams configuration
- Support for any resolution: HD, 4K, 8K+
- Comprehensive documentation with examples
2025-11-06 22:53:50 +03:00

7.6 KiB

Configuration Generators Documentation

This document describes how Strix generates configurations for go2rtc and Frigate with support for main and sub streams.

Go2RTC Generator (webui/web/js/config-generators/go2rtc/index.js)

Purpose

Generates YAML configurations for go2rtc based on discovered camera streams. Supports both single stream and dual-stream (main + sub) configurations.

Stream Naming Convention

Format: <ip_with_underscores>_<suffix>

Examples:

  • Main: 192.168.1.100192_168_1_100_main
  • Sub: 192.168.1.100192_168_1_100_sub
  • Main: 10.0.20.11210_0_20_112_main
  • Sub: 10.0.20.11210_0_20_112_sub

Single Stream Configuration

When only a main stream is selected:

streams:
  '192_168_1_100_main':
    - rtsp://admin:password@192.168.1.100/stream1

Dual Stream Configuration (Main + Sub)

When both main and sub streams are selected:

streams:
  '192_168_1_100_main':
    - rtsp://admin:password@192.168.1.100/live/main

  '192_168_1_100_sub':
    - rtsp://admin:password@192.168.1.100/live/sub

Logic by Stream Type

1. JPEG Snapshots (Special Case)

Static JPEG images require conversion to video stream using FFmpeg.

Generated Config:

streams:
  '10_0_20_112_main':
    - exec:ffmpeg -loglevel quiet -f image2 -loop 1 -framerate 10 -i http://admin:pass@10.0.20.112/snapshot.jpg -c:v libx264 -preset ultrafast -tune zerolatency -g 20 -f rtsp {output}

Parameters:

  • -f image2 -loop 1: Loop single image
  • -framerate 10: 10 fps output
  • -c:v libx264: H264 encoding
  • -preset ultrafast -tune zerolatency: Low latency
  • -g 20: GOP size for keyframes
  • -f rtsp {output}: Output to RTSP (go2rtc internal)

2. All Other Formats (Direct Pass-through)

For RTSP, MJPEG, HLS, HTTP-FLV, HTTP-TS, RTMP - use direct URL. go2rtc has native support for these formats.

Supported Formats:

  • RTSP (rtsp://) - Direct support
  • RTMP (rtmp://) - Direct support
  • MJPEG (http://...mjpeg) - Direct support
  • HLS (http://...m3u8) - Direct support
  • HTTP-FLV (http://...flv) - Direct support
  • HTTP-TS (http://...ts) - Direct support

3. ONVIF Device Endpoints

ONVIF URLs are converted to onvif:// format:

streams:
  '192_168_1_100_main':
    - onvif://admin:password@192.168.1.100:80

Frigate Generator (webui/web/js/config-generators/frigate/index.js)

Purpose

Generates unified Frigate + Go2RTC YAML configurations with intelligent stream routing for optimal performance.

Key Features

  • Motion-based recording: Records only when motion is detected
  • Object detection: Tracks person, car, cat, dog
  • Smart stream routing:
    • If sub stream exists → detect on sub (low CPU), record on main (quality)
    • If no sub stream → detect and record on main

Benefits of Dual-Stream Setup

Lower CPU usage: Detection runs on lower resolution sub stream Better quality: Recording uses high resolution main stream Single connection per camera: Go2RTC multiplexes streams Optimal performance: Each task uses appropriate stream quality

Single Stream Configuration (Main Only)

When only main stream is selected, it handles both detection and recording:

mqtt:
  enabled: false

# Global Recording Settings
record:
  enabled: true
  retain:
    days: 7
    mode: motion  # Record only on motion detection

# Go2RTC Configuration (Frigate built-in)
go2rtc:
  streams:
    '192_168_1_100_main':
      - rtsp://admin:password@192.168.1.100/stream1

# Frigate Camera Configuration
cameras:
  camera_192_168_1_100:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/192_168_1_100_main
          input_args: preset-rtsp-restream
          roles:
            - detect
            - record
    objects:
      track:
        - person
        - car
        - cat
        - dog
    record:
      enabled: true

version: 0.16-0

Dual Stream Configuration (Main + Sub)

When both streams are selected, detection uses sub stream and recording uses main stream:

mqtt:
  enabled: false

# Global Recording Settings
record:
  enabled: true
  retain:
    days: 7
    mode: motion  # Record only on motion detection

# Go2RTC Configuration (Frigate built-in)
go2rtc:
  streams:
    '192_168_1_100_main':
      - rtsp://admin:password@192.168.1.100/live/main

    '192_168_1_100_sub':
      - rtsp://admin:password@192.168.1.100/live/sub

# Frigate Camera Configuration
cameras:
  camera_192_168_1_100:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/192_168_1_100_sub
          input_args: preset-rtsp-restream
          roles:
            - detect
        - path: rtsp://127.0.0.1:8554/192_168_1_100_main
          input_args: preset-rtsp-restream
          roles:
            - record
    live:
      streams:
        Main Stream: 192_168_1_100_main    # HD для просмотра
        Sub Stream: 192_168_1_100_sub      # Низкое разрешение (опционально)
    objects:
      track:
        - person
        - car
        - cat
        - dog
    record:
      enabled: true

version: 0.16-0

Why Sub Stream for Detection?

CPU Efficiency: Processing lower resolution (typically 352x288 or 640x480) instead of HD/4K Faster Inference: ML model runs faster on smaller resolution Sufficient Accuracy: Object detection doesn't need Full HD or 4K Quality Recording: Main stream at full resolution (HD/4K) saved to disk Auto-detection: Frigate automatically detects stream resolution

Camera Naming Convention

Format: camera_<ip_with_underscores>

Examples:

  • 192.168.1.100camera_192_168_1_100
  • 10.0.20.112camera_10_0_20_112
  • camera.localcamera_camera_local

Object Detection

The generator includes basic object detection for common use cases:

  • person - Human detection
  • car - Vehicle detection
  • cat - Cat detection
  • dog - Dog detection

To add more objects, edit the generated config and add items from Frigate's object list.

Recording Mode

Mode: motion (Default)

  • Records only when motion is detected
  • Saves disk space
  • May miss the start of an event

To enable 24/7 recording, change to:

record:
  enabled: true
  retain:
    days: 7
    mode: all  # Continuous recording

Workflow

Stream Discovery
      ↓
User selects Main Stream
      ↓
Config generated (main only)
      ↓
┌─────────────────────┐
│ User clicks         │
│ "Add Sub Stream"    │
└──────────┬──────────┘
           ↓
User selects Sub Stream from existing results
           ↓
Config regenerated (main + sub with optimized routing)

Key Principles

  1. No additional scanning: Sub stream is selected from already discovered streams
  2. Intelligent routing: Sub for detect, main for record (when both available)
  3. Simplicity first: Use direct URLs whenever possible
  4. Native support: Leverage go2rtc's built-in format support
  5. Special cases only: Only use exec:ffmpeg for JPEG snapshots
  6. Motion-based recording: Save disk space by default

Benefits of This Approach

Better performance: Optimal stream selection for each task Lower CPU usage: Detection on lower resolution when sub stream available Quality recordings: Full resolution saved to disk User flexibility: Optional sub stream - not required No re-scanning: Reuses already discovered streams Disk space efficiency: Motion-based recording by default