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
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.
npm i -g @mo3moha/relay# 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| 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 |
| 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 |
- Beat grids / tempo maps
- Serato crates (binary format)
- Rekordbox 6+ database (encrypted SQLite)
- CDJ USB export (PDB/ANLZ)
- Waveform data
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": [...]
}- 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.
MIT
Built by moha — DJ Cherry Boy