Movies index page, dynamic tiled layout. Pre CSS grid

μv (aka muvee)

Feb 2, 2013

The goods

What is it?

muvee is something like Netflix, but run on a server from your own home. I created it to be an open source alternative to Plex. It can attempt to reach out to the Internet to find copies of media that you already legally own, but do not yet possess digital backups thereof.

muvee can control your Philips Hue light bulbs, dimming them when playback starts, and brightening them when playback is paused. There's even rudimentary support for copying hues from frames of playing video for added ambiance.

muvee reaches out to various metadata providers to enrich your media, downloading descriptions, lists of actors, audience feedback ratings, MPAA ratings, and most importantly, appealing background images.

You can mark a movie or TV series as a favourite, giving you quick access to it via the side navigation. This is handy for reminding yourself to check up on movies that may not have released yet, or for quickly resuming playback of a series you're currently binge-watching.

The series index has a shuffle button, which is great for creating an infinite playlist of that specific TV series. The Simpsons lends itself well to this mode. Since all the content is local, you don't have to deal with "Are you still watching?" halting your playback.

There's built-in discovery of new TV series and movies. muvee consults YTS and EZTV for new items.

Throughout the app, there are refresh buttons to reanalyze items, pulling down any updates to the metadata and fixing any difficult-to-categorize sources. Ideally, the buttons will be removed and this process will happen automatically.

My original motivation for creating muvee was that I wanted to view my media on my PS4, which did not support DLNA at the time. Alas, as I've iterated on the styles, I noticed that the PS4 browser can't handle flexbox. So, this is currently unusable on PS4. I've been using it with Chrome from a Mac Mini connected to my TV.

Why use this instead of the alternatives?

Popcorn Time is a modern marvel, but I believe in bandwidth conservation and caching things that I might use again. You would not believe how many times I've re-watched American Dad! The last time I checked, Popcorn Time just tossed all video files upon exiting.

Plex is great software, and has an incredible ecosystem around it. If you want a media manager that just works, I'd recommend you to use Plex. From my experience, Plex doesn't categorize media as well as muvee. It's also not completely open source.

I also looked at emby, and while nice and open source, it seemed a bit too complicated to really get going. The codebase is also prohibitively large for me to think about trying to tweak things.

Technical points of interest

I'm using two great libraries, TurboGraft and Twine, and this has greatly accelerated development. With them, I can make a website that behaves more like an app, without needing to write a true client-side application. So, at its core, it remains a simple rails project. Thus, this project mostly mirrors the paradigm my colleagues and I developed for the Shopify admin interface. I'm a firm believer that single-page applications have their place – when the task at hand is actually building out an application – but muvee is ultimately just a fancy CRUD website.

Background workers are heavily employed, as reaching out to all these metadata services is expensive and slow. Media is transcoded with avconv in the background, since browsers can't handle all modern codecs. Transcoding was/is a huge pain in the ass, but thankfully most rippers use h.264 now.

Current status

I am actively developing muvee, and use it in tandem with my Netflix subscription. It's gotten to the point where I very rarely have to manually intervene to correct unexpected behaviour. I love it, passionately.

Detailed movie view page, when movie is sourced
Hit 't' to quick search from any index
The player, playing an episode of Rick and Morty
Series index page, poster layout
Detailed series page, viewing 2 episodes in detail