Configuration Reference

All settings are managed through the web UI at http://YOUR_SERVER_IP:9705 and persisted as JSON files under /config/. No manual file editing is required for normal use.

Per-App Hunt Settings

Each connected app (Sonarr, Radarr, Lidarr, Readarr, Whisparr) has its own settings page. Go to Settings → [App Name] to configure these.

Setting Default Description
API URL Base URL of the app, e.g. http://10.0.0.5:8989. No trailing slash.
API Key Found in the app under Settings → General → Security → API Key.
Hunt Missing Items 1 Number of missing items to search for per cycle. Increase gradually once you know your indexer can handle the load.
Hunt Upgrade Items 1 Number of below-cutoff items to search for quality upgrades per cycle.
Sleep Duration 900 Seconds to wait between cycles. Lower values hunt more frequently but put more load on your indexers.
Monitored Only Enabled When enabled, only items marked as monitored in the app are processed.
Skip Future Items Enabled Skips items whose release date is in the future, avoiding unnecessary searches.
Skip Series/Movie Refresh Enabled Skips metadata refresh before searching, reducing disk I/O and database load significantly.
Minimum Download Queue Size 0 Pause hunting when the download queue reaches this size. Set to 0 to disable the check.
Hourly API Cap 0 Maximum number of API search calls per hour. Set to 0 for no cap. Helps avoid indexer rate limits.
State Reset Interval 168 Hours before processed item state is cleared so items can be re-hunted. Default is 7 days.
Random Selection Enabled Process items in random order rather than sequentially. Recommended to distribute searches evenly across your library.
Debug Mode Disabled Logs detailed API responses. Enable temporarily when troubleshooting a connection issue, then disable again.

General Settings

Found under Settings → General. These apply globally across all apps.

Setting Default Description
API Timeout 120 Seconds before an outbound API call to an Arr app times out. Increase if your apps are slow to respond.
Command Wait Delay 1 Seconds between polling attempts when waiting for an Arr command to complete.
Command Wait Attempts 600 Maximum number of poll attempts before declaring a command timed out (600 × 1s = 10 minutes).

Authentication

Seekarr supports three authentication modes, configured under Settings → Authentication.

Mode Use case
Standard Login Username and password required for every session. Recommended default.
Local Network Bypass Requests from private (RFC 1918) IP addresses skip authentication. Use only when Seekarr is directly reachable on a trusted LAN — not behind a reverse proxy.
No Login Authentication is disabled entirely. Suitable only for fully isolated private networks or when Seekarr sits behind a reverse proxy that handles auth itself.

Two-Factor Authentication (2FA)

TOTP-based 2FA can be enabled from your user profile after logging in. You will need an authenticator app such as Google Authenticator, Authy, or any standard TOTP client.

Password Reset

If you forget your password, delete /config/user/credentials.json and restart the container. You will be prompted to create a new account on next visit.

Reverse Proxy

When running Seekarr behind Nginx, Traefik, Caddy, or another reverse proxy, set the TRUSTED_PROXIES environment variable so that forwarded headers are trusted correctly.

Value Meaning
* Trust any upstream. Simplest option for single-proxy LAN setups.
192.168.1.10 Trust a specific proxy IP only.
10.0.1.5,192.168.1.0/24 Comma-separated list of IPs and/or CIDR ranges. Use for load-balanced or multi-proxy setups.

When TRUSTED_PROXIES is set, Seekarr will:

  • Trust X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host, and X-Forwarded-Prefix headers from matching upstream IPs only.
  • Strip forwarded headers arriving from untrusted connections to prevent spoofing.
  • Set the Secure flag on the session cookie so browsers send it only over HTTPS.
  • Honour X-Forwarded-Prefix for subpath deployments (e.g. serving Seekarr at /seekarr).

Do not set TRUSTED_PROXIES when Seekarr is directly internet-facing.

Nginx

location /seekarr/ {
    proxy_pass         http://seekarr:9705/;
    proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto  $scheme;
    proxy_set_header   X-Forwarded-Host   $host;
    proxy_set_header   X-Forwarded-Prefix /seekarr;
    proxy_set_header   Host               $host;
}

And in your docker-compose.yml:

environment:
  - TRUSTED_PROXIES=192.168.1.10   # your Nginx container's IP

Caddy

Caddy handles TLS automatically. Add a block to your Caddyfile:

