Tools for managing and modifying a RekordBox library en-masse
Project description
rekordbox-bulk-edit
A command-line tool for bulk operations on your Rekordbox library. Convert audio formats, search tracks, and update your database while preserving all your cues, analysis, and metadata.
Installation
pip install rekordbox-bulk-edit
Requirements:
- Python 3.11+
- FFmpeg (for audio conversion)
Installing FFmpeg
macOS (Homebrew):
brew install ffmpeg
Ubuntu/Debian:
sudo apt update && sudo apt install ffmpeg
Windows:
winget install --id=Gyan.FFmpeg -e
Or download from ffmpeg.org.
Quick Start
Search your library:
rekordbox-bulk-edit search --artist "Daft Punk" --format flac
rbe search --playlist "House Favorites"
Convert audio files:
# Preview what would be converted
rbe convert --artist "Daft Punk" --dry-run
# Convert all FLAC or WAV files to AIFF (default output format)
rbe convert --format flac --format wav --yes
# Convert all AIFF files in the playlist named 'ConvertMe' to MP3 without asking for confirmation
rbe convert --format AIFF --exact-playlist "ConvertMe" --match-all --out-format mp3 --yes
Commands
search
Find and display information on tracks in your Rekordbox database.
rbe search [OPTIONS]
Examples:
# Show all FLAC tracks by artist
rbe search --artist "Aphex Twin" --format flac
# Get all the track IDs in a playlist
rbe search --playlist "Techno" --print ids
# Find tracks matching ALL filters (AND logic)
rbe search --artist "Burial" --album "Untrue" --match-all
convert
Convert audio files between formats and update the Rekordbox database. Your cues, analysis, beatgrids, and all metadata are preserved.
rbe convert [OPTIONS]
Supported formats
- Input: FLAC, AIFF, WAV
- Output: AIFF, FLAC, WAV, ALAC or MP3 (320kbps CBR)
options
--format-out [aiff|flac|wav|alac|mp3]: Output format (default: aiff)--dry-run: Preview changes without converting.--yes, -y: Skip confirmation prompt--interactive, -i: Confirm each file individually--delete: Delete original files after conversion (default for lossless output)--keep: Keep original files after conversion (default for MP3 output)--overwrite: Replace existing output files instead of skipping
By default the original files will be kept when performing a lossy conversion to mp3, and deleted when performing a lossless conversion (since you can always convert back).
You can override this behavior with --delete or --keep.
Examples:
# Preview conversion
rbe convert --format-out aiff --format flac --dry-run
# Convert and skip confirmation
rbe convert --format-out wav --artist "Burial" --yes
# Convert to MP3 but delete originals
rbe convert --format-out mp3 --playlist "Export" --yes --delete
# Keep originals when converting to AIFF
rbe convert --format-out aiff --format flac --yes --keep
# Get just the IDs of files that would be converted
rbe convert --format-out aiff --format flac --print ids --dry-run
# Convert and get the IDs of converted tracks
rbe convert --format-out aiff --format flac --print ids --yes
Filters & Options
Both commands support all filters. Multiple values create an OR filter unless --match-all is used.
Track filters:
--track-id ID: Filter by database track ID--title TEXT: Track title contains TEXT--exact-title TEXT: Track title exactly matches TEXT--artist TEXT: Artist name contains TEXT--exact-artist TEXT: Artist name exactly matches TEXT--album TEXT: Album name contains TEXT--exact-album TEXT: Album name exactly matches TEXT--playlist TEXT: Playlist name contains TEXT--exact-playlist TEXT: Playlist name exactly matches TEXT--format [mp3|flac|aiff|wav|m4a]: File format matches--match-all: Use AND logic (all filters must match)idsargs: Specifying any other input to a command that is not a defined option is interpreted as one or more Track IDs. This is useful for scripting.
Examples:
# Get tracks by multiple artists
rbe search --artist "Daft Punk" --artist "Justice"
# Get tracks matching artist AND format
rbe search --artist "Aphex Twin" --format flac --match-all
# Get all the songs in this playlist
rbe search --exact-playlist "Main Room 2024"
# Get all the songs in all my "house" or "disco" playlists
rbe search --playlist "house" --playlist "disco"
# Find all the songs in all my "house" or "disco" playlists
rbe search --playlist "house" --playlist "disco"
# Find all the songs in my library that aren't in any playlist
rbe search --playlist ""
Output
All commands support all levels of output. These generally control how much information is printed out to the screen, and also offer some options useful for scripting.
Output levels are configured with the --print option:
--print [ids|silent|info]: Control output format
Note: When specifying
--print silentor--print ids, you must also provide either the--yesor the--dry-runflag, since any prompts would contradict the spirit of those options.
Scripting
The --print ids option is especially interesting when used in conjunction with the ids arguments. By specifying --print ids you can use the output of one rbe command as the input to a second, e.g.:
# Convert all of the items found by the inital search command
rbe search --artist "Lauren Hill" --print ids | rbe convert
This is example is a bit contrived, but I have fun ideas for future commands that will make this much more interesting :)
Safety & Best Practices
CAUTION: This tool can modify your Rekordbox database and audio files. Always back up your data first.
Before using this tool:
- Back up your Rekordbox database
- Rekordbox creates backups on exit, but they get overwritten quickly on repetitive exits.
- Manually copy all database backups before running this tool
- Location:
~/Library/Pioneer/rekordbox/(macOS) or%APPDATA%\Pioneer\rekordbox\(Windows)
- Back up your music library
- Test on a subset first
- Use filters to target a few tracks:
--artist "Test" --limit 5 - Always run with
--dry-runfirst
- Use filters to target a few tracks:
- Close Rekordbox before running commands
Use at your own risk.
Credits
This project exists thanks to pyrekordbox, which provides the Python API for Rekordbox databases.
I built this tool to fix my own library management mistakes. If it helps you too, great. If you find issues or have ideas, contributions are welcome.
Contributing
See CONTRIBUTING.md for development setup, testing, and contribution guidelines.
Project details
Release history Release notifications | RSS feed
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_bulk_edit-0.3.0.dev8.tar.gz.
File metadata
- Download URL: rekordbox_bulk_edit-0.3.0.dev8.tar.gz
- Upload date:
- Size: 19.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 |
da68e89fbc6122f7bb64e4b53a1e77f79878d70c4c63abf3f6ff1bad14d44a46
|
|
| MD5 |
67801d03fd562247e192f6f7730f204b
|
|
| BLAKE2b-256 |
418a8c031f62ad04e789849ea4f0da9bf79a85d09aa97f31998f32dc92f10402
|
Provenance
The following attestation bundles were made for rekordbox_bulk_edit-0.3.0.dev8.tar.gz:
Publisher:
cd.yml on jviall/rekordbox-bulk-edit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rekordbox_bulk_edit-0.3.0.dev8.tar.gz -
Subject digest:
da68e89fbc6122f7bb64e4b53a1e77f79878d70c4c63abf3f6ff1bad14d44a46 - Sigstore transparency entry: 1250174451
- Sigstore integration time:
-
Permalink:
jviall/rekordbox-bulk-edit@b9193543e9e14617cab76e06968de4bbe9b7ee38 -
Branch / Tag:
refs/heads/jviall/search - Owner: https://github.com/jviall
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@b9193543e9e14617cab76e06968de4bbe9b7ee38 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file rekordbox_bulk_edit-0.3.0.dev8-py3-none-any.whl.
File metadata
- Download URL: rekordbox_bulk_edit-0.3.0.dev8-py3-none-any.whl
- Upload date:
- Size: 19.7 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 |
5d5e5b65fd9427136c31c18cea1b560328156307a454d9ab1e7537e118cf0a80
|
|
| MD5 |
d0c546d7e68102a9c0116fd7cff4c5cb
|
|
| BLAKE2b-256 |
b3926fcba9dde091f582f0f78f3d520011dd454fa0c1ee3fc1a14f53946287ac
|
Provenance
The following attestation bundles were made for rekordbox_bulk_edit-0.3.0.dev8-py3-none-any.whl:
Publisher:
cd.yml on jviall/rekordbox-bulk-edit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rekordbox_bulk_edit-0.3.0.dev8-py3-none-any.whl -
Subject digest:
5d5e5b65fd9427136c31c18cea1b560328156307a454d9ab1e7537e118cf0a80 - Sigstore transparency entry: 1250174532
- Sigstore integration time:
-
Permalink:
jviall/rekordbox-bulk-edit@b9193543e9e14617cab76e06968de4bbe9b7ee38 -
Branch / Tag:
refs/heads/jviall/search - Owner: https://github.com/jviall
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@b9193543e9e14617cab76e06968de4bbe9b7ee38 -
Trigger Event:
workflow_dispatch
-
Statement type: