Dashboard

📦
Total Torrents
Completed
Active Now
Processing
Errors
💾
Total Downloaded
Queue Health
Last 24 h
completed
Last 7 Days
completed
Success Rate
of all finished
Avg Duration
per torrent
Avg Size
per completed
Database
active backend
🧲 Add Magnet Link
Recent Activity
Name Status Progress Size Added
Loading…
All Torrents
All
Active
Ready
Done
Error
NameSource / LabelStatusProgressSizeAddedActions
Loading…
Per page:
Event Log
Loading…
Period:
1h
24h
7d
30d
1y
All time
Library
Loading…
📈 Completions — last 24 hours
Torrent Status
Loading…
File Status
Loading…
Monitor Levels
Loading…
Top Sources
Loading…
🔍 Saved Searches
Loading…
📈 Queue Analytics
Window:
1h
24h
7d
30d
Select a time window to load analytics.
Changelog
Loading…

▼ Downloads

▼ Limit:
↕ Max DL:
Loading…
File Progress Size Speed Status
Loading…
🧠 Historical Learning
Click Refresh to load indexer performance data.

❓ Help & Documentation

🚀 Quick Start
📖 How it works
🔗 Sonarr/Radarr
⬇︎ aria2
🔌 Integrations
🧠 Automation
⚙️ Settings
🔧 Troubleshooting

Five steps to your first download

Complete these steps once and everything runs automatically from then on.

1
Enter your AllDebrid API key
Go to Settings → AllDebrid and paste your API key. Get it at alldebrid.com/apikeys. Click Save.
2
Set the download folder
Go to Settings → Download Client and set the Download Folder to an existing path accessible by the container (e.g. /downloads).
3
Configure aria2
By default aria2 runs built-in inside the container — no extra setup. For an external aria2 instance, switch to External RPC in Settings → Download Client and provide the RPC URL.
4
Add a torrent
Paste a magnet link in the Torrents view, use the Search view to find content, drop a .torrent file in the watch folder, or connect Sonarr/Radarr via the qBittorrent API emulation (see the Sonarr/Radarr tab).
5
Watch it download
The Dashboard shows live progress. The client polls AllDebrid every 30 s, fetches unlocked links, and hands them to aria2. Completed torrents are removed from AllDebrid automatically.

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.

Magnet / .torrent
Uploaded to AllDebrid. status: uploading
AllDebrid processes
Polls every 30 s. status: processing
Ready on AllDebrid
Links unlocked, handed to aria2. status: downloading
aria2 complete
Magnet deleted from AllDebrid, Sonarr/Radarr notified. status: completed

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:
Settings → Download Clients → + → qBittorrent
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)
How it works:
  • 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/info to track progress. Completed torrents appear as uploading state (qBit seeding) which triggers the import.
  • After import, Sonarr/Radarr call /api/v2/torrents/delete — this calls manager.delete_torrent() which removes the row from AllDebrid too.
Status mapping:
Our statusqBit state*arr sees
pending, uploading, processing, readystalledDLWaiting for download
downloading, queueddownloadingDownloading
pausedpausedDLPaused
completeduploadingReady to import ✓
errorerrorFailed

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 RPC

Point 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.

Performance tips
  • 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

🔗 Sonarr / Radarr (via qBittorrent API) See the Sonarr/Radarr tab for full setup instructions. The qBit API emulation is available at /api/v2/ and requires no extra configuration in this client.
🔍 Jackett / Torrent Search Go to Settings → Services → Jackett and enter your Jackett URL and API key. Then use the Search view to find and add torrents directly. Supports adding individual results, selected results, or all results at once with the Add All button.
🆕 FlexGet Configure a FlexGet URL in Settings → Services → FlexGet. The client can trigger FlexGet runs and receive webhooks from FlexGet to automatically add magnets.
🔔 Discord Notifications Enter a Discord webhook URL in Settings → Notifications. Fine-grained toggles let you choose exactly which events trigger a notification: completed, error, upload failed, no peers, and periodic statistics reports.
📊 Prometheus Metrics A Prometheus-compatible scrape endpoint is available at 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.
📤 Post-Processing Scripts Set On Torrent Complete in Settings → Download Client to a shell command that runs after each completed download. Supports {name}, {path}, {torrent_id}, {status} placeholders. 300 s timeout.

Settings reference

General
AllDebrid API Key — Required. Get at alldebrid.com/apikeys.
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
Max Concurrent Downloads — How many torrents are processed (unlocked + dispatched) simultaneously. Default: 3.
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
API calls per minute — Rate limit for AllDebrid API calls (token-bucket). Default: 60. 0 = unlimited.
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
Discord Webhook URL — Main webhook for all notifications.
Per-event toggles control which events trigger a notification independently.
Advanced / Maintenance
Event Log Retention (days) — Events older than this are deleted daily. Torrent rows are never deleted — duplicate prevention is unaffected. 0 = keep forever.
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"
1. Check the event log for the torrent (click the row → Events).
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)
1. Make sure you are using qBittorrent as the download client type, not "Other".
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
1. Check the Download Folder path — it must be accessible inside the container.
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 Failed (code 5): AllDebrid rejected the upload. The client retries automatically (up to 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)
The UI uses Server-Sent Events (SSE) for live updates instead of polling. If you see stale data:
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
Edit 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"}}
]
Conditions
title_contains — substring match
title_matches — regex (re.search)
size_gb_gt / size_gb_lt — size in GB
label_contains — label/category
source_is — manual, jackett, watch…
Actions
priority — int, added to current
pause — true = start paused
download_path — override folder
label — set/override label
block — 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"}
]
Settings are applied immediately after saving.