Skip to content
Listening Atlas

Listening Atlas

Eight years of my Spotify history, drawn as a sky.

2026Live

I asked Spotify for my extended streaming history and got back 178,269 rows going back to September 2018. Eight years, 7,597 hours, and the country I was in for every single play. No genres, no audio features, since Spotify shut that API down in November 2024.

I didn't want a Wrapped card. I wanted to see all of it at once, so I drew it as a sky. Every artist is a star. Time runs left to right, and the vertical axis is where I was living: Bristol at the top at 51°N, Mauritius at the bottom at 20°S. Plotted that way the picture composes itself, because I moved.

Three plates came out of it. They are canvas, one self-contained HTML file each, no chart library and no framework.

7,597hours
136,267plays
14,392artists
3plates
8years
01

2021, the year home pulled first

The vertical axis is where I was, and I only found out afterwards how literal that is. The monthly country share in the export is binary, either Britain or Mauritius, because I am physically in one place at a time. So the gold path is not a trend line, it is my travel history reconstructed from what I played: the Covid return in December 2020, back to Bristol in late 2021, the shuttling through 2022. 2021 is also the quietest year in eight, 383 hours.

The path dives south in December 2020 and stays there for a year.

December 2023. After this the north stops receiving new stars.

02

The northern sky closes

December 2023 was the last flight south, and the data agrees with me: every month from then on is 100% Mauritius, and the whole of 2024 has 0.4 hours of listening in Britain. On the plate the northern half of the sky simply goes dark and nothing new lights up there again. It is the one moment where the visual and the biography are the same event.

03

The further from home, the louder the old songs

This is the finding the piece was built around. 2022 is a natural experiment: I spent 637 hours listening in Britain and 575 in Mauritius, same year, same me. Within that one year, Bollywood is 15.2% of my Bristol hours and 2.9% of my Mauritius hours. That is 5.2 times more of it when I was away from home. An earlier claim I had, that I listened to more electronic music when I was home, died the moment I controlled for the era: it rose everywhere from 2022, so it was age, not place.

The gold burns in the northern sky while I sit at 20°S. One thread connects them.

The pink stars are séga. They arrive late and they arrive at home.

04

Bollywood was longing, séga is belonging

Séga, the music of the island, never travelled well to 51° north: 2.1% of my hours before the return, 5.3% after. Bollywood came out when home was furthest away, séga only came out once I was actually here. The third plate found the other half of that: at home my listening peaks at 17:00, which is sunset, and 27% of my Mauritius hours land in the 16:00 to 19:00 window against 13% in Bristol.

Behind the Build

Key Technical Decisions

  • A play counts at 30 seconds. 23.6% of the rows are sub-30s skips, so raw play counts overstate everything. 178,269 rows become 136,267 plays, and hours are unaffected.
  • The export has no genres, so I tagged the top 1,000 artists (68.2% of all hours) with Last.fm, and used MusicBrainz for country. Then I hand-checked the top 50, which caught five wrong ones, including my number three artist getting zero tags and two Mauritian legends colliding with a Japanese visual-kei band and a doom metal band.
  • Stars are positioned by centre of era, meaning the hours-weighted mean play date, not first play. With first-play dates 70% of the field piles into 2018 and the right side of the sky is empty.
  • The six category colours were computed, not picked. A colour-blindness and contrast validator ran over them against the dark surface, and it rejected one change that looked better to me by eye.
  • Rain, white noise and study loops are not artists in any useful sense, so functional audio renders as weather over the sky instead of as stars.
  • Each plate is one HTML file with one canvas and one animation loop. The site serves them as static files rather than wrapping them in React, because React never touches canvas pixels and hydrating first would only delay the first frame.

The data could tell me what I played, when, and which country I was in. It could never tell me why. That part I had to answer myself.

One sky, eight years wide.

Listening Atlas · September 2018 to July 2026 · 2026 is a partial year, data ends 16 July · Python, canvas, Last.fm, MusicBrainz