Add playlist skill and taste profile
This commit is contained in:
1 parent
2fea845141
commit
cc39e9b5d7
2 files changed
+203
No files matched your search
@@ -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.
|
||||
@@ -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. |
|
||||
Reference in new issue
Block a user