Club Vacationland

Audio Utilities: MixClub & UnMix

Building New Applications to help produce REALLY complex audio projects, and doing that to match my very specific skillset and creative production needs; I've created an empire of audio software.

Role
Developer, Designer, R&D
Team
Just me
Year
2026-10
Tags
New Technology, R&D, Party
Tools
MixClub, UnMix, Electron, React, TypeScript, Python, SQLite, Web Audio, librosa, Demucs, Roformer models, CoreML, Ableton Live, Claude Code, GitHub

I make mixtapes, and the work is mostly done in Ableton. The warp markers I've set on every track are hours of work. Library tools move and rename files and leave those warp files behind. Stem splitters are worse: split a track you've already warped and the new stem doesn't line up anymore. And there's tons of artifacts that aren't good enough, even for my mediocre production. I needed tools to help me with these tasks and I needed them to be... good!

Before we jump in to the full breakout, take a listen to this little excerpt that was only possible to produce because of the work completed here.

I took a 5 year hiatus and I was in a position where I needed to manage hundreds of tracks of music, their order, and whether they'd sound good together. Historically, I would grab all the tracks, throw them in a Spotify playlist, laucnh a tool like Sort Your Music to get BPM and then sort it from slower to faster. Then I'd use tools like Traktor to audition whether music matched, and sometimes I'd do a full mix live using that tool. I would also use something like iZotope's RX to seperate out stems (example: if I really liked the drums from a certain track and wanted to mix it with the synth of another). Traktor got too bloated for me, and iZotope was the best stem splitter for a long time until tons of new machine learning processes came on the market. I've also always really disliked the UI and prefer a lot of the built-in noise reduction tools found in Adobe's Audition (audio waveform NLE).

So I built two apps that carry the warp work along instead of breaking it. And a whole lot more! MixClub is the library side, UnMix is the stem side, and the proof is probably the best work I've ever done.

A desktop app that sits between my music library and Ableton.

  • Analysis. BPM, key, beat grid, and whether a track already has an Ableton warp file. Grids lock to the beat the audio actually keeps, and when a loose, live-played track reads at two-thirds of its real tempo, it catches that too. If a BPM still comes out wrong, I give it a rough tempo (or tap it) and it re-detects.
  • Two decks. Crossfader, master BPM, sync, key lock, three-band EQ, loops and cues, so I can try a transition before I ever open Live. Pairs that work get saved as combos.
  • Key Audit. When I don't trust a key, it plays a drone and a chord progression in that key against the track, plus a cadence, a scale run and a tritone test. I compare it against the alternatives and override it by ear.
  • Locked mixes. A finished tracklist stays locked while I try new tracks against it: a second library window to drag candidates in from, a right-click that drops a track at the best BPM and key position, and a draft copy to try it in first.
  • Library cleanup. Copy-only importing that keeps every warp file with its track, renaming from tags (the warp file gets renamed too), identifying tracks by their audio through AcoustID and MusicBrainz, duplicate detection, and a finder for better-quality versions of tracks I already have. It runs a library of about 12,000 tracks and syncs between two Macs, fixing file paths on the way.
  • Tapes. Old tracklists import and every line links to an actual file, so I can see which tapes a track has already been on. It'll also pull in Spotify playlists and sort them by BPM.
  • Playlist fuck around. You know what all the tracks are but you need to test out different orders without breaking the palylists. Now I can mess with the order, move things around, and not worry about it.

How good is the key detection?

Slightly behind Mixed In Key, level with the big DJ apps, and I can show my work. Somebody already did the hard part: Bas Curtiz's 2025 key-detection comparison runs thousands of tracks with keys checked by ear through every major DJ app. I pulled the 79 of those tracks I already owned into a test folder. 69 matched, and 67 of those have a plain major or minor answer to score against.

The first version used Temperley key profiles, a classic music-theory method. Version two swapped in MusicalKeyCNN, an open neural net. On those 67 tracks:

  • Mixed In Key: 61 right (91%)
  • MixClub: 52 right (78%)

Every track MixClub got right, Mixed In Key did too. Against rekordbox, Traktor, Engine DJ and the neural net's own published run, the differences on 67 tracks are too small to call either way.

My library leans electro-pop, disco, hip-hop and indie, and the model was trained on electronic music, so I also ran it on GiantSteps, a public set of 604 EDM tracks with checked keys:

  • Mixed In Key: 69.4%
  • MixClub: 67.2%
  • Deezer's S-KEY (a newer open model, 2025): 64.4%
  • rekordbox: 56.8%

Two points behind Mixed In Key, and on 604 tracks the test can't tell the two apart. On electronic music it's in the race. On everything else Mixed In Key's lead is more significant, about 14 points for the same model across nearly 1,000 of Bas's mixed-genre tracks.

Then I spent a night trying to close the gap cheaply: about 25 variants (tuning correction, ensembles with the old method, a major/minor tiebreak, pitch-shifted voting) plus that newer S-KEY model. Anything with a setting was tuned on half the public set and judged on the other half. None beat what was already build. Closing the rest would take training a model on more genres, and nobody has shown an open model getting there yet.

Also, this thing is a totally rad music player too. The line level indicators were inspired by an old Luxman amp I used to have.

