Skip to content

cross-seed – Cross-tracker seeding automation

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.


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:

Plaintext
/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:

YAML
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
VariableValue
userPUID: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:

Bash
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:

JavaScript
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:

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

  1. linkDirs creates links to matched files in the specified directories. Set this to linkDirs: ["/data/torrents/cross-seed-links"].
  2. torrentDir informs cross-seed where the .torrent files for your download client are stored. Set this to torrentDir: "/torrents". Ensure you have commented out the appropriate volume line in the compose file for your download client for this to work.
  3. outputDir is where cross-seed will save torrent files it finds for you. Set this to outputDir: "/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:

Bash
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:

Bash
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:

ShellScript
#!/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!

Published inDownload Tools 7.2MicroguideMicroguidesSynology

Comments are closed.

drfrankenstein.co.uk – writing Synology Docker Guides since 2016 – Join My Discord!