Djukebox is an HTML 5 audio player, along the lines of Google Music, except it's a Django app which you can install and run on your own server. This is intended to be 100% HTML 5, so no flash player fallback, mp3 and ogg audio only, and an assumption of support for modern JavaScript and CSS (you can always create your own templates if you want to add a flash player). The default configuration can accept mp3 or ogg audio for upload. If an mp3 is uploaded then an ogg will also be created and vice versa.

Djukebox is currently very early in development and so most features don't exist or are buggy, of course. The UI is mostly non-existent. Asynchronous upload of files to allow continued browsing while uploading, audio encoding asynchronously within Celery tasks, and (buggy) playing using the browser's built in audio player are all functioning, though.

Audio encoding can be troublesome and the desired trade offs will vary from person to person. With that in mind the audio encoding is modular and a user can write their own classes to handle encoding. This means that a different audio encoder can be used, different settings on the audio encoding, etc.

Editing track data including title, artist, album artist, and album title has been added. The album artist and album title are part of the track data, so editing the album title for instance, would not change the name of the album the track is currently associated with, it would associate it with a new album (or an existing different album) with the correct title and artist.

Made a bunch of changes to the JS recently. The JavaScript has been cleaned up quite a bit, especially in the url -> view routing area and just in getting variable and function names using consistent capitalization styles.

The URL to view routing is now like a simplified version of Django's routing. There is an object which you register a list of routes which are a regex, a function callable for the view, and a context object to pass into the callable. The regex is matched up to the hash fragment in the url and the callable is called.

Just pushed a fairly big change out to github yesterday. The update has done away with all of the iframes. The uploader iframe has been replaced with an ajax upload courtesy of blueimp. The main content iframe is now being handled by ajax calls back to a new Tastypie powered REST API and updated with handlebars.js templates.

A rework of the UI is in progress. I am working on removing the primary iframe and re-implementing with Handlebars.js templates and ajax calls to a Tastypie API. I intend to stick a post or two over on the blog about my experience using handlebars.js along with Django.


Mar 04, 2012
Page updated:
Jun 30, 2012
Latest News:

View this project on:

github - git