---
title: Quick Music Recommendations (new music from the songs you already like)
---

# Quick Music Recommendations

## What it is

**What it is.** A bundled skill + a one-click recipe that turns your **liked-songs library** into
**genuinely new** music you'll like, delivered as **no-login YouTube playlists** — with a built-in
**red-team quality pass** that refuses to recommend anything you already own and drops songs that
don't actually exist. Built for anyone: it runs on Node (which Claude Code already uses), needs no
Python, and needs no paid API for the default path.

**Where you see it.** In Omniscio's recipe library as **"Quick Music Recommendations."** Run it,
give it your liked-songs export, and it hands back a mobile-friendly page with a "▶ Play all"
button per genre plus the song list, and a quality report showing what it checked.

## Where to find it

In Omniscio's recipe library, as **Quick Music Recommendations**. Run it, give it your liked-songs export, and it hands back a mobile-friendly page with a **▶ Play all** button per genre plus a quality report.

## How it behaves

### How to run it

1. **Get your library out of Spotify.** Export your Liked Songs to a CSV or JSON file (a free web
   tool like Exportify does this from your own browser — no login inside Omniscio). Advanced: supply
   a Spotify API token instead (`source spotify-api`), or use the fragile interactive-login option.
2. **Run the recipe.** Pick a **brain** (below) and whether you want **one playlist per genre**.
3. **Get your playlists.** A published page opens on any device with a no-login YouTube "Play all"
   per genre; it confirms none of the picks are already in your library.

Under the hood it's one command: `node scripts/run.mjs --file <export> [--brain <b>] [--categories <map>]`.

### The three "brains" (where similarity comes from)

Spotify **removed** its recommendation and audio-feature APIs for new apps in late 2024, so the
intelligence has to come from elsewhere. You choose:

- **Claude knowledge** (default): the AI reasons from its own music knowledge ("fans of X also like
  Y"). Licensing-clean, works for anyone, needs no extra key — the recipe's own session does the
  thinking.
- **ListenBrainz**: free, open crowd data. A best-effort booster; if it can't answer it quietly
  steps aside.
- **Last.fm**: crowd data via a free key (`LASTFM_API_KEY`). **Personal use only** — its free tier
  forbids commercial use, so it's fine for yourself but not for a shipped product.

### The quality gates (why you can trust the picks)

Two kinds of check run before anything reaches you:

- **Blocking (a bug if it happens — the run fails rather than lie):**
  - *Already-owned*: no recommendation may be an artist or song you already have. Matching is fuzzy,
    so `Ke$ha` = `Kesha` and a remix of a track you own both count as owned. (This is the exact
    failure an earlier prototype hit — 37 of 40 "new" songs were already in the library — now
    impossible because the recommender, the verifier, and this gate all share ONE matcher.)
  - *Resolution collapse*: if almost nothing resolves to YouTube, the tool assumes it's broken and
    stops instead of handing you an empty playlist.
- **Filtering (just drops the bad pick and continues):** a song that doesn't resolve to a real
  YouTube video (catches hallucinations), a pick that's off-genre for the bucket it's in, one artist
  hogging a genre, and duplicates.

### Graceful degradation

If **yt-dlp** (the YouTube resolver) isn't installed, you still get the recommendation **list**,
just without the one-click playlist links, plus a note on how to install it. Missing keys or tokens
are reported in plain language up front, never as a silent failure.

### Limits

- Interactive Spotify login is **best-effort** — it's historically unreliable on desktop (hidden
  windows, robot checks). Prefer a file export or a token.
- YouTube "Play all" playlists cap at 50 songs (per genre this is never a problem).
- Last.fm's free tier is personal-use-only; for a multi-user product use Claude knowledge or ListenBrainz.

## For agents

### For developers

The skill lives at `.claude/skills/music-recommendations/`: `SKILL.md` (the SOP), `scripts/` (Node
pipeline — `normalize.mjs`, `recommend-core.mjs`, `ingest.mjs`, `brains.mjs`, `redteam.mjs`,
`youtube.mjs`, `report.mjs`, `preflight.mjs`, `run.mjs`), and `*.test.mjs` (run with
`node --test scripts/`). It ships to every user via the bundled-skills installer (registered in
`src/shared/integrations/music-recommendations.ts`), and the recipe is
`resources/recipe-patterns/quick-music-recommendations.pattern.json`.

## Related

- [use-recipes.md](use-recipes.md) — running a recipe and reading what it produced.
- [file-conversion.md](file-conversion.md) — the other bundled tool an ordinary user runs from a recipe.
- [artifact-sharing.md](artifact-sharing.md) — putting the delivered page on a phone as a share link.

