Looong time ago I've started to convert my quite big CD collection into MP3 files. This was a tedious task so this called for some scripts to simplify the work. This was around 1996 or so when everything I found on the net didn't fit my needs. Again, it was time to "roll my own".

At this time it took my computers (yeah, several of them simultanously) ages to grab and convert the data. Keeping track of everything got hard. So the first set of scripts was about "jobfiles". Each grabbed disc was accompanied with a jobfile. Immediately after grabbing the disc with "dudl-grab" I've vi'ed the titles + artists into the jobfile and submitted it for encoding with "dudl-encode". Encoded files were fed to "dudl-rename" to give the files names according to a homogenous scheme and set their ID3-tags with the jobfile's information.

It turned out quite handy to do bulk updates on jobfiles within vi or with other text-tools - especially for renaming files I've encoded without dudl-grab/-encode/-rename. Usually their file names don't match my naming scheme, but "dudl-rengen" guesstimates the metadata and creates jobfiles I can adjust and feed to dudl-rename.

When I've archived the encoded files, I've kept the jobfiles because I've gotten used to running in the limits of ID3(v1) and ISO filesystems. I had plenty files with titles that didn't fit. The primary archive was on MP3 CDs. Though I kept copies of quite a number of MP3 CDs ("storage units") on harddisk - each disc in a subdir. A symlink farm glued them together into something more human-friendly.

Most of the time I've searched the archive with file lists and grep, but I wasn't satisfied with the capabilities so I put the jobfiles' data into a postgresql "dudl-db". The DB also had information about the data on MP3 CDs currently not available (neither copied to harddisk nor mounted, ...)

In the beginning I was quite satisfied with mserv. I loved it's way to add arbitrary tags (aka Genres) to the tracks and filter based on these tags. Though with a growing archive the startup times increased a lot and updates to the metadata were a pain. For a long time I've generated the metadata out of the DB and restarted mserv after each update. It was a hassle to make it work with parts of the archive living on readonly media. In a first attempt I've tried to teach mserv accessing my DB directly, but I got too despaired and rewrote "a networked jukebox" from scratch: "dudld".

I've put dudld a step further and allowed multiple tags per track. This allows very powerful expressions for searches and random playback filters by looking at several tags. Recently I've been looking at other "networked jukeboxes" like xmms2 and MPD but couldn't find anyting offering something similar. As examply my random filter usually looks like: ( !( tag IN "bad", "junk", "norandom", "failed" ) )&( tag IN "metal", "rock", "indie")

Unfortunatly my enhancements weren't compatible with the old mserv protocol. Well, it had some other shortcomings, too, but I don't remember the details. So I bit the bullet, abandoned all the wonderful clients for other jukeboxes and wrote my own clients.

file based tools:

Uses cdparanoia to grab files from CDs, pulls details from freedb and generates a jobfile.
Feeds all job's files to lame. I've also had a version that spread the encoding to serveral networked computers.
Renames the MP3s and sets their ID3 tags according to my naming scheme (Schemes are configurable).
Helper scripts coordinating the work, moving jobs between differnt directories in my "spool". Where needed drops you into an editor with the jobfile to allow you adjust the auto-discovered data.

DB tools:

Scan file contents of MP3 CDs and adds the data to DB.
Fills and maintains Artist, Album, Title, Tag tables in DB.
Some quick and dirty CGI scripts for browsing the DB.

Jukebox dudld:

Jukebox clients:

Take a look at the Screenshots.

Download / Install:

Dudl is split into several packages, that have to be installed individually. Usually each packages comes with it's own README. I'm still working on improving the documentation. There are also debian build scripts included.

The individual packages have the following requirements:

package: dudl

The base package with the file and DB tools. The individual tools require:

Code is available in my dudl github repository.

package: dudl-www

DB web-frontend

Code is available in my dudl-www github repository.

package: dudld

Jukebox daemon.

Code is available in my dudld github repository.

packate: dudlc

Client library and some clients for dudld. The individual clients have the following extra requirements:

Code is available in my dudlc github repository.


dudlc 0.1.16 2009-04-24

dudld 0.1.22 2009-04-24

dudl 0.1.21 2009-04-24

dudld 0.1.21 2008-12-31


Where possible I've used the MIT "free to do what you want" license.

According to my understanding that's not possible for the command-line dudl-client (uses readline with GPL) and dudl-lirc (ueses lirc with GPL). So they inherit the GPL license from the libs.