With UnMix, I got tired of buying iZotope RX every few years and still being let down, by what it could do and by how it sounded. Most of the other paid splitters I tried couldn't match Ultimate Vocal Remover, the free open-source one, and in my ears neither could RX. UVR had the results.

What it didn't have was the kind of interface I'm used to working in or a production-ready set of utilities.

So UnMix started as a fork of UVR: the same free models, an interface built the way I work, and the goal of results as good as UVR's or better. It turned into a production pipeline on top of those open models. What it adds:

  • Presets and chains instead of clicking through settings for every song, and a job queue that runs them in the background, fastest presets first
  • Stem Swap and Conform: drop a better separation into an Ableton set that's already warped and edited, and it comes out sample-exact, so every warp marker and edit lands where it was. It checks the pair first and tells you green, yellow or red. In practice this means I can drop stems in after going through UnMix into Ableton, and they'll use the warp markers from the original track to be sample matched. No manual re-warping or phase correction on stems - something I've hated doing for years.
  • A/B tester: loudness-matched, labeled-by-number playback for comparing models blind
  • Rebalance, for remixing a song's stems on faders, with a loop region, a zoomable waveform and export to wherever the set needs it
  • Restore, a cleanup and upscale stage for stems that come out dull
  • Dialogue isolation for pulling lines out of film and TV. Using this with Rebalance means I can audition SFX removal and/or music removal. See ya later laugh tracks! I can finally sample stand up shows and Seinfeld without painfully removing that pesky audience.

Every model got judged by ear: loudness-matched, labeled by number so I didn't know which was which, looping the same hard sections every time (a vocal coming in and out over drums on "Cheap Talk", the synths on "I Ran", the drums on "Feel Good Hit of the Summer"). The published scores were only used to decide what was worth a listen. Around 270 test renders so far.

I just really wanted clean drums haha

Here's some of the A/B efforts I did:

  • Vocals and instrumentals. Started on UVR's MDX-Net ensembles, which sounded underwater and thin. Moved to a MelBand Roformer, then to InstVoc Duality, which gives clean vocals and instrumentals from one pass. BS Roformer SW went up against it and lost on a proper lead vocal; it stays as the backup for sparse, atmospheric bits where Duality lets a synth leak in. becruily's Deux got parked: it would've meant hacking the model registry and loading an untrusted file.
  • Lead vs backing vocals. Two karaoke models split an already-isolated vocal: Aufr33 and Viperx's for the lead (it keeps the reverb and doubles), Gabox V2 for the backing.
  • Drums. The original preset (htdemucs 6-stem plus an AudioSR pass) ducked out wherever the vocal was and took 16-18 minutes a track. The fix was a cascade: strip the vocal with Duality first, then pull drums from what's left with htdemucs_ft. No ducking, about 2 minutes. BS Roformer SW on its own came out a dead tie across five tracks (fuller hits, different cymbals), so both stayed. For stubborn bleed there are two more: one that runs the cascade's drums back through SW, and one that runs both models and keeps only what they agree on. Demucs itself got about 5x faster once it ran on the GPU instead of the CPU.
  • Bass. htdemucs has the pluck and slap but lets some background through; SW is clean but flat. A blend of all three won on "Another One Bites the Dust".
  • Guitar and piano. htdemucs's 6-stem versions were too weak to use. SW's are usable.
  • Dialogue. BandIt Plus, trained to split speech, music and effects. I got it running on the Mac's GPU: a 30-second clip went from 80 seconds to 18 with the output matching the CPU version. Bandit v2 is next to try.
  • Restore. AudioSR and Apollo, with the blend picked by ear.

This all took hundreds of hours, but worth it? I guess.

Alright, let's do the numbers 🎶

  • 1 Ableton set
  • 6 Months
  • 34 stems conformed sample-exact before they went in, 3 of them swapped into the set after it was already built
  • 6 decks, plus two vocal decks, a scratch group and a group of samples
  • 45 drum stems
  • 79 instrumentals
  • 92 vocal stems
  • 119 songs split into 222 stems in the set
  • 166 full tracks
  • 4,297 clips
  • 178 versions of MixClub and 76 of UnMix released along the way 🤢☠️

Built with: MixClub is Electron, React and TypeScript, with Web Audio for playback, Signalsmith Stretch for key lock and a Python sidecar (librosa, MusicalKeyCNN) for analysis, all on SQLite. UnMix is Python on top of audio-separator, running Roformer, Demucs, MDX-Net and BandIt models through CoreML and the Apple GPU.

UnMix stands on a lot of other people's work: Ultimate Vocal Remover (Anjok07, aufr33 and contributors), Demucs, the Roformer, MDX-Net and karaoke model authors (including Kim, viperx, jarredou and Gabox), BandIt and MSST (ZFTurbo), AudioSR (haoheliu), Apollo (CC BY-SA) and python-audio-separator (nomadkaraoke). MixClub's key model is MusicalKeyCNN, its track lookup is AcoustID and MusicBrainz, and the benchmark is Bas Curtiz's. Thank you 🙏

And yes, I'm a complete psychopath because there are two designs for the app to suit my moods... and themes within the designs. Sheesh!

Project Gallery

1 / 8