What’s New#
v0.4.4 - 2025-08-17#
This update strengthens database key management, optimizes datetime parsing for consistent timezone handling, and improves PSSI tag processing to better detect and deobfuscate garbled ANLZ files.
Improvements/Bug Fixes#
db: improve database key handling (#181)
The database handling is now much more robust. This also improves the config performance of the library and reduces the number of dependencies. The ‘download_key’ CLI command was removed as well. Note: The app-data directory of pyrekordbox can be removed as it is no longer used.db: enhance datetime parsing for timezone handling (#176)
Updated the string_to_datetime function to normalize ‘Z’ to ‘+00:00’ and improved handling of timezone information. This ensures compatibility with various datetime formats and maintains consistency with UTC representation.anlz: enhance PSSI tag handling to improve garbled file detection and deobfuscation (#175)
Updated logic for mood and bank validation, and refined XOR deobfuscation process for garbled tags.
v0.4.3 - 2025-05-14#
This release adds type annotations across the codebase and fixes various bugs.
Improvements/Bug Fixes#
db: add type checks for deleting playlists and playlist songs (#169)
This prevents deleting a content instead of a playlist song by accident.db: fix timezone issue when setting datetimes (#168)
Datetime fields are now set with UTC which is the same format that Rekordbox uses. Timezone agnostic dates or dates with another timezone are converted accordingly.xml: fix issue with pretty-formatting xml string (#164)
For Python>3.8 the built-in indentation is used, for Python3.8 the XML string is returned unformatted if minidom failsadd type hints across the codebase and use mypy for static type checking
v0.4.2 - 2025-04-21#
This release contains bug fixes for the command-line interface and XML handling.
Improvements/Bug Fixes#
cli: fix import error when downloading db key via CLI (#162)
xml: fix get_track method to accept Location parameter
Documentation#
anlz: add simple tutorial for ANLZ files
db: add ActiveLoop description
v0.4.1 - 2025-04-20#
This release improves database functionality by allowing commits when playlists are missing in XML (with warnings for non-special playlists), adds timezone support for date fields, and fixes date format issues. Configuration enhancements include relocating the pyrekordbox cache file to the user’s appdata directory and fixing an asar file decoding error.
Improvements/Bug Fixes#
db: allow commiting if playlist is not found in XML (#149)
This fixes an issue where the changes to the DB can not be commited if the playlist is missing in the playlist-xml. A warning is now shown instead. The warning is not shown for special playlists.db: add timezone support and fix date format issue (#161)
Date formats in the DB are now converted to the local timezone. It is now also possible to read date fields with other formats.config: move pyrekordbox cache file to appdir
The cache file is now stored in the appdata directory of the user. This avoids writing to the pyrekordbox package directory.config: fix asar file decoding error (#154)
v0.4.0 - 2025-02-12#
This release adds the ability to create new tracks in the Rekordbox v6 database. It also adds support for Rekordbox 7 and fixes various bugs.
New Features#
Improvements/Bug Fixes#
db: fix missing proxy association in table dict
The association proxies were missing in theto_dictmethod. The keys are now also cached.db: fix an error with .aif file extension (#138)
db: fix to smartlist not always working correctly due to unneccessary bit shift for specific MyTag values (#142)
Fix smartlists not always working correctly due to unneccessary bit shift for specific MyTag valuesdb: fix different timezone assertion (#137)
Allow different timezones other than “+00:00” in the datetime format of the DB.xml: save xml as utf-8 (#135)
build: use pre-built sqlcipher wheels as dependency (#134)
The sqlcipher dependency can now be installed using pre-built wheels with included sqlcipher binaries. This makes the whole library installable via pip!xml: remove deprecated
xmlmoduledb: remove deprecated
open_rekordbox_databasemethod
Documentation#
db: add documentation for adding tracks
db: add more info to djmdContent table
BREAKING CHANGE#
Remove deprecated open_rekordbox_database method. Use the Rekordbox6Database database handler instead!
Remove deprecated xml module. Use the rbxml module instead!
v0.3.2 - 2024-01-05#
This release fixes smart-playlist related bugs and improves the database table relationships.
New Features#
db: Add method for creating smart playlists
This will set the ID in the smart list to the newly created playlist ID before generating the XML string
Improvements/Bug Fixes#
db: add missing UUID entries
The UUID was not set when creating the following db entries:album
artist
genre
label
db: add missing relationships in
DjmdContent
Linked tables and corresponding relationships:DjmdCue:CuesDjmdSongMyTag:MyTagsDjmdActiveCensor:ActiveCensorsDjmdMixerParam:MixerParams
db: add My-Tag names association to the
DjmdContenttable
It is now possible to get a list of the corresponding My-tag names from theDjmdContentinstance.db: add album artist association to the
DjmdAlbumandDjmdContenttables
It is now possible to get the album artist instance or name directly from theDjmdContentinstance.db: fix smart list filter bugs (#110)
Documentation#
db: fix
Kindnotes inDjmdCuetable
v0.3.1 - 2023-12-28#
This release improves the Rekordbox v6 database key extraction and adds a new handler for smart playlists.
New Features#
add method to return the contents of a playlist in the RBv6 db directly
The database can now be queried directly for the contents contained in a playlist. This works for regular playlists as well as for smart playlists. The fullDjmdContentinstances of specific columns can be returned.add RBv6 smart playlist handler
Add a handler for the smart playlists of Rekordbox. The conditions are stored as an XML string. The smart playlist handler supports parsing and writing the XML string.add DB key extraction method for newer Rekordbox versions (#97).
The key can now also be extracted with newer Rekordbox versions.fridais used to inject code to intercept the key when the DB is opened.
Improvements/Bug Fixes#
populate configuration just-in-time
Previously the config was populated when importingpyrekordbox. Now the config is updated the first time it is used.use association proxies in
DjmdContenttable
This makes it possible to filter queries using these associations, for exampleDjmdContent.ArtistNameadd Playlist type enums and attributes
0.3.0 - 2023-12-12#
This release fixes bugs and imrpoves error handling.
Improvements/Bug Fixes#
The
bankfield of PSSI ANLZ tag can also have a value of 0 (#108)
This fixes an issue where the XOR mask was applied to un-garbled PSSI tags.check if RBv6 db key seems valid (#105)
Check the key if it is passed manually to the db handler and raise an exception if it doesn’t look valid. Only the first few characters are checked.also change
OrgFolderPathandFileNameLinupdate_content_path(#104)
There were columns missing in theupdate_content_pathmethod. These changes make the file paths consistent. Thank you @ben-hearn-sb for the help!rename the
xmlmodule torbxmlto prevent conflict with builtin.
Note that the old module namexmlis deprecated and will be removed in version0.4.0.
Documentation#
add Rekordbox6 database key extraction alternatives
0.2.3 - 2023-11-17#
Improvements/Bug Fixes#
drop Python 3.7 support
Python 3.7 reached its end of lifetime in June 2023.raise ImportError if RBv6 db is locked and sqlcipher is not available
Pyrekordbox falls back tosqlite3ifsqlcipher3is not available. This can lead to errors if the RBv6 database is locked and the user does not havesqlcipher3installed.don’t pass deleted RBv6 instance to USN callback
This sometimes raised anObjectDeletedError
0.2.2 - 2023-10-26#
New Features#
add new albums to the RBv6 db
New entries can now be added to theDjmdAlbumtable.add new genres to the RBv6 db
New entries can now be added to theDjmdGenretable.add new artists to the RBv6 db
New entries can now be added to theDjmdArtisttable.add new labels to the RBv6 db
New entries can now be added to theDjmdLabeltable.support renamed Rekordbox application directory
The user can now specify the directory name of the Rekordbox application directory. This supports multiple Rekordbox installations of the same major version.
Improvements/Bug Fixes#
don’t raise error if key is in cache
This fixes an issue when using the database handler for Rekordbox>6.6.5 with the cached key.de-obfuscate PSSI tag data on exported ANLZ files
The PSSI tag data of ANLZ files that rekordbox 6 exports is garbled with an XOR mask. If the first few known fields of the PSSI tag are not valid values this indicates a garbled tag and the data is de-obfuscated. Thank you @troyhacks for the de-obfuscation.add disabled context manager to the RBv6
RekordboxAgentRegistryonly re-enable RBV6 USN tracking if it was enabled
Documentation#
add missing documentation of the PSSI tag of ANLZ files
Fix typo in djmdCue table documentation
update quickstart documentation
0.2.1 - 2023-10-20#
This release migrates to SqlAlchemy 2.0 and fixes some bugs.
Improvements/Bug Fixes#
migrate to SqlAlchemy 2.0
add getters/setters for the mixer gain/peak settings in the RBv6 db (#88).
The gain and peak values are stored as high/low binary values. It is now possible to get or set the gain/peak as a simple decibel value. Thank you @gsuberland for the help!automatically set
updated_atof tables in the RBv6 db
Theupdated_atcolumn is automatically updated viaonupdateif rows are modified. This only happens if the user did not set the column manually.flush the RBv6 db changes before applying USN auto-increment.
This allows the user to usebefore_flushevents more easily without affecting the USN changes
BREAKING CHANGE#
pyrekordbox now only supports sqlcipher3. pysqlcipher3 is no longer supported
since it is not compatible with SqlAlchemy 2.0.
0.2.0 - 2023-10-03#
This release adds methods for updating playlists/playlist folders and their contents.
New Features#
create or delete playlists/playlist folders in the RBv6 db
It is now possible to create playlists or playlist folders with arbitrary seq number using the Rekordbox v6 database handler. Any playlist or playlist folder can also be deleted. All corresponding songs or sub-playlists will also be deleted.add or remove tracks in RBv6 playlists
It is now possible to add songs with arbitrary track number to playlists in the Rekordbox v6 database handler. Any song can also be removed from playlists. The track numbers of the other songs in the playlist get updated accordingly. To make sure all changes are compatible with Rekordbox, a new handler for themasterPlaylists6.xmlauxiliary file was added.move songs in playlists and playlists/playlists folders in the RBv6 db
The track number of songs in playlists can now be updated. The track numbers of the other songs are updated accordingly. Playlists or playlist folders can also be rearranged or moved to a new parent folder.add method for renaming playlists/playlist folders in the RBv6 db
The update time and USN are updated accordingly.add method for creating a decrypted copy of the RBv6 database (#86)
Improvements/Bug Fixes#
generalize getters of list content tables in the RBv6 db
This makes all getters consistent.fix USN tracking and update times in playlist updates of the RBv6 db
prevent commits to the RBv6 db if Rekordbox is running
improve
Parentrelationship in nested tables.
TheParentrelationship in nested tables (like playlists) are now declared viabackref. This fixes a bug when deleting rows.set
updated_atin the playlist XML when committing the RBv6 db
0.1.8 - 2023-09-15#
New Features#
add methods for converting RBv6 tables to a dictionary
This can be used to save the database contents to an open file format, for example JSON.
Improvements/Bug Fixes#
add getters for the
db_directoryandshare_directoryto the RBv6 database handler
This makes it easier to access the additional data of Rekordbox (ANLZ or artwork files).improve
columnsmethod of RBv6 tables
Thecolumnsmethod now returns the actual columns of the table (without relationships). To get a list of the column names with the relationships, use thekeysmethod.fix wrong ANLZ root directory in the RBv6 database handler
The user can now also specify the ANLZ root directory if a database object is opened in an unusual location by supplying thedb_dirargument.cache XML track list to speed up checking for duplicates
The TrackID and Location of each track element is cached to prevent checking each XML element when adding new tracks. In addition, the track count is now incremented/decremented when adding/removing tracks. This makes it much faster to add or remove elements in the XML track collection.fix bug when adding tempo and position marks to XML track elements
Adding new tempo of position marks was not possible due to the wrong object being passed asparentelement.warn when opening the database and Rekordbox is running
Documentation#
bump furo version to fix RDT issue
remove sphinx_toggleprompt (incompatible with sphinx>=7)
Use RTD’s new build process and config
0.1.7 - 2023-08-16#
This release attempts to add a workaround for the broken key extraction and fixes some bugs.
New Features#
Improvements/Bug Fixes#
add method for writing the RB6 db key cache manually (#64)
If the extraction of the Rekordbox database key fails (>=6.6.5), the user can now write the key manually to the cache file. After updating the cache the database can be opened without providing the key as argument. To make this work pyrekordbox now caches the decrypted key, not the password for decrypting the key. If an old cache file is found it is upgraded automatically.move
install_sqlcipher.pyscript to CLI command
The script is now available aspyrekordbox install-sqlcipher.add missing relationships in the RB6 database table declarations
Affected tables and corresponding relationships:DjmdAlbum:AlbumArtistDjmdCategory:MenuItemDjmdCue:ContentDjmdSort:MenuItem
fix copy/paste error in date getter of the
RekordboxAgentRegistry
Theget_datemethod was actually setting the value.
Documentation#
add section for downloading or manually writing the RB6 db key cache
add basic docstrings to the
RekordboxAgentRegistryobjectadd basic docstrings to the Rekordbox database tables
0.1.6 - 2023-08-13#
This release contains improvements of the handling of incompatible Rekordbox versions and improves the documentation.
Improvements/Bug Fixes#
raise exception with hint when opening the RB6 database if the key extraction failed (#64)
cache pw extracted from the rekordbox
app.asarfile
This speeds up the initialization of the package
Documentation#
0.1.5 - 2023-04-09#
This release contains bug fixes and improves error handling.
Improvements/Bug Fixes#
Improve RBv6 configuration handling
Don’t warn if no Rekordbox installation was found instead raise an error if no config exists when opening theRekordbox6Database.improve error handling for incompatible RB versions (#64)
fix sqlalchemy iso-format error
Using SQLAlchemy v2 results in ValueError’s.don’t fail on incompatible Rekordbox database
This allows the library to be used with reduced functionality, for example, RekordboxXML still works.
0.1.4 - 2022-10-30#
This release improves the Rekordbox v6 database handling and fixes bugs in the USN tracking.
New Features#
add
ParentandChildrenrelationships to nested RBv6 list-tables.
This enables walking thorugh the nested list structure. Affected tables:DjmdHistoryDjmdHotCueBanklistDjmdMyTagDjmdPlaylistDjmdRelatedTracksDjmdSampler
Improvements/Bug Fixes#
fix small error in query handling and also try to import
sqlcipher3improve RBv6 database update tracking and USN handling
The updates to the database are now tracked directly in the table/database objects. All the logic for handling the local update sequence number was moved to a dedicated objectRekordboxAgentRegistry.prevent autoflush in
autoincrement_local_usnin the RBv6 database objectsmall improvements of the
Rekordbox6Databasefix bug in
pformatof RBv6 database tables
0.1.3 - 2022-10-28#
This release mainly consists of improvements on the Rekordbox v6 database handling.
New Features#
support Python3.11
add auto-increment of USN’s for uncommited changes to the RBv6 database
The newautoincrement_usnmethod auto-increments the local USN for each uncommited created, changed or deleted row. Therb_local_usnattribute of added or changed rows are updated according to the update sequenceadd session-event callbacks to the RBv6 database object
add update and transaction tracking to the RBv6 database object
This feature is intended for automatic tracking of the USN’s.add local USN handlers to RBv6 database object
Methods added:get_local_usnset_local_usnincrement_local_usn
add process-id getters
Improvements/Bug Fixes#
make
columnsin the RBv6 table classes a class methodfix small bug in
read_rekordbox6_asarfix bugs in RBv6 database object
Documentation#
add missing My-Setting docstrings
add missing Rekordbox v6 database docstrings
add missing XML docstrings
0.1.2 - 2022-10-19#
This release contains documentation fixes.
Documentation#
fix typos and formatting
fix light theme styling
0.1.1 - 2022-10-19#
New Features#
AnlzFilenow stores the path of the parsed fileadd
update_content_pathandupdate_content_filenameto RB6 database
These methods update the file path in the entire Rekordbox collection (database and ANLZ files)
Improvements/Bug Fixes#
fix bugs in PQTZ/PQT2 tag handler of ANLZ files
improve ANLZ file path handling
fix bug when reading the pyrekordbox config files
remove wrong type hint in
AbstractAnlzTagUse path instead of extension as key in
read_anlz_filesoutput
This helps for saving ANLZ files after making changes.
Documentation#
update Quick-Start and change reference labels
add initial version of API Reference
fix links in ANLZ file documentation
0.1.0 - 2022-10-16#
New Features#
add
set_content_pathtoRekordbox6Databaseobjectadd
set_pathtoAnlzFileobjectadd name properties for linked tables in the
DjmdContenttable of the RB6 database
The new properties include:ArtistName
AlbumName
GenreName
RemixerName
LabelName
OrgArtistName
KeyName
ColorName
ComposerName
add relationship for
Contentin the RB6 database tables
Improvements/Bug Fixes#
return first query result when using ID as argument
add type annotation to
read_mysetting_filefix
items()method in MySettings objectsalso try to import
pysqlcipher3on Windows
Documentation#
add missing
FolderPathin RB6 database documentationadd MySettings tutorial to documentation
Add simple XML playlist tutorial
Add logo to documentation
Update installation guide for SQLCipher
0.0.8 - 2022-10-15#
New Features#
add relationships between lists and contents (#37)
Affected tables:DjmdHistory
DjmdMyTag
DjmdPlaylist
DjmdRelatedTracks
DjmdSampler
Improvements/Bug Fixes#
fix incorrect table in
get_related_tracksfix incorrect foreign key in
DjmdHotCueBanklist
Documentation#
remove duplicate entry in the Rekordbox v6 database format documentation
0.0.7 - 2022-06-12#
New Features#
add SQLCipher support for macOS (see #27)
Documentation#
add installation instructions for SQLCipher on macOS
0.0.6 - 2022-05-27#
Improvements/Bug Fixes#
fix encoding errors on MacOS
improve ANLZ getters
0.0.5 - 2022-05-06#
Improvements/Bug Fixes#
improve XML playlist handling and fix refactoring bugs
raise ValueError if duplicate track is added
Checks forLocation
TrackID
improve XML key errors
add implementation of crc16xmodem to support Python 3.10 (#21)
0.0.4 - 2022-05-06#
New Features#
add auto-increment of XML TrackID when adding new tracks
Improvements/Bug Fixes#
fix wrong MySetting default values
simplify names of playlist (folder) creation methods
add method to remove tracks in XML database and fix bug in track count update
fix position argument of XPath in XML file (starts at 1)
file paths in the XML file are now encoded and decoded as URI’s
fix XML tests with new API
Improve Rekordbox XML handling and API
The attributes of track can now be accessed with a dict interface. Additionally, the object attributes now correspond to the keys in the XML file
0.0.3 - 2022-04-24#
New Features#
add get-methods for
master.dbdatabase tables
Improvements/Bug Fixes#
fix table name in
get_artistfix typo in settingFile table name
Documentation#
switch back to rtd theme since furo code blocks don’t render properly
use furo sphinx theme
add quick-start
add installation section
add tutorial sections
rename file-format headers
add development section
contains the change-log and contributing information
0.0.2 - 2022-04-20#
New Features#
use SQLAlchemy for the Rekordbox6
master.dbdatabase
Improvements/Bug Fixes#
fix import error and README.md
set logging level to warning
fix loading the Rekordbox setting file twice in config initialization
add context for Rekordbox 6 database
inherit AnlzFile from Mapping to implement dict interface
unify binary file API
The Settings files now also use theparseandparse_fileclass-methods
Documentation#
add missing djmd tables to
master.dbdatabase documentation