Phase 3: Automation Engine
Status: ⏳ In Development
Multi-stage pipeline transforming requests into downloaded, organized media in Plex.
Pipeline
Request → search_indexers → rank_results → download_torrent
→ monitor_download → process_audiobook → update_plex
Job Types
- search_indexers - Search Prowlarr for torrents
- rank_results - Apply ranking algorithm, select best
- download_torrent - Add to download client (qBittorrent/Transmission/SABnzbd)
- monitor_download - Poll progress (10s intervals)
- process_audiobook - Organize files to media directory
- update_plex - Trigger scan, fuzzy match
Automatic searches keep the ranked candidate list. If Prowlarr returns HTTP 429 or 5xx while grabbing the selected release, download_torrent attributes the error to the indexer/source and falls through to the next release. When all candidates have temporary grab failures, Bull retries the job with backoff.
Integration Points
Indexers: Prowlarr (primary), Jackett (fallback) Download Clients: qBittorrent or Transmission (torrent), SABnzbd (usenet) — details Media Server: Plex (scan + match)
Job Queue (Bull)
- Redis-backed for persistence
- Retry: 3 attempts, exponential backoff (2s, 4s, 8s)
- Priorities: High (10), Medium (5), Low (1)
- Concurrency: 3 concurrent per type
- Jobs survive app restarts
Config Keys
Prowlarr: indexer.type=prowlarr, indexer.prowlarr_url, indexer.prowlarr_api_key
qBittorrent: download_client.type=qbittorrent, download_client.qbittorrent_url/username/password
Paths: paths.download_dir, paths.media_dir
Related Docs
- Prowlarr
- Download Clients - Multi-client management, protocol routing
- qBittorrent
- SABnzbd
- Ranking Algorithm
- File Organization
- Plex Integration