Name | pyrekordbox JSON |
Version |
0.4.0
JSON |
| download |
home_page | None |
Summary | Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software. |
upload_time | 2025-02-12 18:45:47 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT License
Copyright (c) 2022-2024, Dylan Jones
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
bidict
blowfish
construct
hypothesis
numpy
packaging
pytest
psutil
setuptools
setuptools-scm
sqlalchemy
sqlcipher3-wheels
frida-tools
python-dateutil
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<p align="center">
<img src="https://raw.githubusercontent.com/dylanljones/pyrekordbox/master/docs/source/_static/logos/light/logo_primary.svg" alt="logo" height="70"/>
</p>
[![Tests][tests-badge]][tests-link]
[![Codecov][codecov-badge]][codecov-link]
[![Version][pypi-badge]][pypi-link]
[![Python][python-badge+]][pypi-link]
[![Platform][platform-badge]][pypi-link]
[![license: MIT][license-badge]][license-link]
[![style: ruff][ruff-badge]][ruff-link]
> **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][license-link]. 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
Tested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``
|⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |
|----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|
## 🔧 Installation
Pyrekordbox is available on [PyPI][pypi-link]:
````commandline
pip install pyrekordbox
````
Alternatively, it can be installed via [GitHub][repo]
```commandline
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][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][installation].
## 🚀 Quick-Start
[Read the full documentation on ReadTheDocs!][documentation]
| ❗ | 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:
````python
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`)
````python
from pyrekordbox.config import update_config
update_config("<pioneer_install_dir>", "<pioneer_app_dir>")
````
Alternatively the two paths can be specified in a configuration file under the section
`rekordbox`. Supported configuration files are pyproject.toml, setup.cfg, pyrekordbox.toml,
pyrekordbox.cfg and pyrekordbox.yaml.
### 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][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:
````python
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:
````python
content = db.get_content()[0]
content.Title = "New Title"
````
Some fields are stored as references to other tables, for example the artist of a track.
Check the [documentation][db6-doc] of the corresponding object for more information.
So far only a few tables support adding or deleting entries:
- ``DjmdContent``: Tracks
- ``DjmdPlaylist``: Playlists/Playlist Folders
- ``DjmdSongPlaylist``: Songs in a playlist
- ``DjmdAlbum``: Albums
- ``DjmdArtist``: Artists
- ``DjmdGenre``: Genres
- ``DjmdLabel``: Labels
If the automatic key extraction fails the command line interface of ``pyrekordbox``
provides a command for downloading the key from known sources and writing it to the
cache file:
````shell
python -m pyrekordbox download-key
````
Once the key is cached the database can be opened without providing the key.
The key can also be provided manually:
````python
db = Rekordbox6Database(key="<insert key here>")
````
### 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.
````python
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.
````python
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:
- PCOB
- PCO2
- PSSI
- 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 `PIONEER`directory 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.
````python
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]:
- [Rekordbox XML format][xml-doc]
- [ANLZ file format][anlz-doc]
- [My-Setting file format][mysettings-doc]
- [Rekordbox 6 database][db6-doc]
## 💻 Development
If you encounter an issue or want to contribute to pyrekordbox, please feel free to get in touch,
[open an issue][new-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][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.
## 🔗 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
- rekordcrate reverse engineered the format of the Rekordbox MySetting files
https://holzhaus.github.io/rekordcrate/rekordcrate/setting/index.html
- rekordcloud went into detail about the internals of Rekordbox 6
https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and-its-new-internals.
- supbox has a nice implementation on finding the Rekordbox 6 database key
https://github.com/gabek/supbox
[tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat
[docs-badge]: https://img.shields.io/readthedocs/pyrekordbox/stable?style=flat
[python-badge]: https://img.shields.io/pypi/pyversions/pyrekordbox?style=flat
[python-badge+]: https://img.shields.io/badge/python-3.8+-blue.svg
[platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat
[pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat
[license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey
[black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat
[ruff-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
[codecov-badge]: https://codecov.io/gh/dylanljones/pyrekordbox/branch/master/graph/badge.svg?token=5Z2KVGL7N3
[pypi-link]: https://pypi.org/project/pyrekordbox/
[license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE
[tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml
[black-link]: https://github.com/psf/black
[ruff-link]: https://github.com/astral-sh/ruff
[lgtm-link]: https://lgtm.com/projects/g/dylanljones/pyrekordbox/context:python
[codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master
[codecov-dev-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/dev
[docs-latest-badge]: https://img.shields.io/readthedocs/pyrekordbox/latest?logo=readthedocs&style=flat
[docs-dev-badge]: https://img.shields.io/readthedocs/pyrekordbox/dev?logo=readthedocs&style=flat
[documentation]: https://pyrekordbox.readthedocs.io/en/stable/
[documentation-latest]: https://pyrekordbox.readthedocs.io/en/latest/
[documentation-dev]: https://pyrekordbox.readthedocs.io/en/dev/
[tutorial]: https://pyrekordbox.readthedocs.io/en/stable/tutorial/index.html
[db6-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/db6.html
[anlz-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/anlz.html
[xml-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/xml.html
[mysettings-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/mysetting.html
[new-issue]: https://github.com/dylanljones/pyrekordbox/issues/new/choose
[discussions]: https://github.com/dylanljones/pyrekordbox/discussions
[CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md
[CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md
[installation]: https://pyrekordbox.readthedocs.io/en/latest/installation.html
[repo]: https://github.com/dylanljones/pyrekordbox
[sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
[sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3
[rekordcrate]: https://github.com/Holzhaus/rekordcrate
[crate-digger]: https://github.com/Deep-Symmetry/crate-digger
[supbox]: https://github.com/gabek/supbox
Raw data
{
"_id": null,
"home_page": null,
"name": "pyrekordbox",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Dylan Jones <dylanljones94@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/16/d4/bb88d9d7ec2bfe4cbdf6b93cdf9453c7b13957ffa45b41e16fc002430163/pyrekordbox-0.4.0.tar.gz",
"platform": "any",
"description": "\n<p align=\"center\">\n<img src=\"https://raw.githubusercontent.com/dylanljones/pyrekordbox/master/docs/source/_static/logos/light/logo_primary.svg\" alt=\"logo\" height=\"70\"/>\n</p>\n\n[![Tests][tests-badge]][tests-link]\n[![Codecov][codecov-badge]][codecov-link]\n[![Version][pypi-badge]][pypi-link]\n[![Python][python-badge+]][pypi-link]\n[![Platform][platform-badge]][pypi-link]\n[![license: MIT][license-badge]][license-link]\n[![style: ruff][ruff-badge]][ruff-link]\n\n> **Disclaimer**: This project is **not** affiliated with Pioneer Corp. or its related companies\nin any way and has been written independently! Pyrekordbox is licensed under the\n[MIT license][license-link]. The maintainers of the project are not liable for any damages to your Rekordbox library.\n\nPyrekordbox is a Python package for interacting with the library and export data of\nPioneers Rekordbox DJ Software. It currently supports\n- Rekordbox v6 master.db database\n- Rekordbox XML database\n- Analysis files (ANLZ)\n- My-Setting files\n\nTested Rekordbox versions: ``5.8.6 | 6.7.7 | 7.0.9``\n\n\n|\u26a0\ufe0f| This project is still under development and might contain bugs or have breaking API changes in the future. Check the [changelog][CHANGELOG] for recent changes! |\n|----|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n\n\n## \ud83d\udd27 Installation\n\nPyrekordbox is available on [PyPI][pypi-link]:\n````commandline\npip install pyrekordbox\n````\n\nAlternatively, it can be installed via [GitHub][repo]\n```commandline\npip install git+https://github.com/dylanljones/pyrekordbox.git@VERSION\n```\nwhere `VERSION` is a release, tag or branch name.\n\n### Dependencies\n\n\nUnlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].\nPyrekordbox tries to install pre-built wheels with included sqlcipher binaries via the [sqlcipher3-wheels] package.\nIf this fails, it can be installed manually following the [installation guide][installation].\n\n\n## \ud83d\ude80 Quick-Start\n\n[Read the full documentation on ReadTheDocs!][documentation]\n\n| \u2757 | 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\" |\n|----|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n\n\n### Configuration\n\nPyrekordbox looks for installed Rekordbox versions and sets up the configuration\nautomatically. The configuration can be checked by calling:\n````python\nfrom pyrekordbox import show_config\n\nshow_config()\n````\nIf for some reason the configuration fails the values can be updated by providing the\npaths to the directory where Pioneer applications are installed (`pioneer_install_dir`)\nand to the directory where Pioneer stores the application data (`pioneer_app_dir`)\n````python\nfrom pyrekordbox.config import update_config\n\nupdate_config(\"<pioneer_install_dir>\", \"<pioneer_app_dir>\")\n````\n\nAlternatively the two paths can be specified in a configuration file under the section\n`rekordbox`. Supported configuration files are pyproject.toml, setup.cfg, pyrekordbox.toml,\npyrekordbox.cfg and pyrekordbox.yaml.\n\n\n### Rekordbox 6/7 database\n\nRekordbox 6 and 7 use a SQLite database for storing the collection content.\nUnfortunatly, the `master.db` SQLite database is encrypted using\n[SQLCipher][sqlcipher], which means it can't be used without the encryption key.\nHowever, since your data is stored and used locally, the key must be present on the\nmachine running Rekordbox.\n\nPyrekordbox can unlock the new Rekordbox `master.db` SQLite database and provides\nan easy interface for accessing the data stored in it:\n\n````python\nfrom pyrekordbox import Rekordbox6Database\n\ndb = Rekordbox6Database()\n\nfor content in db.get_content():\n print(content.Title, content.Artist.Name)\n\nplaylist = db.get_playlist()[0]\nfor song in playlist.Songs:\n content = song.Content\n print(content.Title, content.Artist.Name)\n````\nFields in the Rekordbox database that are stored without linking to other tables\ncan be changed via the corresponding property of the object:\n````python\ncontent = db.get_content()[0]\ncontent.Title = \"New Title\"\n````\nSome fields are stored as references to other tables, for example the artist of a track.\nCheck the [documentation][db6-doc] of the corresponding object for more information.\nSo far only a few tables support adding or deleting entries:\n- ``DjmdContent``: Tracks\n- ``DjmdPlaylist``: Playlists/Playlist Folders\n- ``DjmdSongPlaylist``: Songs in a playlist\n- ``DjmdAlbum``: Albums\n- ``DjmdArtist``: Artists\n- ``DjmdGenre``: Genres\n- ``DjmdLabel``: Labels\n\nIf the automatic key extraction fails the command line interface of ``pyrekordbox``\nprovides a command for downloading the key from known sources and writing it to the\ncache file:\n````shell\npython -m pyrekordbox download-key\n````\nOnce the key is cached the database can be opened without providing the key.\nThe key can also be provided manually:\n````python\ndb = Rekordbox6Database(key=\"<insert key here>\")\n````\n\n\n### Rekordbox XML\n\nThe Rekordbox XML database is used for importing (and exporting) Rekordbox collections\nincluding track metadata and playlists. They can also be used to share playlists\nbetween two databases.\n\nPyrekordbox can read and write Rekordbox XML databases.\n\n````python\nfrom pyrekordbox.rbxml import RekordboxXml\n\nxml = RekordboxXml(\"database.xml\")\n\ntrack = xml.get_track(0) # Get track by index (or TrackID)\ntrack_id = track.TrackID # Access via attribute\nname = track[\"Name\"] # or dictionary syntax\n\npath = \"/path/to/file.mp3\"\ntrack = xml.add_track(path) # Add new track\ntrack[\"Name\"] = \"Title\" # Add attributes to new track\ntrack[\"TrackID\"] = 10 # Types are handled automatically\n\n# Get playlist (folder) by path\npl = xml.get_playlist(\"Folder\", \"Sub Playlist\")\nkeys = pl.get_tracks() # Get keys of tracks in playlist\nktype = pl.key_type # Key can either be TrackID or Location\n\n# Add tracks and sub-playlists (folders)\npl.add_track(track.TrackID)\npl.add_playlist(\"Sub Sub Playlist\")\n````\n\n\n### Rekordbox ANLZ files\n\nRekordbox stores analysis information of the tracks in the collection in specific files,\nwhich also get exported to decives used by Pioneer professional DJ equipment. The files\nhave names like `ANLZ0000` and come with the extensions `.DAT`, `.EXT` or `.2EX`.\nThey include waveforms, beat grids (information about the precise time at which\neach beat occurs), time indices to allow efficient seeking to specific positions\ninside variable bit-rate audio streams, and lists of memory cues and loop points.\n\nPyrekordbox can parse all three analysis files, although not all the information of\nthe tracks can be extracted yet.\n\n````python\nfrom pyrekordbox.anlz import AnlzFile\n\nanlz = AnlzFile.parse_file(\"ANLZ0000.DAT\")\nbeat_grid = anlz.get(\"beat_grid\")\npath_tags = anlz.getall_tags(\"path\")\n````\n\nChanging and creating the Rekordbox analysis files is planned as well, but for that the\nfull structure of the analysis files has to be understood.\n\nUnsupported ANLZ tags:\n - PCOB\n - PCO2\n - PSSI\n - PWV6\n - PWV7\n - PWVC\n\n\n### Rekordbox My-Settings\n\nRekordbox stores the user settings in `*SETTING.DAT` files, which get exported to USB\ndevices. These files are either in the `PIONEER`directory of a USB drive\n(device exports), but are also present for on local installations of Rekordbox 6.\nThe setting files store the settings found on the \"DJ System\" > \"My Settings\" page of\nthe Rekordbox preferences. These include language, LCD brightness, tempo fader range,\ncrossfader curve and other settings for Pioneer professional DJ equipment.\n\nPyrekordbox supports both parsing and writing My-Setting files.\n\n````python\nfrom pyrekordbox.mysettings import read_mysetting_file\n\nmysett = read_mysetting_file(\"MYSETTINGS.DAT\")\nsync = mysett.get(\"sync\")\nquant = mysett.get(\"quantize\")\n````\n\nThe `DEVSETTING.DAT` file is still not supported\n\n\n## \ud83d\udca1 File formats\n\nA summary of the Rekordbox file formats can be found in the [documentation]:\n\n- [Rekordbox XML format][xml-doc]\n- [ANLZ file format][anlz-doc]\n- [My-Setting file format][mysettings-doc]\n- [Rekordbox 6 database][db6-doc]\n\n\n\n## \ud83d\udcbb Development\n\nIf you encounter an issue or want to contribute to pyrekordbox, please feel free to get in touch,\n[open an issue][new-issue] or create a new pull request! A guide for contributing to\n`pyrekordbox` and the commit-message style can be found in\n[CONTRIBUTING].\n\nFor general questions or discussions about Rekordbox, please use [GitHub Discussions][discussions]\ninstead of opening an issue.\n\nPyrekordbox is tested on Windows and MacOS, however some features can't be tested in\nthe CI setup since it requires a working Rekordbox installation.\n\n\n## \ud83d\udd17 Related Projects and References\n\n- [crate-digger]: Java library for fetching and parsing rekordbox exports and track analysis files.\n- [rekordcrate]: Library for parsing Pioneer Rekordbox device exports\n- [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.\n- Deep Symmetry has an extensive analysis of Rekordbox's ANLZ and .edb export file formats\n https://djl-analysis.deepsymmetry.org/djl-analysis\n- rekordcrate reverse engineered the format of the Rekordbox MySetting files\n https://holzhaus.github.io/rekordcrate/rekordcrate/setting/index.html\n- rekordcloud went into detail about the internals of Rekordbox 6\n https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and-its-new-internals.\n- supbox has a nice implementation on finding the Rekordbox 6 database key\n https://github.com/gabek/supbox\n\n\n\n\n[tests-badge]: https://img.shields.io/github/actions/workflow/status/dylanljones/pyrekordbox/tests.yml?branch=master&label=tests&logo=github&style=flat\n[docs-badge]: https://img.shields.io/readthedocs/pyrekordbox/stable?style=flat\n[python-badge]: https://img.shields.io/pypi/pyversions/pyrekordbox?style=flat\n[python-badge+]: https://img.shields.io/badge/python-3.8+-blue.svg\n[platform-badge]: https://img.shields.io/badge/platform-win%20%7C%20osx-blue?style=flat\n[pypi-badge]: https://img.shields.io/pypi/v/pyrekordbox?style=flat\n[license-badge]: https://img.shields.io/pypi/l/pyrekordbox?color=lightgrey\n[black-badge]: https://img.shields.io/badge/code%20style-black-000000?style=flat\n[ruff-badge]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\n[codecov-badge]: https://codecov.io/gh/dylanljones/pyrekordbox/branch/master/graph/badge.svg?token=5Z2KVGL7N3\n\n\n[pypi-link]: https://pypi.org/project/pyrekordbox/\n[license-link]: https://github.com/dylanljones/pyrekordbox/blob/master/LICENSE\n[tests-link]: https://github.com/dylanljones/pyrekordbox/actions/workflows/tests.yml\n[black-link]: https://github.com/psf/black\n[ruff-link]: https://github.com/astral-sh/ruff\n[lgtm-link]: https://lgtm.com/projects/g/dylanljones/pyrekordbox/context:python\n[codecov-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/master\n[codecov-dev-link]: https://app.codecov.io/gh/dylanljones/pyrekordbox/tree/dev\n[docs-latest-badge]: https://img.shields.io/readthedocs/pyrekordbox/latest?logo=readthedocs&style=flat\n[docs-dev-badge]: https://img.shields.io/readthedocs/pyrekordbox/dev?logo=readthedocs&style=flat\n\n[documentation]: https://pyrekordbox.readthedocs.io/en/stable/\n[documentation-latest]: https://pyrekordbox.readthedocs.io/en/latest/\n[documentation-dev]: https://pyrekordbox.readthedocs.io/en/dev/\n[tutorial]: https://pyrekordbox.readthedocs.io/en/stable/tutorial/index.html\n[db6-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/db6.html\n[anlz-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/anlz.html\n[xml-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/xml.html\n[mysettings-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/mysetting.html\n\n[new-issue]: https://github.com/dylanljones/pyrekordbox/issues/new/choose\n[discussions]: https://github.com/dylanljones/pyrekordbox/discussions\n[CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md\n[CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md\n[installation]: https://pyrekordbox.readthedocs.io/en/latest/installation.html\n\n[repo]: https://github.com/dylanljones/pyrekordbox\n[sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/\n[sqlcipher3-wheels]: https://github.com/laggykiller/sqlcipher3\n[rekordcrate]: https://github.com/Holzhaus/rekordcrate\n[crate-digger]: https://github.com/Deep-Symmetry/crate-digger\n[supbox]: https://github.com/gabek/supbox\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2022-2024, Dylan Jones\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.",
"version": "0.4.0",
"project_urls": {
"Documentation": "https://pyrekordbox.readthedocs.io/en/stable/",
"Source": "https://github.com/dylanljones/pyrekordbox",
"Tracker": "https://github.com/dylanljones/pyrekordbox/issues"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "bcac992b8cbe7f5d6175ab184a52c70318151355aad0a7b5a19b886f8c5161bc",
"md5": "547a0542894fe590829471c43962f048",
"sha256": "fd27ef408e69d4f1d00461d7751d0c1e48d46661cc25a3e7e4842def7007943b"
},
"downloads": -1,
"filename": "pyrekordbox-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "547a0542894fe590829471c43962f048",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 75464,
"upload_time": "2025-02-12T18:45:45",
"upload_time_iso_8601": "2025-02-12T18:45:45.273349Z",
"url": "https://files.pythonhosted.org/packages/bc/ac/992b8cbe7f5d6175ab184a52c70318151355aad0a7b5a19b886f8c5161bc/pyrekordbox-0.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "16d4bb88d9d7ec2bfe4cbdf6b93cdf9453c7b13957ffa45b41e16fc002430163",
"md5": "f0ce85eb76c9d5cd6935543b3e691165",
"sha256": "f266fa0f24f17f591f8a69eadc2b65ed8e5d38919534c379f0fb98f8555a3ed2"
},
"downloads": -1,
"filename": "pyrekordbox-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "f0ce85eb76c9d5cd6935543b3e691165",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 2306615,
"upload_time": "2025-02-12T18:45:47",
"upload_time_iso_8601": "2025-02-12T18:45:47.998103Z",
"url": "https://files.pythonhosted.org/packages/16/d4/bb88d9d7ec2bfe4cbdf6b93cdf9453c7b13957ffa45b41e16fc002430163/pyrekordbox-0.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-12 18:45:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dylanljones",
"github_project": "pyrekordbox",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "bidict",
"specs": [
[
">=",
"0.21.0"
]
]
},
{
"name": "blowfish",
"specs": [
[
">=",
"0.6.0"
]
]
},
{
"name": "construct",
"specs": [
[
">=",
"2.10.0"
]
]
},
{
"name": "hypothesis",
"specs": [
[
">=",
"6.0.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.19.0"
]
]
},
{
"name": "packaging",
"specs": []
},
{
"name": "pytest",
"specs": [
[
">=",
"6.2.0"
]
]
},
{
"name": "psutil",
"specs": [
[
">=",
"5.9.0"
]
]
},
{
"name": "setuptools",
"specs": [
[
">=",
"61.0.0"
]
]
},
{
"name": "setuptools-scm",
"specs": [
[
">=",
"4"
]
]
},
{
"name": "sqlalchemy",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "sqlcipher3-wheels",
"specs": []
},
{
"name": "frida-tools",
"specs": []
},
{
"name": "python-dateutil",
"specs": []
}
],
"lcname": "pyrekordbox"
}