Skip to main content

🎼 Priority-based download queue orchestrator for Radarr, Sonarr & SABnzbd — automatically manages and reorders your download queue across multiple priority tiers.

Project description

Conductarr

PyPI - Version GitHub License GitHub Sponsors

Code Quality Publish Coverage Bugs Vulnerabilities Code Smells Technical Debt

🎼 Priority-based download queue orchestrator for Radarr, Sonarr & SABnzbd — automatically manages and reorders your download queue across multiple priority tiers.


What it does

Conductarr sits between your *arr apps and SABnzbd and enforces a strict priority order on the download queue:

  • Virtual queues — you define named tiers (e.g. user requests, upgrade queue, kometa) each with a priority number and tag-based matchers. Every SABnzbd job is assigned to the highest-matching tier.
  • Automatic reordering — each poll cycle the SABnzbd queue is reordered so that higher-priority tiers always run first. Only one job downloads at a time; everything else is paused.
  • Upgrade scanning — queues marked upgrade: enabled: true automatically search Radarr/Sonarr for candidates that don't yet satisfy your accept_conditions (e.g. missing a custom format or below a score threshold), grab a release, and track it through to completion. A rate-limited cursor ensures candidates are visited round-robin without hammering the APIs.
  • Duplicate prevention — before grabbing a release Conductarr checks both the live SABnzbd queue and the database, so the same movie or episode is never downloaded twice concurrently.

Quick start (Docker Compose)

services:
  conductarr:
    image: ghcr.io/eulemitkeule/conductarr:latest
    container_name: conductarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      UMASK: "022"
      TZ: UTC
      LOG_LEVEL: info
    volumes:
      - /path/to/conductarr/config:/config
    command: conductarr watch

Place a conductarr.yml inside the mounted config directory. A minimal example:

conductarr:
  poll_interval: 15.0

sabnzbd:
  url: http://sabnzbd:8080
  api_key: YOUR_KEY

radarr:
  url: http://radarr:7878
  api_key: YOUR_KEY

sonarr:
  url: http://sonarr:8989
  api_key: YOUR_KEY

queues:
  - name: user_requests
    priority: 100
    matchers:
      - type: tags
        tags: ["request"]

  - name: german_upgrade
    priority: 50
    matchers:
      - type: tags
        tags: ["upgrade-de"]
    upgrade:
      enabled: true
      sources: [radarr, sonarr]
      max_active: 2
      search_interval: 30.0
      accept_conditions:
        - type: custom_format
          name: German DL

  - name: other
    priority: 1
    fallback: true

Tag your Radarr/Sonarr items with the matching tags and Conductarr will automatically place them in the right tier.


Poll loop internals

Every poll_interval seconds the orchestrator runs a single cycle:

  1. Read SABnzbd queue — fetch current slots (silently; no log noise when nothing changes).
  2. Resolve identities — map each nzo_id to a virtual queue using an in-memory cache. On a cache miss, Radarr and Sonarr queues are fetched once for the whole cycle, not once per item.
  3. Handle completions — jobs that disappeared from SABnzbd are marked complete in the database.
  4. Reorder & enforce — slots are sorted by virtual-queue priority and switch() is called only when the order is actually wrong. The top slot is resumed; all other pausable slots are paused.
  5. Fill upgrade slots — for each upgrade-enabled queue that has capacity, the next unprocessed candidate is fetched from the database, checked against live Radarr/Sonarr data, and if still eligible a release is grabbed and added to SABnzbd.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conductarr-2.4.0.tar.gz (113.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

conductarr-2.4.0-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file conductarr-2.4.0.tar.gz.

File metadata

  • Download URL: conductarr-2.4.0.tar.gz
  • Upload date:
  • Size: 113.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for conductarr-2.4.0.tar.gz
Algorithm Hash digest
SHA256 42b2b6bdea857a62368d813f6e05ff43622f18eb099cd89e333106d818edbc22
MD5 05f187879aaa5ed3d3b7aa96d9a63412
BLAKE2b-256 02df9757ccda8e9adc9a2ea933fd17486d6256ba77448ca714431567e0b4579d

See more details on using hashes here.

Provenance

The following attestation bundles were made for conductarr-2.4.0.tar.gz:

Publisher: publish.yml on EuleMitKeule/conductarr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file conductarr-2.4.0-py3-none-any.whl.

File metadata

  • Download URL: conductarr-2.4.0-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for conductarr-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58d023d32d303bf8ffbd0339f56af55d46efbbfaa92cbb3736d3320379a70eee
MD5 3ea251e4a5469e23e64b4c479bd80b9f
BLAKE2b-256 bbc280924e9909322035564b723e7f2d3ca65011614abb523a23db8a1c708beb

See more details on using hashes here.

Provenance

The following attestation bundles were made for conductarr-2.4.0-py3-none-any.whl:

Publisher: publish.yml on EuleMitKeule/conductarr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page