Skip to content

mixr

A full DJ rig in one terminal binary. Beatport streaming, beat-locked crossfades, Claude DJ, MIDI/HID controllers.
┌─ mixr ─────────────────────────────────────────────────────────────┐
│ Deck A ARTBAT — Element 126.0 BPM 3:42 ███████░░░ │
│ Deck B Cassian — Run 128.0 BPM cued │
│ │
│ ◀ ─ ─ ─ ─ ─ ─ ●─────── ─ ─ ─ ─ ─ ─ ─ ▶ crossfader │
│ MIX IN 4 bars transition: BeatMatched key dist 1 gap 1.6% │
└────────────────────────────────────────────────────────────────────┘

Beatport streaming

Sign in with your own Beatport account — PKCE OAuth in an embedded WebView, so your password never touches mixr. Then browse the whole Beatport catalog: Discover, Genres, Decades, My Beatport, My Library. Tokens cached at ~/.mixr/auth.json and refreshed automatically.

Honest caveat: playback is 256 kbps HLS. FLAC needs a higher-tier Beatport scope only available to Beatport’s own clients.

Claude DJ — three modes

Bring your own Anthropic API key. Claude picks tracks, beatmatches, and operates the mixer at the level you choose:

  • Auto — Claude runs the whole set unattended
  • Assist — Claude suggests, you confirm
  • Manual — Claude operates physical-deck tools while you steer

~20 tools, adaptive rate-limit backoff, training memory (rate mixes with +/- to teach what works), mid-mix phase checks, stall watchdog. Prompt-cached for fast re-triggers.

Five transitions, beat-locked

16-bar phase-locked crossfades, auto-picked from BPM gap + Camelot key distance:

  • BeatMatched — cos/sin equal-power
  • EchoOut — echo tail + hard cut (big BPM gaps)
  • BassSwap — EQ lows swap at midpoint (matched BPM, key dist ≤ 1)
  • FilterSweep — LP → HP sweep (matched BPM, key dist = 2)
  • LoopRoll — 4-beat loop on the outgoing deck

Configurable rule engine at ~/.mixr/transitions.json — override when/then logic per-style.

Bring your own library

Already have a library? Import it:

  • rekordbox.xml — full hierarchy + cue points
  • Engine DJ DB — desktop + USB drive layouts
  • Serato Database V2

Plus a recursive local-files browser with symphonia tag extraction (BPM / key / artist / title / duration inline). Browse your own music side-by-side with Beatport.

MIDI + HID controllers

Any controller, any binding — TOML mapping per device. Bundled preset for Numark Mixstream Pro Go Plus plus a generic 2-channel layout. Built-in MIDI Learn (K from the dashboard) so you can map a new controller without touching files.

Script the whole rig (file-IPC)

mixr exposes a file-based IPC at ~/.mixr/command. Drop a JSON line, mixr reads + acts. Works from any language, any tool — same surface Claude DJ and the dashboard use internally.

Terminal window
echo '{"skip":1}' > ~/.mixr/command
echo '{"crossfader":-0.5}' > ~/.mixr/command
echo '{"transition":"echoout"}' > ~/.mixr/command

Record sets, hot cues, EQ + filter

Record your set to WAV / AIFF with a .cue sheet — optionally save as a Beatport playlist on the fly. Hot cues 0–3 per deck (set with !@#$, jump with 1234). 3-band EQ (-24..+12 dB), single-knob filter, beat-aligned loop, delay FX, soft-knee master limiter, monitor device for headphone cue, optional pitch stretching (Rubberband).

Lives in the terminal

One binary. No window, no system tray, no daemon. Quit with Ctrl+C. Runs in any terminal.

mixr is one of two small Rust tools by Chris McLennan — see the family page for the full picture.

  • mixr — this DJ app
  • mnml — NvChad-style terminal IDE