Turn any Spotify playlist into a DJ set in one click.
A Spicetify extension that reorders a playlist the way a DJ would: compatible keys on the Camelot wheel, an energy arc with two waves, small tempo steps. It uses the same keys and BPM Spotify shows in its own Mix mode, runs locally in seconds and saves the result as a new playlist, so the original never changes. It also adds a Year column with each track's release year to every playlist.
Sorting by key walks once around the wheel. Sorting by BPM gives you a flat line. A DJ set does both at once and tells a story.
| Rule | What DJ Mix does |
|---|---|
| Harmonic mixing | Every transition stays on the Camelot wheel: same key, ±1, relative major/minor, +2 boost, an occasional diagonal |
| Energy arc | Calm opening, a first wave, a dip, a higher second wave, a short cool-down |
| Tempo | Neighbours stay within 2 BPM; tempo is not treated as energy |
| Variety | Two versions of one track never sit side by side; the same artist is not played twice in a row |
flowchart LR
A[Playlist menu: DJ Mix] --> B[Key and BPM from Spotify Mix data]
A --> E[Energy from Spotify audio features]
B --> C[Order: key, energy arc, tempo, repeats]
E --> C
C --> D[New playlist: DJ Mix - name]
Every playlist gets a Year column before the duration: the release year Spotify has for each track. Click the Year header to sort your playlist by year (oldest first, click again for newest first). Spotify has no year sort for playlists, so this reorders the playlist itself; added dates stay as they were.
Marketplace: open Spicetify Marketplace in Spotify, search for DJ Mix, click Install.
Manual, macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/smixs/dj-mix/main/dj-mix.js -o "$(dirname "$(spicetify -c)")/Extensions/dj-mix.js"
spicetify config extensions dj-mix.js
spicetify applyManual, Windows (PowerShell):
iwr https://raw.githubusercontent.com/smixs/dj-mix/main/dj-mix.js -OutFile "$(Split-Path (spicetify -c))\Extensions\dj-mix.js"
spicetify config extensions dj-mix.js
spicetify applyUninstall: remove it in Marketplace, or run spicetify config extensions dj-mix.js- and spicetify apply, then delete dj-mix.js from the Extensions folder.
Right-click a playlist (or press ⋯), choose DJ Mix. A new playlist DJ Mix — name opens when it is ready; 381 tracks take about 3 seconds.
bun test runs the rules tests, bun build.ts bundles src/ into dj-mix.js. Marketplace loads extensions through jsDelivr, which caches @main for up to 12 hours: after a push run bun run purge. Details of the scoring: docs/how-it-works.md.
Built on Spicetify. Inspired by Sort-Play. MIT. Copyright 2026 Sergey Shima.



