Skip to content

Configuration

o51r15 edited this page Jun 20, 2026 · 9 revisions

All configuration lives in config.yaml. The repo ships a fully annotated config.example.yaml — copy it and edit. Most options are also editable from the Web UI Settings page, which writes back to the same file. The scheduler reloads config.yaml from disk before every scan, so changes take effect on the next cycle without a restart. The one exception is web.port, which requires a restart.


Connections

qbittorrent:
  url: http://192.168.1.100:8080
  username: admin
  password: changeme

arrs:
  sonarr:
    enabled: true
    url: http://192.168.1.100:8989/sonarr     # include the base path if you use one
    api_key: your_api_key
  radarr:
    enabled: true
    url: http://192.168.1.100:7878/radarr
    api_key: your_api_key
  lidarr:
    enabled: false
    url: ~
    api_key: ~
Setting Purpose
qbittorrent.url qBittorrent Web UI URL including port
qbittorrent.username / password qBittorrent Web UI credentials
arrs.<app>.enabled Whether this *arr client is active
arrs.<app>.url The *arr URL, including any base path (e.g. /radarr)
arrs.<app>.api_key Found in the *arr under Settings → General

Rules

Rules decide what counts as a bad torrent. Each rule watches one qBittorrent category and ties it to one *arr app. See Rules for the full breakdown.

rules:
  - name: "TV Bad Extensions"
    category: "tv-sonarr"
    app: sonarr
    conditions:
      match_mode: any
      bad_extensions: [".exe", ".bat", ".msi", ".scr", ".lnk"]
      min_file_size_mb: ~
      bad_filename_patterns: []

Behavior

on_arr_failure: delete        # "delete" or "abort"
poll_interval_seconds: 300
dry_run: false
Setting Purpose
on_arr_failure delete removes the torrent from qBittorrent even if the *arr blocklist call fails; abort skips deletion and queues a retry
poll_interval_seconds How often the scheduler daemon scans (default 300)
dry_run true logs matches but takes no action — ideal for testing a new rule

Retry

retry:
  enabled: true
  max_attempts: 10
  interval_seconds: 600

When an *arr call fails and on_arr_failure is abort, the torrent is queued and retried up to max_attempts times, interval_seconds apart.


Notifications

See Notifications for Pushover setup.

notifications:
  pushover:
    enabled: true
    app_token: your_app_token
    user_key: your_user_key
    notify_on: [action, error, startup, dry_run]
    priority: 0

Prowlarr

Enables indexer health scoring, auto-reorder, and grab attribution. See Prowlarr Indexer Scoring for the full explanation of each weight.

prowlarr:
  enabled: true
  url: http://192.168.1.100:9696/prowlarr     # include base path if used
  api_key: your_api_key
  base_priority: 10
  reorder_interval_hours: 24
  history_window_days: 90
  min_grabs_before_scoring: 10
  scoring:
    response_time_weight: 0.35
    failure_rate_weight: 0.40
    malicious_weight: 0.25
    backoff_penalty: 20
    malicious_penalty_per_hit: 10
Setting Purpose
base_priority Priority number given to the best-scoring torrent indexer; others count up from here. Keep it above your NZB indexers' priority numbers so they stay on top
reorder_interval_hours How often the auto-reorder runs
history_window_days Rolling window for response-time and failure-rate scoring
min_grabs_before_scoring Indexers with fewer history records than this show N/A instead of a score
scoring.* Relative weights for each scoring factor — see Prowlarr Indexer Scoring

Note: The scoring block is preserved when you save from the Settings page even though it has no form fields there. Edit those weights in config.yaml directly.


Web UI

web:
  port: 8585
  scheduler_autostart: false
  auth:
    enabled: false
    username: admin
    password: changeme
Setting Purpose
web.port Web UI port (default 8585). Changing this requires a restart
web.scheduler_autostart true starts the scheduler automatically on launch
web.auth.* HTTP basic auth — see Authentication

Advanced

logging:
  log_file: ./data/inspectarr.log.json
  retention_days: 30
  level: INFO              # set to DEBUG for verbose output

state:
  db_file: ./data/inspectarr.db
Setting Purpose
logging.log_file Path to the JSON Lines event log
logging.retention_days Records and log entries older than this are pruned on startup
logging.level INFO or DEBUG
state.db_file Path to the SQLite database

Clone this wiki locally