Home server

A decade ago, I have grown frustrated with my multimedia setup. I had hundreds of movies on a computer connected to the television. Navigating the increasingly disorganised collection of files from the couch was a painful experience. I tried all sorts of solutions, but they never got it quite right.

Out of sheer frustration, I decided to build my own. At first, it was a simple page that listed the media files, and launched VLC when you clicked one. Through several redesigns and rewrites, it became closer to a personal Netflix. I added a cover list, authentication, automatic triage, support for episodes and seasons, browser playback, a responsive design, subtitles support, Chromecast support, SSL and so on.

This is my longest-running project, and one of my favourites. It does exactly what it should, and it's a nice test bed for new technologies.

What it does

When a torrent is finished downloading, the media files appear in the triage pile. On the triage page, I match the files to movies or TV shows. The server pulls the movie title, description and poster from TMDb, and adds it to the library.

In the background, the media files are renamed and moved to a neatly organised folder, along with the poster and the subtitles. The movie is converted to .mp4, and the subtitles are converted to .vtt. This way, they can be played on the web, on a Chromecast, or on any other device.

Everything is locked behind a login prompt. I have an administrator account, and many of my friends have user accounts. They can watch movies, but also star them, and keep track of which movies they've seen and not seen. If you return to a movie, the player remembers where you left off.

How it does it

In its current iteration, the home server is a VueJS frontend, a Django backend and an rq conversion pipeline. The conversion pipeline uses ffmpeg to convert the movies for web playback, and mkvtoolnix to extract subtitles from MKV files. I get movie information and posters from the TMDb API. Everything runs inside Docker containers on a recycled laptop