You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Admins can enable Settings → System → Reverse Proxy Auth to exchange a configured identity header (such as X-Forwarded-User, X-Auth-Request-User, or Cf-Access-Authenticated-User-Email) for standard JWT tokens. (Closes #1644) - Thanks @benjitobz:
Stays disabled until DISPATCHARR_TRUSTED_PROXIES explicitly names the proxy
The proxy must strip client-supplied identity headers before forwarding
Radio Channels in M3U and XC Output
Radio streams and channels are preserved end-to-end through refresh, create-from-stream, auto-sync, M3U, and XC. (Closes #1683) - Thanks @dillardblom:
Streams pick up radio status from the M3U radio attribute or XC stream_type: radio_streams
M3U emits radio="true" and XC get_live_streams returns stream_type: radio_streams from the effective value
Channel editor and batch editor expose a Radio control; auto-synced channels can keep a manual override across refreshes
Upgrading: streams pick up the flag on the next account refresh, and auto-synced channels follow after that. Manually created channels stay TV until you mark them — select them in the channels table and set Radio to Yes in the batch editor (or use the Radio switch on a single channel)
Catch-up on XC M3U Playlists
XC M3U playlists advertise catch-up for players that read EXTINF tags. - Thanks @dillardblom:
Catch-up channels that already report archive in get_live_streams get playlist tags (days capped at the EPG lookback ceiling; the user catch-up setting still applies)
Non-direct playlists use catchup="default" with a {utc} catchup-source on /streaming/timeshift.php (epoch seconds and {duration:60}), so wall-clock placeholders match Dispatcharr's timeshift endpoints; utc= is accepted as an alias for start=
Admin direct=true provider playlists keep catchup="xc" when the resolved URL is XC /live/ form
Plain /output/m3u stays untagged (those stream URLs cannot be rewritten for catch-up)
When catch-up is allowed, XC /live/ M3U headers also advertise catchup-timezone="UTC" (same zone as player_apiserver_info.timezone)
Richer Live Stream Events for Connect
Live-proxy stream events identify which stream stalled or failed over, so webhooks, scripts, and plugins can track unstable providers without scraping logs. (Closes #1564) - Thanks @lukezbihlyj:
channel_buffering, channel_failover, channel_reconnect, channel_error, and stream_switch carry the active stream_id
Switches also carry previous_stream_id, a switch reason, and previous stream name/provider when known
channel_buffering is a Connect subscription event; a buffering timeout that cannot switch emits a single channel_error per stalled stream
🔄 Changes & Improvements
Default Stream Profiles
The locked default stream profile is renamed FFmpeg (command stays ffmpeg) and its parameters are updated for more resilient live remuxing:
Maps every input stream (-map 0) so extra audio, subtitle, and data tracks are kept instead of dropped
Copies codecs as-is; streams ffmpeg cannot remux are written as private data instead of failing to start the stream
Adds -fflags +genpts+discardcorrupt and repeats MPEG-TS PAT/PMT headers so clients recover more cleanly on corrupt or discontinuous input
Probe size and analyze duration stay at ffmpeg defaults
The locked Streamlink profile is renamed the same way and muxes to MPEG-TS when ffmpeg is used, matching the channel buffer. (Closes #237)
Locked stream and output profiles can no longer be edited through the API (name, command, parameters, active state, or lock); the user-agent on a locked stream profile can still be updated
Seeded output profiles that remux audio now copy subtitle PIDs instead of failing to open on channels that carry subtitles. (Fixes #1502) - Thanks @v8eta
DVR Playback While Recording & recording_end Timing
In-progress DVR recordings are served as HLS event playlists, so players that treat an untyped live playlist as a short sliding window can seek across the whole recording while it is still being written. - Thanks @aethewulf11-ops
recording_end now fires after post-processing (not when capture stops), with outcome (success / failed / cancelled), file fields, and scheduled times. (Fixes #1681) - Thanks @v8eta:
Crash-recovery finalize and in-progress cancel emit it too
Branch on outcome / failure_reason (the old interrupted boolean is gone)
Profiles Tables, Playlists & Logging
Stream and output profile tables list locked defaults first, then sort by name
M3U generation and channel list responses do less work, so large playlists and channel lists load more efficiently
Container boot and runtime logs are much quieter (Postgres probes, routine proxy/Redis/plugin startup, and similar noise). - Thanks @nagelm
Fresh-install AIO migrate no longer tries the Redis settings cache before Redis is up; the entrypoint sets DISPATCHARR_SKIP_REDIS_CACHE=1 so settings reads go straight to Postgres and boot stays free of connection-refused warnings
🐛 Bug Fixes
Channels Table & Catch-up Flags
Fixed channels table sort, search, filter, and renumbering ignoring override values, so rows with pinned numbers/names/groups/EPG no longer looked out of order. (Fixes #1630)
Fixed bulk create channels from streams leaving catch-up flags unset until the next account refresh. (Fixes #1542)
Live Proxy, VOD Sessions & Connection Limits
Fixed stopping a channel leaving orphaned child processes from multi-process stream profiles (for example a wrapper with ffmpeg/vlc children). (Fixes #1718)
Fixed a VOD response closed before the body starts leaving its profile slot reserved. (Fixes #1728)
Fixed FFmpeg-based VOD clients (and Emby/Jellyfin via libmpv) minting a new session on every probe and seek, which could return HTTP 503 on single-stream profiles. (Fixes #1472)
Fixed concurrent tunes stealing a live channel owner lock before metadata was written, which could stall or return HTTP 503. (Fixes #1753)
Fixed Server Group connection counters leaking when concurrent streams stop or profiles switch, which could eventually return HTTP 503. (Fixes #1725) - Thanks @sh-k-l
Fixed web preview of Redirect channels colliding with the live Proxy worker or failing when viewers have different allowed M3U profiles. - Thanks @c-riccio
Catch-up Playback
Fixed catch-up fast-forward with Range: bytes=0- restarting at the original position instead of the requested time (affects clients such as Kodi with inputstream.ffmpegdirect). - Thanks @amwalters
Fixed catch-up scrub offsets leaving the cached CDN file incorrectly, so seeks and timestamp restarts stay aligned with the open archive
M3U / XC Refresh & Output
Fixed M3U/XC refreshes marking streams stale (and potentially deleting auto-created channels) when a write batch failed. (Fixes #1715) - Thanks @JonathanAlbarran
Fixed XC get_live_categories returning an empty list for Standard Users who still received live streams under a Channel Profile. (Fixes #1765)
TV Guide, URLs, Redis & Docker
Fixed the TV Guide marking time-only custom dummy events as ended before kickoff. (Fixes #1722)
Fixed absolute URLs baking in the container listen port (for example :9191) when Docker remaps 80:9191 and Host has no port. (Fixes #1654)
Fixed Redis TLS via discrete REDIS_SSL* env vars failing with the bounded connection pool. (Fixes #1709)
Fixed REDIS_URL being ignored when set (including unix sockets). (Fixes #1427) - Thanks @Holbormon
Fixed System → Logs being hidden when Persist Logs to File was on but a live collector process check failed (common on modular installs)
Fixed modular log config/ ownership so the Logs page no longer warns that nothing is running when files are being written
Fixed PostgreSQL failing to start when only the data directory's owner was wrong. (Fixes #1453) - Thanks @JonathanAlbarran
Fixed deleting a locked stream or output profile raising an unhandled API error instead of a clear 400