Auret turns Claude Code into your personal DJ. It pulls your liked tracks from SoundCloud, Spotify, or Deezer, analyzes them with machine learning, builds a taste profile, and then picks the right music for what you're doing — coding, debugging, shipping, or chilling. All playback runs locally via afplay (macOS) or in the browser turntable UI.
- Context-aware mixing — Claude picks tracks based on your work mode (coding, debugging, shipping, chill, focus, hype)
- Dual-deck turntable — Browser UI with vinyl animation, VU meters, smiley crossfader, and pitch control
- Audio intelligence — librosa extracts BPM, energy, brightness, key, MFCCs, and more from every track
- Taste clustering — K-Means groups your library into sonic clusters so Claude understands your vibe
- Celebration system — Victory sounds, airhorns, and track snippets when you ship
- Remote control — Claude sends commands to the browser turntable via SSE in real-time
- Multi-platform — SoundCloud, Spotify, and Deezer support with cross-matching
SoundCloud / Spotify / Deezer
|
[fetch-likes.mjs] Auth tokens from
| browser DevTools
v (.env file)
data/likes.json
|
[download-previews.mjs]
|
v
data/previews/*.mp3 ~3MB each, 30s clips
|
[analyze-audio.py] librosa feature extraction
|
v
data/track-features.json BPM, energy, brightness,
| key, MFCCs, chroma
[generate-profile.py] K-Means clustering
|
+-----+-----+
| |
v v
vibe-profile tracks.json
.json (turntable data)
| |
+-----+-----+----+----+
| | |
[dj.mjs] [turntable [player
CLI DJ .html] .html]
(afplay) Dual-deck Single-deck
| browser UI browser UI
[celebration.mjs]
Victory sounds
git clone <this-repo> ~/.claude/skills/vibe-engine
cd ~/.claude/skills/vibe-engine
bash scripts/setup.sh# SoundCloud (primary)
node scripts/grab-auth.mjs
# Spotify (optional)
node scripts/grab-auth-spotify.mjs
# Deezer (optional)
node scripts/grab-auth-deezer.mjsEach script walks you through extracting auth tokens from browser DevTools. Credentials are saved to .env.
# Fetch liked tracks metadata
node scripts/fetch-likes.mjs
# Download 30-second MP3 previews
node scripts/download-previews.mjsFor Spotify tracks missing previews, cross-match to Deezer:
node scripts/fetch-likes-deezer.mjs
node scripts/cross-match-deezer.mjs
node scripts/download-previews-deezer.mjs# Extract audio features (requires Python + librosa)
python3 scripts/analyze-audio.py
# Generate vibe profile and turntable data
python3 scripts/generate-profile.py# CLI: let Claude DJ for you
node scripts/dj.mjs suggest coding
node scripts/dj.mjs play <trackId>
# Browser: open the turntable
node scripts/turntable-server.mjsThe turntable server (scripts/turntable-server.mjs) serves the dual-deck UI and provides an API for remote control:
node scripts/turntable-server.mjs # starts on port 3333, opens browser
node scripts/turntable-server.mjs --port 4000 # custom port
node scripts/turntable-server.mjs --no-open # don't auto-open browser| Method | Path | Description |
|---|---|---|
GET |
/api/events |
SSE stream — browser receives commands here |
POST |
/api/cmd |
Send a command to the browser turntable |
GET |
/api/state |
Get current playback state |
# Play a track
curl -X POST http://localhost:3333/api/cmd \
-H 'Content-Type: application/json' \
-d '{"action":"play","id":"1234567"}'
# Crossfade to next
curl -X POST http://localhost:3333/api/cmd \
-d '{"action":"next"}'
# Switch context
curl -X POST http://localhost:3333/api/cmd \
-d '{"action":"setContext","ctx":"shipping"}'
# Celebrate
curl -X POST http://localhost:3333/api/cmd \
-d '{"action":"celebrate","style":"victory"}'
# Get state
curl http://localhost:3333/api/stateWhen installed as a Claude Code skill, Claude automatically:
- Reads your vibe profile to understand your taste
- Picks tracks matching your current work context
- Plays celebration sounds when you ship
- Controls the turntable via the server API
# Clone to the skills directory
git clone <this-repo> ~/.claude/skills/vibe-engine
cd ~/.claude/skills/vibe-engine
bash scripts/setup.sh
# ... run the setup pipeline above ...Claude reads SKILL.md to learn the DJ commands and context rules.
| Platform | Likes | Previews | Auth Method |
|---|---|---|---|
| SoundCloud | Yes | Yes (direct) | OAuth token from DevTools |
| Spotify | Yes | Partial | PKCE flow (no client secret) |
| Deezer | Yes | Yes (direct) | OAuth token from DevTools |
Spotify tracks without preview URLs can be cross-matched to Deezer by ISRC code or fuzzy text search.
Q: Does this work on Linux/Windows?
A: The browser turntable works everywhere. The CLI DJ (dj.mjs) uses afplay which is macOS-only. For Linux, swap afplay calls with mpv or ffplay.
Q: How many tracks do I need? A: The system works with any number, but 50+ gives better clustering and context filtering.
Q: Do I need all three platforms? A: No. SoundCloud alone is enough. Spotify and Deezer are optional for expanding your library.
Q: How often do tokens expire? A: SoundCloud tokens last ~3 months. Spotify refresh tokens are long-lived. Deezer tokens don't expire.
Q: Can I add local MP3 files?
A: Not directly, but you can manually add entries to track-features.json and place MP3s in data/previews/.
CC BY-NC 4.0 — free to use, share, and adapt for non-commercial purposes.
