How I Manage & Download Media (Movies, Music, Shows, Books)


A Preface

I would never suggest anyone break the rules and do anything I suggest here. This is an exercise in what is possible with the current suite of self hosted software that gathers “media” for you. It’s also an anecdotal tale of how I got to this specific set of tools I (may or may not) use. Your ISP certainly will have some not so kind words if you do any of this without a VPN at the least! Don’t blame me if you get a virus or a mean letter from your ISP if you actually do what I do. Err on the side of caution, please!

I Hate Proprietary Services

Being a 30 year old boomer (at the time of writing) means that I witnessed the rise of streaming services. Or more appropriately, I should say digital storefronts and then digital “rent” fronts. Netflix was a pioneer in bringing the rentfront to the digital age, killing mom & pop video stores in the process. And at the time I didn’t care - in fact, I preferred it. At face value it seems like a winning solution. You can borrow all the media you want for the fraction of the price renting a DVD ever was. It changed how people consume tv shows forever.

It also changed the concept of ownership in the worst way possible. I could borrow anything… but what about owning it? And what about when a streaming platform loses its license? Well, you’re shit out of luck if you can’t find the DVD’s or Bluray’s (which is increasingly difficult for newer shows). So if you want to watch something offline that’s a file you own - you are more than likely going to end up with the problem of how to get everything in a cost effective manner.

Enter The Arr (Metaphorical)

To bypass the cost prohibitive nature of media, many turn to “sailing the 7 seas”. This is also something I witnessed change drastically over time. When I was younger, you used to be able to find music by just searching for an album name in google and appending site:mediafire.com to the query. This was how I found a lot of music before I ever had a job, and some of the albums I downloaded all the way back then are still my favorites to this day.

Obviously, Google wasn’t going to let that slide forever. So when the old mediafire trick stopped working, so did finding reliable torrents. Torrent sites would go up… and then down. The ones that stuck around would be either private or dubious to trust. I shudder to think about all the viruses I probably got stealing movies on windows xp machines.

Enter the -arr (Software)

Where my story starts

Now when it comes to computer software in general, I’m a lot smarter than I was half a lifetime ago. I have been self hosting services for years, but never tackled media beyond music until this year. At the start of this year, I got an old imac for $150 dollars. Little did I know that machine was going to change my life forever. I had been tangentially aware of the -arr set of software by name, but never dabbled with it. I decided to use this old imac as a testing ground, and immediately fell in headfirst to hosting multiple -arr pieces of software.

You Keep Saying “-arr” Software… What Is That?

I should have started with this earlier, but I felt a teary eyed nostalgia remembering my youthful abandon pirating freely. You may be wondering what the -arr software is.

There is a set of software out there for managing torrent downloads that all end with -arr. This is to signify the software is for pirating (like “Arrr, I’m a pirate”). The ones I use that are notable are:

  1. Sonarr
    1. This is used to manage TV shows, and episodes you have downloaded or are missing.
  2. Radarr
    1. This is used to manage Movies and which ones are downloaded or missing
  3. Prowlarr
    1. This is a program solely used for adding torrent sites to search.
    2. Every time sonarr (or readarr) requests a new movie or TV show, it searches every site saved in Prowlarr
  4. Bazarr
    1. Manages and downloads subtitltes for movies and TV shows - a problem I ran into as I started mass downloading media.
  5. Jellyseerr
    1. While not an -arr (obviously) this is a pretty front end to search for movies & tv shows and download them.
    2. This gives users a streaming-channel like interface to request anything they want

There are also other sets of tools that are not arr software, but are tangentially related.

  1. Lazy Librarian
    1. As the name implies this is for managing & downloading books you want.
    2. There is an -arr software for this (readarr), however, readarr can’t access libgen and zlib. If you know about getting ebooks online, you’ll already know that the latter 2 sites are far more reliable than torrent sites for books.
  2. Soulseek
    1. This isn’t like any of the software I listed above - in fact it’s the most old school software I can think of.
    2. Soulseek is a simple peer to peer file network protocol, that’s it. For some reason it has always had a very devoted and reliable set of users sharing an insane amount of music. I have been using it for over a decade and always find what I need for music - seriously, someone has what you’re thinking of.
    3. While soulseek is mostly known for music, you can really download anything from it given that it’s just a flie transfer protocol.
      1. I’ve gotten loads of roms and ebooks from it for example.

