Watchdog1.x
Playback failover, stall failover, and size-variant retention when a release cannot be served.
Playback timeline since 1.4.3
Section titled “Playback timeline since 1.4.3”The Watchdog page groups attempts by playback click, not by title. Separate requests for the same title remain separate. Completed groups start collapsed; expand a group to inspect candidate outcomes, durations, sizes, indexers, providers, and full failure reasons. In-flight groups start expanded. Missing indexer information is explicitly shown as unavailable.
Failover
Section titled “Failover”| Setting | What it does |
|---|---|
Enable failover watchdogplay.watchdog-enabled |
Off = single release (legacy). Default on. |
Total budget (seconds)play.total-budget-seconds |
Hard ceiling 3–180. Default 30. |
Hedge delay (seconds)play.hedge-delay-seconds |
Start backups if primary is slow (1–30). Default 3. |
Parallel candidates per batchplay.max-candidates |
1–10. Default 3. |
Total candidates per requestplay.max-attempts |
1–200. Default 10. |
Verify modeplay.verify-mode |
stat / body / none. Default none. |
Negative-cache TTL (minutes)play.candidate-negative-cache-minutes |
Skip recently failed candidates (1–1440). Default 5. |
Search link lifetime (hours) since 0.8.0play.resolution-cache-ttl-hours |
Play links in search results (1–720). Falls back to the legacy RESOLUTION_CACHE_TTL_HOURS env var. Default 168. |
Prefer releases with subtitles on failoverplay.prefer-subtitles |
Reorder only. Default on. |
Stall failover
Section titled “Stall failover”| Setting | What it does |
|---|---|
Enable stall failovergrab.stall-failover-enabled |
Requires watchdog on. Default on. |
Stall window (seconds)grab.stall-failover-window-seconds |
No progress → set aside (2–60). Default 2. |
Per-candidate ceiling (seconds)grab.stall-failover-ceiling-seconds |
Max time before moving on (5–120). Default 5. |
Variants
Section titled “Variants”| Setting | What it does |
|---|---|
Modevariants.mode |
off / smart / collect-all. Default off. |
Size tolerance (%)variants.tolerance-pct |
Smart only (0–100). Default 25. |
Max copies per groupvariants.max-per-group |
0–50; 0 = unlimited. Default 3. |
Selection strategyvariants.replay-strategy |
closest-to-click / largest / smallest. Default closest-to-click. |
Fallback to closest existing on fetch failurevariants.fallback-on-failure |
Serve the closest existing copy. Default on. |
Eviction strategyvariants.eviction-strategy |
lru / largest-first / smallest-first / never. Default lru. |
Active-use grace (seconds)variants.eviction-active-grace-seconds |
Skip eviction if recently used (0–300). Default 60. |
No UI (headless only) since 1.2.0variants.segment-donors-enabled |
Borrow equivalent MessageIds from same-group copies. Default on. |
No UI (headless only) since 1.2.0variants.segment-donors-max-siblings |
Newest completed copies considered (0–10). Default 3. |
No UI (headless only) since 1.2.0variants.segment-donors-max-per-segment |
Cap including intra-NZB fallbacks (1–32). Default 6. |
Segment donors require a content-grouped sibling (profile-play, variants, or retry flows). Plain Sonarr/Radarr SAB adds never set a group key, so they do not donate or receive donors. Donation only happens between same-segmentation postings whose subject filenames match; obfuscated posts (unparseable names) do not match. An existing damaged item gains donors when a new same-group copy completes.