MousikóFídi: My Music Cloud

Posted:

A web application that will serve audio and video files over HTTP, and is usable on viewports of all sizes. MousikóFídi is something I made for myself, but it is dedicated to all music-lovers of the world. Read on to find out more about what it is, and why I made it.

What, Now?

If you're not familiar, I'm talking about a music and video player that works in your web browser! The software runs on some server, be it a local machine where your collection lives or something else, and any device with a modern web browser can open a URL and begin enjoying audio and/or video. 1

MousikoFidi is such a web-based music player that can load your collection from a directory structure automatically, without any need for a database, and it has a responsive user interface that looks great on mobile devices.

Why?

I had been a user of Ampache since around 2009; I just loved the idea of streaming my personal collection through a web browser! I would continue to use Ampache for nearly ten more years, it served me well and continues to be great software.

The initial urge to make "an Ampache clone" came after reading Drew DeVault talk about using Flask to make Sourcehut. 2 I was no stranger to web development with Python, but I never really made a "real" application with Flask. I'd used Django quite a bit, as well as a bit of Bottle.py, but no Flask.

A little over two years ago, I began cycling regularly. I often liked to listen to music on my phone as it was strapped to my arm, speaker pointed towards my head. Who doesn't love some nice tunes during a workout? Of course it struck me to use Ampache during these rides, via the Power Ampache app for Android.

For whatever reason, I would have consistent issues with Power Ampache not continuing playback when a track ended. It was bad enough that I stopped using it altogether, choosing instead to load up my device with audio files from my collection. This worked fine for a while but is inflexible for someone like me who doesn't have any Google "apps" or any connection to "the cloud" from my device; I have to connect my device via USB, and use adb from my computer to move files onto the device. 3

Do It Yourself

Faced with this, I did what most folks probably wouldn't do: I decided I wanted to write my own web-based music player application. But I wouldn't actually start work on MousikóFídi for almost another year.

When I finally did begin work, I had taken a few weeks off from my day job but made no specific plans. That morphed into "hack furiously on some Javascript and Python", though! Within a few weeks I'd have a reasonably usable prototype, and it would finally dawn on me just how much more work was ahead of me to get things really fleshed out.

I had a few specific goals in mind for the "base functionality" of MousikóFídi:

I didn't actually plan all of this from the start, though. It all sort of began with me implementing things that just felt or seemed right ("furiously hacking", as I mentioned before). 6

What Can It Do?

If you've read this far, you deserve some explanation of what MousikóFídi can actually do. Here's a quick run-down of features I didn't already go over:

I wasn't specifically looking to match all functionality provided by other softwares like MousikóFídi right away, but I do want to close some functionality gaps where it makes sense.

The Future

Of course you can always do more, and although with the coming "1.0" release I do consider the core of MousikóFídi to be "feature-complete," I'm looking forward to adding new functionality. This includes but is not limited to:

Want to try MousikóFídi? Please check out the demo!

Last but not least: if you're interested in the development of MousikóFídi, please consider subscribing to the mailing list.

Thank you for reading!

Footnotes And References

1 By "modern", I mean having usable <audio> and <video> elements and supporting newer ECMAScript features.

2 As I understand it, at least a few of those components have since been rewritten in golang!

3 For the curious: I'm using LineageOS with FDroid as my only source for software. No Google, no way!

4 Running it in "production mode" is also arguably more simple than with similar software; the Nginx config is little more than a proxy_pass definition.

5 Noteably, many things that are syntactically concise when using for example, jQuery, are a bit (to a lot) more involved. Also, coming up with a crude but simple method for stopping asynchronous functions mid-execution was a fun bit of research. For the curious.

6 Nowadays I do keep an org-roam document with my notes for MousikóFídi; I've got development plans for all the way out to version 4.0!

7 A huge thank-you to Cadence on Sourcehut for suggesting this feature!

This page was last modified on: 2020-07-26