Cool But… Why?

You might see all of this and be thinking “Why the hell would I ever need to use 6+ programs to download media?” I didn’t even note the torrent client I’m using, that’s nearly irrelevant. I just use qbittorrent, but multiple torrent clients work with this software.

The reason to use this software is below

  1. Organization
    1. If you are trying to download every single episode of a huge series, there’s a very strong chance you won’t get it all your first attempt.
    2. On top of that, you may not have a good system for tracking exactly what episodes you do - or don’t - have. With a small library this is easy, but when you decide “I want to download every episode of 7 different shows right now”, you are going to run into issues. Also it’s just a huge time constraint.
    3. With Sonarr, you can just click “Search for all missing” and bam - the program finds every episode for every show you want for you! For on demand media requests, and a catalog of what you own, this is crucial.
  2. Orchestration
    1. If it wasn’t already implied or inferred, most of this -arr software works with each other as needed.
    2. Prowlarr, which has all the torrent sites to search, connects to every other -arr software, and lazy librarian
      1. This means you can search across 10,20, even 30 torrent sites at the same time for your media. This drastically increases the chance you’ll find what you want
    3. Bazarr reads what movies & shows are available based on your sonarr & radarr folders themselves
    4. Jellyseer also connects to the API’s for sonarr and radarr

Essentially the -arr software promotes an automated hands off workflow for getting media. Whether this is all worth it for you to set up or not is obviously up to you. It does require you have a lot storage space, and a desire to download a lot of shows and movies. If you’re just looking to download a movie to watch today randomly, this is all overkill. Unless you like setting up complicated software for the sake of it. Let’s be real, if you’re reading this far, you meet that criteria.

How I Run This

The Hardware

Earlier, I mentioned that I used an old iMac for this. That was fine in terms of performance - but in terms of power effeciency? Horrendous. My server had a screen connected always on. The processor got so hot, it heated up my office noticeably. I turned it off after touching the back and seeing just how hot it really was. I almost burned myself on it hahahaha :^).

Anyways, I realized that I needed something more purpose built. I have a lot of raspberry pi’s, and I know that it would be a nightmare to try and use it for streaming videos and movies. The problem would come in while transcoding videos, the pi just can’t handle it. I decided to get a NUC to just plug into my router, due to it’s size and price.

https://www.amazon.com/Beelink-Desktop-Computer-Support-Ethernet/dp/B0BVLS7ZHP/

Really there’s nothing special to it - just a quad core processor mini x86 machine. It’s fast enough for what we’re using it for.

The Software

OS

My iMac was using nixos for this setup, and I still think that nixos is an awesome choice for a media server. However, for personal reasons, I am going back to Debian for most of my hardware. So the NUC that I’m currently running all of this software on is using Debian.

Docker? Podman? VMs? Bare Metal?

This is personal preference and I’m not here to sway your opinion but I’ll say what I did. On nixos, I used as few containers as possible since the packages were basically containerized anyways. On debian, I used containers for everything. Just did docker to be easy. Every bit of software is just running in it’s own docker container, with it’s own folder in my home folder for volumes.

The Layout

Directories

celer@beelink:~$ tree -L 2 -d docker/
docker/
├── bazarr
│   └── data
├── flaresolverr
├── jellyfin
│   ├── cache
│   └── config
├── jellyseerr
│   ├── config
│   ├── cypress
│   ├── docs
│   ├── node_modules
│   ├── public
│   ├── server
│   ├── snap
│   └── src
├── lazylibrarian
│   └── data
├── prowlarr
│   └── data
├── radarr
│   └── data
└── sonarr
    └── data

Inside each of these folders under docker is a docker-compose.yml. While I could have just made one docker-compose file with everything inside of it, I like to break everything up like this to keep it isolated.

Docker Compose Files

Sonarr / Radarr
---
version: "2.1"
services:
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/ETC
    volumes:
      - ./data:/config
      - /media/easystore/Visual/Movies:/movies #optional
      - /home/celer/Downloads:/downloads #optional
      - /home/celer/Downloads:/home/celer/Downloads #optional
    ports:
      - 7878:7878
    restart: unless-stopped

