| Name | Status | Progress | Size | Added |
|---|---|---|---|---|
| Loading… | ||||
| Name | Source / Label | Status | Progress | Size | Added | Actions | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
▼ Downloads
| File | Progress | Size | Speed | Status | ||
|---|---|---|---|---|---|---|
| Loading… | ||||||
❓ Help & Documentation
Five steps to your first download
Complete these steps once and everything runs automatically from then on.
/downloads)..torrent file in the watch folder, or connect Sonarr/Radarr via the qBittorrent API emulation (see the Sonarr/Radarr tab).The download pipeline
AllDebrid-Client sits between your torrent sources and your disk. It never downloads directly from peers — AllDebrid's cloud does. You get the finished file via an unlocked HTTPS link.
Error auto-recovery: Upload failures (code 5) and "no peers" (code 8) are retried automatically up to upload_fail_retry_count times. Torrents stuck in downloading without files for more than stuck_download_timeout_hours are reset. Use ⟳ Recover All to manually trigger a full recovery pass.
Sonarr & Radarr integration via qBittorrent API emulation
AllDebrid-Client emulates the qBittorrent v4.3.2 Web API so Sonarr, Radarr, Lidarr and other *arr apps can use it as a native download client — no webhook configuration needed.
Configure in Sonarr / Radarr:Host: your-server-ip
Port: 8080 (or your mapped port)
Username: (leave empty, or match AllDebrid-Client auth settings)
Password: (leave empty, or match AllDebrid-Client auth settings)
Category: (any value — stored but not used for routing)
✔ Use SSL: off (unless you have a reverse proxy with TLS)
- When Sonarr/Radarr grabs a release it POSTs the magnet or .torrent to
/api/v2/torrents/add. - The emulation layer calls
manager.add_magnet_direct()— the same code path as the UI "Add" button. - Sonarr/Radarr poll
/api/v2/torrents/infoto track progress. Completed torrents appear asuploadingstate (qBit seeding) which triggers the import. - After import, Sonarr/Radarr call
/api/v2/torrents/delete— this callsmanager.delete_torrent()which removes the row from AllDebrid too.
| Our status | qBit state | *arr sees |
|---|---|---|
| pending, uploading, processing, ready | stalledDL | Waiting for download |
| downloading, queued | downloading | Downloading |
| paused | pausedDL | Paused |
| completed | uploading | Ready to import ✓ |
| error | error | Failed |
aria2 — the download engine
AllDebrid-Client uses aria2 as the actual HTTP download engine. Two modes are supported:
Built-in (default)aria2 runs inside the container. No external setup needed. Configure options in Settings → Download Client → aria2 Config. The process is managed by the client and restarts automatically.
External RPCPoint to an existing aria2 instance by providing the JSON-RPC URL (e.g. http://aria2:6800/jsonrpc) and an optional secret token. Useful for shared aria2 instances or custom setups.
- Max concurrent downloads controls how many torrents are processed in parallel (default: 3). Higher values are faster but use more RAM and bandwidth.
- Connections per file (
split): more connections = faster single-file downloads. 8–16 is typically optimal. - Speed limits: set in Downloads → ↓ Limit in the header badge, or via Settings.
- Enable Auto-memory tuning to let the client adjust aria2's cache based on available RAM.
Integrations
/api/v2/ and requires no extra configuration in this client.
GET /api/metrics. Metrics include torrent counts by status, active downloads, errors, SSE subscriber count, and total bytes downloaded. Add to your Prometheus config with metrics_path: /api/metrics.
{name}, {path}, {torrent_id}, {status} placeholders. 300 s timeout.
Settings reference
General
Access Control — Optional HTTP Basic Auth. Set both username and password to enable. Leave either empty to disable. Exempt paths: /api/stats, /api/version, /api/avatar (for health checks).
Watch Folder — Drop .torrent or .magnet files here for automatic import.
Download Folder — Where aria2 saves files.
Download Client
Min Free Disk Space (GB) — If less than this is available, the download is aborted with an error (torrent row kept). 0 = disabled.
On Torrent Complete — Shell command run after each completed download. Placeholders: {name}, {path}, {torrent_id}, {status}.
Stuck timeout (hours) — Torrents stuck in active states longer than this are reset. 0 = disabled.
AllDebrid API
Upload fail retries — How many times to retry a "Upload failed" (code 5) magnet. Default: 3.
Retry delay (minutes) — Wait between upload-failed retry attempts. Default: 5.
Notifications
Per-event toggles control which events trigger a notification independently.
Advanced / Maintenance
Backup — Automatic JSON backups of the database. Configurable interval and retention.
Database — Switch between SQLite (default) and PostgreSQL. Changing this requires a restart.
Troubleshooting
Torrents are not downloading / stuck at "processing"
2. Click ⟳ Recover All in the Torrents view — this resets stuck torrents and re-dispatches all ready AllDebrid magnets.
3. Open
/api/torrents/diagnose to see exact status counts and a sample of non-terminal torrents with file counts.4. Verify the AllDebrid API key is valid: Settings → AllDebrid → Test.
Sonarr/Radarr can't connect (qBit API)
2. Use the exact IP/hostname and port of the AllDebrid-Client container — not
localhost unless both run on the same host.3. Leave username/password empty, or match what you set in Settings → Access Control.
4. Test the connection with the "Test" button in Sonarr/Radarr. It calls
/api/v2/app/version — you can also test manually in a browser.
Downloads start but files are never written to disk
2. In Unraid: ensure the path mapping in the Docker template is correct (host path → container path).
3. If using an external aria2 instance, set the aria2 Download Root to the path aria2 uses (may differ from the container path).
4. Check the
min_free_disk_gb setting — if the disk is full, downloads abort with an error.
Upload Failed / No peers errors
upload_fail_retry_count times). If retries are exhausted the torrent is marked error — use the ↻ retry button on the row or ⟳ Recover All.No peers (code 8): The torrent has no seeders. The client deletes the magnet from AllDebrid and re-uploads automatically if a magnet link is stored. If the torrent was added via .torrent file (no magnet stored), you must re-add it manually.
Live updates not working (no SSE)
1. Check the browser console for
EventSource errors.2. If you use a reverse proxy (nginx, Traefik), ensure it does not buffer responses. For nginx add
proxy_buffering off; and proxy_read_timeout 3600s; to the AllDebrid-Client location block.3. The client falls back to 15-second polling automatically if SSE fails.
Auth is enabled but I'm locked out
settings.json in your data folder (default: /app/data/settings.json) and set "auth_username": "" and "auth_password": "", then restart the container. Auth is disabled when either field is empty.
🧠 Rule Engine
The Rule Engine automatically applies actions to new torrents before they are uploaded to AllDebrid. Enable it in Settings → Automation → Rule Engine.
Example rules (JSON):
[
{"if": {"label_contains": "anime"}, "then": {"download_path": "/media/anime"}},
{"if": {"title_contains": "REMUX"}, "then": {"priority": -10}},
{"if": {"size_gb_gt": 80}, "then": {"pause": true}},
{"if": {"title_matches": ".*FLUX.*"}, "then": {"priority": 5}},
{"if": {"title_contains": "sample"}, "then": {"block": true}},
{"if": {"source_is": "jackett"}, "then": {"label": "auto"}}
]
title_contains — substring matchtitle_matches — regex (re.search)size_gb_gt / size_gb_lt — size in GBlabel_contains — label/categorysource_is — manual, jackett, watch…priority — int, added to currentpause — true = start pauseddownload_path — override folderlabel — set/override labelblock — true = skip upload🎯 Download Profiles
Named presets that bundle download path, priority, and label. Only one profile can be active at a time. Configure in Settings → Automation → Download Profiles.
Example profiles (JSON):
[
{"name": "Streaming", "download_path": "/media/stream", "priority": 10, "label": "stream"},
{"name": "Archive", "download_path": "/media/archive", "priority": -5, "label": "archive"},
{"name": "Anime", "download_path": "/media/anime", "priority": 5, "label": "anime"},
{"name": "Low Bandwidth", "download_path": "/media/lowbw", "priority": -10,"label": "low-bw"},
{"name": "High Quality", "download_path": "/media/remux", "priority": 0, "label": "remux"}
]