Home Media

Jellyfin Media Client

My Firestick died and I had a Raspberry Pi 4B sitting around, so I turned it into a media client instead of buying a replacement. Not really a networking project, but it touched enough of my homelab that things got complicated fast.

Stack

Raspberry Pi 4B

Plugged into the TV over micro-HDMI. Sits on my IoT VLAN, separate from the server it streams from.

LibreELEC

A minimal Linux OS that exists solely to run Kodi. No desktop, no package manager. Boots straight into the media center UI.

Kodi + Jellyfin Addon

The Jellyfin for Kodi addon syncs my library from the server and handles playback. Streams over HTTP from my Jellyfin instance on G5.

Jellyfin Server

Already running in Docker on my home server with Intel Quick Sync for hardware transcoding. The Pi 4B handles H.265 natively so it rarely needs to.

How I Built It

Flashed LibreELEC and got it on the network. The Jellyfin addon isn’t in Kodi’s default repo so I installed it manually over SSH. That opened up a dependency chain where Kodi silently ignores anything not registered in its SQLite database, so I had to download each missing module and enable it in the database manually. Ten modules total. The addon also had a bug where a service restart crashes with a KeyError. One line fix once I read the traceback.

What I Learned

The biggest thing was understanding how Kodi’s addon system actually works. It’s not just a folder of plugins. There’s a database managing state and the two have to agree. That kind of gap between files existing and a system actually knowing about them shows up everywhere once you start looking.

Also just confirmed that reading a traceback is faster than guessing. Every error in this build pointed straight at the fix once I stopped skimming and actually read it.