Skip to content

Release history

Rangarr releases

Automate media searches across the *arr stack

All releases

20 shown

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)
v0.7.0 New feature
⚠ Upgrade required
  • Set `interleave_instances: true` to interleave allocated items across instances instead of executing per-instance batches sequentially
Notable features
  • Global weighted round-robin dealer for search slot allocation across all active instances
  • Unlimited batch sizes now distribute items from all instances in weighted round-robin order
Full changelog

Changed

  • Global search slot allocation: Rangarr now uses a centralized weighted round-robin "dealer" to distribute search slots across all active instances rather than processing each instance independently. The search cycle runs as a three-stage pipeline:

    1. Collect — every instance reports its full candidate list (missing and upgrade items separately).
    2. Allocate — a global slot budget is dealt out across all instances using weighted round-robin, automatically redistributing any slots freed up by instances with empty backlogs.
    3. Execute — the final queue runs all of one instance's allocated items before moving to the next, with the configured stagger between each search. Set interleave_instances: true to interleave items across all instances in round-robin order instead.

    Previously, each instance was processed sequentially to completion before the next began. The new behavior means search pressure is spread evenly across all instances and their shared indexers throughout the cycle rather than concentrated in bursts per instance.

  • Unlimited mode now distributes across instances. When missing_batch_size or upgrade_batch_size is -1, items from all instances are returned in weighted round-robin order rather than instance-by-instance. The total number of items searched is unchanged.

v0.6.3 Bug fix

Fixed sorting and interleaving of Sonarr season pack searches according to search_order.

Full changelog

