Skip to content

Rangarr

Media Servers

A lightweight orchestration service that automates and staggers media searches across multiple *arr instances (Radarr, Sonarr, Lidarr, Readarr, Whisparr) to keep libraries complete without overloading indexers or hitting API limits.

Python Latest v0.9.0 · 10d ago Security brief →

Features

  • Multi-instance support for Radarr, Sonarr, Lidarr, Readarr, Whisparr v2 and v3
  • Global slot allocation to efficiently distribute search capacity
  • Smart staggering and proportional interleaving to avoid "thundering herd" issues
  • Configurable weighted distribution, season‑pack grouping, independent scheduling, and retry logic

Recent releases

View all 20 releases →
Config change
v0.9.0 Breaking risk
Breaking upgrade

Whisparr type mapping breaking change

v0.7.4 Bug fix
Notable features
  • `interleave_types` setting added to control interleaving of missing and upgrade searches
Full changelog

Added

  • interleave_types setting controls whether missing and upgrade searches are interleaved in the execution queue. When false, all missing items are searched before any upgrade items begin, regardless of the interleave_instances setting. Defaults to true (current behaviour). See the user guide for the full combination reference table.

Fixed

  • Corrected an off-by-one error in the ETA calculation for staggered search batches. The ETA now reflects N - 1 stagger intervals for N items, matching actual sleep behaviour. Single-item batches no longer display a stagger ETA.
v0.7.3 New feature
Notable features
  • `interval_missing` and `interval_upgrade` settings allow independent fetch schedules for missing and upgrade searches, overriding the global `interval` when set (minimum 60 s).
  • `fetch_page_size` default increased to 2000 records per API request (previously 1000), improving performance on large libraries.
Full changelog

Added

  • interval_missing and interval_upgrade settings allow independent fetch schedules for missing and upgrade searches. When set, each overrides the global interval for its respective search type, enabling aggressive polling for missing content alongside a slower upgrade cadence (or vice versa). Both default to null, which falls back to interval. Values must be at least 60 seconds. The cycle-complete log reports which type(s) ran and the next scheduled time for each.
  • fetch_page_size setting controls how many records are fetched per API request when retrieving the wanted/missing and cutoff-unmet lists. Defaults to 2000 (previously hardcoded to 1000). Higher values reduce round trips for large libraries at the cost of a slightly longer per-request time — benchmarked at 38% faster than the previous default on a 12,800-item library. Tune this setting if you have a very large library and the fetch phase is slow.
v0.7.2 Bug fix
Notable features
  • `season_packs` now accepts integer or float thresholds in addition to boolean.
  • ETA displayed on total search batch log line when `stagger_interval_seconds` > 0.
Full changelog

Added

  • season_packs now accepts an integer or float in addition to a boolean. An integer (≥ 1) triggers a SeasonSearch only when at least that many episodes in a season are missing or upgrade-eligible; a float (0.0 < x < 1.0) triggers a SeasonSearch only when the ratio of affected to total monitored episodes meets or exceeds the value. Seasons that don't meet the threshold fall back to individual EpisodeSearch commands. Existing true/false behaviour is unchanged.
  • The total search batch log line now includes an ETA when stagger_interval_seconds is greater than zero. The ETA reflects the total time to complete all searches at the configured stagger rate (e.g. Total search batch: 120 item(s) (1 every 30 seconds, ETA: 1:00:00)).

Fixed

  • Search counter display (1/N, 2/N, …) is now correct across multi-item queues built from multiple instances. Previously the counter could restart or skip values when items from more than one instance were interleaved.
v0.7.1 Bug fix
Notable features
  • `retry_interval_days_missing` and `retry_interval_days_upgrade` settings for independent retry windows
Full changelog

Added

  • retry_interval_days_missing and retry_interval_days_upgrade settings allow independent retry windows for missing and upgrade searches. When set, each overrides the base retry_interval_days for its respective search type, enabling tighter retry pressure for missing content and looser cadence for upgrade polling (or vice versa). Both default to null, which falls back to retry_interval_days.

Fixed

  • Active hours window logging no longer spams the log when the remaining sleep duration is a sub-second fraction. The seconds-until-open calculation now uses ceiling division instead of truncation, ensuring at least one second is always slept. (#61)

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
240
Forks
5
Languages
Python Shell Dockerfile

Install & Platforms

Install via
docker-compose docker

Beta — feedback welcome: [email protected]