Creating a media server is a great way to access all the stored media content on your hard disk in a centralized manner. I have my fair share of free media, family events, and personal memories stashed in multiple hard disks and SSDs. It's tiresome to hook each of the drives to the PC or copy the media to the phone to view them, and Jellyfin sounded like a great idea to start.

While it's wise to set up a media server on a fairly capable PC or SBC with a good amount of memory, I wanted to know if it could work on something less powerful, like the Raspberry Pi Zero 2W. I tested Home Assistant on the Pi Zero 2W, and the results were mildly impressive. But I was determined to at least try it and had to cross a few hurdles before I could get it up and running. Let's discuss the Jellyfin server experience on my underpowered SBC without further ado.

Installation Hurdles

Pi OS doesn’t love Jellyfin

What fun would the installation be if it worked as you thought it would the first time? I had the same experience installing Jellyfin on the Raspberry Pi OS 64-bit based on Bookworm. The installation needed a bit of tweaking, but I could finally install it. Then I proceeded to set up the web server, create an account, and add the drive from which Jellyfin was supposed to access media files.

However, it was a frustrating experience as I couldn't get Jellyfin to identify the field, resulting in a completely blank Home page. It couldn't access any files or folders, and I even tried assigning access permissions via the terminal, but that didn't seem to have any effect. What now?

Switching to a different operating system

DietPi is a lifesaver

While the GUI version of Raspberry Pi is a treat to work with, I had to move to DietPi for two reasons. First, running a non-GUI operating system for Raspberry Pi would free up some system resources, and secondly, the installation was much simpler than Raspberry Pi OS. After the initial DietPi setup, I used the built-in DietPi-Software utility to download and install Jellyfin on the Pi Zero 2W. Jellyfin is one of the packages listed in the recommended section, so you won't have any trouble installing it.

I restarted the Pi and then used htop to verify if the Jellyfin server was up and running. The next piece of the puzzle was to add the storage device that hosts the media. Simply plugging in the SSD won't work because it won't appear in the list of available storage devices in Jellyfin. Raspberry Pi OS mounts the storage devices easily, which is better, but it poses a problem for the later setup.

I used the DietPi-Drive_manager tool to find and mount the SSD, then switched to a web browser on my PC. I was surprised that the default port 8096 didn't work in my case, as it does with any Jellyfin server installation. So, I had to use the ss -tulpn -list command to check the port assigned to all services. Jellyfin uses port 8097 on Dietpi, which you must remember if you pick it as your operating system. You can also use ss -tulpn to find the assigned port.

👁 Tips to make the best of Jellyfin
6 reasons to host your own music streaming server with Jellyfin

Here are some of the reasons why hosting your music server locally seems to be making a comeback

Setup and playback experience

Better than I expected

Configuring the Jellyfin server is not as complicated as I thought. After an initial credential creation and folder selection session, I set up a few options and could finally access the Dashboard with my primary folder. Since the scan can take a while, I gave Jellyfin a few hours to find everything on the disk. I didn't tweak any other playback settings to see if the default settings were good enough.

I started with an old cartoon episode in 1080p that played without any issues. The player didn't get stuck abruptly and had no problems forwarding the clip. Even changing the playback speed or adding subtitles worked flawlessly, and I didn't notice any drop in quality. Then I played the wedding ceremony of a friend who got married last year. It was a 1080p file I downloaded from YouTube, and it loaded instantly, looked fine, and worked even at 2x playback speed.

Note that this happened on a wireless connection with a maximum speed of 50Mbps. Even playing medium-quality files was fine with this small setup. However, I noticed a lot of grain while playing high-quality media, which is probably too much for the Pi to handle.

Even accessing Jellyfin on the smartphone was a breeze. You must put the same IP:port number combination in the address bar, and the Jellyfin web UI will load. Since there's no dedicated app for Jellyfin, you'll have to bear with the browser interface. If you don’t like the player experience, copy the stream URL, paste it into VLC, and watch it there.

I found the phone streaming experience similar to the desktop, but noticed one huge problem. I could access the server when I was on my home network, but couldn't do so on mobile data or when connected to any other wireless network. It turns out you need to set up a separate service for that.

Tailscale to the rescue

Remote access for my Jellyfin server

Accessing the Jellyfin server outside your home network requires much effort if you wish to do it manually. However, I opted for an easier route with Tailscale. It's a VPN service connecting your streaming service and device to the same network. You don't need to change anything on your router. Simply install it on the Pi, log in to your account, and do the same on your PC. To access Jellyfin via phone, you must install the app and sign in with the same account.

Tailscale supports SSO sign-in from a few providers, such as Google, Microsoft, etc., so use one of those accounts. After setting it up, open the Tailscale website and copy the IP address of the media server device (your local IP address won't work here). When connected to any other network, type the Tailscale IP:8097 (or 8096) to access your Jellyfin media server.

Tailscale enabled remote access, but it came at a huge cost. The streaming experience didn't stay the same after that, with a significant increase in load times. I didn't find the playback as smooth as the local network, but it's the price you must pay when you put a VPN into the mix. One helpful use case I found for Tailscale was that I could download any of my media files remotely. The download speed was decent, and I could watch it in pristine quality.

👁 Installing Jellyfin plugins
4 more plugins to enhance your Jellyfin experience

Jellyfin is a powerful open-source media manager. These four plugins enhance the software even further.

Jellyfin is possible on Pi Zero 2W

I always tend to undermine the Pi Zero 2W, but the results were far better than other projects I've tried. Pi can act as a responsive media server, stream 1080p files without any hiccups, and the download option in Jellyfin is a bonus. The Tailscale implementation slows everything down, but I’ll try to find a way for that in the future.