| .devcontainer | ||
| .github | ||
| client | ||
| root/etc/s6-overlay/s6-rc.d | ||
| server | ||
| tools | ||
| .dockerignore | ||
| .gitignore | ||
| CHANGELOG.md | ||
| Dockerfile | ||
| LICENSE | ||
| README-DOCKER.md | ||
| README.md | ||
Real-Debrid Torrent & Usenet Client
This is a web interface to manage your torrents on Real-Debrid, AllDebrid, Premiumize, TorBox or DebridLink. It supports the following features:
- Add new torrents through magnets or files
- Add usenet downloads through NZB files (TorBox and Premiumize only)
- Download all files from Real-Debrid, AllDebrid, Premiumize or TorBox to your local machine automatically
- Unpack all files when finished downloading
- Implements a fake qBittorrent API so you can hook up other applications like Sonarr, Radarr or Couchpotato.
- Built with Angular 21 and .NET 10
You will need a Premium service at Real-Debrid, AllDebrid, Premiumize, Torbox or DebridLink!
Click here to sign up for Real-Debrid.
Click here to sign up for AllDebrid.
Click here to sign up for Premiumize.
Click here to sign up for TorBox.
Click here to sign up for DebridLink.
(referal links so I can get a few free premium days)
Docker Setup
Please see our separate Docker setup Read Me.
Run as a Service
Instead of running in Docker you can install it as a service in Windows or Linux.
Windows Service
- Make sure you have the ASP.NET Core Runtime 10.0.0 and the SDK installed: https://dotnet.microsoft.com/download/dotnet/10.0
- Get the latest zip file from the Releases page and extract it to your host.
- Open the
appsettings.jsonfile and replace theLogLevelPathto a path on your host. - In
appsettings.jsonreplace theDatabasePathto a path on your host. - When using Windows paths, make sure to escape the slashes. For example:
D:\\RdtClient\\db\\rdtclient.db - Do one of these:
- Run
RdtClient.Web.exeto start the client. - Run
service-install.batto install the client as a service. This will installRdtClient.Web.exeas a service which make the client start in the backgorund when the computer starts. (You probably want to do this if you are going to use this with Sonarr etc...)
- Run
Linux Service
Instead of running in Docker you can install it as a service in Linux.
-
Install .NET: https://docs.microsoft.com/en-us/dotnet/core/install/linux
Ubuntu 20.04 example:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debrm packages-microsoft-prod.debsudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0 -
Get latest archive from releases:
wget <zip_url> -
Extract to path of your choice (~/rtdc in this example):
unzip RealDebridClient.zip -d ~/rdtc && cd ~/rdtc -
In appsettings.json replace the Database Path to a path on your host. Any directories in path must already exist. Or just remove "/data/db/" for ease.
-
Test rdt client runs ok:
dotnet RdtClient.Web.dll
navigate to http://:6500, if all is good then we'll create a service -
Create a service (systemd in this example):
sudo nano /etc/systemd/system/rdtc.servicepaste in this service file content and edit path of your directory:
[Unit] Description=RdtClient Service [Service] WorkingDirectory=/home/<username>/rdtc ExecStart=/usr/bin/dotnet RdtClient.Web.dll SyslogIdentifier=RdtClient User=<username> [Install] WantedBy=multi-user.target -
enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable rdtc
sudo systemctl start rdtc
Proxmox LXC
If you use Proxmox for your homelab, you can run rdt-client in a linux container (LXC), check it here: https://tteck.github.io/Proxmox/
Setup
First Login
- Browse to http://127.0.0.1:6500 (or the path of your server).
- The very first credentials you enter in will be remembered for future logins.
- Click on
Settingson the top and enter your Real-Debrid API key (found here: https://real-debrid.com/apitoken. - If you are using docker then the
Download pathsetting needs to be the same as in your docker file mapping. By default this is/data/downloads. If you are using Windows, this is a path on your host. - Same goes for
Mapped path, but this is the destination path from your docker mapping. This is a path on your host. For Windows, this will most likely be the same as theDownload path. - Save your settings.
Download Clients
Currently there 4 available download clients:
Bezzad Downloader
This downloader can be used to download files in parallel and with multiple chunks.
It has the following options:
- Download speed (in MB/s): This number indicates the speed in MB/s per download over all parallel downloads and chunks.
- Parallel connections per download: This number indicates how many parallel it will use per download. This can increase speed, recommended is no more than 8.
- Parallel chunks per download: This number indicates in how many chunks each download is split, recommended is no more than 8.
- Connection Timeout: This number indicates the timeout in milliseconds before a download chunk times out. It will retry each chunk 5 times before completely failing.
Aria2c downloader
This will use an external Aria2c downloader client. You will need to install this client yourself on your host, it is not included in the docker image.
It has the following options:
- Url: The full URL to your Aria2c service. This must end in /jsonrpc. A standard path is
http://192.168.10.2:6800/jsonrpc. - Secret: Optional secret to connecto to your Aria2c service.
If Aria2c is selected, none of the above options for Internal Downloader are used, you have to configure Aria2c manually.
Symlink downloader
Symlink downloader requires a rclone mount to be mounted into your filesystem. Be sure to keep the exact path to mounted files in other apps exactly the same as used by rdt-client. Otherwise the symlinks wont resolve the file its trying to point to.
If the mount path folder cant be found the client wont start downloading anything.
Required configuration:
- Post Download Action = DO NOT SELECT REMOVE FROM PROVIDER
- Rclone mount path = /PATH_TO_YOUR_RCLONE_MOUNT/torrents/
Suggested configuration:
- Automatic retry downloads > 3
Synology Download Station
The Synology Download Station downloader hands each file to your NAS's Download Station, which downloads it and writes it to disk. The bytes never pass through rdt-client, so its memory stays flat regardless of file size.
To set it up:
- Complete the Synology prerequisites below.
- In rdt-client, go to Settings and set Download client to Synology Download Station.
- Fill in the Download Station options below (URL, username, password, download path).
- Make sure the path mapping lines up (see below), then Save.
Prerequisites on the Synology:
- Install and start the Download Station package.
- Use a DSM account that has both Download Station and File Station permission (File Station is required so rdt-client can create the per-download destination folder — Download Station will not create it itself). Disable 2-step verification on this account (the API login is username/password only), or use a dedicated service account.
- Download Station's Default destination is per-user. When you set a Download Path (below), rdt-client sets this account's default destination for you only if it doesn't already have one (an existing default is left untouched), so you normally don't need to do anything. If that automatic set fails (e.g. the account isn't allowed to change Download Station settings), sign into Download Station as that account and set it under Settings → BT/HTTP/FTP/NZB → Location → Default destination — otherwise every task that account creates stays stuck in "Waiting" (DSM logs
Failed to get default download destination of user [<account>]). A default set for your admin account does not apply to a dedicated download account.
It has the following options:
- Url: The URL to the Synology DownloadStation. A common URL is
http://127.0.0.1:5000. From inside a Docker container127.0.0.1is the container itself — use the NAS's LAN IP (e.g.http://192.168.1.50:5000) and the DSM web port (HTTP5000by default). - Username: The username to use when connecting to the Synology DownloadStation.
- Password: The password to use when connecting to the Synology DownloadStation.
- Download Path: The destination on the Synology, relative to a shared folder (e.g.
Media/Downloads/Torrents) — not an absolute path like/volume1/Media/Downloads/Torrents(Download Station would treatvolume1as a share name and fail with "Destination does not exist"). This must resolve to the exact same physical folder as the general Download path — see Path mapping below. If left empty, the default Download Station destination is used.
Path mapping (important). Download Station runs on the NAS; rdt-client runs in its container. They see the same folder through different mounts, so:
The Synology Download Path (above) and rdt-client's general Download path must resolve to the exact same physical folder on the NAS.
This is the single most common failure. If the two don't line up, Download Station saves the file somewhere rdt-client can't see, the download "finishes", and the import never happens. The two settings look different only because each names that one folder in a different dialect, with the container bind mount as the bridge between them:
- Download Path (this setting) is NAS share-relative:
Media/Downloads/Torrents→ physically/volume1/Media/Downloads/Torrents. - Download path (the general rdt-client setting) is the container path:
/data/downloads, bind-mounted so that exact path is the share folder above —-v /volume1/Media/Downloads/Torrents:/data/downloads.
The match must cover the full general Download path, including any subfolder. If your general Download path is /data/downloads/Completed, then that (not /data/downloads) is what must equal the NAS folder — so either bind-mount the share there, or set this Download Path to the matching subfolder (Media/Downloads/Torrents/Completed). Note that, unlike the in-process Bezzad downloader, Download Station writes the file straight into this folder as it downloads, so a folder named Completed will briefly hold in-progress files — that is normal with Download Station.
A working example: bind-mount /volume1/Media/Downloads/Torrents to /data/downloads, set the general Download path to /data/downloads, and set this Download Path to Media/Downloads/Torrents — all three name the same folder.
Separately, the Mapped Path must point at that same folder as Sonarr/Radarr see it (through their mount), or the download completes but never imports.
If you see DownloadStation reported the download finished, but no file was found at <container path> (DownloadStation saved to <NAS path>) in the log, the two Download paths are not the same folder — line them up.
Troubleshooting
- If you forgot your logins simply delete the
rdtclient.dband restart the service. - A log file is written to your persistent path as
rdtclient.log. When you run into issues please change the loglevel in your docker script toDebug.
Connecting Sonarr/Radarr
RdtClient emulates the qBittorrent web protocol and allows applications to use those APIs. This way you can use Sonarr and Radarr to download directly from RealDebrid.
Torrents
- Login to Sonarr or Radarr and click
Settings. - Go to the
Download Clienttab and click the plus to add. - Click
qBittorrentin the list. - Enter the IP or hostname of the RealDebridClient in the
Hostfield. - Enter the 6500 in the
Portfield. - Enter your Username/Password you setup above in the Username/Password field.
- Set the category to
sonarrfor Sonarr orradarrfor Radarr. - Leave the other settings as is.
- Hit
Testand thenSaveif all is well. - Sonarr will now think you have a regular Torrent client hooked up.
When downloading files it will append the category setting in the Sonarr/Radarr Download Client setting. For example if your Remote Path setting is set to C:\Downloads and your Sonarr Download Client setting category is set to sonarr files will be downloaded to C:\Downloads\sonarr.
Notice: the progress and ETA reported in Sonarr's Activity tab will not be accurate, but it will report the torrent as completed so it can be processed after it is done downloading.
Usenet/NZB
RdtClient also emulates part of the SABnzbd API so Sonarr and Radarr can add NZB downloads. This requires a provider that supports Usenet/NZB downloads, currently TorBox or Premiumize.
- Login to Sonarr or Radarr and click
Settings. - Go to the
Download Clienttab and click the plus to add. - Click
SABnzbdin the list. - Enter the IP or hostname of RdtClient in the
Hostfield. - Enter
6500in thePortfield. - Enable
Use SSLonly if you access RdtClient through HTTPS. - Leave
URL Baseempty unless RdtClient is configured with aBasePath, for example/rdt. - If RdtClient authentication is enabled, leave
API Keyempty and enter your RdtClient username and password. If your client only supports an API key, enter{username}:{password}inAPI Key. - If RdtClient authentication is disabled, enter any value in
API Key, for examplerdtclient, and leave username/password empty. - Set the category to
sonarrfor Sonarr orradarrfor Radarr. - Hit
Testand thenSaveif all is well.
When importing completed NZB downloads, Sonarr/Radarr must be able to access the path reported by RdtClient. In Docker setups this may require a Remote Path Mapping from the RdtClient download path to the path mounted inside Sonarr/Radarr.
Running within a folder
By default the application runs in the root of your hosted address (i.e. https://rdt.myserver.com/), but if you want to run it as a relative folder (i.e. https://myserver.com/rdt) you will have to change the BasePath setting in the appsettings.json file. You can set the BASE_PATH environment variable for docker enviroments.
Build instructions
Prerequisites
- NodeJS
- NPM
- Angular CLI
- .NET 10
- Visual Studio 2025
- (optional) Resharper
Dev Container
The repository includes a dev container under .devcontainer/ for the split development workflow used by this project.
It installs .NET 10 and Node 22, forwards ports 4200 and 6500, and persists /data/db and /data/downloads in named volumes so the local SQLite database, logs, and downloads survive container rebuilds.
-
Open the repository in the dev container.
-
In one terminal run
dotnet watch run --project server/RdtClient.Web. -
In another terminal run
cd client && npm start. -
Open
http://localhost:4200. The Angular dev server proxies/Apiand/hubto the backend running on6500. -
Open the client folder project in VS Code and run
npm install. -
To debug run
ng serve, to build runng build -c production. -
Open the Visual Studio 2025 project
RdtClient.slnandPublishtheRdtClient.Webto the givenPublishFoldertarget. -
When debugging, make sure to run
RdtClient.Web.dlland notIISExpress. -
The result is found in
Publish.
Build docker container
- In the root of the project run
docker build --tag rdtclient . - To create the docker container run
docker run --publish 6500:6500 --detach --name rdtclientdev rdtclient:latest - To stop:
docker stop rdtclient - To remove:
docker rm rdtclient - Or use
docker-build.bat
Misc Install Notes
Rootless Podman, Linux Host, and CIFS Connections
RDT Client read and write permission tests fail if the CIFS connection is not setup properly, despite permissions working inspection. In the Web GUI, it will report access denied, and in the log file you will see exceptions like this (dotnet issue):
System.IO.IOException: Permission denied
The nobrl has to be specified in your CIFS connection - man page.
Example: Options=_netdev,credentials=/etc/samba/credentials/600file,rw,uid=SUBUID,gid=SBUGID,nobrl,file_mode=0770,dir_mode=0770,noperm