The above is specifically for radarr, but sonarr is the exact same except for 3 major differences

  1. Ports are obviously different on sonarr
  2. Sonarr mounts your shows to /tv
  3. the image is sonarr instead of radarr

You’ll see that I have downloads mounted twice. I have no idea why but for some reason I had to mount the real download directory to the same exact location in the container.

Prowlarr
---
version: "2.1"
services:
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/EST
    volumes:
      - ./data:/config
    ports:
      - 9696:9696
    restart: unless-stopped
celer@beelink:~/docker/prowlarr$

This one is far more straightforward - it doesn’t actually need access to any of your media. It just needs a place to save a database of torrent sites.

Flaresolverr
---
version: "2.1"
services:
  flaresolverr:
    # DockerHub mirror flaresolverr/flaresolverr:latest
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=${LOG_LEVEL:-info}
      - LOG_HTML=${LOG_HTML:-false}
      - CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
      - TZ=America/New_York
    ports:
      - "${PORT:-8191}:8191"
    restart: unless-stopped

This is just a python script that helps solve cloudflare captchas. Specifically, this is needed for some torrent sites to search.

Jellyseer
version: '3'
services:
  jellyseerr:
    build:
      context: .
      dockerfile: Dockerfile.local
    ports:
      - 5055:5055
    volumes:
      - .:/app:rw,cached
      - /app/node_modules
      - /app/.next

This just needs some data points mounted. I actually cloned the git repo which is where the Dockerfile this is referencing exists.

Lazy Librarian
---
version: "2.1"
services:
  lazylibrarian:
    image: lscr.io/linuxserver/lazylibrarian:latest
    container_name: lazylibrarian
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - DOCKER_MODS=ghcr.io/linuxserver/mods:universal-calibre|linuxserver/mods:lazylibrarian-ffmpeg #optional
    volumes:
      - ./data:/config
      - /home/celer/Downloads:/downloads
      - /media/easystore/Documents/personal/Books:/books #optional
    ports:
      - 5299:5299
    restart: unless-stopped

Pretty self explanatory by this point.

Bazarr
version: "2.1"
services:
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./data:/config
      - /media/easystore/Visual/Movies:/movies #optional
      - /media/easystore/Visual/Shows:/tv #optional
    ports:
      - 6767:6767
    restart: unless-stopped

Just needs the mountpoints for shows and movies (to store subtitles).

Jellyfin
version: '3.5'
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 1000:1000
    network_mode: 'host'
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /media/easystore:/media
    restart: 'unless-stopped'
    # Optional - alternative address used for autodiscovery
    #environment:
      #- JELLYFIN_PublishedServerUrl=http://example.com
    # Optional - may be necessary for docker healthcheck to pass if running in host network mode
    extra_hosts:
      - "host.docker.internal:host-gateway"

Here you just have to make sure that the media directory is shared. For me, they are all in /media/easystore so I just mounted that to /media.

Using It All Together

This is where the beauty of the chaos comes together. The easiest way to showcase it is to show various different scenarios. Once you see this, you may see why I’m so adamant on using this workflow for as much media as possible.

Movies & TV Shows

Let’s say I want to download every episode of the show Lie to Me.

First, I open Jellyseer and search for Lie to Me.

I click it, click on request, select each season I want, and click request. That’s it. Movies are the same exact flow, just search for it here and wait for it to download.

The backend searches torrent sites for you, and adds them to your torrent client. Once the torrent finishes, the downloads move to your TV (or movie) directory with a uniform naming structure.

Books

Let’s say I want to download books by Jane Goodall. It’s pretty similar to the above workflow, we just use Lazy Librarian instead.

Search for the author, click their name, and search for the book!

Music

This is where I go to Soulseek for the fact that most of what I listen to is not on torrent sites. Specifically, I use the software Nicotine+ to find albums. Just search for an artist or album and download the folder - that’s it!

The End

If you made it this far, I’m amazed because this article is my longest one yet. If you have any questions or I left something out, please don’t hesitate to reach out to me on the fediverse at:

https://thechimp.zone/users/thegreatape