Seeding Configuration¶
Configure intelligent seeding management with per-torrent and per-tracker rules for ratio limits, seeding time, and automatic cleanup.
Overview¶
qBitrr provides granular control over torrent seeding behavior:
- Global seeding limits - Apply to all torrents in an Arr category
- Per-tracker overrides - Different rules for different trackers
- Ratio-based removal - Remove after upload/download ratio reached
- Time-based removal - Remove after seeding duration
- Combined conditions - Remove when ratio OR/AND time met
- Rate limiting - Control upload/download speeds per torrent
- Dead tracker cleanup - Remove non-responsive trackers
Key benefits:
- Comply with private tracker seeding requirements
- Automatically free up disk space
- Maintain healthy torrent ecosystems
- Optimize bandwidth usage
- Prevent hit-and-runs
Configuration Structure¶
Seeding is configured in the [<Arr>-<Name>.Torrent.SeedingMode] section:
[Radarr-Movies.Torrent.SeedingMode]
# Global seeding settings for this Arr instance
[[Radarr-Movies.Torrent.Trackers]]
# Per-tracker override for specific trackers
Global Seeding Settings¶
Complete Example¶
[Radarr-Movies.Torrent.SeedingMode]
# Rate limits (bytes per second, -1 = unlimited)
DownloadRateLimitPerTorrent = -1
UploadRateLimitPerTorrent = -1
# Seeding limits
MaxUploadRatio = 2.0 # Seed to 2:1 ratio
MaxSeedingTime = 259200 # 72 hours (3 days)
# Removal condition
RemoveTorrent = 3 # Remove when ratio OR time met
# Dead tracker management
RemoveDeadTrackers = false
RemoveTrackerWithMessage = [
"skipping tracker announce (unreachable)",
"No such host is known"
]
DownloadRateLimitPerTorrent¶
Type: Integer (bytes per second) Default: -1 (unlimited)
Limit download speed for individual torrents managed by this Arr instance.
Values:
-1- Unlimited (default)1048576- 1 MB/s5242880- 5 MB/s10485760- 10 MB/s
Use cases:
- Slow connections - prevent one torrent from saturating bandwidth
- Background downloads - limit while torrents complete
- Fair sharing - distribute bandwidth across torrents
Example:
UploadRateLimitPerTorrent¶
Type: Integer (bytes per second) Default: -1 (unlimited)
Limit upload speed for individual torrents.
Use cases:
- Preserve download bandwidth
- Meet minimum ratio without excessive upload
- Comply with ISP upload limits
Example:
MaxUploadRatio¶
Type: Float Default: -1 (unlimited)
Maximum upload ratio (uploaded/downloaded) before triggering removal.
Ratio calculation:
Examples:
| Ratio | Downloaded | Uploaded | Meaning |
|---|---|---|---|
1.0 | 10 GB | 10 GB | 1:1 ratio |
2.0 | 10 GB | 20 GB | 2:1 ratio |
0.5 | 10 GB | 5 GB | 0.5:1 ratio |
Common values:
-1- Never remove based on ratio (unlimited seeding)1.0- Minimum for most private trackers1.5- Generous seeding2.0- Very generous5.0- Maximum for some trackers
Private Tracker Requirements
Many private trackers require minimum ratios:
- Common: 1.0 (1:1 ratio)
- Strict: 1.5 or higher
- New users: May have higher requirements
Check your tracker's rules before setting this value!
MaxSeedingTime¶
Type: Integer (seconds) Default: -1 (unlimited)
Maximum seeding duration before triggering removal.
Time conversions:
| Duration | Seconds | Config Value |
|---|---|---|
| 1 hour | 3,600 | 3600 |
| 6 hours | 21,600 | 21600 |
| 12 hours | 43,200 | 43200 |
| 1 day | 86,400 | 86400 |
| 3 days | 259,200 | 259200 |
| 1 week | 604,800 | 604800 |
| 2 weeks | 1,209,600 | 1209600 |
| 30 days | 2,592,000 | 2592000 |
| 90 days | 7,776,000 | 7776000 |
Use cases:
- Public trackers: 1-3 days sufficient
- Private trackers: Often require 48-72 hours minimum
- Music trackers: May require weeks or months
- Long-term seeding: 30+ days for rare content
Example:
RemoveTorrent¶
Type: Integer Default: -1 (never remove)
Controls when qBitrr removes torrents based on seeding limits.
Options:
| Value | Condition | Behavior |
|---|---|---|
-1 | Never | Keep seeding indefinitely |
1 | Ratio | Remove when MaxUploadRatio reached |
2 | Time | Remove when MaxSeedingTime reached |
3 | OR | Remove when EITHER ratio OR time met |
4 | AND | Remove when BOTH ratio AND time met |
Comparison:
| RemoveTorrent | After 1 day @ 3.0 ratio | After 5 days @ 0.5 ratio | After 4 days @ 2.5 ratio |
|---|---|---|---|
-1 | Keep | Keep | Keep |
1 (ratio only) | Remove (ratio met) | Keep (ratio not met) | Remove (ratio met) |
2 (time only) | Keep (time not met) | Remove (time met) | Remove (time met) |
3 (OR) | Remove (ratio met) | Remove (time met) | Remove (either met) |
4 (AND) | Keep (time not met) | Keep (ratio not met) | Remove (both met) |
Recommendations:
| Use Case | RemoveTorrent | MaxUploadRatio | MaxSeedingTime |
|---|---|---|---|
| Public trackers | 3 (OR) | 1.0 | 86400 (1 day) |
| Private trackers | 4 (AND) | 1.5 | 259200 (3 days) |
| Long-term seeding | -1 (Never) | -1 | -1 |
| Ratio priority | 1 (Ratio) | 2.0 | -1 |
| Time priority | 2 (Time) | -1 | 604800 (7 days) |
RemoveDeadTrackers¶
Type: Boolean Default: false
Automatically remove tracker entries that return errors.
When true:
- qBitrr monitors tracker announce responses
- Removes trackers matching
RemoveTrackerWithMessageerrors - Keeps working trackers
Use cases:
- Tracker shutdown/migration
- Clean up dead backup trackers
- Maintain healthy tracker lists
Private Tracker Caution
Be careful with private trackers:
- Some trackers have temporary outages
- Removing tracker may violate rules
- May lose credit for seeding time
Recommendation: Keep false for private trackers.
RemoveTrackerWithMessage¶
RemoveTrackerWithMessage = [
"skipping tracker announce (unreachable)",
"No such host is known",
"unsupported URL protocol",
"info hash is not authorized with this tracker"
]
Type: Array of strings Default: See example above
Error messages that trigger tracker removal (when RemoveDeadTrackers = true).
Common error messages:
RemoveTrackerWithMessage = [
# Network errors
"skipping tracker announce (unreachable)",
"No such host is known",
"timed out",
# DNS errors
"Could not resolve host",
"temporary failure in name resolution",
# Authentication errors
"info hash is not authorized with this tracker",
"unregistered torrent",
# Protocol errors
"unsupported URL protocol"
]
Per-Tracker Configuration¶
Override global settings for specific trackers using [[<Arr>-<Name>.Torrent.Trackers]] sections.
Complete Tracker Example¶
[[Radarr-Movies.Torrent.Trackers]]
# Tracker identification
Name = "BeyondHD"
Priority = 10
URI = "https://tracker.beyond-hd.me/announce"
# Seeding requirements
MaxUploadRatio = 1.0
MaxSeedingTime = 432000 # 5 days
# Rate limits
DownloadRateLimit = -1
UploadRateLimit = 5242880 # 5 MB/s
# Tracker management
AddTrackerIfMissing = false
RemoveIfExists = false
SuperSeedMode = false
# Tagging
AddTags = ["BeyondHD", "private"]
Tracker Fields¶
Name¶
Type: String Purpose: Human-readable identifier (for your reference only)
Not used by qBitrr currently, but may be used for logging/reporting in future versions.
Priority¶
Type: Integer Default: 0
When a torrent has multiple trackers, the tracker with the highest priority has its settings applied.
Example:
[[Radarr-Movies.Torrent.Trackers]]
Name = "BeyondHD"
Priority = 10 # Highest priority
MaxUploadRatio = 1.0
[[Radarr-Movies.Torrent.Trackers]]
Name = "Public Fallback"
Priority = 5 # Lower priority
MaxUploadRatio = 2.0
# Torrent with both trackers โ Uses BeyondHD settings (ratio 1.0)
URI¶
Type: String (tracker announce URL) Required: Yes
The tracker announce URL as it appears in qBittorrent.
How to find:
- In qBittorrent, select a torrent
- Right-click โ Properties โ Trackers tab
- Copy the announce URL exactly
Must match exactly (including protocol, subdomain, path, passkey).
MaximumETA¶
Type: Integer (seconds) Default: Inherits from [<Arr>-<Name>.Torrent].MaximumETA
Override the maximum allowed download ETA for this tracker.
Use cases:
- Slow private trackers (rare content) - higher ETA
- Fast public trackers - lower ETA
- Freeleech torrents - higher tolerance
MaxUploadRatio / MaxSeedingTime¶
Override global seeding limits for this tracker:
Example - Different tracker requirements:
# Private tracker - strict requirements
[[Radarr-4K.Torrent.Trackers]]
Name = "PassThePopcorn"
URI = "https://please.passthepopcorn.me:2443/announce"
Priority = 10
MaxUploadRatio = 1.0
MaxSeedingTime = 259200 # 72 hours minimum
# Public tracker - lenient
[[Radarr-4K.Torrent.Trackers]]
Name = "YTS"
URI = "udp://open.stealth.si:80/announce"
Priority = 5
MaxUploadRatio = 0.5
MaxSeedingTime = 86400 # 24 hours
DownloadRateLimit / UploadRateLimit¶
Per-tracker rate limiting:
AddTrackerIfMissing¶
Type: Boolean Default: false
Automatically add this tracker to torrents that don't have it.
When true:
- qBitrr checks if torrent has this tracker
- If missing, adds tracker announce URL
- Useful for adding backup trackers
Use case: Add public tracker backups to private torrents.
Tracker Rules
Some private trackers prohibit adding external trackers. Check rules before enabling.
RemoveIfExists¶
Type: Boolean Default: false
Remove this tracker from any torrent that has it.
Use case: Remove old/shutdown trackers automatically.
SuperSeedMode¶
Type: Boolean Default: false
Enable qBittorrent's "super seeding" mode for torrents with this tracker.
What is super seeding?
- Optimized for initial seeding
- Sends different pieces to each peer
- More efficient for new torrents
- Slower overall, but better distribution
Recommendation: true only for initial seeds on slow trackers.
AddTags¶
Type: Array of strings Default: [] (empty)
Automatically add tags to torrents with this tracker.
Use cases:
- Organize by tracker
- Mark private vs public
- Flag for special handling
- Integration with other tools
Configuration Examples¶
Example 1: Public Tracker (Generous Seeding)¶
[Radarr-Movies.Torrent.SeedingMode]
DownloadRateLimitPerTorrent = -1
UploadRateLimitPerTorrent = -1
MaxUploadRatio = 2.0 # Seed to 2:1
MaxSeedingTime = 604800 # 7 days
RemoveTorrent = 3 # Remove when either met
RemoveDeadTrackers = true
Result: Seeds to 2:1 ratio or 7 days, whichever comes first.
Example 2: Private Tracker (Strict Requirements)¶
[Radarr-Private.Torrent.SeedingMode]
MaxUploadRatio = 1.5
MaxSeedingTime = 432000 # 5 days
RemoveTorrent = 4 # Remove only when BOTH met
RemoveDeadTrackers = false # Keep all trackers
Result: Must seed to 1.5:1 ratio AND 5 days before removal.
Example 3: Mixed Setup with Per-Tracker Rules¶
[Radarr-Movies.Torrent.SeedingMode]
# Global defaults (conservative)
MaxUploadRatio = 1.0
MaxSeedingTime = 259200 # 3 days
RemoveTorrent = 3
# Private tracker - higher requirements
[[Radarr-Movies.Torrent.Trackers]]
Name = "BeyondHD"
Priority = 10
URI = "https://tracker.beyond-hd.me/announce"
MaxUploadRatio = 1.5
MaxSeedingTime = 432000 # 5 days
AddTags = ["private", "BeyondHD"]
# Public tracker - lenient
[[Radarr-Movies.Torrent.Trackers]]
Name = "YTS"
Priority = 5
URI = "udp://open.stealth.si:80/announce"
MaxUploadRatio = 0.5
MaxSeedingTime = 86400 # 1 day
AddTags = ["public", "YTS"]
Example 4: Music Tracker (Long-term Seeding)¶
[Lidarr-Music.Torrent.SeedingMode]
MaxUploadRatio = 1.0
MaxSeedingTime = 6220800 # 72 hours minimum (RED/OPS requirement)
RemoveTorrent = 2 # Remove based on time only
RemoveDeadTrackers = false
[[Lidarr-Music.Torrent.Trackers]]
Name = "RED"
Priority = 10
URI = "https://flacsfor.me/announce"
MaxUploadRatio = -1 # Never remove based on ratio
MaxSeedingTime = 259200 # 72 hours
AddTags = ["RED", "music", "lossless"]
Example 5: Freeleech Torrents (Seed Forever)¶
[Radarr-Freeleech.Torrent.SeedingMode]
MaxUploadRatio = -1 # Never remove
MaxSeedingTime = -1 # Never remove
RemoveTorrent = -1 # Never remove
[[Radarr-Freeleech.Torrent.Trackers]]
Name = "Freeleech Tracker"
URI = "https://tracker.example.com/announce"
Priority = 10
AddTags = ["freeleech", "permanent-seed"]
Import Mode and Seeding¶
The importMode setting affects seeding behavior:
Copy Mode (Recommended for Seeding)¶
What happens:
- Download completes
- Arr copies files to library
- Original files remain in download folder
- Torrent continues seeding
Pros:
- Preserves torrents for seeding
- Meets tracker requirements
- Maintains ratio
Cons:
- Uses more disk space (2x)
- Slower import (copy operation)
Move Mode (Frees Disk Space)¶
What happens:
- Download completes
- Arr moves files to library
- Torrent can no longer seed (files missing)
- qBitrr removes torrent
Pros:
- Saves disk space
- Faster import (move operation)
Cons:
- Can't seed after import
- May violate private tracker rules
- Hit-and-run risk
Private Tracker Warning
Using importMode = "Move" on private trackers can result in:
- Hit-and-run warnings
- Ratio penalties
- Account suspension
- Permanent ban
Always use importMode = "Copy" for private trackers.
Tracker-Specific Recommendations¶
Private Movie Trackers¶
PassThePopcorn, BeyondHD, etc.
MaxUploadRatio = 1.0 # Minimum required
MaxSeedingTime = 432000 # 5 days
RemoveTorrent = 4 # Both conditions
importMode = "Copy"
Private TV Trackers¶
BTN, MTV, etc.
Private Music Trackers¶
RED, OPS, APL
MaxUploadRatio = 1.0
MaxSeedingTime = 259200 # 72 hours minimum
RemoveTorrent = 2 # Time-based (ratio harder for music)
importMode = "Copy"
Public Trackers¶
RARBG, YTS, EZTV, etc.
MaxUploadRatio = 1.0 # Be generous
MaxSeedingTime = 86400 # 1 day
RemoveTorrent = 3 # Either condition
importMode = "Move" # Save space
Monitoring Seeding¶
WebUI¶
View seeding status:
- Open
http://localhost:6969/ui - Navigate to Arr tab
- Check torrent status and ratio
qBittorrent¶
Check seeding in qBittorrent:
- Open qBittorrent WebUI
- View ratio, upload speed, seeding time
- Sort by ratio or seeding time
Logs¶
Monitor seeding removal in logs:
Example log output:
2025-11-27 14:00:00 - INFO - Torrent reached 2.0 ratio: The Matrix (1999)
2025-11-27 14:00:05 - INFO - Removing torrent (ratio met): The Matrix (1999)
2025-11-27 14:00:10 - INFO - Torrent seeded for 7 days: Inception (2010)
2025-11-27 14:00:15 - INFO - Removing torrent (time met): Inception (2010)
Troubleshooting¶
Torrents Not Removed¶
Symptom: Torrents continue seeding past limits
Solutions:
-
Check RemoveTorrent setting:
-
Verify limits are set:
-
Check import mode:
-
Review logs:
Removed Too Early¶
Symptom: Torrents removed before meeting requirements
Solutions:
-
Increase limits:
-
Change removal condition:
-
Check per-tracker overrides:
- Ensure tracker settings aren't overriding globals
- Verify tracker URI matches exactly
Hit-and-Run Warnings¶
Symptom: Private tracker warnings about insufficient seeding
Solutions:
-
Use Copy mode:
-
Increase seeding requirements:
-
Never remove:
-
Check tracker rules:
- Review minimum seeding requirements
- Set qBitrr limits above minimums
Best Practices¶
1. Know Your Tracker Requirements¶
Before configuring:
- Read tracker rules carefully
- Note minimum ratio requirements
- Note minimum seeding time
- Check hit-and-run policies
2. Set Limits Above Minimums¶
# Tracker requires 1.0 ratio and 48 hours
# Set qBitrr to 1.5 ratio and 72 hours for safety margin
MaxUploadRatio = 1.5
MaxSeedingTime = 259200 # 72 hours
3. Use Copy Mode for Private Trackers¶
Never risk hit-and-runs.
4. Test with Public Trackers First¶
- Configure public tracker seeding first
- Monitor for a few days
- Verify removal works correctly
- Then apply to private trackers
5. Monitor Disk Space¶
With importMode = "Copy":
6. Use Per-Tracker Rules for Mixed Setups¶
Different trackers have different requirements - configure accordingly:
# Conservative global default
[Radarr-Movies.Torrent.SeedingMode]
MaxUploadRatio = 2.0
MaxSeedingTime = 604800
# Specific tracker overrides
[[Radarr-Movies.Torrent.Trackers]]
Name = "Private1"
MaxUploadRatio = 1.5
MaxSeedingTime = 432000
[[Radarr-Movies.Torrent.Trackers]]
Name = "Public1"
MaxUploadRatio = 1.0
MaxSeedingTime = 86400
See Also¶
- qBittorrent Configuration - qBittorrent setup
- Instant Imports - Import behavior and seeding
- Radarr Configuration - Radarr instance setup
- Sonarr Configuration - Sonarr instance setup
- Lidarr Configuration - Lidarr instance setup
- Config File Reference - All configuration options