code-native · local-first · MIT

Own your crates.

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.

$ pip install acetate Get started Why Acetate
SQLite · FTS5 Engine DJ + Rekordbox sync CLI + web UI + Python API 16k tracks, instant
the master disc every format is cut from

rent vs own

A subscription to your own music's metadata?

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.

Renting

  • Subscription to manage your own library
  • Cloud-tilted, account required
  • Electron — a spinner on 16k tracks
  • Silent overwrite on sync (the #1 complaint)
  • Your crates live in someone else's app

Owning

  • A SQLite file on your disk. Forever.
  • Local-first. No account, no cloud, no rate limits.
  • Native speed — bulk-edit 16k tracks in seconds
  • Non-destructive sync: preview every change first
  • MIT open source — auditable, un-closable, yours to fork
01 · yours

It's a file you control

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.

02 · fast

The editing Lexicon makes you wait for

Bulk edit, find/replace, metadata cleanup, unlimited first-class tags, and full undo — at native speed. A 16,559-track library feels instant.

03 · programmable

A real CLI and Python API

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

Import → edit → sync. Safely.

No Lexicon required. Read your library straight from the platforms, manage it at native speed, and export through a framework that never silently overwrites.

→ import (read)

From the decks you already use

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.

↻ edit (web UI + CLI)

Manage at native speed

Bulk edits, find/replace, smart-fix cleanup, first-class tags, playlists, waveform & Camelot-key views — with a full undo log behind every change.

← sync (non-destructive)

Preview, back up, validate, swap

Every export runs diff-preview → backup → staged write → validate → atomic swap, rolling back on any failure. Live DBs are refused without --allow-live.

experimental · beta

Write a CDJ stick in code. No Rekordbox app.

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 →

# preview from your real library $ ace sync pioneer 16,559 tracks · 7,385 cues · 765 playlists # write the stick $ ace sync pioneer --usb /Volumes/USB export.pdb + USBANLZ + Contents written non-destructive · diff-previewed

own vs rent

Acetate vs Lexicon

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.

 AcetateLexicon
PriceFree, MIT open source$9.99–19.99/mo or $199–399
Your library isA SQLite file you ownInside an Electron app
Works offline / no accountAlwaysCloud-tilted, account-based
Sync modelNon-destructive, diff-previewedSilent overwrite (#1 complaint)
Bulk-edit 16k tracksSeconds (native)Electron spinner
CLI + Python APIFirst-classNone
Auditable sourceYes — read the codeClosed
Code-native CDJ USB exportYes (beta) — no RB appUses the Rekordbox app
Platforms synced todayEngine DJ · Rekordbox · Pioneer USBAll 6 platforms
Serato / Traktor / VirtualDJOn the roadmapSupported

// 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

Up and running in a minute

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