Roll Your Own Streaming Service!
I have been working on a side project for a while to automate getting content for my Plex server.
Cord cutting is great, but there are caveats. There are so many services, and none have ALL the networks you want. So what’s the solution? Find one you like, with as many networks you want as you can find, and supplement with Plex.
“But how do I get shows into Plex? Especially if they air every week? Won’t that be a significant amount of time to spend on this?”
That is a valid problem. Here’s a solution I made to simply my life.
Note: It is probably illegal to download TV Shows that are not in the public domain. You should not be doing any of this without accepting any potential legal consequences. This guide and accompanying application merely ties several existing services together.
The system I built is 4 separate parts:
- Seedr.cc - Cloud seedbox - this is the torrenting service
- ShowRSS.info - New episodes of shows and their magnet links are updated automagically
- Plex - Media server
- cloud-torrent-dler - This ties everything together
NOTE: In order to gain access to the Seedr API, you need a paid account.
Setup
Seedr
- Sign up for a Seedr.cc account (this link gives us both more space!)
ShowRSS
- Sign up for a ShowRSS.info account
- Make sure you configure your account to only download the highest quality available:
- Get your feed URL from the
My Feed
link:
Plex
- Set up a Plex server (this is up to you - try Docker!)
- The Plex Library folder structure needs to match the folder structure in Seedr. See below for more info
Cloud-torrent-dler
- Clone repo
- Copy config template
- edit
config.yaml
with your parameters
git clone git@github.com:coma-toast/cloud-torrent-dler.git
cp config.yaml.template config.yaml
config.yaml
:
#Root of the local download folder
DownloadDestination: "/media/DataDrive"
#PID file temp file path
PidFilePath: "./tmp"
#Where should cache.json live?
CachePath: "/Users/username/cache.json"
#Array of folders to monitor for completed downloads. Subfolders here will map to subfolders in DownloadDestination.
#(NOTE: the first folder in this list MUST be the folder for TV Shows - autodownloading of shows picks the first item in the array)
CompletedFolders: ["Shows", "Movies/NotKids", "Movies/Kids"]
#Seedr Credentials
Username: "user@mail.com"
Passwd: "12345"
# URL to your ShowRSS.info feed
#ShowRSS: "http://showrss.info/user/123456.rss?magnets=true&namespaces=true&name=null&quality=null&re=null"
#How we control for which download method to use (FTP currently broken, ignore this for now)
#UseAPI: true
#UseFTP: false
#This is mostly for debuging (when set to false). true means a file will delete from Seedr as soon as the download process has completed.
DeleteAfterDownload: true
#How long to wait before checking for episodes
CheckEpisodesTimer: 300
#How long to wait before checking for downloads
CheckFilesToDownloadTimer: 300
#Dev mode - 5 second loops, download text files instead of video files
DevMode: false
Make folders in Seedr to match your local folder structure.
For example:
Seedr Folders:
["Shows/Kids", "Shows/NotKids"]
With DownloadDestination as:
"/media/DataDrive"
Local folders would have to match:
/media/DataDrive/Shows/Kids
/media/DataDrive/Shows/NotKids
For example:
jason@jason-server2u ~> ls -lash /media/USB-Drive
total 353M
4.0K drwxrwxrwx 1 jason jason 4.0K Sep 17 10:52 ./
4.0K drwxr-xr-x 3 root root 4.0K Oct 29 2019 ../
40K drwxrwxrwx 1 jason jason 40K Apr 13 2020 Movies/
24M -rwxrwxrwx 1 jason jason 24M Apr 1 2020 PlexPreRoll.mp4*
208K drwxrwxrwx 1 jason jason 208K Sep 2 12:26 Shows/
jason@jason-server2u ~> ls -lash /media/USB-Drive/Shows/
total 424K
208K drwxrwxrwx 1 jason jason 208K Sep 2 12:26 ./
4.0K drwxrwxrwx 1 jason jason 4.0K Sep 17 10:52 ../
8.0K drwxrwxrwx 1 jason jason 8.0K Nov 12 08:35 Kids/
180K drwxrwxrwx 1 jason jason 180K Nov 12 21:19 NotKids/
Build and Go!
go build
./cloud-torrent-dler
# use `&` at the end to run in the background
# or run in a `screen`
# or add to startup
# or add as a service
jason@jason-server2u:~> cat /etc/systemd/system/cloud-torrent-dler.service [0]
[Unit]
Description=Cloud Torrent Downloader
After=network.target
[Service]
Type=simple
User=jason
ExecStart=/home/jason/scripts/ctd.sh
TimeoutStartSec=0
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=default.target
jason@jason-server2u:~> cat scripts/ctd.sh [0]
#!/bin/bash
/home/jason/git/cloud-torrent-dler/cloud-torrent-dler -conf=/home/jason/.config/cloud-torrent-dler