A DIY streaming server setup

Automated downloading and organization of anything

Cheap laptop + hard drives + free software beats Netflix

I’m bringing back my old home server and figured I should share how the setup will look like. This is a configuration I had great results with before, is easy to set up, and is extensible. This isn’t a step-by-step guide, but more of a high level overview.

The setup will install the following:

  1. A media server (Jellyfin)
  2. A media indexer (Sonarr + Prowlarr)
  3. A downloader (qBittorrent)

These programs work together to automatically download and organize your media. Note that this is a local server. You can’t use this setup over the public internet (for now), only within your network.

Requirements

A computer and some storage

The only physical thing needed is a computer with enough storage. It doesn’t have to be expensive; an old laptop, or even a Raspberry Pi, with a cheap external hard drive is plenty. This computer will want the best network connection you have.

Better hardware will give you better performance and more headroom. A discrete GPU will be almost necessary when multiple streams are active. However, very modest hardware and network connections are sufficient; I ran my previous server with an iGPU on a Skylake processor and 100 Mbps Ethernet.

(Really) Basic networking knowledge

You should be comfortable typing in something like localhost:8096 into your browser, understanding what 192.168.1.1:80 and LAN and WAN mean will help. You can set this up without much knowledge (like I once did), but any knowledge will greatly help troubleshooting and asking questions.

Software

Jellyfin

Jellyfin is the core of this setup; it is the program that streams to your devices. Jellyfin is easy to use, can be set up everywhere, has lots of plug-ins for extensibility, and is FOSS. Jellyfin has tons of clients too; any device will be able to stream.

Sonarr

Jellyfin is cool, but the real magic of this setup is automatically downloading new media. That’s Sonarr’s job.

Sonarr is an automatic media download manager. Instead of manually searching websites for torrents or downloads, Sonarr does that for you. Once downloaded, the show neatly appears in Jellyfin’s collection. All you need to do is tell Sonarr “hey, I want to watch x”.

Sonarr specializes in TV shows. So seasonal TV shows, anime, documentaries, or anything that isn’t a movie or music. There are different *arr programs for other media.

Prowlarr

There is a catch to Sonarr: by itself, it cannot download or search for new files. Sonarr relies on an indexer search online files, think of this like a search engine. There is an *arr program dedicated for indexing: Prowlarr.

qBittorrent

Sonarr not being able to download anything is a positive feature. If it could, it wouldn’t have been able to survive for long from law enforcement. While Prowlarr finds files, a program dedicated to download them is needed.

Sonarr uses two download mechanisms: Usenet and torrents. I use torrents and my program of choice is qBittorrent. You can use other torrent clients as long as Sonarr can connect to it, just don’t use junk like BitTorrent or µTorrent. These are ad-filled freeware and there are better clients out there.

Assembling the stack

Once everything is downloaded, they need to be connected to each other. Prowlarr needs to be able to communicate with Sonarr, and Sonarr with qBittorrent for things to harmonize. Once that’s done, your Servarr stack is ready to start downloading and streaming.

Here’s how the stack works. Let’s say you want to download a show, Planet Earth.

Workflow of the Servarr stack
  1. Prowlarr searches for Planet Earth torrents on the internet
  2. You choose what torrent to download through Sonarr
  3. Sonarr tells qBittorrent to download Planet Earth
  4. qBittorrent starts downloading
  5. qBittorrent lets Sonarr know when the download finishes
  6. Sonarr organizes the files in your storage
  7. Jellyfin detects the changes and updates its library

It’s a very elegant system. Instead of manually finding torrents on the internet, you just choose one to download from Sonarr and wait for it to appear in your library. Jellyfin is decent at finding proper metadata, so everything should look complete and be organized properly.

Software extensions

A great ability of this stack is its extensibility: You can add on more programs for more functionality.

More *arr programs

Why download just TV shows? There are other *arr programs that handle other media: Lidarr for music, Radarr for movies, and Readarr for e-books. There are also programs like Bazarr for subtitles.

With this larger stack, you can now download practically anything. Just follow their installation guides, configure Prowlarr and qBittorrent to connect with them, and you’re good to go.

Example: Shoko

One quirk I noticed with Jellyfin was that it wasn’t reliably filling metadata for anime that I had. Thumbnails and cover art wouldn’t appear, and episode descriptions would be off.

I came across a program called Shoko that solves this. Shoko compares your anime collection and compares their hashes to known ones in AniDB. When hashes match, Shoko assigns proper metadata to each episode. The hash mechanism makes it incredibly reliable as long as you have a matching file. If there are no matches, you can make hashes of your episodes and add them to the database. It has a Jellyfin plug-in for seamless connection.

One problem of Shoko is that it is only accessible as a Docker container on Linux. Windows has a native binary, but this doesn’t make setting the Servarr stack on Windows make sense.

Public facing service

An optional step is to make the server publicly accessible. This will allow you to access your media from anywhere in the world, just like a real streaming service. Setting this up requires more knowledge but is still easily doable.

You have to learn a bit about networks, reverse proxies, and certificates to configure a public server. While fun, there are a few catches.

  1. If your server is at home, you’ll be stuck with a dynamic IP address
  2. Security concerns if you don’t know what you’re doing
  3. Not viable if you hoard high quality media

Is this worth it?

Netflix got to where they are because they are convenient and are easy to use. But with rising subscription prices, market fragmentation, and the problem of ever-decreasing digital ownership, there are real benefits to having your own media server, or owning files (or even things at all) in general.

There are drawbacks to the DIY method of course. Having full control over your media also means you hold all responsibility. You need sufficient hardware and will pay for electricity. Backups become your responsibility. If you want to watch something new, you need to find and download it yourself.

If you’re willing to accept the work or just want to test it out, DIY media servers offer a rather competent replacement for commercial services.