Data-Based Matching
Why?
Torrent-based matching relies on .torrent files to be able to search for
cross-seeds. In this method, it analyzes the list of files stored in the
.torrent file and searches your trackers for similar files. If the files found
from the remote torrent (candidate) match the local torrent (searchee), this is
a match.
Data-based matching allows cross seed to not require the .torrent file,
and instead to look at actual data files on disk to search for matches. This is
great if you have the actual files to cross-seed, but not the .torrent files.
Torrent-based matching will take priority over data-based when they are
equivalent. Torrent-based is more robust, and prevents some performance issues
with dataDirs wherein cross-seed has to frequently scan your dataDirs and
watch all of their children for changes.
If you have multiple clients and/or linkDirs configured, cross-seed will
inject data-based matches into the first valid
torrentClient along with the first
valid linkDir. Custom routing is not
supported at this time.
General Usage for dataDirs
Most users will not need to use dataDirs. You should only use dataDirs if:
-
You are downloading through Usenet or other non-torrent methods in order to match new content not present in your torrent client.
-
You have content in your media or data directories that is not already present in your torrent client. In this scenario, you only need to perform a search with
dataDirsonce. After the initial search, you should remove the directories fromdataDirsentirely. -
You want to cross seed from
TorrentClientAtoTorrentClientB. In this case, it's STRONGLY recommended to use thereadonly:feature for thetorrentClientsoption. Setting this onTorrentClientAwill preventcross-seedfrom injecting torrents into it but will still use it as a source for matches. This prevents any issues with duplicate torrents between clients.a. If you cannot use the
readonly:feature, you can setdataDirsto the path of the downloaded data (e.g/data/torrents/tv)inTorrentClientA, and configurecross-seedwithTorrentClientBonly. This will likely create duplicate torrents seeding in both clients, ensure you will be following your tracker's rules.
Setting up data-based matching
-
Set up linking as described in the linking tutorial. While not required, it's highly recommended to keep the matches separate from your data. This is also necessary for step 2.
-
If you are trying to cross-seed data that has been renamed or whose names don't match standard torrent release naming schemes, set your
matchModetoflexible, or if you want all matches, consider setting up partial matching. -
Set
dataDirsandmaxDataDepthto informcross-seedon where to generate searchees. Here are some examples of common structures and their optimal configuration. If multiple apply, setmaxDataDepthto the highest value.
data/
├─ usenet/
│ ├─ movies/ # 0
│ | ├─ Movie.mkv # 1
dataDirs: ["/data/usenet/movies", ...],
maxDataDepth: 1,
data/
├─ torrents/
│ ├─ tv/ # 0
│ | ├─ Show S01/ # 1
│ | | ├─ Episode 1.mkv # 2
│ | | ├─ Subtitles # 2
│ | | | ├─ Episode 1.srt # 3
dataDirs: ["/data/torrents/tv", ...],
maxDataDepth: 1, # cross-seed will ignore season pack episodes even if set to 2 or more
data/
├─ radarr/ # 0
│ ├─ Movie/ # 1
│ | ├─ Movie.mkv # 2
dataDirs: ["/data/radarr", ...],
maxDataDepth: 2, # cross-seed will not search 'Movie/' itself, using a value of 1 will do nothing
data/
├─ sonarr/ # 0
│ ├─ Show/ # 1
│ | ├─ Season 1/ # 2
│ | | ├─ Episode 1.mkv # 3
dataDirs: ["/data/sonarr", ...],
maxDataDepth: 2, # use 3 if using seasonFromEpisodes or includeSingleEpisodes (note: cross-seed will not search 'Show/' itself)