frigate/migrations
3ricj e7684eddbf Added substream support, dynamic substream creation, and playback methods for
This change adds first-class adaptive recording playback using main and sub recording variants. Frigate can now store multiple recording variants per camera, expose those variants through the recordings API, and serve variant-specific VOD playlists through routes such as /vod/variant/sub/....

The UI now uses the available recording variants and browser playback capability to choose an appropriate playback source, with a user-selectable Auto, Main, and Sub preference. This is applied across timeline playback, export preview, and object detail playback.

The backend also includes a fallback path for sub playback: when a native sub recording is not available for a requested time range, Frigate can generate a lower-resolution sub recording from the main segment, store it under the standard sub variant, and mark it with transcoded_from_main.

Additional changes include recording metadata for codec, resolution, bitrate, and variant; database migrations for recording variants and generated-sub tracking; tests for variant VOD selection and fallback behavior; improved storage graph sorting; and a small MQTT TLS guard so tls_insecure is only applied when TLS is configured.

Substream Configuration Examples
Record the main stream as the normal full-resolution recording and also record the camera substream as the sub variant:

cameras:
  front_door:
    ffmpeg:
      inputs:
        - path: rtsp://user:password@192.168.1.10:554/main
          roles:
            - record
          record_variant: main
        - path: rtsp://user:password@192.168.1.10:554/sub
          roles:
            - detect
            - record
          record_variant: sub
    detect:
      width: 640
      height: 360
      fps: 5
    record:
      enabled: true
Using go2rtc restreams:

go2rtc:
  streams:
    front_door:
      - rtsp://user:password@192.168.1.10:554/main
    front_door_sub:
      - rtsp://user:password@192.168.1.10:554/sub
cameras:
  front_door:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/front_door
          input_args: preset-rtsp-restream
          roles:
            - record
          record_variant: main
        - path: rtsp://127.0.0.1:8554/front_door_sub
          input_args: preset-rtsp-restream
          roles:
            - detect
            - record
          record_variant: sub
    detect:
      width: 640
      height: 360
      fps: 5
    record:
      enabled: true
If record_variant is omitted on a record input, it defaults to main. Each camera can only use a given recording variant once, so the main and sub recording inputs should use distinct variant names.
2026-04-29 19:05:59 -07:00
..
001_create_events_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
002_add_clip_snapshot.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
003_create_recordings_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
004_add_bbox_region_area.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
005_make_end_time_nullable.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
006_add_motion_active_objects.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
007_add_retain_indefinitely.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
008_add_sub_label.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
009_add_object_filter_ratio.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
010_add_plus_image_id.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
011_update_indexes.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
012_add_segment_size.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
013_create_timeline_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
014_event_updates_for_fp.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
015_event_refactor.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
016_sublabel_increase.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
017_update_indexes.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
018_add_dbfs.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
019_create_regions_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
020_update_index_recordings.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
021_create_previews_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
022_create_review_segment_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
023_add_regions.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
024_create_export_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
025_create_user_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
026_add_notification_tokens.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
027_create_explore_index.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
028_optional_event_thumbnail.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
029_add_user_role.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
030_create_user_review_status.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
031_create_trigger_table.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
032_add_password_changed_at.py Update peewee-migrate to 0.14.x (#21243) 2025-12-13 07:13:04 -07:00
033_create_export_case_table.py Create scaffolding for case management (#21293) 2026-02-26 21:27:56 -07:00
034_add_export_case_to_exports.py Create scaffolding for case management (#21293) 2026-02-26 21:27:56 -07:00
035_add_motion_heatmap.py Improve motion review and add motion search (#22253) 2026-03-05 17:53:48 -06:00
036_add_recording_variants.py Made-with: 2026-03-17 10:46:42 -07:00
037_add_recordings_transcoded_from_main.py Added substream support, dynamic substream creation, and playback methods for 2026-04-29 19:05:59 -07:00