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.0.tar.gz (25.8 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.0-py3-none-any.whl (25.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cratefill-0.1.0.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for cratefill-0.1.0.tar.gz
Algorithm Hash digest
SHA256 de1ef525d0d72ceacb2881742e9a11d8cc058417c0ff54503c8c550afe991c59
MD5 11dbecaf39603d06db57a7f04ae26fbe
BLAKE2b-256 45c2adce80246cf25aef6142e07c369276b950d56490a02bc11d8fed5cc21d64

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cratefill-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for cratefill-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 877cbea7a67c24a2a6db918de9939e0af8b22e681e4a4c1716962904abbdfe02
MD5 a0b20be5cfad562c601ad28c230d242e
BLAKE2b-256 9eb8aa5bee6f4cfc188c5ade2eff23c1e32c3d2bef10104fc307607312c9e947

See more details on using hashes here.

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