Convert Rekordbox playlists with automatic format selection for Pioneer DJ / AlphaTheta CDJ/XDJ equipment
Project description
Rekordbox Playlist Converter
Convert Rekordbox playlists with automatic format selection for Pioneer DJ / AlphaTheta CDJ/XDJ equipment.
Features
- Automatic format selection based on CDJ/XDJ model capabilities
- Source-quality preservation: never upsamples, caps to deck + codec ceiling
- Atomic writes, cover-art passthrough, same-format
-c:a copywhen possible --dry-runplan preview,--jobsparallel ffmpeg, JSON manifest output- Standalone XML generation without modifying original Rekordbox library
- MP3 (320kbps), FLAC (lossless), and AIFF conversion via ffmpeg
- Support for 19 Pioneer DJ / AlphaTheta models (CDJ-900 to CDJ-3000X, XDJ-RX to XDJ-AZ)
- CLI interface with Typer and Rich
- 91 unit tests with full type coverage
Overview
Pioneer CDJs have different format support capabilities and known compatibility issues with WAV files (WAV_EXTENSIBLE metadata). This tool addresses these issues by:
- Selecting FLAC for models that support it
- Using MP3 320kbps for models with limited format support
- Avoiding WAV/AIFF to prevent metadata compatibility problems
- Preserving all metadata including cue points, BPM, key, and track analysis
Installation
From PyPI
pip install rekordbox-playlist-converter
From Source
# Clone the repository
git clone https://github.com/b1scoito/rekordbox-playlist-converter.git
cd rekordbox-playlist-converter
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .
System Requirements
- Python 3.11 or higher
- ffmpeg for audio conversion
Install ffmpeg:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Windows
choco install ffmpeg
Usage
List Supported CDJ Models
rekordbox-converter models
List Playlists in Rekordbox XML
rekordbox-converter list rekordbox.xml
Convert a Playlist (Auto-format Selection)
rekordbox-converter convert rekordbox.xml \
--playlist "My Playlist" \
--output ./converted \
--cdj-model XDJ-RX2
Convert with Manual Format Selection
rekordbox-converter convert rekordbox.xml \
--playlist "My Playlist" \
--output ./converted \
--format flac
Full Example
# 1. List all playlists
rekordbox-converter list rekordbox.xml
# 2. Convert for CDJ-3000 (automatically selects FLAC)
rekordbox-converter convert rekordbox.xml \
-p "Tech House 2024" \
-o ./converted \
--cdj-model CDJ-3000
# 3. Import the generated XML into Rekordbox
# File > Import Collection > Select "Tech House 2024 (FLAC).xml"
Format Recommendations by Model
| Model | Recommended | Max Quality | Notes |
|---|---|---|---|
| CDJ-3000X | FLAC | 96kHz/24-bit | AlphaTheta successor (2025), Wi-Fi/streaming/NFC |
| CDJ-3000 | FLAC | 96kHz/24-bit | Highest quality support |
| XDJ-AZ | FLAC | 48kHz/24-bit | AlphaTheta 4-channel flagship (2024) |
| CDJ-2000NXS2 | FLAC | 96kHz/24-bit | Full lossless support |
| XDJ-RX3 | FLAC | 48kHz/24-bit | FLAC supported |
| XDJ-RX2 | MP3 | 320kbps | No FLAC support |
| CDJ-2000NXS | MP3 | 320kbps | WAV/AIFF compatibility issues |
See full model list with rekordbox-converter models
Development
Setup
# Install development dependencies
uv sync
# Install pre-commit hooks
uv run pre-commit install
Running Tests
# Run all tests
uv run pytest tests/ -v
# Run with coverage
uv run pytest tests/ --cov=. --cov-report=term-missing
# Run specific test
uv run pytest tests/test_cdj_detection.py -v
Linting and Type Checking
# Lint and format
uv run ruff check .
uv run ruff format .
# Type check
uv run pyright .
Pre-commit Hooks
Pre-commit hooks run automatically before each commit:
- Trailing whitespace removal
- YAML/JSON/TOML validation
- Ruff linting and formatting
- Type checking should be done manually with
uv run pyright
How It Works
- Reads the Rekordbox XML file to extract playlist information
- Converts tracks using ffmpeg to the selected format
- Creates a standalone XML file containing:
- Only converted tracks from the specified playlist
- Unique track IDs starting from 1000000 to avoid conflicts
- All original metadata (cue points, BPM, key, track analysis)
- Import the generated XML into Rekordbox via File > Import Collection
FAQ
Q: Will this modify my original Rekordbox library? A: No. The tool creates a new standalone XML file without modifying the original.
Q: Why not use WAV/AIFF? A: CDJs have known issues with WAV_EXTENSIBLE metadata. FLAC provides lossless quality without these compatibility problems.
Q: Can I use this for USB export? A: Yes. Import the generated XML into Rekordbox, then export to USB as normal.
Q: What if my CDJ model is not supported? A: The tool will display an error listing all supported models. Open an issue to request additional model support.
Roadmap
See ROADMAP.md for candidate features under consideration — notably a direct Rekordbox library write mode that would skip the manual import step entirely.
Contributing
Contributions are welcome. Please follow these steps:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests and linters pass
- Submit a pull request
License
GNU General Public License v3.0 - see LICENSE file for details.
Acknowledgments
- Pioneer DJ / AlphaTheta for Rekordbox and CDJ/XDJ equipment
- Typer for CLI framework
- Rich for terminal output
- DJ community for format compatibility insights
Support
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rekordbox_playlist_converter-0.3.0.tar.gz.
File metadata
- Download URL: rekordbox_playlist_converter-0.3.0.tar.gz
- Upload date:
- Size: 53.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfc5e368da270c952ae1d7e1b6b2fbbbd0f68fc544d7ea8aca6f63eee0e3b2d6
|
|
| MD5 |
7d458b09bdc5e385feafb24335daecbd
|
|
| BLAKE2b-256 |
7501abafa28d561c67965f34deda99ef54affeb4ae71d372393a0914ed0e5d3f
|
Provenance
The following attestation bundles were made for rekordbox_playlist_converter-0.3.0.tar.gz:
Publisher:
release.yml on b1scoito/rekordbox-playlist-converter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rekordbox_playlist_converter-0.3.0.tar.gz -
Subject digest:
bfc5e368da270c952ae1d7e1b6b2fbbbd0f68fc544d7ea8aca6f63eee0e3b2d6 - Sigstore transparency entry: 1674328944
- Sigstore integration time:
-
Permalink:
b1scoito/rekordbox-playlist-converter@22c21008523b11ac4485ab18282710905f7e3510 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/b1scoito
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@22c21008523b11ac4485ab18282710905f7e3510 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rekordbox_playlist_converter-0.3.0-py3-none-any.whl.
File metadata
- Download URL: rekordbox_playlist_converter-0.3.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78b1ebc4e05c91815878e92795fcd50e3a5f179cbe9f572601f44b5c7b2cd4b3
|
|
| MD5 |
adb8ba01df82868d2bfdb8b545246e45
|
|
| BLAKE2b-256 |
cdee9e1c35c8a89ea5cffea7dfbdd14459f35b9ad0a45eb9e7fa17865e7fae66
|
Provenance
The following attestation bundles were made for rekordbox_playlist_converter-0.3.0-py3-none-any.whl:
Publisher:
release.yml on b1scoito/rekordbox-playlist-converter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rekordbox_playlist_converter-0.3.0-py3-none-any.whl -
Subject digest:
78b1ebc4e05c91815878e92795fcd50e3a5f179cbe9f572601f44b5c7b2cd4b3 - Sigstore transparency entry: 1674328968
- Sigstore integration time:
-
Permalink:
b1scoito/rekordbox-playlist-converter@22c21008523b11ac4485ab18282710905f7e3510 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/b1scoito
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@22c21008523b11ac4485ab18282710905f7e3510 -
Trigger Event:
release
-
Statement type: