Booth.

Functional specification · draft 1 · August 2026

Rekordbox isn't loved.
It's load-bearing.

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.

2009oldest player the legacy format still feeds
$10–36rekordbox, per month, forever
0stems on a standalone CDJ-3000 today
3.30the firmware that emptied DJs' playlists
01 — The wedge

Pre-rendered stems, inherited grids

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.

Two CDJs, no laptop. The acapella is the next line down in the playlist, on the same hot cue letter, phase-locked because both decks read the same grid.

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.

02 — The interface

One window. No modes.

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.

bpm:124-128 key:~8A -played:30d tag:peak ⌘K ◐ 12 queued · stems 62%

Collection

  • All tracks 31,402
  • Unprepared 218
  • Needs attention 4

Playlists

  • ▾ Sat 14/9
  • warm
  • peak
  • close
  • ▾ Digging
  • promos
  • to grid

Saved queries

  • Peak 128±3
  • missing:grid
  • missing:stems
ArtistTitleBPMKeyEnergyStems
PeverelistRoll With The Punches128.028A kit
↳ PeverelistRoll With The Punches (acapella)128.028Avocals
↳ PeverelistRoll With The Punches (instrumental)128.028Amelody+drums
BatuMarius130.004A
BruceJust Getting Started128.008A kit
PessimistHunter172.0011B
PloyRamos126.508A
grid ✓ 128.02 · 1 region key ✓ 8A 0.94 phrase ✓ 6 loudness −8.4 LUFS · 0.2 dBTP stems rendering 62%

Now inspecting

Roll With The Punches
Peverelist · Livity Sound · 2019

Stem kit

✓ vocals 0.91
✓ drums 0.96
✓ bass 0.88
◐ other 62%

Tags

peakrollingdub+

Related

  • Batu — Marius
  • Bruce — Just Getting…
  • Ploy — Ramos
Drives ▣ SANDISK-64 — Sat 14/9 · 412 tracks · 51.2 GB 8 to add · 2 changed · 24 stems

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.

The query bar is the browser

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.

QueryFindsQueryFinds
key:~8Aharmonically compatible keysmissing:stemsno stem kit rendered yet
played:neverbought and never touchedmissing:gridunanalysed or grid rejected
added:<14d -tag:vocalnew instrumentalsdupes:title+artistduplicate groups to merge
in:drive:SANDISK-64what's actually on the stickformat:flac bitrate:<256files that won't survive the booth

The one screen that must never be wrong

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.

SYNC → SANDISK-64 Target: CDJ-3000 · fw 3.20+ writes: Device Library + ANLZ ⚠ CDJ-3000X also needs OneLibrary
Add8 tracks — Ploy, Bruce, Peverelist +52.1 GB
Update2 tracks — Batu “Marius”: hot cue C moved 1 bar18 KB
Removenone—
Stems24 files — acapella + instrumental for playlist “peak”5.8 GB
✓ 412 files decode · headers read, none 32-bit float
✓ all paths under 256 characters · 6 folder levels deep
✓ FAT32 · 41.3 GB free after write
⚠ 1 file is 32-bit float WAV → converted to 24-bit on the drive copy, original untouched
⚠ 1 file has no beatgrid → fix first / export anyway
✓ read back after write: 412 tracks, 6 playlists, 412 analysis files, 0 broken paths

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.

03 — Evidence

What DJs actually complain about

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.

04 — The constraint

How a CDJ actually reads a drive

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.

FormatStorageDocumentedRead 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.

05 — Parity

Where this wins, and where it doesn't

CapabilityrekordboxSeratoEngine DJBooth
Writes CDJ-3000 drivesyesnonoyes — v1
Writes CDJ-3000X / OneLibrary drivesyesnonophase 3, licence-dependent
Stems on a standalone CDJnonon/ayes — pre-rendered
Stem quality3 stems, rated below peersstrong, real-timepre-rendereddemucs, 4 stems, scored per track
Variable-tempo griddingweakweakweakfirst-class
Smart playlistsrule dropdowns, 1,000 capsmart crateslimitedtext query, no cap
Drive verified before the gignon/anoindependent read-back
File-compatibility preflightnon/anoyes
Reads booth edits & history backpartialn/apartialas a reviewable diff
CLI, scripting, plug-insnononoyes
Lighting, video, DVS, streamingyesyespartialno — deliberately
Cost$10–36 / monthsubscriptionfree with hardwareperpetual / 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.

06 — Plan

Four phases, each with a hardware exit

PHASE 06–8 weeks

Prove the drive

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.
PHASE 13–4 months

The library and the loop

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.
PHASE 22–3 months

Stems

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.
PHASE 3open-ended

The rest of the ecosystem

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.

The risks worth naming

RiskResponse
OneLibrary stays closedv1 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 formatIt 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 trustThis 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 hardShip 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 largePer-playlist opt-in, GPU rendering, and honest time and byte estimates quoted before the queue starts.

Still open

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.