Skip to content

Installation

o51r15 edited this page Aug 25, 2026 · 6 revisions

Inspectarr runs three ways: a web UI with a built-in scheduler daemon (the recommended setup), a systemd service, or a one-shot CLI for manual runs and testing. It's distributed as source and as a prebuilt Docker image.


Requirements

  • Python 3.12+ (only if running from source rather than Docker)
  • qBittorrent with the Web UI enabled (v4.x or v5.x both supported)
  • One or more of: Sonarr v4, Radarr v3, Lidarr v2
  • Prowlarr (optional — required only for indexer scoring and grab attribution)

Docker

Pull the prebuilt image from GHCR:

docker pull ghcr.io/o51r15/inspectarr:latest

A minimal compose file:

services:
  inspectarr:
    container_name: inspectarr
    image: ghcr.io/o51r15/inspectarr:latest
    user: "1000:1000"
    restart: unless-stopped
    ports:
      - "8585:8585"
    volumes:
      - /path/to/config:/app/config.yaml      # your config file
      - /path/to/data:/app/data               # SQLite + JSON log (persistent)
    environment:
      - TZ=America/New_York

Set user to your host UID:GID (run id -u and id -g) so the container can write to mounted volumes. The repo's compose file uses PUID/PGID env vars defaulting to 1000.

Image tags:

Tag What it is
:latest The current release. Recommended.
:v2.0.0 A specific release, pinned.
:dev Built on every push to main. Tracks development; expect rough edges.

Pin to a version tag if you want upgrades to be a deliberate act rather than a docker compose pull.

Start it:

docker compose up -d

The web UI is available at http://your-server:8585. On first launch the scheduler is stopped — configure your connections and rules, confirm they're correct, then start the scheduler from the dashboard.


Bare Python

git clone https://github.com/o51r15/inspectarr.git
cd inspectarr
pip install -r requirements.txt
cp config.example.yaml config.yaml
# edit config.yaml with your URLs, credentials, and rules
python3 web.py

Dependencies are deliberately minimal: requests, pyyaml, and flask. No ORM, no async — SQLite is used through the standard library.


Systemd (auto-start on boot)

An inspectarr.service unit is included in the repo. Copy it, then enable it:

sudo cp inspectarr.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable inspectarr
sudo systemctl start inspectarr

Check status and follow logs:

sudo systemctl status inspectarr
sudo journalctl -u inspectarr -f

Updating

Docker:

docker compose pull && docker compose up -d

Bare Python / systemd:

cd /path/to/inspectarr
git pull
sudo systemctl restart inspectarr

Your data (the data/ directory and config.yaml) is preserved across updates.


Persistent data

Everything Inspectarr needs to remember lives in the data/ directory — mount it as a volume so it survives container recreation.

File Contents
inspectarr.db SQLite: processed hashes, retry queue, run history, indexer stats, grab attribution, inspection records, quarantine holds, model validation results
inspectarr.log.json JSON Lines — one event object per line

A note on *arr base paths

If your Sonarr, Radarr, or Prowlarr instances are served under a base path (for example http://host:7878/radarr rather than http://host:7878), you must include that base path in the URL you configure. The connection test may pass without it because the root API responds, but history lookups — which grab attribution depends on — will silently return nothing. See Troubleshooting.

Clone this wiki locally