Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.
Project description
Disclaimer: This project is not affiliated with Pioneer Corp. or its related companies in any way and has been written independently! Pyrekordbox is licensed under the MIT license. The maintainers of the project are not liable for any damages to your Rekordbox library.
Pyrekordbox is a Python package for interacting with the library and export data of Pioneers Rekordbox DJ Software. It currently supports
- Rekordbox v6 master.db database
- Rekordbox XML database
- Analysis files (ANLZ)
- My-Setting files
Check the changelog for recent changes!
Tested Rekordbox versions: 5.8.6 | 6.7.7 | 7.0.9
🔧 Installation
Pyrekordbox is available on PyPI:
pip install pyrekordbox
Alternatively, it can be installed via GitHub
pip install git+https://github.com/dylanljones/pyrekordbox.git@VERSION
where VERSION is a release, tag or branch name.
Dependencies
Unlocking the new Rekordbox 6 master.db database file requires SQLCipher.
Pyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the sqlcipher3-wheels package.
If this fails, it can be installed manually following the installation guide.
🚀 Quick-Start
Read the full documentation on ReadTheDocs!
[!CAUTION] Please make sure to back up your Rekordbox collection before making changes with pyrekordbox or developing/testing new features. The backup dialog can be found under "File" > "Library" > "Backup Library"
Configuration
Pyrekordbox looks for installed Rekordbox versions and sets up the configuration automatically. The configuration can be checked by calling:
from pyrekordbox import show_config
show_config()
If for some reason the configuration fails the values can be updated by providing the
paths to the directory where Pioneer applications are installed (pioneer_install_dir)
and to the directory where Pioneer stores the application data (pioneer_app_dir)
from pyrekordbox.config import update_config
update_config("<pioneer_install_dir>", "<pioneer_app_dir>")
Rekordbox 6/7 database
Rekordbox 6 and 7 use a SQLite database for storing the collection content.
Unfortunatly, the master.db SQLite database is encrypted using
SQLCipher, which means it can't be used without the encryption key.
However, since your data is stored and used locally, the key must be present on the
machine running Rekordbox.
Pyrekordbox can unlock the new Rekordbox master.db SQLite database and provides
an easy interface for accessing the data stored in it:
from pyrekordbox import Rekordbox6Database
db = Rekordbox6Database()
for content in db.get_content():
print(content.Title, content.Artist.Name)
playlist = db.get_playlist()[0]
for song in playlist.Songs:
content = song.Content
print(content.Title, content.Artist.Name)
Fields in the Rekordbox database that are stored without linking to other tables can be changed via the corresponding property of the object:
content = db.get_content()[0]
content.Title = "New Title"
db.commit()
[!NOTE] Some fields are stored as references to other tables, for example the artist of a track. Check the documentation of the corresponding object for more information.
So far only a few tables support adding or deleting entries:
DjmdContent: TracksDjmdPlaylist: Playlists/Playlist FoldersDjmdSongPlaylist: Songs in a playlistDjmdAlbum: AlbumsDjmdArtist: ArtistsDjmdGenre: GenresDjmdLabel: Labels
Rekordbox XML
The Rekordbox XML database is used for importing (and exporting) Rekordbox collections including track metadata and playlists. They can also be used to share playlists between two databases.
Pyrekordbox can read and write Rekordbox XML databases.
from pyrekordbox.rbxml import RekordboxXml
xml = RekordboxXml("database.xml")
track = xml.get_track(0) # Get track by index (or TrackID)
track_id = track.TrackID # Access via attribute
name = track["Name"] # or dictionary syntax
path = "/path/to/file.mp3"
track = xml.add_track(path) # Add new track
track["Name"] = "Title" # Add attributes to new track
track["TrackID"] = 10 # Types are handled automatically
# Get playlist (folder) by path
pl = xml.get_playlist("Folder", "Sub Playlist")
keys = pl.get_tracks() # Get keys of tracks in playlist
ktype = pl.key_type # Key can either be TrackID or Location
# Add tracks and sub-playlists (folders)
pl.add_track(track.TrackID)
pl.add_playlist("Sub Sub Playlist")
Rekordbox ANLZ files
Rekordbox stores analysis information of the tracks in the collection in specific files,
which also get exported to decives used by Pioneer professional DJ equipment. The files
have names like ANLZ0000 and come with the extensions .DAT, .EXT or .2EX.
They include waveforms, beat grids (information about the precise time at which
each beat occurs), time indices to allow efficient seeking to specific positions
inside variable bit-rate audio streams, and lists of memory cues and loop points.
Pyrekordbox can parse all three analysis files, although not all the information of the tracks can be extracted yet.
from pyrekordbox.anlz import AnlzFile
anlz = AnlzFile.parse_file("ANLZ0000.DAT")
beat_grid = anlz.get("beat_grid")
path_tags = anlz.getall_tags("path")
Changing and creating the Rekordbox analysis files is planned as well, but for that the full structure of the analysis files has to be understood.
Unsupported ANLZ tags:
- PWV6
- PWV7
- PWVC
Rekordbox My-Settings
Rekordbox stores the user settings in *SETTING.DAT files, which get exported to USB
devices. These files are either in the PIONEERdirectory of a USB drive
(device exports), but are also present for on local installations of Rekordbox 6.
The setting files store the settings found on the "DJ System" > "My Settings" page of
the Rekordbox preferences. These include language, LCD brightness, tempo fader range,
crossfader curve and other settings for Pioneer professional DJ equipment.
Pyrekordbox supports both parsing and writing My-Setting files.
from pyrekordbox.mysettings import read_mysetting_file
mysett = read_mysetting_file("MYSETTINGS.DAT")
sync = mysett.get("sync")
quant = mysett.get("quantize")
The DEVSETTING.DAT file is still not supported
💡 File formats
A summary of the Rekordbox file formats can be found in the documentation:
💻 Development
If you encounter an issue or want to contribute to pyrekordbox, please feel free to get in touch,
open an issue or create a new pull request! A guide for contributing to
pyrekordbox and the commit-message style can be found in
CONTRIBUTING.
For general questions or discussions about Rekordbox, please use GitHub Discussions instead of opening an issue.
Pyrekordbox is tested on Windows and MacOS, however some features can't be tested in the CI setup since it requires a working Rekordbox installation.
♡ Sponsor
If pyrekordbox has helped you or saved you time, consider supporting its development - every coffee makes a difference!
🔗 Related Projects and References
- crate-digger: Java library for fetching and parsing rekordbox exports and track analysis files.
- rekordcrate: Library for parsing Pioneer Rekordbox device exports
- supbox: Get the currently playing track from Rekordbox v6 as Audio Hijack Shoutcast/Icecast metadata, display in your OBS video broadcast or export as JSON.
- Deep Symmetry has an extensive analysis of Rekordbox's ANLZ and .edb export file formats https://djl-analysis.deepsymmetry.org/djl-analysis
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 pyrekordbox-0.4.4.tar.gz.
File metadata
- Download URL: pyrekordbox-0.4.4.tar.gz
- Upload date:
- Size: 2.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bdb59f7c45c743bd2021613a72604b7607092d386e25f20cce78adfe30bf9a4
|
|
| MD5 |
428d0c1af5c133db185960b608149aaa
|
|
| BLAKE2b-256 |
398b8fb7f21f4eb676df35c53214129ad33624634e2b678069abbf6a88509c6b
|
Provenance
The following attestation bundles were made for pyrekordbox-0.4.4.tar.gz:
Publisher:
pypi-publish.yml on dylanljones/pyrekordbox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyrekordbox-0.4.4.tar.gz -
Subject digest:
8bdb59f7c45c743bd2021613a72604b7607092d386e25f20cce78adfe30bf9a4 - Sigstore transparency entry: 404722794
- Sigstore integration time:
-
Permalink:
dylanljones/pyrekordbox@ec8cd22c9fc21e83190e92e58b365b84ed1c5a9a -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/dylanljones
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@ec8cd22c9fc21e83190e92e58b365b84ed1c5a9a -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyrekordbox-0.4.4-py3-none-any.whl.
File metadata
- Download URL: pyrekordbox-0.4.4-py3-none-any.whl
- Upload date:
- Size: 76.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2de933870126b9a0ef04bea372f1c5934efcfbb2501efb6b47d8ace0e17fb3d8
|
|
| MD5 |
3f48731304e72c531ad08d57cf3aa86c
|
|
| BLAKE2b-256 |
b1a828d28f02683bee40e3cfa32caed7c46e47daffb51482798fea9af0ab23cb
|
Provenance
The following attestation bundles were made for pyrekordbox-0.4.4-py3-none-any.whl:
Publisher:
pypi-publish.yml on dylanljones/pyrekordbox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyrekordbox-0.4.4-py3-none-any.whl -
Subject digest:
2de933870126b9a0ef04bea372f1c5934efcfbb2501efb6b47d8ace0e17fb3d8 - Sigstore transparency entry: 404722803
- Sigstore integration time:
-
Permalink:
dylanljones/pyrekordbox@ec8cd22c9fc21e83190e92e58b365b84ed1c5a9a -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/dylanljones
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@ec8cd22c9fc21e83190e92e58b365b84ed1c5a9a -
Trigger Event:
release
-
Statement type: