code-native · local-first · MIT
The DJ library you own — local, code-native, yours.
Your music as a real SQLite database you control, synced cleanly to the decks you actually play. No account, no cloud, no subscription, no lock-in. beets for DJs.
rent vs own
Lexicon works — but it's a cloud-tilted Electron app on a subscription, and its #1 user complaint is silent overwrite during sync. Acetate is the opposite bet.
SQLite on your disk. No account, no cloud, no subscription. Your library survives the author, the company, and your internet connection. Everything is cut from your acetate.
Bulk edit, find/replace, metadata cleanup, unlimited first-class tags, and full undo — at native speed. A 16,559-track library feels instant.
The GUI is optional; the database is the product. from acetate import library. Built to be driven by scripts and agents — your library is programmable.
the loop
No Lexicon required. Read your library straight from the platforms, manage it at native speed, and export through a framework that never silently overwrites.
Engine DJ (m.db), Rekordbox (XML), or a folder of audio. Tracks, playlists, cues, beatgrids, album art, and play history all come across. Source DBs are opened read-only.
Bulk edits, find/replace, smart-fix cleanup, first-class tags, playlists, waveform & Camelot-key views — with a full undo log behind every change.
Every export runs diff-preview → backup → staged write → validate → atomic swap, rolling back on any failure. Live DBs are refused without --allow-live.
Acetate includes the first and only code-native Pioneer export.pdb writer — it builds a CDJ-ready USB straight from your library: the database, the analysis files copied from Rekordbox's cache, the audio, the art. Every other tool on earth shells out to the Rekordbox app for this. Acetate does it in code.
Honest status: the writer is built and runnable, and produces a structurally-correct export. Byte-for-byte validation against Rekordbox and a live CDJ session are in progress — so it's badged beta, and you keep your backups. Try it →
own vs rent
Lexicon is the polished incumbent and syncs more platforms today. Acetate is the bet that for a tool trusted with your whole library, ownership, speed, and openness win.
| Acetate | Lexicon | |
|---|---|---|
| Price | Free, MIT open source | $9.99–19.99/mo or $199–399 |
| Your library is | A SQLite file you own | Inside an Electron app |
| Works offline / no account | Always | Cloud-tilted, account-based |
| Sync model | Non-destructive, diff-previewed | Silent overwrite (#1 complaint) |
| Bulk-edit 16k tracks | Seconds (native) | Electron spinner |
| CLI + Python API | First-class | None |
| Auditable source | Yes — read the code | Closed |
| Code-native CDJ USB export | Yes (beta) — no RB app | Uses the Rekordbox app |
| Platforms synced today | Engine DJ · Rekordbox · Pioneer USB | All 6 platforms |
| Serato / Traktor / VirtualDJ | On the roadmap | Supported |
// honest: Lexicon wins on breadth today. Acetate wins on ownership, speed, openness — and is built so a community out-maintains a solo dev on the long tail.
quickstart
Requires macOS and Python 3.11+. Windows is a fast-follow.
# install pip install acetate # or with audio analysis + Rekordbox DB pip install "acetate[all]" # 1 · create your database ace init # 2 · find importable libraries ace detect # 3 · import — no Lexicon needed ace import engine "~/Music/Engine Library/Database2/m.db"
# see what came across ace stats ace search "deep house" # open the web UI → 127.0.0.1:8742 ace serve # edit fast, from the CLI ace bulk-edit --field genre --value "Deep House" --ids 12,34 ace cleanup # export safely (dry-run first) ace sync engine --dry-run --target /tmp/m.db ace sync rekordbox --output ~/Music/rekordbox.xml