This is a community-written post from members of the Discord. Thanks to ancionio, K18DLP, and geebru for writing, testing, and editing this guide! We recommend reading up on the cross-seed documentation itself to familiarize yourself with the projects purpose, options, and other features available.
Important or recent updates
Updates | Date |
---|---|
Replaced hostname URL for cross-seed with synobridge IP. | 08/01/2025 |
Initial release of cross-seed guide. | 08/01/2025 |
Cross-seeding is the practice of downloading a torrent from one tracker and using that data to seed across other trackers. This results in minimal downloads and instant seeding, making it a great way to build ratio and contribute to the community.
Setting up cross-seed can seem daunting with a simple compose but robust configuration, but it’s all manageable! We’re going to focus on torrent-only functionality for the purposes of this guide. If you are primarily use Usenet, or a mixture of Usenet and torrents, you can still use this to get set up but will want to refer to the cross-seed docs for “data” searching.
Let’s get started!
Set up cross-seed project
Set up a series of new folders that we’ll use with cross-seed:
/volume1/docker/cross-seed
/volume1/docker/cross-seed/cross-seeds
/volume1/data/torrents/cross-seed-links
These will host the cross-seed configuration as well as any cross-seeded torrent files and links so they don’t intermingle with the original download locations.
Next, we’ll want to start up the cross-seed compose. Our recommendation is to place cross-seed in your existing project alongside qBittorrent/Deluge, but creating a new project is also possible.
Within your VPN or download project, add the following:
services:
# < Existing Gluetun/download client composes >
cross-seed:
image: cross-seed/cross-seed:latest
container_name: cross-seed
user: 1234:5678 # Replace with dockerlimited PUID/PGID
environment:
- TZ=Europe/London # Replace with your Timezone
ports:
- 2468:2468
volumes:
- /volume1/docker/cross-seed:/config
- /volume1/docker/cross-seed/cross-seeds:/cross-seeds
- /volume1/data:/data
# Use only one of the options below, matching your download client:
#- /volume1/docker/qbittorrent/qBittorrent/BT_backup:/torrents:ro # qBittorent
#- /volume1/docker/deluge/state:/torrents:ro # Deluge
command: daemon
network_mode: synobridge
depends_on:
# Use only one of the sections below, matching your download client:
#qbittorrent:
# condition: service_started
#deluge:
# condition: service_started
restart: unless-stopped
Variable | Value |
---|---|
user | PUID:PGID – Obtained from the User setup portion of the guides |
After saving your changes, build and restart the project. cross-seed should make a config.js
file for you within the volume1/docker/cross-seed
folder. If you do not see this file after building the project, SSH into your Synology and run the following:
sudo docker run -v /volume1/docker/cross-seed:/config ghcr.io/cross-seed/cross-seed gen-config && sudo chmod o+rw /volume1/docker/cross-seed/config.js
This will manually create the config.js
file within your Docker folder for you to use and assign it the correct permissions to be editable by DSM’s text editor.
cross-seed config
To get running, let’s run through the bare minimum setup required.
Throughout this guide, we define connections to internal services using the Synobridge gateway IP, 172.20.0.1. If this IP does not work for you, update all relevant instances to be your NAS IP instead.
Tracker setup
In your config.js
, set up all the trackers you want to cross-seed torrents between with their Torznab URLs. You’ll want to add each indexer on it’s own line, with the URL comprised of your Prowlarr URL, the indexer ID, and then Prowlarr API key:
torznab: [
"http://172.20.0.1:9696/1/api?apikey=prowlarr-api-key",
"http://172.20.0.1:9696/2/api?apikey=prowlarr-api-key"
],
To get the URLs to use here, head to Prowlarr and click on the indexer you’d like to cross-seed to. In the info panel, you should see a data point called “Torznab URL”. Copy this URL, add it to the comma-separated list of Torznab URLs, and append ?apikey=
to it, with your Prowlarr API key.
Radarr/Sonarr connection
Connecting your Radarr and Sonarr instances to cross-seed improves cross-seeds ability to search for matches using the media IDs provided by them. For each, add your Radarr and Sonarr link with the API key which can be found in Settings > General for each application:
sonarr: ["http://172.20.0.1:8989/?apikey=12345"],
...
radarr: ["http://172.20.0.1:7878/?apikey=67890"],
Download client setup
To allow cross-seed to inject torrents into your downloader of choice, you need to add the qbittorrentUrl
or delugeRpcUrl
depending on which you are using.
For qBittorrent users, the URL should supply your credentials and URL for qBittorrent as noted in the config comments: http://username:password@172.20.0.1:8090
.
For Deluge users, the URL should supply the password only, as noted in the config comments: http://:password@172.20.0.1:8112/json
.
If your download client password includes special characters (!@#$%^&*
) you will need to “URL encode” your password to use in the URLs above. Further information can be found in the cross-seed FAQ entry for passwords with special characters.
Directories setup
Next we’ll set up the required directory connections.
linkDirs
creates links to matched files in the specified directories. Set this tolinkDirs: ["/data/torrents/cross-seed-links"]
.torrentDir
informs cross-seed where the .torrent files for your download client are stored. Set this totorrentDir: "/torrents"
. Ensure you have commented out the appropriate volume line in the compose file for your download client for this to work.outputDir
is where cross-seed will save torrent files it finds for you. Set this tooutputDir: "/cross-seeds"
.
All 3 are now mapped to the volume connections we made earlier in the guide.
Client injection
Next, lets setup client injection. This allows cross-seed to add the new cross-seed torrents directly into your download client. The official documentation for this step is good but the gist is that you’ll set your config action
to inject
and configure a post-download script for your download client.
To start, in your config file, change action
to inject
instead of save
.
Then, grab your cross-seed API key by SSH-ing into your NAS and running:
sudo docker exec -it cross-seed cross-seed api-key
You’ll receive a cross-seed API key which you will use in combination with the local Synobridge URL for cross-seed, http://172.20.0.1:2468
.
qBittorrent users
In qBittorrent go to Tools > Options > Downloads and enable “Run external program on torrent completion” and add the following script to run:
curl -XPOST http://172.20.0.1:2468/api/webhook?apikey=<API_KEY> --data-urlencode "infoHash=%I"
Replace the <API_KEY>
with the key you got from the Docker command.
Deluge users
Create a file locally called deluge-cross-seed.sh
and add the following to it:
#!/bin/bash
infoHash=$1
name=$2
path=$3
curl -XPOST http://172.20.0.1:2468/api/webhook?apikey=<API_KEY> --data-urlencode "infoHash=$infoHash"
Replace the <API_KEY>
with the key you got from the Docker command. Then upload the file to /volume1/docker/deluge
.
SSH into your NAS and make the script executable by Deluge by running sudo chmod +x /volume1/docker/deluge/deluge-cross-seed.sh
.
In Deluge, enable the Execute plugin and under Add Command, select the “Torrent Complete” event and input the path to your file, /deluge-cross-seed.sh
. You’ll then want to restart the Deluge project to apply the changes.
Spin it up
Now, start the project again (or restart it if it is already running) and monitor the container logs for cross-seed. They’re incredibly helpful in debugging any issues.
At this point you have the bare minimum setup to begin with cross-seed!
Comments are closed.