Automation rules for QUI (qBittorrent management UI).
These automations handle tagging, share limits, speed limits, and cleanup for a multi-tracker qBittorrent setup with cross-seed support.
20 automations organized in two groups:
Tagging & Maintenance (sort 1-8): Tag torrents by tracker name, detect stalled/errored downloads, mark non-hardlinked torrents, auto-resume incomplete torrents, delete unregistered, recheck missing files.
Category-Based Limits & Cleanup (sort 9-20): Paired limit + cleanup rules per category group. Each pair sets qBittorrent share limits (ratio/seed time) and a corresponding cleanup rule that deletes when thresholds are met.
| Group | Share Limits | Delete Guard | Delete Trigger |
|---|---|---|---|
| noHL-movies | ratio=33, seed=15d | seed>=11d | ratio>=33 OR seed>=15d |
| noHL-tv | ratio=3, seed=21d | seed>=15d | ratio>=3 OR seed>=21d |
| TorrentLeech (HL) | ratio=-1, seed=365d, up=25MB/s | -- | seed>=365d |
| TorrentLeech (noHL) | ratio=1.25, seed=12d, up=25MB/s | seed>=12d | ratio>=1.25 OR seed>=12d |
| noHL-catchall | ratio=15, seed=35d | seed>=20d | ratio>=15 OR seed>=35d |
| noHL-xseed | ratio=-1, seed=15d | -- | seed>=15d |
- All matching automations fire in
sortOrdersequence. Last one wins for conflicting share limits. - Delete cannot combine with other actions (separate automation needed).
- Share limits + speed limits can combine in one automation.
- MyAnonamouse (MAM) excluded from noHL tag and catchall -- seeds forever.
- Cross-seeds (
.cross/.cross-seedcategories) have dedicated rules. Hardlinked cross-seeds are naturally exempt; non-hardlinked get 15d seed then delete. - All deletes use
deleteWithFilesPreserveCrossSeedsmode. - Resume failsafe (12d) prevents stuck torrents paused by share limits.
| File | Description |
|---|---|
automations.json |
Portable automation definitions (no instance-specific IDs) |
automations-readable.txt |
Human-readable dump of all rules |
export.sh |
Export from running QUI instance |
import.sh |
Import into QUI (stops service, edits SQLite DB) |
dump.py |
Pretty-print automations JSON |
export QUI_API_KEY="your-key"
export QUI_URL="http://your-qui-host:7476"
./export.sh automations.jsoncat automations.json | python3 dump.pyWarning: This replaces all existing automations. Back up first.
export COMPOSE_DIR="/path/to/docker-compose-dir"
export QUI_DB="/path/to/qui.db"
./import.sh automations.json{"shareLimits": {"enabled": true, "ratioLimit": 33.0, "seedingTimeMinutes": 21600}}
{"speedLimits": {"enabled": true, "uploadKiB": 25390, "downloadKiB": 0}}
{"delete": {"enabled": true, "mode": "deleteWithFilesPreserveCrossSeeds"}}
{"tag": {"enabled": true, "tags": ["name"], "mode": "full"}}
{"resume": {"enabled": true}}
{"recheck": {"enabled": true}}{"operator": "AND", "conditions": [
{"field": "FIELD", "operator": "OP", "value": "val"},
{"operator": "OR", "conditions": [...]}
]}Fields: HARDLINK_SCOPE, CATEGORY, TAGS, TRACKER, STATE, IS_UNREGISTERED, SEEDING_TIME (seconds), RATIO, PROGRESS, COMPLETION_ON, ADDED_ON_AGE
Operators: EQUAL, NOT_EQUAL, CONTAINS, NOT_CONTAINS, MATCHES_REGEX, GREATER_THAN, GREATER_THAN_OR_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL
delete-- Remove torrent onlydeleteWithFiles-- Remove torrent and filesdeleteWithFilesPreserveCrossSeeds-- Remove torrent and files, keep cross-seeded copiesdeleteWithFilesIncludeCrossSeeds-- Remove torrent, files, and cross-seeded copies
full-- Replace all tagsadd-- Add tagsremove-- Remove tags