About Flagship Projects Experience Writing Life Blog Music Links Get in touch
Listening notes

What I listen to

A look at what's actually in my music library — which genres, in what proportion, how they connect, and whether the things I save are the things I end up playing. Spotify supplies the listening; the genres come from Last.fm and MusicBrainz, since Spotify stopped publishing them. How it's put together is at the bottom, including what it gets wrong.

No data yet. Run node scripts/build-spotify-genres.js to generate data/spotify-genres.json, then reload.

01

The constellation

Every genre in the library. Two genres are linked when some artist is tagged with both, so the threads running between clusters mark where one kind of music touches another in what I play — usually through a single artist sitting in both. Bigger, darker dot means more listening. Clusters are grouped by family for readability; the links inside them are earned. Click any dot to see which artists are in that genre.

Force-directed graph of music genres, sized by how much I listen and linked where genres share an artist.

02

What it rolls up to

Crowd-tagged genres are gloriously over-specific — "stomp and holler," "dungeon synth," "crank wave," "deconstructed club." Collapsed into 15 families, the shape of the thing gets legible.

Horizontal bar chart of listening share by macro genre family.

Share of total listening mass. Bars include every genre that rolls up to the family.
03

Saved vs. played

The interesting question isn't what I own — it's whether what I save matches what I actually put on. Three different populations, same 15 families.

Grouped bar chart comparing genre family share across saved library, playlists, and recent plays.

04

Every genre, to scale

The same data with nothing collapsed — each rectangle is one genre, grouped by family and sized by listening. This is where the long tail becomes visible.

Treemap of individual genres grouped by family, sized by listening share.

05

Playlist fingerprints

Each playlist scored by its own internal variety — the same effective-genre measure, applied one playlist at a time. Some are a single mood on repeat; some are a whole record collection. Names are deliberately left off: this repo is public.

Bar chart of playlists ranked by effective genre count.

06

Drift

Spotify will tell you your top artists over three windows — roughly the last month, the last six months, and the last several years. Reading them left to right is the closest thing to a picture of taste actually moving.

Slope chart showing how each genre family's share changes across three listening time windows.

Three API snapshots, not continuous history — the gaps between them aren't to scale.
07

The whole list

Every chart above, as numbers. Click a column to sort, or a row to see the artists in that genre.

Every genre with its family, listening share, and track count

08

Three recommenders, compared

Spotify's recommendation endpoints were switched off in 2024, so this asks three others instead — Last.fm and ListenBrainz, both collaborative filtering over listening logs, and Deezer, its own model of streaming behaviour. Each was seeded with the artists I play most, and anything already in the library was thrown out. What's left is a decent look at how much these engines actually agree.

artists suggested in total
named by all three
seed artists
strongest pairwise agreement

Bar chart comparing how many artists each recommendation engine suggested, and how many were unique to it.

Where all three agreed

Every engine named these independently. Click an artist to search it on Spotify.

Where only one did

Each engine's strongest pick that neither of the others made. This is where their different source data shows most plainly.

09

What this gets wrong

Any chart like this quietly throws data away. Here's exactly what mine throws away, and how much.

Coverage

Two different kinds of missing

Spotify has no genre for the artist
a real genre my rules don't cover

These are not the same failure and I don't merge them. The first is a hole in Spotify's data; the second is a hole in my taxonomy — and only the second is my fault. Genres in that second bucket still count toward every diversity number; they just don't get a family.

Method

How the numbers are built

Genres live on the artist, not the track — so a track by an artist tagged indie rock and chamber pop counts half to each. Every track contributes exactly 1.0 total, which stops artists with eight tags from drowning out artists with one. Without that, the chart would be measuring how verbosely an artist got tagged rather than what I listen to.

Genres are matched to artists by name, which is this page's real accuracy limit: two different bands sharing a name will be merged, and an artist Last.fm and MusicBrainz have never heard of gets nothing.

Effective genres is e^H, the exponential of Shannon entropy. If listening were spread perfectly evenly across N genres it returns exactly N; concentration pulls it down. It's a more useful summary than a count of distinct genres, which treats something heard once the same as something played every week.

Gini — Evenness — Top 10 —
Limits

What isn't here

"Listening history" is thinner than it sounds. Spotify's API returns your last 50 plays and three ranked snapshots — there's no endpoint for years of history. The drift chart is three photographs, not a film.

Spotify itself no longer answers the question this page asks. It deprecated audio-features in November 2024, removed artist popularity in February 2026, and quietly stopped returning artist genres altogether — its own docs still list the field, but the API doesn't send it. Every genre here is sourced elsewhere.

Spotify Web API Last.fm MusicBrainz D3 No build step

Generated by scripts/build-spotify-genres.js — a zero-dependency Node script that pages Spotify, resolves genres against Last.fm and MusicBrainz, and writes one sorted JSON file. Data as of . Source on GitHub