Skip to content

Latest commit

 

History

History
113 lines (86 loc) · 2.87 KB

File metadata and controls

113 lines (86 loc) · 2.87 KB

relay

DJ library bridge. Convert between Rekordbox, Traktor, and M3U from the command line.

$ relay convert library.xml --from rekordbox --to traktor -o collection.nml
Reading rekordbox...
Converting rekordbox → traktor...
✓ 847 tracks converted
✓ 12 playlists

Output: collection.nml

Why

Switching DJ software shouldn't mean losing your library. Lexicon charges $15/month. DJCU is Mac-only. dj-data-converter requires Clojure. relay is free, runs everywhere Node runs, and does one thing well.

Install

npm i -g @mo3moha/relay

Commands

# Convert between formats
relay convert library.xml --from rekordbox --to traktor -o collection.nml
relay convert collection.nml --from traktor --to rekordbox -o library.xml
relay convert library.xml --from rekordbox --to m3u -o ./playlists/

# Inspect a library
relay inspect library.xml --from rekordbox

# Library statistics
relay stats library.xml --from rekordbox

# Export to JSON (for scripting / AI tools)
relay export library.xml --from rekordbox -o library.json

Supported Formats

Format Read Write Extension
Rekordbox XML yes yes .xml
Traktor NML yes yes .nml
M3U / M3U8 yes yes .m3u .m3u8
relay JSON yes yes .json

What Gets Converted

Data Rekordbox ↔ Traktor → M3U
Track metadata (artist, title, album, genre) yes title + artist
BPM yes no
Musical key (Camelot) yes no
Cue points yes no
Hot cues (A-H) yes no
Loops yes no
Playlists (with folders) yes yes
Rating yes no
Play count yes no
Comments yes no

What Doesn't Convert (Yet)

  • Beat grids / tempo maps
  • Serato crates (binary format)
  • Rekordbox 6+ database (encrypted SQLite)
  • CDJ USB export (PDB/ANLZ)
  • Waveform data

JSON Export

The export command outputs a universal JSON format that's easy to script or pipe to AI tools:

{
  "format": "relay",
  "version": "1.0.0",
  "tracks": [
    {
      "location": "/music/track.mp3",
      "title": "Lost Code",
      "artist": "Hagan",
      "bpm": 128.0,
      "key": "9A",
      "duration": 253,
      "cues": [{ "position": 32.5, "type": "cue", "hotcue": 0 }],
      "loops": []
    }
  ],
  "playlists": [...]
}

Technical Notes

  • Cue point positions: Traktor stores in milliseconds, Rekordbox in seconds. relay handles the conversion.
  • Hot cue indexing: Traktor uses 1-8, Rekordbox uses 0-7. relay normalizes to 0-7.
  • Musical keys: Normalized to Camelot notation (1A-12B) as intermediate.
  • File paths: URI encoding/decoding handled automatically.
  • Traktor directory format (:colon: separated) converted to standard paths.

License

MIT


Built by moha — DJ Cherry Boy