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.
Three plates
Each plate runs on its own, so they open as their own page rather than sitting inside this one. Same data, same palette, three different questions.

One sky, eight years wide
The scrolling one. Twelve beats from 2018 to now, the ground going from paper to night, and a gold marker flying my actual travel itinerary. At the end it unlocks and you can go through the whole thing yourself.
Open the plate
The music, all at once
No time and no place, just the sound. Six identities sized by hours, artists spiralling inward by rank, and the 13,000 artists beyond my top 1,000 sitting in the dust halo.
Open the plate
Two suns, two lives
Eight years of days folded into two dials, one per country, in local time. The line across the middle is the horizon, so sunrise is on the left and sunset on the right, and each life gets a sun parked at its peak listening hour.
Open the plateBest on a desktop. All three work on a phone, where a tap does what hover does.
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.
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.
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.
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.
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
