Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crateport-1.1.0.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crateport-1.1.0-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

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

Hashes for crateport-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3516159e9ea6f3a36150633d78b555011ded5fd615f8f446ecdf8214a62f3282
MD5 0583634d1ee890f31afc794ee77c53e8
BLAKE2b-256 026c043dd58b2cd8b908f9d057ccb43edba2d3a2de759b10a79d367789165d44

See more details on using hashes here.

Provenance

The following attestation bundles were made for crateport-1.1.0.tar.gz:

Publisher: release.yml on ZyanKLee/crateport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for crateport-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88c06a0b07bba0400debbc7059d32cde1ff9c385d91b9f2ebbafdeb1f453936c
MD5 bbf6dc2266bde923164aaca4f778a1d3
BLAKE2b-256 abbd6ff418d668bfe0023577d917ce4b9137544accb4b4421ecb6980842cc7f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for crateport-1.1.0-py3-none-any.whl:

Publisher: release.yml on ZyanKLee/crateport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page