Fixed

  • Sorting and interleaving of Sonarr season pack searches are now handled correctly. Season pack items and individual episode items are sorted according to search_order and properly interleaved before being dispatched. (#52)
v0.6.2 Bug fix

Fixed supplemental upgrade pass to skip unmonitored items and improved fallback search for airing seasons.

Full changelog

Fixed

  • The supplemental upgrade pass now skips unmonitored items. Unmonitored movies, series, and individual episodes are excluded before scoring, matching the behavior already applied to the wanted/cutoff and wanted/missing passes. (#36)
  • When season_packs: true, Rangarr now falls back to individual episode searches for seasons that are still airing, instead of skipping them entirely. Missing or upgrade-eligible episodes in currently airing seasons are searched via EpisodeSearch rather than a SeasonSearch that would never find a complete pack. (#36)
v0.6.1 Bug fix

Fixed Rangarr to pass `monitored=true` for *arr searches, skip unfinished seasons in season packs, and retry unreachable instances up to three times.

Full changelog

Fixed

  • Rangarr now explicitly passes monitored=true to the wanted/missing and wanted/cutoff endpoints for all *arr clients. Some API versions returned unmonitored items by default, causing Rangarr to search for media the user had deliberately unmonitored. (#36)
  • Season pack searches now skip seasons that have not finished airing. When season_packs: true, Rangarr queries Sonarr for each season's nextAiring date and skips any season with upcoming episodes, avoiding pointless searches for incomplete season packs. (#35)
  • Rangarr now retries each configured *arr instance up to 3 times (10 seconds between attempts) on startup before dropping an unreachable instance. Instances that fail all 3 attempts are excluded from the current session; instances that succeed are kept. This prevents a slow-starting Docker container from causing a failed first cycle and a full-interval wait. (#7)
v0.6.0 New feature
Notable features
  • Supplemental search pass for Radarr and Sonarr when customFormatScore < profile's cutoffFormatScore, respecting upgrade_batch_size, retry_interval_days, and tag filters
Full changelog

Added

  • Upgrade searches now include a supplemental pass for Radarr and Sonarr that finds items where customFormatScore is below the profile's cutoffFormatScore. *arr's Cutoff Unmet endpoint silently omits these items even though they are eligible for a better release. The supplemental results share the same upgrade_batch_size limit, retry_interval_days, and tag filters as standard cutoff upgrades. Lidarr is unaffected — the supplemental pass is a no-op for Lidarr instances.
v0.5.6 Bug fix

Sorting is now performed client‑side after fetching all records.

Full changelog

Fixed

  • Sorting is now applied client-side after fetching all records, replacing the previous approach of passing sort parameters to the *arr API. This ensures consistent ordering across all search_order modes.
v0.5.5 New feature
Notable features
  • `active_hours` global configuration restricts search execution to a defined time window
Full changelog

Added

  • active_hours global setting to restrict searches to a configured time window, sleeping until the window opens when a cycle falls outside it.
v0.5.0 Bug fix
Notable features
  • Added global settings include_tags and exclude_tags for search filtering
Full changelog

Added

  • include_tags and exclude_tags global settings to filter searches by *arr tags.

Fixed

  • Season packs: missing_batch_size and upgrade_batch_size are now enforced when season_packs: true is set on a Sonarr instance. Previously these limits were ignored and all eligible seasons were collected unconditionally.
v0.4.0 Bug fix
⚠ Upgrade required
  • Warns when clients connect over HTTP instead of HTTPS
  • Ensures `stagger_interval_seconds` defaults to at least 1
Notable features
  • Support for season packs in Sonarr
  • Project roadmap added to ROADMAP.md
  • Enforce YAML style with yamllint
Full changelog

Added

  • Support for season packs in Sonarr (#15)
  • Project roadmap at ROADMAP.md (#14)
  • "Ranger the Pig" to README.md
  • Enforce yaml style with yamllint (#19)

Changed

  • Warn if clients connect using HTTP rather than HTTPS (#18)
  • Ensure stagger_interval_seconds is at least 1 (#16)

Fixed

  • Improve date comparison logic in _is_date_past (#20)
  • Avoid time.tzset() when unavailable (#17)
  • Harden CI workflow with pinned actions and least-privilege permissions (#12)
v0.3.0 New feature
Notable features
  • Configuration values can be supplied through environment variables (e.g., RANGARR_INSTANCE_0_NAME).
  • Default Lidarr weight set to 1 (previously 0.1).
Full changelog

Added

  • Support for providing configuration values through environment variables (e.g. RANGARR_INSTANCE_0_NAME=radarr)
  • Set default weight for Lidarr to 1 (from 0.1).
v0.2.2 Bug fix

Fixed incorrect passing of `includeSeries` in Lidarr and Radarr API calls.

Full changelog

Fixed

  • Lidarr / Radarr API calls no longer incorrectly pass includeSeries (a Sonarr -only parameter)

Changed

  • Documentation updated to include docker run usage and a docker compose yaml example
v0.2.1 Feature
Notable features
  • Support for environment variable expansion (e.g., `${MY_VAR}`) in the configuration file
Changelog

Added

  • Support for environment variable expansion in config file (e.g. ${MY_VAR})
v0.2.0 Breaking risk
⚠ Upgrade required
  • Update any configuration using `missing_batch_size: 0` or `upgrade_batch_size: 0` to `-1` if unlimited behavior is desired.
  • Config validation now rejects values below -1 (e.g., `-2`) for batch size settings.
Breaking changes
  • Batch size semantics changed: `0` now means disabled instead of unlimited; migration required to set missing_batch_size/upgraded_batch_size to `-1` for unlimited behavior.
Notable features
  • Support for disabled batch types (`missing_batch_size: 0`, `upgrade_batch_size: 0`).
  • Support for unlimited batch types (`missing_batch_size: -1`, `upgrade_batch_size: -1`).
  • Per-batch-type disabled logging and startup log now shows "Disabled" or "Unlimited" for batch sizes.
Full changelog

Breaking Changes

  • Batch size semantics changed: 0 now means "disabled" instead of "unlimited"
    • 0 = disabled (skip this batch type entirely — no API calls made)
    • -1 = unlimited (search all available items, weights ignored)
    • N > 0 = limited (search up to N items, distributed by weight)
    • Migration: Change missing_batch_size: 0 to missing_batch_size: -1 for unlimited behavior
    • If you previously used missing_batch_size: 0 for unlimited, update to missing_batch_size: -1

Added

  • Support for disabled batch types (missing_batch_size: 0 or upgrade_batch_size: 0)
  • Support for unlimited batch types (missing_batch_size: -1 or upgrade_batch_size: -1)
  • Per-batch-type disabled logging: separate log messages when only one batch type is disabled
  • Startup log now displays "Disabled" or "Unlimited" for batch sizes (instead of 0 or -1)

Changed

  • Config validation now accepts -1 for missing_batch_size and upgrade_batch_size
  • Config validation rejects values below -1 for batch size settings (e.g. -2 is invalid)
  • When set to unlimited, batch size weights are not applied (each instance gets all items)
  • retry_interval_days still applies in unlimited mode
v0.1.0 Maintenance

Minor fixes and improvements.

Full changelog

Initial beta release of Rangarr. Configuration format and behaviour may change before 1.0.

Added

  • Initial beta release of Rangarr

Beta — feedback welcome: [email protected]