Kodi Setup: Sailing The High Seas

I’m not as radical as I used to be and so I do have a Netflix account1. There are still many shows and movies that I can’t access legally without paying up for yet another media streaming service. Of course, a mere DRM won’t prevent me from watching the latest seasonal anime or another random pop culture show. I’m sure there will be some misguided people saying how I’m stealing other people’s work but I will defer this debate for another time.

Of course, my first approach, which I’ve used years ago was setting up Kodi with some 3rd party add-ons, but there were lots of problems. In hope of evading prosecution by the legal system, most Kodi add-ons are built on top of a long chain of services, each doing one thing that is probably legal, except the uploader itself of course. Kodi itself is only an extensible media player and the addon is only a scraper of a third-party service which is only a video hosting service, no one here is technically doing something illegal. This solution exists not because of technical merit but because of legal practicality. I got tired of the constant breakage and decided to abandon Kodi for a while.

My Current Setup

A few months ago, I decided to take a fresh look at Kodi, this time with a focus on using Kodi’s built-in library feature. Kodi itself is left in its default setup, only with a configured remote directory (in my case FTP but there are many options available). I pulled the complexity out of Kodi and onto a Raspberry Pi 4 that I’ve bought. I still have a complex chain of responsibility but at least it’s managed on a proper Linux machine instead of as add-ons inside Kodi on a Chromecast.

a diagram of my Kodi setup

The graph is a bit of a mess but it’s quite simple in reality. Kodi is fetching a directory, looking for TV shows and Movies2, and indexing it in its library. Simply putting a movie or a show manually in the expected format in the directory is enough to make Kodi works nicely. The hard part is getting the file there properly. I mainly use torrent trackers, and for that my preferred client is Transmission, for no particular reason. But searching for torrents manually through all of the relevant trackers is cumbersome.

On top of Transmission, there are wrappers called Sonarr (for TV shows) and Radarr (for movies). Unlike transmission, which is a generic torrent client, Sonarr and Radarr are specialized in a specific type of content and provide a simpler interface to it. Instead of choosing a torrent, you choose the content you want and they will search for it, download it and organize it for you. They support several trackers out of the box but most people are using them with a wrapper, like Jackett, which knows how to scrap dozens of trackers and expose them in a unified API.

Problems With The Setup

I haven’t tinkered with my setup for a while, so it does work reliably. But I don’t think I would have done things the same if I had set it up today. There are two big issues with the current setup.

Deployment

As I had talked about before in this blog, I’m against deploying programs with a shell script. Sadly most of the required services did not provide an RPM so I had to install it manually or use a docker container. I tried to create the RPM myself and push it upstream but building .NET projects proved to be more difficult than I expected.

Complexity

Sonarr and Radarr are good in theory but in practice, they caused me more headaches than they helped me. Sometimes I get a show in the wrong language and sometimes my flatmates accidentally downloaded a movie of the wrong quality.

Kodi UX

Kodi is a beautiful application, with a great UI and a terrible UX. Time after time, I try to configure Kodi to have a proper UX just to realize it’s impossible without writing the addon myself which beats the purpose.


  1. Well, I free ride my parents one, don’t think I would have paid for one myself. ↩︎

  2. The directories are actually separate but it’s not important. ↩︎