Functional specification · draft 1 · August 2026
The lock-in isn't the software — it's the format on the USB stick. That format is public, documented and writable. So build the library DJs want, write the drive yourself, and put something on a CDJ-3000 that AlphaTheta's own software can't: stems, standalone, no laptop in the booth.
Serato, VirtualDJ and djay all separate stems in real time — on a laptop. Rekordbox does too, in Performance mode, which means the CDJ-3000 gets stems only while a computer is running. Engine DJ took the other route: render the stems at home, play them standalone. It works, and it's the only route that works on club hardware.
Demucs is a masking separator: every stem comes back with the same sample rate, channel count and length as the mix it came from. That one property is the whole trick. The beatgrid, the phrase boundaries and all eight hot cues of the parent track are valid verbatim on the acapella and the instrumental. Rendering a stem becomes a file operation; the musical preparation is inherited, and the two decks can never disagree about where bar one is.
The rendering pipeline already exists in this repository — demucs, format-matched output, tags copied from the parent with the stem name appended. What the spec adds around it is the part that makes a stem play well in a booth: gain applied to the samples rather than written as a ReplayGain tag players ignore, clipping prevented rather than reported, isolation quality scored per track, and companions sorted directly beneath their parent in the exported playlist.
Rekordbox splits into Export mode and Performance mode — two mental models over one library, a seam that exists for licensing reasons rather than for anything a DJ wants. Here there is one view. The prep editor sits under the browser rather than replacing it, so arrow-keying down a crate moves the waveform, and every prep action is one keystroke from the list you're digging in.
Collection
Playlists
Saved queries
| Artist | Title | BPM | Key | Energy | Stems |
|---|---|---|---|---|---|
| Peverelist | Roll With The Punches | 128.02 | 8A | kit | |
| ↳ Peverelist | Roll With The Punches (acapella) | 128.02 | 8A | vocals | |
| ↳ Peverelist | Roll With The Punches (instrumental) | 128.02 | 8A | melody+drums | |
| Batu | Marius | 130.00 | 4A | ||
| Bruce | Just Getting Started | 128.00 | 8A | kit | |
| Pessimist | Hunter | 172.00 | 11B | ||
| Ploy | Ramos | 126.50 | 8A |
Now inspecting
Stem kit
Tags
Related
The main window. Query bar instead of dropdown filters; prep under the browser instead of replacing it; the drive delta permanently visible in the dock, because it is the number that decides whether tonight goes well.
Everything the list can be filtered by is expressible as text, which means it is also scriptable, shareable and diffable. A saved query is a smart playlist — there is no second concept, no separate rule editor, and no 1,000-track ceiling of the kind rekordbox's Intelligent Playlists impose.
| Query | Finds | Query | Finds |
|---|---|---|---|
| key:~8A | harmonically compatible keys | missing:stems | no stem kit rendered yet |
| played:never | bought and never touched | missing:grid | unanalysed or grid rejected |
| added:<14d -tag:vocal | new instrumentals | dupes:title+artist | duplicate groups to merge |
| in:drive:SANDISK-64 | what's actually on the stick | format:flac bitrate:<256 | files that won't survive the booth |
The preflight runs before a byte is copied; the verification runs after, using a parser that shares no code with the writer. The sheet does not report success until the second one passes — because a writer that validates its own output is a writer that validates its own bugs.
The sync sheet. Every failure mode listed here is one that currently looks fine on the laptop and fails silently in the booth: float WAVs, AIFF-C, DRM'd AAC, over-length paths, NTFS, sample rates above 96 kHz.
Gathered from AlphaTheta's own community forums, the DJ trade press and the Mixxx issue tracker. Each complaint on the left generates the requirement on the right. Forum reports are cited as evidence that a complaint is common, not that any particular number is exact.
They show up to a gig, plug in their drive, and boom… playlists are gone.CDJ-3000 firmware 3.30, Oct 2025 — read the new database, refused to fall back to the old one. AlphaTheta pulled the update and told venues to roll back.
SAFE-1The drive is read back after every write by an independent parser, and the sync isn't done until every playlist, path and analysis file is confirmed.
Random time skips that ruin the beat grid.rekordbox 7.1.1 bug report — an already-correct grid shifted by the length of the skip.
ANA-9Every result records the analyser version that produced it, and a hand-edited grid region is pinned against re-analysis forever.
Clunky, no customization and lack of support for 3rd party plug-ins.The most-quoted user review of rekordbox on AlternativeTo, in full.
INTEROP-3/4Everything the window does, the CLI does, with --json on every command — plus a documented plug-in interface for third-party beatgrid and key analysers.
Too many bugs… takes forever to go from performance to export.Recurring across 7.0.7, 7.1.4 and 7.2.10 threads. The standard forum advice is to reinstall 6.8.
UI-1/3One mode, no seam to cross. A 100,000-track library opens in under two seconds and filters as you type — a hard requirement, not an aspiration.
It's too easy to break things.Digital DJ Tips on Cloud Library Sync: a Dropbox account AlphaTheta administers, move-vs-copy that deletes everywhere at once, greyed-out unplayable libraries.
LIB-8Sync is a file operation the user can inspect. Any storage they already have works, because we move files and a documented SQLite database — not a service.
Max of 1000 tracks per playlist.Forum thread on Intelligent Playlists. Also: no third-party plug-ins, no scripting surface, no API.
LIB-5Saved queries have no ceiling and return in under 200 ms over 100,000 tracks.
$10 to $36 a month, and version 7 moved things behind paywalls version 6 didn't have.rekordbox Free / Core / Creative / Professional, plus Cloud as an add-on. Reviewers' verdict: not worth upgrading unless you're paying anyway.
SAFE-6No feature is gated at runtime. The app runs, exports and reads the library with no network and no account — a lapsed licence never costs anyone their prep work.
Everything else in this spec is ordinary software. This is the part that decides whether the project is possible at all, so it comes first. A prepared drive holds a database of tracks and playlists plus one analysis file per track — and there are three generations of that database.
| Format | Storage | Documented | Read by |
|---|---|---|---|
| Device Library export.pdb + .DAT/.EXT/.2EX |
DeviceSQL, page-based, unencrypted | Yes — reverse-engineered byte-for-byte, two independent parsers | Everything since 2009, including the CDJ-3000 as it ships today |
| Device Library Plus exportLibrary.db |
Encrypted SQLite | No | OPUS-QUAD and later |
| OneLibrary Device Library Plus, rebranded |
Encrypted SQLite | No — spec unpublished | CDJ-3000X, XDJ-AZ, OPUS-QUAD, OMNIS-DUO |
The analysis files carry everything a CDJ-3000 needs and all of it is public: PQTZ beat grids with per-beat tempo, PCO2 cues and loops with RGB colours and UTF-16 comments, PWV5 colour waveforms, PWV6/7 the CDJ-3000's three-band waveforms, and PSSI song-structure phrases. A drive a CDJ-3000 will play can be written today, from Rust, with nobody's permission.
The CDJ-3000X is the other half of the story, and it requires OneLibrary, which is closed. Lexicon already ships both databases on one drive, so third-party implementation is evidently possible — by licence, by reverse engineering, or both. The honest plan is to be valuable before that partnership exists: v1 writes the legacy database and hands off to rekordbox's free Export mode for OneLibrary hardware. Clunky, and it works on day one.
| Capability | rekordbox | Serato | Engine DJ | Booth |
|---|---|---|---|---|
| Writes CDJ-3000 drives | yes | no | no | yes — v1 |
| Writes CDJ-3000X / OneLibrary drives | yes | no | no | phase 3, licence-dependent |
| Stems on a standalone CDJ | no | no | n/a | yes — pre-rendered |
| Stem quality | 3 stems, rated below peers | strong, real-time | pre-rendered | demucs, 4 stems, scored per track |
| Variable-tempo gridding | weak | weak | weak | first-class |
| Smart playlists | rule dropdowns, 1,000 cap | smart crates | limited | text query, no cap |
| Drive verified before the gig | no | n/a | no | independent read-back |
| File-compatibility preflight | no | n/a | no | yes |
| Reads booth edits & history back | partial | n/a | partial | as a reviewable diff |
| CLI, scripting, plug-ins | no | no | no | yes |
| Lighting, video, DVS, streaming | yes | yes | partial | no — deliberately |
| Cost | $10–36 / month | subscription | free with hardware | perpetual / open |
The honest reading: rekordbox wins on ecosystem breadth and on OneLibrary hardware until phase 3 lands. This wins on everything a DJ does between buying a track and playing it.
Write an export.pdb and ANLZ set for ten hand-prepared tracks. Nothing else matters until this plays.
Exit: a drive written by this project, played in a club, indistinguishable from a rekordbox one.Import, analyse, prep, export, verify. The complete cycle for CDJ-3000-class hardware, with the interface above.
Exit: a working DJ prepares a real gig in it and does not open rekordbox.The render queue, the kits, export adjacency, loudness on the drive copy, isolation scoring. Most of the DSP already exists; the work is the queue and the booth ergonomics.
Exit: a DJ plays an acapella off a USB stick on a CDJ-3000 with no computer in the booth.OneLibrary if a licence allows it. Serato, Traktor and Engine DJ import. Full-fidelity history round-trip. Pro DJ Link participation, documented by the same work that documents the export format.
Exit: the drive is no longer the only reason to open the app.| Risk | Response |
|---|---|
| OneLibrary stays closed | v1 targets the CDJ-3000 installed base, which is enormous and isn't going anywhere. Approach AlphaTheta early; keep the rekordbox hand-off working. |
| Firmware changes the format | It already happened to AlphaTheta's own users. Explicit compatibility targets, a public tested-firmware matrix, and never being the only copy of anything. |
| One bad drive destroys trust | This is the entire justification for the verification requirements. The promise is reliability; one silent failure costs more than any feature gains. |
| Beatgrids and keys are hard | Ship measured accuracy against hand-labelled sets, make editing fast enough that imperfection survives, and let someone else's analyser plug in. |
| Stems are slow and large | Per-playlist opt-in, GPU rendering, and honest time and byte estimates quoted before the queue starts. |
Can a third-party export populate Related Tracks and My Tag on a CDJ-3000, or are those tables written but ignored? Which .2EX fields does the three-band waveform actually require, and what happens when they're malformed? Which models and firmwares really accept exFAT? How many bytes does a rendered stem cost across genres? Every one of these is answered by writing a drive and plugging it into a player — which is why phase 0 exists.