crateport
A DJ-focused playlist tool with two workflows:
generate— build a playlist from a list of artists, albums, or tracks using the Deezer public API, then export it to XSPF / M3U / CSV / JSON. See docs/generate.md for details.convert— take a VirtualDJ CSV export, enrich every track with an ISRC via Deezer (falling back to MusicBrainz), and produce a Soundiiz-compatible CSV ready for import into Deezer or any other streaming platform. See docs/convert.md for details.
No Deezer application credentials required. API responses are cached locally in SQLite.
Requirements
- Python ≥ 3.14
- pipx for installation
Installation
git clone https://github.com/ZyanKLee/crateport.git
cd crateport
pipx install .
The crateport command is then available globally.
To upgrade after pulling new changes:
pipx install . --force
To uninstall:
pipx uninstall crateport
Working directory
crateport always reads and writes relative to where you run the command, regardless of where it is installed:
| Path | Purpose |
|---|---|
./output/ |
Generated CSVs, XSPF, M3U, JSON, and cache.db — created automatically |
./source_data/ |
Convenient place for input files — created automatically, not required |
./.env |
Optional configuration overrides (see Configuration) |
Quick start
# Convert a VirtualDJ set export to Soundiiz CSV with ISRC
crateport convert "source_data/2026-03-13 My Set.csv" --name "My_Set_2026-03-13"
# Generate a playlist from an artist list
crateport generate source_data/artists.txt --name "My Techno Mix"
Full command reference: docs/convert.md · docs/generate.md
Configuration
Copy .env.example to .env and adjust as needed. All values are optional.
cp .env.example .env
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
sqlite:///output/cache.db |
SQLAlchemy database URL — switch to postgresql+psycopg2://… for PostgreSQL |
CACHE_TTL_HOURS |
24 |
How long cached API responses remain valid (hours) |
MUSICBRAINZ_USER_AGENT |
built-in | User-Agent sent to MusicBrainz (identify your instance) |
DEEZER_APP_ID |
(empty) | Reserved for future direct Deezer push (not required for file export) |
DEEZER_SECRET |
(empty) | Reserved for future direct Deezer push |
DEEZER_REDIRECT_URI |
http://localhost:8080/callback |
Reserved for future direct Deezer push |
Contributing
See CONTRIBUTING.md for project structure and development setup.
License
MIT License © 2026 Zyan K. Lee
Metadata
Release files for crateport 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crateport-1.2.0.tar.gz | 30.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| crateport-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.0 kB
Release files / crateport-1.2.0.tar.gz
| Download URL | crateport-1.2.0.tar.gz |
|---|---|
| Size | 30.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8a6c9237d348288643951ca2c63adf9aedc3a5bc7981daef0a92ecd6682500d3
|
|
BLAKE2b-256 checksum How to use checksums |
3927afa61e8aa0217b863496eab0e310c538272f3bf06d221940dd1db1354ba2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency logRelease files / crateport-1.2.0-py3-none-any.whl
| Download URL | crateport-1.2.0-py3-none-any.whl |
|---|---|
| Size | 36.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1247ffe32baf85b19b0bac934d1f0a5ffdf903bd9aa2a16391b026772c0ca42
|
|
BLAKE2b-256 checksum How to use checksums |
2e43cb5f6d643f996377a8fa4ee6a61f43cc76d2192afc3ff3b760a3aee2bbc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency log