Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cross-seed #8

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions compose/cross-seed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: "2.1"
services:
cross-seed:
container_name: cross-seed
image: crossseed/cross-seed:latest
command: daemon
restart: unless-stopped
volumes:
- /opt/cross-seed:/config
- /opt/cross-seed/cross-seeds:/cross-seeds
- /opt/qbittorrent/qBittorrent/BT_backup:/torrents:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "2468:2468"
network_mode: saltbox
labels:
com.github.saltbox.saltbox_managed: "true"

27 changes: 27 additions & 0 deletions compose/readme/cross-seed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# So, you want to cross-seed

First off, make sure that you read their [Docs](https://www.cross-seed.org/docs/basics/getting-started). There are some considerations with how you want to set up the container, mainly daemon or search, and if you want direct injection into your client or the torrent added to a watch directory.

## What clients does cross-seed support?

Cross-seed supports rutorrent, transmission, and qbittorent.

## Does it work with tqm?

No. tqm will ignore any cross-seeded torrent.

## Get started

Grab the `config.js` [Template](https://github.com/cross-seed/cross-seed/blob/master/src/config.template.docker.cjs)

Fill it out as necessary for your download client.

### Saltbox specific

- qbittorent url
- Your url would look like: `"http://username:password@qbittorrent:8080"`

- prowlarr torznab url
- Your url would look like: `["http://prowlarr:9696/28/api?apikey=your_prowlarr_api_key", "http://prowlarr:9696/26/api?apikey=your_prowlarr_api_key"]`

Note that the number after the port refers to which indexer it is. The docs linked above explain that in more detail.
151 changes: 151 additions & 0 deletions compose/template_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
// If you find yourself always using the same command-line flag, you can set
// it here as a default.

module.exports = {
/*
* Pause at least this much in between each search. Higher is safer.
* It is not recommended to set this to less than 2 seconds.
*/
delay: 10,

/**
* List of Torznab URLs.
* For Jackett, click "Copy RSS feed"
* For Prowlarr, click (i) and copy the Torznab Url, then append "?apikey=YOUR_PROWLARR_API_KEY"
* Wrap each URL in quotation marks, and separate them with commas.
*/
torznab: [],

/**
* directory containing torrent files.
* For rtorrent, this is your session directory
* as configured in your .rtorrent.rc file.
* For deluge, this is ~/.config/deluge/state.
* Don't change this for Docker.
* Instead set the volume mapping on your docker container.
*/
torrentDir: "/torrents",

/**
* where to put the torrent files that cross-seed finds for you.
* Don't change this for Docker.
* Instead set the volume mapping on your docker container.
*/
outputDir: "/cross-seeds",

/**
* Whether to search for single episode torrents
*/
includeEpisodes: false,

/**
* Include torrents which contain non-video files
* This option does not override includeEpisodes.
* To search for everything except episodes, use (includeEpisodes: false, includeNonVideos: true)
* To search for everything including episodes, use (includeEpisodes: true, includeNonVideos: true)
*/
includeNonVideos: false,

/**
* fuzzy size match threshold
* decimal value (0.02 = 2%)
*/
fuzzySizeThreshold: 0.02,

/**
* Exclude torrents first seen more than this long ago.
* Format: https://github.com/vercel/ms
* Examples:
* "10min"
* "2w"
* "3 days"
*/
excludeOlder: undefined,

/**
* Exclude torrents which have been searched
* more recently than this long ago.
* Examples:
* "10min"
* "2w"
* "3 days"
*/
excludeRecentSearch: undefined,

/**
* can be either "save" or "inject".
* With "inject" you need to set up one of the below clients.
*/
action: "save",

/**
* The url of your rtorrent XMLRPC interface.
* Only relevant with action: "inject".
* Could be something like "http://username:password@localhost:1234/RPC2
*/
rtorrentRpcUrl: undefined,

/**
* The url of your qBittorrent webui.
* Only relevant with action: "inject".
* Supply your username and password inside the url like so:
* "http://username:password@qbittorrent:8080"
*/
qbittorrentUrl: undefined,

/**
* The url of your Transmission RPC interface.
* Usually ends with "/transmission/rpc".
* Only relevant with action: "inject".
* Supply your username and password inside the url like so:
* "http://username:password@localhost:9091/transmission/rpc"
*/
transmissionRpcUrl: undefined,

/**
* qBittorrent-specific
* Whether to inject using categories with the same save paths as your normal categories.
* Example: if you have a category called "Movies",
* this will automatically inject cross-seeds to "Movies.cross-seed"
*/
duplicateCategories: false,

/**
* cross-seed will send POST requests to this url
* with a JSON payload of { title, body }.
* Conforms to the caronc/apprise REST API.
*/
notificationWebhookUrl: undefined,

/**
* Listen on a custom port.
*/
port: 2468,

/**
* Bind to a specific host address.
* Example: "127.0.0.1"
*/
host: undefined,

/**
* Run rss scans on a schedule. Format: https://github.com/vercel/ms
* Set to undefined or null to disable. Minimum of 10 minutes.
* Examples:
* "10min"
* "2w"
* "3 days"
*/
rssCadence: undefined,

/**
* Run searches on a schedule. Format: https://github.com/vercel/ms
* Set to undefined or null to disable. Minimum of 1 day.
* If you have RSS enabled, you won't need this to run often (2+ weeks recommended)
* Examples:
* "10min"
* "2w"
* "3 days"
*/
searchCadence: undefined,
};