| title | Cross Seed |
|---|---|
| description | A guide on how to deploy Cross Seed |
| published | true |
| date | 2025-07-10 19:37:13 UTC |
| tags | |
| editor | markdown |
| dateCreated | 2025-06-11 09:31:37 UTC |
Cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention. cross-seed can inject the torrents it finds directly into your torrent client.
This container requires the ability to hardlink to your media files. If you have not read the Folder Structure Guide, I recommend you have you folders set up as-described so Cross Seed can function properly. {.is-warning}
services:
cross-seed:
image: ghcr.io/cross-seed/cross-seed:6
container_name: cross-seed
user: 568:568
ports:
- "2468:2468"
volumes:
- /mnt/tank/configs/crossseed:/config
- /mnt/tank/media:/media
command: daemon
restart: unless-stoppedThis assumes Cross Seed and the other containers are within the same Docker network and can reach each other using the container name (eg http://radarr:8989) {.is-warning}
-
Use the command below in the TrueNAS shell to open the
config.jsfile for editing:nano /mnt/tank/configs/crossseed/config.js
Instead of editing the lines one by one, you could simply copy and paste my preconfigured config.js file
"use strict"; module.exports = { apiKey: undefined, torznab: [ "http://prowlarr:9696/1/api?apikey=12345", "http://prowlarr:9696/2/api?apikey=12345", ], sonarr: ["http://sonarr:8989/?apikey=12345"], radarr: ["http://radarr:7878/?apikey=12345"], host: "0.0.0.0", port: 2468, notificationWebhookUrls: [], torrentClients: ["qbittorrent:http://user:pass@qbittorrent:8080"], useClientTorrents: true, delay: 30, dataDirs: ["/media/movies", "/media/tv"], linkCategory: "cross-seed-link", linkDirs: ["/media/downloads"], linkType: "hardlink", flatLinking: false, matchMode: "flexible", skipRecheck: true, autoResumeMaxDownload: 52428800, ignoreNonRelevantFilesToResume: false, maxDataDepth: 4, torrentDir: null, outputDir: null, includeSingleEpisodes: false, includeNonVideos: false, seasonFromEpisodes: 1, fuzzySizeThreshold: 0.02, excludeOlder: "2 weeks", excludeRecentSearch: "3 days", action: "inject", duplicateCategories: false, rssCadence: "30 minutes", searchCadence: "1 day", snatchTimeout: "30 seconds", searchTimeout: "2 minutes", searchLimit: 400, blockList: [], }; //# sourceMappingURL=config.template.cjs.map
-
Edit the
torznabsection and add your Prowlarr info. Get the number before the API key by clicking the indexer name in Prowlarr and looking at under the Indexer Details header.torznab: [ "http://prowlarr:9696/1/api?apikey=12345", "http://prowlarr:9696/2/api?apikey=12345", ],
-
Edit the
torrentClientssection and add your qbittorrent infotorrentClients: [ "qbittorrent:http://user:pass@qbittorrent:8080", ],
-
Edit the
linkDirssection and use the path/media/downloadslinkDirs: ["/media/downloads"], -
Edit the
dataDirssection and make it look like this:dataDirs: ["/media/movies", "/media/tv"] -
Edit the Radarr/Sonarr section and add your info:
sonarr: ["http://localhost:8989/?apikey=12345"], radarr: ["http://localhost:7878/?apikey=67890"],
-
Restart the container
This assumes Cross Seed and qBit are within the same Docker network and can reach each other using the container name (eg http://qbittorrent:8080) {.is-warning}
I have not gotten this to work because qBit is behind a VPN and cannot reach other containers {.is-danger}
Cross Seed has the ability upon completion of a download to automatically push the torrent to other indexers instead of waiting for the scan at a later time to take advantage of earlier, larger leeching. To activate this feature follow the steps below:
- Get the API key for cross seed by running the command below in the TrueNAS shell as
root:docker exec -it cross-seed cross-seed api-key - In qBit, naviagte to Tools → Options → Downloads
- Enable Run external program on torrent completion, replacing
<API_KEY>with the correct values from above and use this command:curl -XPOST http://cross-seed:2468/api/webhook?apikey=<API_KEY> -d "infoHash=%I"
Since Cross Seed will create hardlinks in your directories, to remove unwanted media you need to remove it both from Sonarr/Radarr as well as your download client or the media will remain on your hard drive.
The Cross Seed docs are excellent. Follow their instructions here.



