Skip to main content

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.

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.8.0.tar.gz (124.4 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.8.0-py3-none-any.whl (48.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for conductarr-2.8.0.tar.gz
Algorithm Hash digest
SHA256 9d772d5615ff3accd86dca30fb00e62f0f86b5e88ff8b7e55bdfab5bc594f310
MD5 14e8fd4ad76b31fa12ef6c2faa9cf0c9
BLAKE2b-256 8733400bac2c140c5c7c2de0a79c0f127354a2e180398dc9bba63785d5c70305

See more details on using hashes here.

Provenance

The following attestation bundles were made for conductarr-2.8.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.8.0-py3-none-any.whl.

File metadata

  • Download URL: conductarr-2.8.0-py3-none-any.whl
  • Upload date:
  • Size: 48.8 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.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b9f89105fa8e4bb5caa66830c13f38843b2add15043506317954fde92862c4c
MD5 7ea30c42dc37fd314f65c4eee712c915
BLAKE2b-256 e1c045d78b5d794692aa59f6afee5a420c7a9710f658e0b7fdd3231e24f98711

See more details on using hashes here.

Provenance

The following attestation bundles were made for conductarr-2.8.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.

Release history Release notifications | RSS feed

This release

2.8.0 This release

2 files

2.7.0

2 files

2.6.1

2 files

2.6.0

2 files

2.5.0

2 files

2.4.0

2 files

2.3.0

2 files

2.2.0

2 files

2.1.0

2 files

2.0.0

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

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