Turn your Spotify or Apple Music streaming history into an interactive vinyl record and a dozen other visual charts.
Everything runs entirely in your browser. There are no servers, and your data is never uploaded or saved.
- The Record: Every day of your listening history pressed into a single vinyl groove.
- The Race & Eras: Animated bar charts and streamgraphs tracking your top artists over time.
- Every Day: A calendar heatmap. Pick any specific date and see exactly what you played.
- Constellation & Pulse: Force-directed maps of your listening scenes and ridgeline charts of when you discovered new music.
- Exportable Posters: Generate and download custom, high-res posters of your stats in multiple formats (Instagram Story, 4:5 post, or print).
Spotify
- Go to spotify.com/account/privacy and request your Extended streaming history.
- Wait for the download link via email (can take up to 30 days).
- Drag and drop the downloaded
.zipfile directly onto the site.
Apple Music (Beta)
- Go to privacy.apple.com, choose Request a copy of your data, and check Apple Media Services information.
- Wait for the email link (usually takes a few days).
- Download all parts and drop them (or the
.zipfiles) onto the site.
Last.fm (Beta)
- Save your scrobbles as a
.csvwith lastfm-to-csv. - Drop the file onto the site by itself.
Note: You can drop exports from several services in together to merge your timelines.
src/
├── components/ # Visualization widgets, tour deck, and navigation UI
├── data/ # File parsing (JSON/CSV), stream deduping, and stats engines
│ ├── load.ts # Archive unpacker, format detection, and stream validation
│ ├── apple.ts # Apple Music reconciliation (track heuristics, split-joins)
│ ├── lastfm.ts # Last.fm scrobble exports (format check, estimated durations)
│ └── stats.ts # Metric aggregation (streaks, listening curves, ranks)
├── viz/ # Canvas renderers, vinyl drawing math, and poster generators
│ ├── record.ts # Vinyl groove projection and tonearm kinematics
│ ├── poster.ts # High-res print and social poster layouts
│ └── raceVideo.ts # In-browser 9:16 video encoding pipeline
└── lib/ # Color palettes (colorblind-safe), touch gestures, and state
Built with React and Vite.
npm install
npm run dev # Start local server
npm test # Run Vitest tests
npm run build # Type-check and build to dist/Distributed under the MIT License. Bundled typefaces (Bricolage Grotesque, Instrument Serif, JetBrains Mono) are licensed under the SIL Open Font License 1.1.
My Listening Record is an independent project and is not affiliated with, endorsed by, or sponsored by Spotify AB, Apple Inc. or Last.fm Ltd.
