Skip to main content

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.

CI Python 3.11+ Code style: ruff Type checked: pyright

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 copy when possible
  • --dry-run plan preview, --jobs parallel 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

  1. Reads the Rekordbox XML file to extract playlist information
  2. Converts tracks using ffmpeg to the selected format
  3. 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)
  4. 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.

Contributing

Contributions are welcome. Please follow these steps:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests and linters pass
  5. 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

rekordbox_playlist_converter-0.2.1.tar.gz (49.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rekordbox_playlist_converter-0.2.1-py3-none-any.whl (33.7 kB view details)

Uploaded Python 3

File details

Details for the file rekordbox_playlist_converter-0.2.1.tar.gz.

File metadata

File hashes

Hashes for rekordbox_playlist_converter-0.2.1.tar.gz
Algorithm Hash digest
SHA256 471fc5c88cbd8cada628399e8d8a080920c20bb071f16db99622f71bf43db7f8
MD5 29536b14f3a460507cee4e2f4d6ba6cb
BLAKE2b-256 ae40a8a4e8de9dd08e6aabd6e72e1632e63d967dc9afd60f68fdfb1cda0812fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rekordbox_playlist_converter-0.2.1.tar.gz:

Publisher: release.yml on b1scoito/rekordbox-playlist-converter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rekordbox_playlist_converter-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for rekordbox_playlist_converter-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 19f859dc5e095be83d6ea403182dcc839ea6d20da3e17f820d5c7e7939fad3b0
MD5 7d3a377dbd97444750df718f5b3800c4
BLAKE2b-256 e23bc6ecf44a8557d8b6b2e02a3630821f955f246028db4d3b53f608524a8f1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rekordbox_playlist_converter-0.2.1-py3-none-any.whl:

Publisher: release.yml on b1scoito/rekordbox-playlist-converter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page