Configuration File Reference¶
This comprehensive guide explains every setting in qBitrr's config.toml configuration file.
Configuration File Location¶
Native Installation¶
Docker Installation¶
Mounted from your host at the path specified in your Docker compose/run command.
File Format¶
qBitrr uses TOML (Tom's Obvious, Minimal Language) for configuration.
TOML basics:
# Comments start with #
key = "value"
number = 42
boolean = true
list = ["item1", "item2", "item3"]
[Section]
nested_key = "nested value"
[[ArrayOfTables]]
name = "first"
[[ArrayOfTables]]
name = "second"
Configuration Sections¶
qBitrr's configuration is organized into several sections:
- Settings - Global qBitrr settings
- WebUI - Web interface configuration
- qBit - qBittorrent connection
- Sonarr-* - Sonarr instance configuration
- Radarr-* - Radarr instance configuration
- Lidarr-* - Lidarr instance configuration
Settings Section¶
The [Settings] section contains global configuration that applies to all qBitrr operations.
Complete Settings Example¶
[Settings]
# Internal config schema version - DO NOT MODIFY
ConfigVersion = 3
# Logging
ConsoleLevel = "INFO"
Logging = true
# Paths
CompletedDownloadFolder = "/data/downloads"
FreeSpaceFolder = "/data/downloads"
# Disk space management
FreeSpace = "50G"
AutoPauseResume = true
# Timers
NoInternetSleepTimer = 15
LoopSleepTimer = 5
SearchLoopDelay = -1
# Special categories
FailedCategory = "failed"
RecheckCategory = "recheck"
# Torrent processing
Tagless = false
IgnoreTorrentsYoungerThan = 180
# Network
PingURLS = ["one.one.one.one", "dns.google.com"]
# FFprobe
FFprobeAutoUpdate = true
# Auto-updates
AutoUpdateEnabled = false
AutoUpdateCron = "0 3 * * 0"
# Process management
AutoRestartProcesses = true
MaxProcessRestarts = 5
ProcessRestartWindow = 300
ProcessRestartDelay = 5
ConfigVersion¶
Type: Integer Default: 3 Required: Yes (managed automatically)
Internal configuration schema version. DO NOT MODIFY this value manually. qBitrr uses it to detect when config migrations are needed.
ConsoleLevel¶
Type: String Default: "INFO" Options: CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG, TRACE
Controls logging verbosity. Higher levels include all lower levels.
Level descriptions:
CRITICAL- Only fatal errorsERROR- Errors that need attentionWARNING- Warnings and errorsNOTICE- Important notices, warnings, and errorsINFO- (Recommended) General informationDEBUG- Detailed debugging informationTRACE- Very verbose, traces all operations
Recommendation: Start with INFO. Switch to DEBUG when troubleshooting.
Logging¶
Type: Boolean Default: true
Enable or disable logging to files. When enabled, logs are written to:
- Native:
~/logs/or%USERPROFILE%\logs\ - Docker:
/config/logs/
Log files created:
Main.log- qBitrr main processWebUI.log- Web interfaceRadarr-<name>.log- Per Radarr instanceSonarr-<name>.log- Per Sonarr instanceLidarr-<name>.log- Per Lidarr instance
Recommendation: Keep enabled for troubleshooting.
CompletedDownloadFolder¶
Type: String (path) Required: Yes
Path where qBittorrent saves completed downloads. This must match qBittorrent's "Default Save Path" setting.
Finding this path:
- Open qBittorrent
- Go to Tools → Options → Downloads
- Note the Default Save Path
Important:
- Use forward slashes
/(even on Windows) - Don't include trailing slash
- Path must be accessible to qBitrr
- Docker: Must be the path as qBitrr sees it (inside container)
Examples:
# Linux/Docker
CompletedDownloadFolder = "/data/downloads"
# Windows (use forward slashes!)
CompletedDownloadFolder = "D:/Downloads/Complete"
# Network share (Docker)
CompletedDownloadFolder = "/mnt/nas/downloads"
FreeSpace¶
Type: String Default: "-1" (disabled) Format: Number + Unit (K, M, G, T)
Minimum free space to maintain in download directory. When free space drops below this threshold, qBitrr pauses downloads.
Units:
K- KilobytesM- MegabytesG- Gigabytes (recommended)T- Terabytes
Examples:
FreeSpace = "50G" # 50 gigabytes
FreeSpace = "100M" # 100 megabytes
FreeSpace = "1T" # 1 terabyte
FreeSpace = "-1" # Disabled
How it works:
- qBitrr monitors
FreeSpaceFolderevery loop - If free space <
FreeSpacethreshold: - Pauses all downloads
- Keeps seeding active
- Logs warning
- When space frees up:
- Resumes downloads automatically
Recommendation: Set to 10-20% of your disk capacity.
FreeSpaceFolder¶
Type: String (path) Default: Same as CompletedDownloadFolder
Folder to monitor for free space checks. Usually the same as CompletedDownloadFolder.
Use cases for different path:
- Download folder on SSD, monitoring HDD
- Monitoring parent filesystem
- Shared storage with multiple mount points
AutoPauseResume¶
Type: Boolean Default: true
Enable automatic pausing and resuming of torrents. Required for FreeSpace feature to work.
When true:
- qBitrr can pause torrents when disk is full
- qBitrr can resume torrents when space frees up
- Health checks can pause/resume stalled torrents
Recommendation: Keep enabled.
NoInternetSleepTimer¶
Type: Integer (seconds) Default: 15
How long to wait when internet connection is lost before checking again.
Process:
- qBitrr pings
PingURLSto check connectivity - If all pings fail, internet is considered down
- qBitrr sleeps for
NoInternetSleepTimerseconds - Checks again
Recommendation: 15 for quick recovery, 60 for slower connections.
LoopSleepTimer¶
Type: Integer (seconds) Default: 5
Delay between each torrent processing loop. Lower values = more responsive, higher CPU usage.
What happens each loop:
- Check all managed torrents
- Detect stalled/failed downloads
- Process completed torrents
- Trigger imports
- Check disk space
Recommendations:
5- (Default) Balanced3- More responsive10- Lower resource usage1- Very responsive (higher CPU)
SearchLoopDelay¶
Type: Integer (seconds) Default: -1 (uses 30 seconds)
Controls the delay between individual search commands when processing a batch of searches within a single search loop.
How it works: - When set to -1 (default): Uses 30 seconds between each search command - When set to a positive value: Uses that many seconds between each search command - Applies to both missing media searches and request searches (Overseerr/Ombi)
Use cases: - Default (-1): Recommended for most setups - 30 second delay prevents overwhelming indexers - Lower values (5-15): For faster request processing with high-quality indexers - Higher values (60-120): For limited indexer API calls or rate-limited trackers
Example: If you have 10 missing movies to search: - SearchLoopDelay = -1 → 30 seconds between each movie search (5 minutes total) - SearchLoopDelay = 10 → 10 seconds between each movie search (1.7 minutes total) - SearchLoopDelay = 60 → 60 seconds between each movie search (10 minutes total)
Indexer Rate Limits
Setting this too low may trigger indexer rate limits. Most indexers allow 5-10 API calls per second, but spacing searches prevents hitting these limits.
Recommendation: Keep at -1 for the default 30-second delay, or adjust based on your indexer's rate limits.
FailedCategory¶
Type: String Default: "failed"
qBittorrent category for manually marking torrents as failed.
How to use:
- In qBittorrent, move a torrent to this category
- qBitrr detects it on next loop
- qBitrr marks it as failed in Arr
- Triggers re-search (if enabled)
- Removes torrent and files
Use cases:
- Fake/corrupt files
- Wrong content
- Manual intervention needed
RecheckCategory¶
Type: String Default: "recheck"
qBittorrent category for forcing torrent recheck.
How to use:
- Move torrent to this category in qBittorrent
- qBitrr forces a full recheck
- Moves torrent back to original category
- Continues normal processing
Use cases:
- Fix "missing files" errors
- After restoring from backup
- After moving download location
Tagless¶
Type: Boolean Default: false
Advanced feature: Manage torrents without requiring Arr tags.
When false (default):
- qBitrr uses both category and tags to identify torrents
- More reliable
- Recommended
When true:
- qBitrr uses only categories
- Useful if Arr doesn't apply tags consistently
- May cause conflicts if multiple Arr instances share categories
Recommendation: Keep false unless you have specific tagging issues.
IgnoreTorrentsYoungerThan¶
Type: Integer (seconds) Default: 180 (3 minutes)
Ignore torrents newer than this age for certain operations.
Applies to:
FailedCategoryprocessingRecheckCategoryprocessing- Some health checks
Why?
- Torrents need time to start
- Prevents false "stalled" detection
- Allows metadata to load
Recommendations:
180- (Default) 3 minutes120- 2 minutes (faster)300- 5 minutes (more conservative)
PingURLS¶
Type: Array of strings Default: ["one.one.one.one", "dns.google.com"]
Hostnames to ping for internet connectivity checks.
Requirements:
- Must be reliable, always-online services
- Must respond to ICMP pings or HTTP
- Must tolerate frequent pings
Examples:
# Cloudflare and Google DNS
PingURLS = ["one.one.one.one", "dns.google.com"]
# Alternative DNS providers
PingURLS = ["1.1.1.1", "8.8.8.8", "9.9.9.9"]
# Mix of services
PingURLS = ["cloudflare.com", "google.com", "github.com"]
Recommendation: Keep at least 2 URLs for redundancy.
FFprobeAutoUpdate¶
Type: Boolean Default: true
Automatically download and update FFprobe binary for media file validation.
When true:
- qBitrr downloads FFprobe from https://ffbinaries.com/downloads
- Automatically updates to latest version
- Stored in
~/config/qBitManager/ffprobe
When false:
- You must provide your own FFprobe binary
- Place at
~/config/qBitManager/ffprobe(Linux/Mac) orffprobe.exe(Windows)
Recommendation: Keep true for automatic management.
AutoUpdateEnabled¶
Type: Boolean Default: false
Enable automatic qBitrr updates on a schedule.
When true:
- qBitrr checks for updates on schedule (see
AutoUpdateCron) - Downloads and installs latest version
- Restarts automatically
- Logs update in
Main.log
Supported installation methods:
- ✅ PyPI package (
pip install) - ✅ Docker (pulls latest image)
- ⚠️ Binary (manual, not fully automated)
Recommendation: Enable for Docker deployments. Consider manual updates for PyPI.
AutoUpdateCron¶
Type: String (cron expression) Default: "0 3 * * 0" (Sundays at 3:00 AM)
Cron schedule for automatic updates (when AutoUpdateEnabled = true).
Cron format:
┌─ minute (0-59)
│ ┌─ hour (0-23)
│ │ ┌─ day of month (1-31)
│ │ │ ┌─ month (1-12)
│ │ │ │ ┌─ day of week (0-6, 0=Sunday)
│ │ │ │ │
* * * * *
Examples:
# Every Sunday at 3:00 AM
AutoUpdateCron = "0 3 * * 0"
# Every day at 2:00 AM
AutoUpdateCron = "0 2 * * *"
# Every Monday at 4:30 AM
AutoUpdateCron = "30 4 * * 1"
# First day of month at midnight
AutoUpdateCron = "0 0 1 * *"
Tools: Use crontab.guru to validate expressions.
AutoRestartProcesses¶
Type: Boolean Default: true
Automatically restart crashed worker processes.
When true:
- Crashed Arr manager processes restart automatically
- Subject to restart limits (see below)
- Prevents infinite crash loops
When false:
- Crashed processes stay down
- Only logs failures
- Requires manual intervention
Recommendation: Keep true for automatic recovery.
MaxProcessRestarts¶
Type: Integer Default: 5
Maximum restart attempts per process within ProcessRestartWindow.
How it works:
- Process crashes
- qBitrr restarts it after
ProcessRestartDelay - If process crashes
MaxProcessRestartstimes withinProcessRestartWindow: - Auto-restart disabled for that process
- Manual intervention required
Recommendation: 5 is safe. Increase if you have intermittent issues.
ProcessRestartWindow¶
Type: Integer (seconds) Default: 300 (5 minutes)
Time window for tracking restart attempts.
Example:
MaxProcessRestarts = 5ProcessRestartWindow = 300- If a process restarts 5 times within 5 minutes, auto-restart stops
Recommendation: 300 (5 minutes) prevents crash loops while allowing recovery.
ProcessRestartDelay¶
Type: Integer (seconds) Default: 5
Wait time before attempting to restart a crashed process.
Why wait?
- Gives system time to recover
- Prevents immediate re-crash
- Allows logs to flush
Recommendation: 5 is sufficient. Increase if processes crash immediately after restart.
WebUI Section¶
The [WebUI] section configures qBitrr's web interface.
Complete WebUI Example¶
[WebUI]
Host = "0.0.0.0"
Port = 6969
Token = ""
LiveArr = true
GroupSonarr = true
GroupLidarr = true
Theme = "Dark"
Host¶
Type: String (IP address) Default: "0.0.0.0"
IP address the WebUI listens on.
Options:
0.0.0.0- (Default) Listen on all interfaces127.0.0.1- Localhost only (secure, but can't access remotely)- Specific IP - Listen on one network interface
Recommendation: 0.0.0.0 for Docker, 127.0.0.1 + reverse proxy for native.
Port¶
Type: Integer Default: 6969
TCP port for the WebUI.
Access: http://<host>:<port>/ui
Examples:
Port = 6969 # http://localhost:6969/ui
Port = 8080 # http://localhost:8080/ui
Port = 443 # https://localhost:443/ui (with reverse proxy)
Token¶
Type: String Default: "" (empty, no authentication)
Bearer token for API authentication.
When empty:
- WebUI and API are publicly accessible
- No authentication required
When set:
- All
/api/*endpoints require authentication - Must include
X-API-Tokenheader in requests
Setting up authentication:
Using authenticated API:
Recommendation: Set a token if qBitrr is accessible from the internet.
LiveArr¶
Type: Boolean Default: true
Enable live updates in Arr views (Radarr/Sonarr/Lidarr tabs).
When true:
- Real-time status updates
- Progress bars update live
- No manual refresh needed
When false:
- Static snapshots
- Must manually refresh page
- Lower resource usage
Recommendation: Keep true for best UX.
GroupSonarr¶
Type: Boolean Default: true
Group Sonarr episodes by series in the WebUI.
When true:
When false:
Recommendation: true for cleaner view.
GroupLidarr¶
Type: Boolean Default: true
Group Lidarr albums by artist in the WebUI.
When true:
When false:
├─ Pink Floyd - The Dark Side of the Moon
├─ Pink Floyd - The Wall
└─ Pink Floyd - Wish You Were Here
Recommendation: true for better organization.
Theme¶
Type: String Default: "Dark" Options: Dark, Light
WebUI color theme.
Dark- Dark mode (easier on eyes)Light- Light mode (better in bright environments)
Note: Users can toggle theme in the WebUI itself. This sets the default.
qBit Section¶
The [qBit] section configures the connection to qBittorrent.
Complete qBit Example¶
For detailed qBittorrent configuration, see the qBittorrent Configuration Guide.
Arr Sections¶
Arr sections follow the naming pattern [<Type>-<Name>]:
[Radarr-Movies][Sonarr-TV][Lidarr-Music]
Each Arr instance has its own section with subsections for:
[<Type>-<Name>.EntrySearch]- Automated searching[<Type>-<Name>.Overseerr]- Request integration (Radarr/Sonarr only)[<Type>-<Name>.Torrent]- Torrent management[<Type>-<Name>.Torrent.SeedingMode]- Seeding configuration[[<Type>-<Name>.Torrent.Trackers]]- Per-tracker settings
For complete Arr configuration documentation:
Configuration Best Practices¶
1. Start with Example Config¶
# Generate example config
qbitrr --gen-config
# Copy to config location
cp config.example.toml ~/config/config.toml
2. Use Environment Variables¶
Override settings with environment variables (Docker-friendly):
# Format: QBITRR_<SECTION>_<KEY>
export QBITRR_SETTINGS_CONSOLELEVEL=DEBUG
export QBITRR_WEBUI_PORT=8080
export QBITRR_QBIT_HOST=qbittorrent
3. Validate Your Config¶
Check for syntax errors:
# Python TOML validation
python3 -c "import toml; toml.load('~/config/config.toml')"
# Or use online validator
# https://www.toml-lint.com/
4. Backup Your Config¶
# Before major changes
cp ~/config/config.toml ~/config/config.toml.backup
# Automated backup (cron)
0 0 * * * cp ~/config/config.toml ~/config/config.toml.$(date +\%Y\%m\%d)
5. Version Control¶
# Initialize git repo
cd ~/config
git init
git add config.toml
git commit -m "Initial config"
# Track changes
git diff # See what changed
git commit -am "Adjusted stall delay"
6. Security¶
Sensitive data in config:
# DON'T commit these to public repos
APIKey = "your-secret-key"
Password = "your-password"
Token = "your-token"
Use environment variables for secrets:
7. Documentation¶
Add comments to your config:
[Radarr-4K]
# Separate instance for 4K movies
# Uses higher quality profile and longer ETAs
MaximumETA = 172800 # 48 hours for large 4K files
Troubleshooting Config Issues¶
Config Not Loading¶
Symptoms: qBitrr uses defaults or doesn't start
Solutions:
-
Check file location:
-
Check file permissions:
-
Validate TOML syntax:
Invalid Value Errors¶
Symptoms: "Invalid value for X" errors in logs
Solutions:
-
Check data types:
-
Check enums:
Changes Not Applied¶
Symptoms: Modified config not taking effect
Solution: Restart qBitrr after config changes:
Missing Required Values¶
Symptoms: "Missing required config key" errors
Solution: Check these are set:
[Settings]
CompletedDownloadFolder = "/path/to/downloads" # Required
[qBit]
Host = "localhost" # Required
Complete Minimal Config¶
Absolute minimum configuration to get started:
[Settings]
ConfigVersion = 3
CompletedDownloadFolder = "/data/downloads"
[WebUI]
Host = "0.0.0.0"
Port = 6969
[qBit]
Disabled = false
Host = "localhost"
Port = 8080
UserName = "admin"
Password = "adminpass"
[Radarr-Movies]
Managed = true
URI = "http://localhost:7878"
APIKey = "your-radarr-api-key"
Category = "radarr-movies"
ReSearch = true