DJ-focused playlist tool: generate from artist/track lists or convert VirtualDJ exports to Soundiiz-ready CSVs with ISRC enrichment.
Project description
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
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 crateport-1.1.0.tar.gz.
File metadata
- Download URL: crateport-1.1.0.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3516159e9ea6f3a36150633d78b555011ded5fd615f8f446ecdf8214a62f3282
|
|
| MD5 |
0583634d1ee890f31afc794ee77c53e8
|
|
| BLAKE2b-256 |
026c043dd58b2cd8b908f9d057ccb43edba2d3a2de759b10a79d367789165d44
|
Provenance
The following attestation bundles were made for crateport-1.1.0.tar.gz:
Publisher:
release.yml on ZyanKLee/crateport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
crateport-1.1.0.tar.gz -
Subject digest:
3516159e9ea6f3a36150633d78b555011ded5fd615f8f446ecdf8214a62f3282 - Sigstore transparency entry: 1495550600
- Sigstore integration time:
-
Permalink:
ZyanKLee/crateport@d994fd9c00a3ac4c6540a219ed8c1de04290ab5a -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/ZyanKLee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d994fd9c00a3ac4c6540a219ed8c1de04290ab5a -
Trigger Event:
push
-
Statement type:
File details
Details for the file crateport-1.1.0-py3-none-any.whl.
File metadata
- Download URL: crateport-1.1.0-py3-none-any.whl
- Upload date:
- Size: 31.3 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 |
88c06a0b07bba0400debbc7059d32cde1ff9c385d91b9f2ebbafdeb1f453936c
|
|
| MD5 |
bbf6dc2266bde923164aaca4f778a1d3
|
|
| BLAKE2b-256 |
abbd6ff418d668bfe0023577d917ce4b9137544accb4b4421ecb6980842cc7f1
|
Provenance
The following attestation bundles were made for crateport-1.1.0-py3-none-any.whl:
Publisher:
release.yml on ZyanKLee/crateport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
crateport-1.1.0-py3-none-any.whl -
Subject digest:
88c06a0b07bba0400debbc7059d32cde1ff9c385d91b9f2ebbafdeb1f453936c - Sigstore transparency entry: 1495550670
- Sigstore integration time:
-
Permalink:
ZyanKLee/crateport@d994fd9c00a3ac4c6540a219ed8c1de04290ab5a -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/ZyanKLee
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d994fd9c00a3ac4c6540a219ed8c1de04290ab5a -
Trigger Event:
push
-
Statement type: