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

 

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