Add playlist skill and taste profile

This commit is contained in:
connor committed 2026-10-27 10:33:58 -04:00
1 parent 2fea845141
commit cc39e9b5d7
2 files changed
+203

No files matched your search

+88
View File
@@ -0,0 +1,88 @@
---
name: playlist
description: Build vibe playlists for Connor in Shanty, his self-hosted music server on mainframe — draft a track list from his taste profile, get approval, download what's missing, create the playlist over the Shanty API, and record his feedback. Use when he asks for a playlist, a mix, music for an activity or mood, or reports what he skipped.
---
# Building playlists in Shanty
Read `taste.md` in this directory first. It holds what Connor likes, what he
skips, and the rules he has set. Update it whenever he gives feedback.
## Workflow
1. Draft a list. Pick songs on fit alone: Shanty can download anything, so
don't limit choices to what's already in the library. One genre per
playlist; offer variants instead of mixing. Use the library to learn his
taste, not as a constraint. When a brief names references ("Mad Men",
"Bond"), match their feel; avoid theme songs and other picks that make
listeners name the reference.
2. Show the list in order with rough length, and wait for approval. Don't
add anything to a playlist, or download anything, until he says so.
3. Apply his edits, download what's missing, then create the playlist.
4. Ask what he skipped once he's listened. Record skips and keeps in
`taste.md`, with the date.
Names are by mood or genre, not activity, unless the playlist is truly for one
activity (lifting is; a walk home isn't).
## Shanty API
Shanty runs in the `connor_shanty_1` container on mainframe and isn't
published on localhost. Get its address with
`sudo podman inspect connor_shanty_1 --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'`
and use `http://<ip>:8085/api`. The container IP can change on recreate.
Log in with the password from rbw (Connor has to unlock it). Keep the cookie
jar in the session scratchpad; sessions end when the server restarts.
```sh
rbw get shanty-connor | jq -Rn --arg u connor '{username:$u,password:input}' |
curl -s -c "$JAR" -H 'content-type: application/json' --data @- "$API/auth/login"
```
| Call | Use |
|---|---|
| `GET /search/track?q=&artist=&limit=` | Find recording MBIDs. Results mix live and compilation versions; filter on `album`. |
| `POST /tracks/watch {artist,title[,mbid]}` | Mark one track wanted. Pass `mbid` when you have the studio recording. |
| `DELETE /tracks/watch {mbid}` | Unwatch a track. |
| `POST /downloads/sync` then `POST /downloads/process` | Queue and download wanted tracks. |
| `GET /playlists`, `GET /playlists/{id}` | List playlists; show one with its tracks. |
| `POST /playlists {name,description,track_ids}` | Create a playlist. |
| `PUT /playlists/{id} {name,description}` | Rename. |
| `POST /playlists/{id}/tracks {track_id}` | Append a track. |
| `PUT /playlists/{id}/tracks {track_ids}` | Set the full order. |
| `DELETE /playlists/{id}/tracks/{track_id}` | Remove a track from a playlist. |
Track IDs for owned songs: read-only query on `/usr/local/shanty/shanty.db`,
e.g. `sqlite3 -readonly -cmd '.timeout 10000' /usr/local/shanty/shanty.db
"select id,artist,title,album from tracks where lower(artist)='...' and lower(title) like '...%'"`.
Downloaded tracks get new rows; their IDs stay the same after Shanty moves
the files into the library. Watch download progress on `download_queue`
filtered by `wanted_item_id` (the `id` the watch call returned).
## Known problems
- The remote MusicBrainz API sometimes returns 503 on a watch call. Retry.
- A watch by artist and title can match a live recording Connor already owns
and report `Owned` without downloading anything. Find the studio MBID with
search and watch by `mbid`.
- A watch by name sometimes stores no MBID (seen with System of a Down). The
download still works, but tagging may be off.
- The downloader takes the top YouTube Music result for "<artist> <title>",
and sometimes that is a cover ("In The Style of …", karaoke, instrumental).
Check the artist on every new track row after a batch. To retry, watch the
song again credited to a different performer on the recording (Ipanema
worked as Astrud Gilberto, not Stan Getz). Preview what a query returns with
`sudo podman exec connor_shanty_1 /opt/venv/bin/python /usr/share/shanty/ytmusic_search.py search "<query>"`.
- `GET /playlists/{id}` returns `{playlist, tracks}`; the name is under
`.playlist`. `PUT /playlists/{id}/tracks` replaces the whole tracklist.
- No YouTube login is configured, so age-restricted videos fail with "Sign in
to confirm your age". Tell Connor; it needs the login in Shanty's settings.
- Some library tracks carry compilation tags (artist "Various Artists"), so a
lookup by artist misses them; the studio Deceptacon is track 13200 under a
CMJ sampler. Search by title too before downloading a duplicate.
- Several versions of a song can be in the library (demo, live, remix, "Beach
Picnic version"). Pick the original unless asked.
- Deleting tracks or files from the library is irreversible and gets blocked
by the permission check. Write a script for Connor to run instead.
- Subsonic clients cache playlists; he may need to refresh to see changes.
+115
View File
@@ -0,0 +1,115 @@
# Connor's music taste
Connor was 34 in 2026. He doesn't listen to music much, so he can't build
playlists from memory. He wants two things: playlists that impress other
people at parties, and playlists for himself where he picks a mood and
doesn't think about it.
## General
- Nostalgia window is roughly 2004–2016 (ages 12–24).
- One genre per playlist. Italian rap (Fabri Fibra, Ghali, Willie Peyote,
Dargen D'Amico) is its own genre to him; keep it out of hip-hop lists.
- Kanye: golden era through Yeezus (2013) only. Nothing after.
## By genre
### Ska-punk and punk
- Likes: Streetlight Manifesto, Catch 22, Operation Ivy, Rancid, Reel Big
Fish, Goldfinger.
- Skipped: Less Than Jake – Gainesville Rock City (2026-10-26).
### Heavy rock
- Likes Rage Against the Machine; mixes well into ska-punk for lifting.
- System of a Down: fine, but at most two songs per playlist.
- Skipped all Deftones (2026-10-26).
### Riot grrrl, women-fronted indie rock and electroclash
- One blended vibe to him, not three genres: Bikini Kill and Bratmobile, through
illuminati hotties, Bully, Indigo De Souza and Speedy Ortiz, to Le Tigre
("Deceptacon" is the touchstone), Sleigh Bells, CSS, YYY and Metric. He
listens to it a lot, mostly riding his motorcycle; any time he wants high
energy.
- Asked for one playlist, not a punk/electro split (2026-10-26).
- The playlist is women-fronted by design, so no men's bands, and no songs
where a man carries much of the vocal (cut The Kills – U.R.A. Fever, a
trade-off duet, 2026-10-26). He likes PUP;
it's just outside this playlist's focus.
- Keep: Mommy Long Legs – Bridezilla.
- Penelope Scott belongs here for him even though she's bedroom pop more
than punk; "Lotta True Crime" especially. Added Rät and Feel Better too
(2026-10-26).
- Cut: Metric – Help I'm Alive and Japanese Breakfast – Be Sweet
(2026-10-26). Too polished and melodic next to the rest. For this
playlist the electronic side means scrappy and punky (Le Tigre, CSS,
Sleigh Bells), not sleek synth-pop; prefer songs with bite.
- Also cut: Santigold – L.E.S. Artistes and Gossip – Standing in the Way of
Control (2026-10-26). Of the songs added from outside his library, the
dance-floor ones were cut (Metric, Japanese Breakfast, Santigold, Gossip)
and the guitar-led ones kept (YYY, CSS, Wolf Alice, Charly Bliss). In his
words it's a "rock out" playlist, not a dance playlist: guitars over dance
beats when extending it.
- Removed Charly Bliss – Glitter at his request; no reason given
(2026-10-27).
- Replaced his earlier "Angry Girls" and "Dunno" playlists, which he thought
were decent; track lists are in the 2026-10-26 session scratchpad only.
### Fall (dark acoustic storytelling)
- A period of his life more than a genre. The thread: sin, death and
drinking over banjo and acoustic guitar. Gothic Americana at one end,
confessional folk-punk at the other, Hozier and Cohen in the middle.
- Foundation, four songs each: Hozier, Amigo the Devil, Shakey Graves,
The Devil Makes Three. He'd forgotten the last two until he saw them in his
library (2026-10-27).
- Seeds: Houndmouth (only "Casino (Bad Things)"), Ramshackle Glory "Your
Heart Is a Muscle the Size of Your Fist", Mother Mother "Hayloft",
Leonard Cohen (he doesn't know Cohen's songs well; feedback pending).
- The Front Bottoms don't fit this one (2026-10-27).
- Mostly songs he already knows; it's a nostalgia playlist. Two new songs
at most: added Gregory Alan Isakov "Big Black Car" and The Amazing Devil
"Marbles" (2026-10-27).
- Asked for The Devil Makes Three "All Hail"; it replaced "Spinning Like a
Top", the lightest of their four (2026-10-27).
### Hip-hop
- Likes: Kendrick Lamar, Childish Gambino, Tyler, The Creator, Mac Miller,
Open Mike Eagle.
- Doesn't like J. Cole.
- Likes OutKast, but kept them out of a chill playlist.
### '60s lounge, crooners and spy jazz
- Brief for Old People Music: Saturday-morning cleaning, feeling responsible
and classy. Two parts Mad Men soundtrack, one part music James Bond would
like. He didn't know the genre going in.
- Must have: Zou Bisou Bisou (Jessica Paré's Mad Men version).
- Already liked: Frank Sinatra, Dean Martin, Louis Armstrong.
- Liked the bossa nova (Getz/Gilberto, Sérgio Mendes, Quincy Jones' Soul
Bossa Nova) (2026-10-26).
- Cut RJD2's "A Beautiful Mine" (the Mad Men theme) from the playlist; he
likes the song and kept it in the library. The problem: it doesn't sound
like the period, and as the show's theme it's too on the nose. A brief like
"Mad Men and Bond" describes a feel; listeners shouldn't be able to name the
inspiration. Modern songs with a period sound are fine (2026-10-26).
- Same rule applied to the Bond third: swapped five recognizable theme songs
(Goldfinger, Thunderball, OHMSS, Mission: Impossible, Peter Gunn) for
period songs with the same feel (Big Spender, The Cat, Watermelon Man,
The 'In' Crowd, Feeling Good). Kept You Only Live Twice. He agreed with the
reasoning but didn't know most of the new songs yet (2026-10-26).
- Then asked for Goldfinger back because he likes the song. A song he
personally likes outweighs the on-the-nose rule (2026-10-26).
- Dropped Big Spender: too much like a Broadway number, not smooth enough.
This playlist wants smooth; avoid showtunes and brassy stage belters
(2026-10-26).
- The first version of this playlist mixed in Christmas songs and '70s
soul/funk (Betty Davis, Al Green, Barry White, Kool & the Gang); he called
it a poor first attempt and it was replaced.
## Playlists made
| Playlist | Shanty id | Made | Notes |
|---|---|---|---|
| Lifting: Ska-Punk & Rage | 22 | 2026-10-26 | Ska-punk with RATM and two SOAD. Started from "This Is America" and Streetlight Manifesto as references. |
| Chill Hip-Hop | 23 | 2026-10-26 | 2004–2016, head-nodding tempo. Feedback pending. |
| Angry Girls Go Electric | 24 | 2026-10-26 | 30 songs, riot grrrl to electroclash. His name; he called it cheesy but a start. Feedback pending. |
| Fall | 25 | 2026-10-27 | 26 songs, about 1h45m. Library-heavy, two new songs. Feedback pending, especially Cohen and the new songs. |
| Old People Music | 21 | 2026-10-26 | Rebuilt: early-'60s crooners, bossa nova and cool jazz, with Bond themes and spy jazz every third song. Feedback pending. |