your.domain.com {
    handle /seekarr/* {
        uri strip_prefix /seekarr
        reverse_proxy seekarr:9705 {
            header_up X-Forwarded-For {remote_host}
            header_up X-Forwarded-Proto {scheme}
            header_up X-Forwarded-Host {host}
            header_up X-Forwarded-Prefix /seekarr
        }
    }
}

Set TRUSTED_PROXIES to the Caddy container's IP (or * if Caddy and Seekarr share a Docker network):

environment:
  - TRUSTED_PROXIES=*

Traefik

Add labels to the Seekarr service in docker-compose.yml. Replace your.domain.com and adjust the entrypoints name (websecure) to match your Traefik config:

services:
  seekarr:
    image: ghcr.io/diybits/seekarr:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.seekarr.rule=Host(`your.domain.com`) && PathPrefix(`/seekarr`)"
      - "traefik.http.routers.seekarr.entrypoints=websecure"
      - "traefik.http.routers.seekarr.tls.certresolver=letsencrypt"
      - "traefik.http.middlewares.seekarr-strip.stripprefix.prefixes=/seekarr"
      - "traefik.http.routers.seekarr.middlewares=seekarr-strip"
      - "traefik.http.services.seekarr.loadbalancer.server.port=9705"
    environment:
      - TRUSTED_PROXIES=*   # Traefik runs in the same Docker network

Traefik forwards X-Forwarded-For and X-Forwarded-Proto automatically. The stripprefix middleware removes /seekarr before the request reaches Seekarr, and X-Forwarded-Prefix is set so Seekarr generates correct redirect URLs.

Nginx Proxy Manager

Nginx Proxy Manager (NPM) is a GUI wrapper around Nginx. No config files are needed — everything is done through the web UI.

  1. In NPM, go to Proxy Hosts → Add Proxy Host.
  2. Set Domain Names to your hostname (e.g. seekarr.home.lan).
  3. Set Scheme to http, Forward Hostname/IP to seekarr (Docker service name or IP), and Forward Port to 9705.
  4. Enable Websockets Support (Seekarr uses long-polling for live updates).
  5. On the SSL tab, request a Let's Encrypt certificate and enable Force SSL.
  6. On the Advanced tab, paste the following custom Nginx snippet to forward the required headers:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host $host;

Then set TRUSTED_PROXIES to the NPM container's IP (find it with docker inspect npm | grep IPAddress), or use * if NPM and Seekarr are on the same Docker network:

environment:
  - TRUSTED_PROXIES=*

Note: NPM does not support subpath deployments (/seekarr prefix) through the GUI. If you need Seekarr at a subpath, use Nginx or Caddy directly.

Self-Signed Certificates

If your *Arr applications use self-signed TLS certificates, Seekarr will refuse the connection by default because the certificate cannot be verified against a trusted CA. There are three ways to handle this:

Option Where to configure Trade-off
Custom CA bundle (recommended) Settings → General → Custom CA Bundle Path Full certificate validation against your own CA. Most secure.
Disable SSL verify Settings → General → Enable SSL Verify (toggle off) Skips all certificate checks. Simple, but leaves connections open to MitM attacks on untrusted networks.
Mount cert into container trust store Docker volume / bind mount System-level trust — works for all Python SSL calls, not just Seekarr's own HTTP client.

Option 1 — Custom CA bundle path

Export your CA certificate as a PEM file, place it somewhere inside the /config volume, then enter the path in Settings → General → Custom CA Bundle Path.

Example — if your CA cert is at /your-host-path/seekarr/certs/ca.crt on the host:

# docker-compose.yml
services:
  seekarr:
    volumes:
      - /your-host-path/seekarr:/config

Inside the container the cert is at /config/certs/ca.crt. Set that as the CA Bundle Path. Seekarr will use it for all *Arr API calls without touching the system trust store.

The path can point to a single PEM file or a directory of PEM files (OpenSSL c_rehash format).

Option 2 — Disable SSL verification

In Settings → General, turn off the Enable SSL Verify toggle. This disables certificate checking for all outbound *Arr API calls. Only use this on fully trusted private networks.

Note: if a Custom CA Bundle Path is set, it takes precedence over this toggle — the toggle only applies when the path field is blank.

Option 3 — Mount cert into the container trust store

This makes the CA trusted system-wide inside the container. Add a bind mount that drops your CA cert into the system CA directory:

# docker-compose.yml
services:
  seekarr:
    volumes:
      - /your-host-path/seekarr:/config
      - /path/to/your/ca.crt:/usr/local/share/ca-certificates/my-ca.crt:ro

Then rebuild or restart the container with the update-ca-certificates command baked in, or use an entrypoint script that runs it on start. This approach is more involved but makes the cert available to any tool inside the container, not just Seekarr.

Environment Variables

These variables are set at container start time and cannot be changed from the web UI.

Variable Default Description
TZ UTC Timezone for log timestamps, e.g. America/New_York.
TRUSTED_PROXIES Comma-separated proxy IPs/CIDRs, or *. Required when running behind a reverse proxy.
SECRET_KEY auto-generated Flask session signing key. If not set, a random key is generated and stored at /config/secret_key on first start. Supply a fixed value to keep sessions valid across key file deletions.
DEBUG Set to true to enable Flask debug mode and verbose logging. Not recommended in production.

Config File Layout

Settings are stored in the /config volume. You should not need to edit these files directly, but this is useful for troubleshooting.

/config/
  sonarr.json          # Sonarr connection and hunt settings
  radarr.json          # Radarr connection and hunt settings
  lidarr.json          # Lidarr connection and hunt settings
  readarr.json         # Readarr connection and hunt settings
  whisparr.json        # Whisparr connection and hunt settings
  general.json         # Global settings (timeouts, debug mode)
  user/
    credentials.json   # Hashed password and 2FA secret
  state/
    sonarr/            # IDs of already-processed Sonarr items
    radarr/
    ...
  stateful/            # Extended stateful item management
  scheduler/
    schedule.json      # Scheduled action definitions
  logs/                # Application log files
  sessions.json        # Active login sessions (persisted across restarts)
  secret_key           # Auto-generated Flask session key