SPINDLEv2 · AUTOMIX · STEMS · LIBRARY
— empty —
drop a file, or press TONE
KEY — GAIN 0.0 NO TRACK
—
0:00 / 0:00
8s
—BPM
FX Q W A S
1 2 3 4 · ⇧ = set/clear
11
22
33
44
TEMPO
0.00%
HUB
TRIM
HIE · U
MIDD · H
LOWC · B
FILTER
PHONES
A
B
— empty —
drop a file, or press TONE
KEY — GAIN 0.0 NO TRACK
—
0:00 / 0:00
8s
—BPM
FX I O K L
7 8 9 0 · ⇧ = set/clear
17
28
39
40
TEMPO
0.00%
DROP AUDIO TO LOAD

LIBRARY FOLDER

Link a folder on your machine and every track in it — subfolders included — lands in the crate. The folder handle is remembered, so it reconnects on reload after one permission click. BPMs are cached, so a rescan comes back already knowing them.

Linked: none

CRATE SERVER

The proper library: run crate-server.js against your music folders and it analyses everything once, storing beatgrids, waveforms and cues beside each file. Tracks then open here instantly — no re-analysis, ever.

Chrome and Edge only — it needs the File System Access API. Everywhere else, drag the folder onto the window instead; that works in any browser, it just doesn't persist.

DEEP ANALYSIS — essentia.js

MIDI — DDJ-400

The default map below is a best guess and is marked unverified on purpose: DDJ-400 CC numbers are repeated confidently all over the internet and I have no hardware to check them against. Use LEARN. Pick a target, move the control, done — two minutes for the whole surface, and then it's exact. Export the JSON when you're happy so you never do it twice.

CRATE & PLAYLIST

CRATE 0 tracks

Drop a folder of tracks anywhere in the app and they land here. BPMs are remembered between sessions.

PLAYLIST

Saved in this browser. Export writes a JSON you can keep or re-import.