Streaming services have made home entertainment easier than it's ever been. It's pretty intuitive, but it requires sharing your personal data with several different parties to access their different catalogs of movies, T.V. shows, and music. If you couldn't tell by most of the content on this website, I believe that data privacy and ownership are two of the most important aspects of safe and smart technology usage. Streaming services, while convenient (although increasingly less convenient, the more that spawn every year), can freely harvest and sell your data any time they please.
The other glaring issue with trusting these services with your life is ownership, or lack thereof. How annoying is it when you have just one season of a show left to watch and the rights to said show get sold and it jumps from Netflix over to some other service you don't currently pay for? Well, tough. You never actually owned that media to begin with. Writer and filmmaker Ted Kutina has an incredible video on the importance of real things. His video leans more into the physical media aspect of this ownership dilemma, and while files sitting on your home server don't quite fit this specific scenario, the message of how streaming services have become increasingly more predatory and monopolistic is incredibly relevant to a project like this.
Anyway... enough rambling, here's my setup:
I use three pieces of software to run a server I can reach from anywhere in the world to access my music, T.V. shows, movies, and any other documents or photos I would otherwise keep in traditional cloud storage. Jellyfin, Tailscale, and Symfonium work in tandem to achieve this.
Of all three pieces of software just listed, you've most likely heard of Jellyfin. Jellyfin is an excellent, open source way to stream media off of a device that you own. You don't need a very beefy computer to run a server (a lot of folks over at r/homelab run them off of broken laptops or Raspberry Pis). Jellyfin's suggested minimum hardware specs are listed here. If using Jellyfin on Windows (I do), which I'd suggest for beginners, the setup process in a nutshell is to download Jellfyin on your selected server hardware, create an account, set some directories (tell Jellyfin where to look for your files that you wish to stream), and then download Jellyfin on whichever device(s) you want to stream to. After that, you simply log in to your account just as if you were logging into Disney+ or Tubi or any other streaming service with an abysmal name, and you're set (there's loads of great Jellyfin setup guides out there). Oh, and this doesn't only work with media. Anything you can store in your PCs file explorer, Jellyfin can reach.
I run my server on an old HP EliteDesk 800 that I grabbed off of eBay for about 80 bucks. My personal set up also has a 5 TB Sandisk G Drive mounted to it, in which a cloned backup lives attached to main PC (always backup your server)! Also, opt for something with a small power draw, as you'll have to leave this computer running 24/7 in order to access it.
As previously mentioned, I serve all kinds of media off of my server. I can only suggest to serve media files that you already legally own... so don't ask.
Up to this point, I've covered running Jellyfin off of the hardware of your choice, gaining the ability access to files anywhere on the same network with clean front-end interfaces and playback controls built-in. To pretty up the server a bit more, metadata scanning comes in. Jellyfin has the ability to scan for metadata (media name, year, cast, cover art, etc.) out of the box. This means you can identify a piece of media, and with the help of some interfaces that come standard with Jellyfin, your collection will look like it does on Netlfix or Hulu, with the ability to swap out cover art as you please. Open source software means the ability to choose from thousands of other user-created plug-ins to enhance your experience. I keep my setup simple, with plug-ins to simply manage subtitles (if my files do not already contain them), and help with auto-cleanup of unneccessary media files. There's plenty of repositories of all sorts of cool stuff you can enhance your server with.
After I got my Jellyfin server up and running, I implemented Tailscale. The above setup works great as-is, but Jellyfin only knows how to serve media over its own network connection by default. Meaning, when your server hub is connected to your home WiFi, it can only talk to other devices on that same network. Tailscale is a VPN that gets installed on the same device as your server, then shares that servers IPV4 address to other devices that you download the app on. So, after setting up Tailscale on my phone (I've outlined my GrapheneOS setup here) and laptop, I can grab my servers IPV4 from Tailscale, copy it into Jellyfin, add the port number, and that's it. Jellyfin will now serve files from a mini PC sitting on my desk to all of my devices, anywhere in the world.
Tailscale is very passive software, meaning you really just "set it and forget it", but there are a couple of features that I have found handy in my setup. The main one being ping abilities, so I can test connection type and speed for all connected devices, no matter where I am.
Of the three pieces of software outlined here, Symfonium is the easiest to understand and set up. Jellyfin and Tailscale really provide everything you need, but if you're a music nerd like I am, you'll want Symfonium as part of your setup. Symfonium is an app available on the Google Play Store (also compatible with sandboxed Google Play if running GrapheneOS or a different open-source phone OS) that takes a peek at whatever media directory you tell it to, and provides a beautiful frontend that is fully-customizable. The directory can be local (on the device the app is installed on), or from another provider... like Jellyfin. The set up process is incredibly simple, and the software costs $6 USD for lifetime access.
Besides a better-looking interface than Jellyfin, Symfonium provides better playlist management, local playlist art options, and better handling of finding and organizing your musics metadata. I found Symfonium when I started using GrapheneOS with Android auto (I have a short guide here), and learned that Jellyfin doesn't support playlists on the AA app. Basically, if you listen to a lot of music... you'll want Symfonium as a finishing touch to your collection of self-hosted media.
Maintaining a home server (or homelab) is a lot more manual work than subscribing to a few different streaming services. I think the trade-off, however, is worth it. With my current setup outlined above, ownership and privacy are maintained while also allowing me to be more intentional about the content I stream each day. Avoiding an algorithm and taking my data out of the hands of corporations whose main business is to buy and sell user data (not provide the best product) is always a win to me.