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.
- 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.exefrom the latest release and double-click it. - With Python (any OS):
pipx install cratefill(orpip install cratefill), then runcratefill. Add drag-and-drop withpipx 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:
- Open https://music.youtube.com in your browser, logged in to your account.
- Press F12 → Network tab, then click around the page (e.g. Library).
- Filter requests by
browse, click one of thebrowse?...POST requests. - 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.
- 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înecolumn 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de1ef525d0d72ceacb2881742e9a11d8cc058417c0ff54503c8c550afe991c59
|
|
| MD5 |
11dbecaf39603d06db57a7f04ae26fbe
|
|
| BLAKE2b-256 |
45c2adce80246cf25aef6142e07c369276b950d56490a02bc11d8fed5cc21d64
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
877cbea7a67c24a2a6db918de9939e0af8b22e681e4a4c1716962904abbdfe02
|
|
| MD5 |
a0b20be5cfad562c601ad28c230d242e
|
|
| BLAKE2b-256 |
9eb8aa5bee6f4cfc188c5ade2eff23c1e32c3d2bef10104fc307607312c9e947
|