Skip to main content

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)

Source distribution for crateport 1.2.0
File Size Uploaded
crateport-1.2.0.tar.gz 30.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for crateport 1.2.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.0

2 release files

1.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page