Skip to main content

Desktop app to move songs between CSV files, music folders, and YouTube Music playlists.

Project description

Cratefill

A small desktop app that moves songs between CSV files, folders of music files, and your YouTube Music playlists.

Cratefill screenshot

  • Left pane: load your songs, either from a CSV (artist + song name; extra columns are ignored) or from a folder of music files (Load folder… — the folder name + file name become the search query). You can also drag and drop a CSV file or a folder straight onto the song list. Click a column title to sort.
  • Right pane: log in to YouTube Music and see your playlists.
  • Select songs on the left, one or more playlists on the right, click Add — each song is searched on YouTube Music and added to every selected playlist.
  • The log pane shows what matched (), what matched only loosely (? — review these), and what wasn't found ().
  • The reverse works too: select playlists and click Export CSV… to save each one as a CSV file with artist, track name, and album columns.

Get it

  • Windows, no Python: download Cratefill.exe from the latest release and double-click it.
  • With Python (any OS): pipx install cratefill (or pip install cratefill), then run cratefill. Add drag-and-drop with pipx install "cratefill[dnd]".
  • From source: see Run below.

Requirements

  • Python 3.10+ (uses the built-in Tkinter GUI)
  • ytmusicapi
  • tkinterdnd2 (optional — enables drag-and-drop; the app runs fine without it)
py -m pip install -r requirements.txt

Run

Windows:

py cratefill.py

Linux (e.g. Ubuntu) — Tkinter is packaged separately from Python there, so install it once:

sudo apt install python3-tk
python3 -m pip install -r requirements.txt
python3 cratefill.py

Logging in (first time)

YouTube Music has no public login API, so the app authenticates the way ytmusicapi browser auth does — by reusing your browser session:

  1. Open https://music.youtube.com in your browser, logged in to your account.
  2. Press F12 → Network tab, then click around the page (e.g. Library).
  3. Filter requests by browse, click one of the browse?... POST requests.
  4. Copy the request headers:
    • Firefox: right-click the request → Copy Value → Copy Request Headers
    • Chrome/Edge: in the Headers panel, select everything under Request Headers and copy it.
  5. In Cratefill, click Log in…, paste the headers, click Log in.

The session is saved to browser.json next to the app, so subsequent launches log in automatically. It stays valid until you log out of YouTube in that browser. browser.json contains your session cookies — don't share it.

CSV format

Any CSV with an artist column and a song-name column works:

  • Column headers are detected by name (artist/artiste, title/titre/song/track/chanson…).
  • Without recognizable headers, the first column is taken as artist, the second as song name.
  • Comma, semicolon, or tab delimiters are auto-detected; extra columns are ignored.
  • An optional station/radio/chaîne column is displayed in the app — handy to remember where you heard a song — but is not used when searching YouTube Music.

See sample.csv for an example.

Files

File Purpose
cratefill.py The app (single file)
sample.csv Example CSV
browser.json Your saved login session (created on first login — keep private)
RESEARCH.md Notes on the approaches considered

License

GNU General Public License v3.0

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

cratefill-0.1.1.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

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

cratefill-0.1.1-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file cratefill-0.1.1.tar.gz.

File metadata

  • Download URL: cratefill-0.1.1.tar.gz
  • Upload date:
  • Size: 25.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cratefill-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c8aa3b88bcfd0577ad44259b84e01cf80dc0e02d326c1fea1d4f54214b0358eb
MD5 929a1d4fbd07098d1b041340b3af1beb
BLAKE2b-256 932954885a9a3a142b38fb7fa39d949acd79a11752ff84dcdea08fb8ae448067

See more details on using hashes here.

Provenance

The following attestation bundles were made for cratefill-0.1.1.tar.gz:

Publisher: publish.yml on flochrislas/cratefill

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

File details

Details for the file cratefill-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: cratefill-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cratefill-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 87d90b2054814ec87c9b5e7f2ce524553fe8d58ed02251fcdd0451da29ff7c36
MD5 5722008d12d2af7a44b2cd3f8932edc0
BLAKE2b-256 68dee9b7a4767d3a5a64ef9bd77e57f2fa46fdbaaa17bdf97f4d618df2cab668

See more details on using hashes here.

Provenance

The following attestation bundles were made for cratefill-0.1.1-py3-none-any.whl:

Publisher: publish.yml on flochrislas/cratefill

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