Throughline

song-level music fingerprinting

The problem with music recommendations

I fell in love with Royel Otis's "Car" - a woozy, jangle-pop song with shimmering guitars and a melodic bassline that sounds like it was beamed in from 1986. I wanted more. So I did what anyone does: I asked Spotify.

Spotify gave me more Royel Otis. Then "similar artists" - a grab bag of Australian indie bands that shared a genre tag but not a sound. Nothing that actually sounded like Car. Nothing that explained why it should sound like Car.

The problem is that recommendation engines treat artists as atomic units. One genre tag, one cluster, one set of recommendations. But three Royel Otis songs connect to three completely different musical traditions. Car sounds like The Smiths. Moody sounds like Beck. Oysters in My Pocket sounds like The Jam. Collapsing all of that into "Australian indie" throws away the most interesting information.

What I built instead

Throughline is a graph-based music recommendation engine that works at the song level, not the artist level. Every song is fingerprinted across 18 musical dimensions - not just genre or mood, but specific things like snare character, bass role, vocal style, and whether the artist's own identity comes through the production.

Songs connect to other songs through these shared dimensions. Every connection has a name and a reason you can read. When the system says Car is similar to Dreams Tonite by Alvvays, it can tell you exactly why: they share shimmering guitar tone, dreamy vocals, woozy-reverb atmosphere, bright-sadness emotional register, and a melodic-walking bassline.

That is the difference. Spotify tells you what to listen to. Throughline tells you why.

The 18 dimensions

Each song is analyzed across four categories of musical dimensions:

Tonal

How the instruments sound. Guitar tone, vocal style, snare character, hi-hat work, bass role and tone.

Rhythmic

How the rhythm feels. Groove type, drum energy, where the drums sit relative to the beat, perceived tempo feel.

Emotional

How the song makes you feel. Production atmosphere, emotional register, nostalgic quality, body response.

Compositional

How the song is constructed. Lyrical mode, era reference, structure, and whether the artist's voice comes through.

Each dimension value is calibrated against a reference song. "Bright-sadness" is anchored to Just Like Heaven by The Cure. "Brushes" (snare character) is anchored to Begin Again by Andy Shauf. This keeps the vocabulary grounded and consistent across 1,400+ songs.

How the analysis works

Every song goes through a four-stage pipeline. First, the audio is downloaded and separated into four isolated stems - drums, bass, vocals, and everything else - using Demucs, a neural network for source separation. Then librosa extracts quantitative features from each stem: tempo, onset density, spectral characteristics, timing feel.

These numbers are fed to Claude Sonnet 4.6 along with the full dimension guide - descriptions, allowed values, reference songs, and listening hints. The model combines the audio data with its own knowledge of the artist and song to assign dimension values. It is not a classifier picking from buckets. It is a music critic reasoning about what makes this song distinct.

What you can do with it

"sad music I can dance to"
Natural language search. Parses your intent into dimension filters (emotional_register + body_response + tempo) and finds matching songs.
"songs like Bizarre Love Triangle"
Finds the songs that share the most dimensions with a seed song, weighted so rare matches count more than common ones.
"guitars like Johnny Marr"
Uses artist knowledge to map to dimension values (jangle, arpeggiated, shimmering) and finds songs with that guitar tone.
"Beatles to Deftones"
Graph pathfinding. Finds the shortest chain of songs connecting two endpoints, with a reason at every hop. The output is a playlist with a story.

What I discovered

Producer matters more than genre. The strongest predictor of whether I would love a song turned out to be who produced it - not what genre it was tagged with. Blake Slatkin's production palette (warm, reverb-touched, intimate) is the throughline across Royel Otis, Gracie Abrams, and Omar Apollo. This was invisible until producer became a first-class node in the graph.

Your dislikes are as informative as your loves. The Royel Otis songs I dislike share some dimensions with the ones I love - same band, sometimes same guitar tone. But they diverge on atmosphere and vocal style. Those divergent dimensions form an anti-fingerprint that tells the system what to avoid.

Explainability changes how you listen. When a recommendation comes with a prose explanation - "both channel Johnny Marr's arpeggiated shimmer" - you listen differently. You listen for the connection. You evaluate it. You learn something about music. That turns passive consumption into active discovery.

The tech

Neo4j (graph database) FastAPI vis.js (visualization) Demucs (stem separation) librosa (audio analysis) Claude Sonnet 4.6 (dimension inference) Claude Haiku 4.5 (search intent parsing) yt-dlp (audio sourcing) YouTube embeds (in-browser playback)

1,441 songs. 250 artists. 18 fingerprint dimensions. ~27,500 dimension edges and ~1,860 prose-annotated song-to-song connections. Built by one person who just wanted to find more music that sounds like Car.