Repository navigation
Releases: scoblitz/scrobble-analyzer
Release list
v0.8.0 — Correction memory and better library triage
v0.8.0 — Correction memory and better library triage
This release makes large libraries easier to review and helps you revisit names that return after corrections. Corrections still happen manually on Last.fm; the analyzer provides findings, suggestions and remembered choices.
New
- Browse every finding. Previous/Next controls show 100 cards per page, with a visible range and separate card/finding counts. Reports still cover the full library.
- Remember correction choices. Optionally record the spelling or album you kept when marking Fixed. Remembered choices appear on later findings and in reports, and survive Restore. Ignore does not replace your remembered choice.
- Album suggestions from library evidence. Missing-album and compilation rows offer non-compilation-like albums from plays of the exact artist and track, plus prior album choices. Each suggestion shows its evidence. Use fills the optional field; Fixed saves it. These are research leads, not confirmation of an original release.
- Follow-up triage. Follow-ups only and Follow-ups first bring repeat offenses and unresolved prior decisions forward.
Fixed and improved
- Fixed names can recur after their old plays disappear, even when the returning count is smaller than the original baseline or below ordinary discovery thresholds. The analyzer must observe that decrease in an accepted complete export first.
- Plays under an explicitly chosen kept spelling, including case aliases, do not trigger recurrence.
- Live/remaster labels no longer consume meaningful sibling or nested title parentheses. Keyword matching respects word boundaries; ordinary case-only groups are excluded without weakening invisible-character detection.
- CSV parsing preserves raw names and hidden whitespace, and supports quoted delimiters, escaped quotes and embedded line breaks. Invalid account headers, row widths and timestamps receive actionable errors.
- Stable name-based IDs avoid punctuation and Unicode collisions and remain stable when the most-played member changes. Existing saved decisions and correction choices migrate conservatively. Ambiguous or split prior groups ask for review; detection changes use a review explanation rather than claiming new listening.
- Older or unordered exports open for review without changing saved history. Storage failures and overlapping imports cannot overwrite unreadable history or mix results from different files.
- Search narrows missing-album and compilation rows. Counts, impact sorting and compilation bulk actions reflect the rows currently shown. Artist filtering includes variation aliases.
- Keyboard access and focus handling improve. Open details and unsaved correction fields survive paging, filtering and other actions within an import.
- Attribute-shaped metadata is escaped safely in fields and tooltips.
Getting a refreshed export
After editing scrobbles on Last.fm, lastfmstats may reuse its saved historical library and fetch only new plays. That produces a new CSV containing old metadata.
On the lastfmstats homepage, open Database and use Remove from database beside your username. Retrieve the library again by username, wait for the complete retrieval, then export. Avoid importing your old CSV back into lastfmstats.
Use complete exports and preserve their original file modification times. The CSV format cannot certify a full refresh; file chronology checks alone cannot detect an export that appends new plays to stale history.
Upgrade notes
Your existing decisions remain tied to your Last.fm username and browser. Some findings may ask for review where the old identity or grouping is ambiguous. No broad Fixed/Ignore decision is silently copied into uncertain new groups.
Correction memory is optional. Marking Fixed records your decision; it does not verify a correction on Last.fm. Direct retrieval, automatic correction verification and additional pattern detectors are outside this release. The planned pattern-detector release moves to v0.9.0.
Dismissal Overhaul
Along with some improvements to issue flagging, this release changes what dismissing means. One button has become two, and the tool can now tell you when something you fixed has come back.
- ✓ Fixed or 🚫 Ignore - Fixed means "I corrected this on Last.fm": the item hides until new plays appear under the old name. Ignore means "not a problem": the item hides for good. Both can be restored
- Recurrences come back tagged - When a fixed item picks up new scrobbles or a new spelling, it returns to the active list with a line saying when you marked it and what changed since
- Your existing dismissals - Everything you dismissed before is treated as fixed. Anything still in your export shows once more with a note, so you can confirm it or switch it to ignore. Items you genuinely fixed never reappear
- Active / Fixed / Ignored views - The "view dismissed only" checkbox is now a three-way switch in the sidebar, each with its own count
- Compilations in one click - "Fixed all" and "Ignore all" on a compilation card act on every track still showing
- Report markers - [FIXED], [IGNORED] and [RECURRED] replace [DISMISSED]
- Hyphens - "Hip Hop" now groups with "Hip-Hop", and dashes are treated like other punctuation in artist, album and track names
- Lone invisible characters - An album or track with a hidden character in its name is flagged even when there is no clean spelling to compare it with
v0.6.1 - Normalization Patch
v0.6.1
The matching got better, so you'll see more issues 📈
Nearly everything in this release makes the analyzer notice spellings it used
to walk straight past. Your issue count will go up compared to your last
export — possibly by a lot. Nothing has broken: those variations were always
in your library, the tool just couldn't see them.
Almost all of this came from people posting real examples in Issues and
Discussions. Please keep them coming — nearly every item below started as
somebody's screenshot.
New
- Accented spellings now group — Motörhead meets Motorhead, Déjà
Voodoo meets Deja Voodoo. Accents are ignored when matching; the
original spelling is always what gets displayed, and which one is "right"
is still your call. - Look-alike accents get a chip — when two spellings differ only by which
accent they carry, a blue chip shows the exact character and its Unicode
codepoint. Romanian and Turkish spellings in particular can differ by a
mark that is effectively invisible at normal text size. Obvious differences
like Motörhead don't get a chip — you can already see those. - Featured artists — (feat. …), [ft. …] and (featuring …) are now
ignored when matching, so those sit alongside the plain title. - Punctuation and spacing — Albert Hammond, Jr. meets Albert Hammond
Jr, and T. Rex meets T.Rex. - & and "and" — now handled the same way on tracks and albums as it
always was on artists. 9th & Hennepin meets 9th and Hennepin. - More apostrophe styles — acute accents, backticks and modifier
apostrophes join the curly quotes. These are scattered through older tags
and split songs across separate Last.fm pages. - Square brackets and parentheses — Ramalama [Bang Bang] meets
Ramalama (Bang Bang).
Fixed
- Remasters dated in the title — Close to Me - 2006 Remaster now groups
with Close to Me. This is the standard Spotify format and it was matching
nothing at all. - Numerically titled tracks — tracks named with just a number were being
lumped together, so Crystal Castles' 1991 and 1983 showed up as
variations of each other. They don't any more. - Android uploads — the file picker should now let you select a CSV. I
couldn't reproduce the original report on my own Pixel, so if you were
affected I'd be grateful to know whether this actually helps.
Changed
- The "smart quote" warning now names the character it found (e.g.
`
U+0060) rather than the category. More useful when you're searching Last.fm
for the offending scrobble, and it won't go stale as more characters get
added.
For contributors
tests/merge-contract.js— a dependency-free Node script pinning which
names should and shouldn't be treated as the same thing. Run
node tests/merge-contract.jsbefore changing any matching rule. It found
two of the bugs fixed above.
Thanks to @Maeldun for a steady stream of real examples and an export to test
against, @cs188creations for the featured-artist cases, and @DavidVI18 for the
Android report.
v0.6.0
v0.6.0
Your dismissals now survive new exports 🎉
Previously, dismissals were tied to the exact file you uploaded — a fresh
export meant starting over. Dismissals are now tied to your Last.fm username
(read automatically from your export), so they carry forward every time.
Existing dismissals migrate automatically the first time you load a file in
the new version. One caveat: individually dismissed tracks under Tracks
Missing Albums and Tracks on Compilations can only be carried over if you
load the same file you dismissed them in at least once — so load your most
recent export before downloading a new one and everything transfers.
Otherwise those items may reappear once and can simply be re-dismissed.
New
- Character reveal — invisible characters and stray spaces now display as
labeled chips (e.g.NBSP,2×SP) so you can see exactly what differs
between two identical-looking names. Hover a chip for the Unicode codepoint. - Track-level invisible character detection — tracks now get the same
scan artists and albums already had. - One issue, one category — variations that differ only by invisible
characters now appear only under Invisible Characters instead of being
double-listed. - Export options — a checkbox under Export Report lets you include
dismissed items (tagged[DISMISSED]); by default the report is your
active to-do list. - Quality of life — clear button in the search box, reset button on the
artist filter, smoother search on large libraries.
Fixed
- Titles that legitimately contain quotes (like Bowie's "Heroes") no longer
have them stripped during CSV parsing. - Compilation detection no longer skips albums merely containing the word
"gold" (ABBA's Gold, Sting's Fields of Gold collection, etc.). - Selecting the same file twice in a row via the file picker now works.
- A failed file read now shows an error instead of loading forever.
- Loading a second file no longer silently keeps the previous artist filter.
Changed
- Visual refresh: calmer color usage, softer active states, warmer text.
v0.5.0 - Dismiss & Persistence
v0.5.0 - Dismiss & Persistence
This release adds the ability to track your progress as you work through issues over multiple sessions.
✨ New Features
Dismiss Issues
- Dismiss button on each issue lets you mark items as fixed or "won't fix"
- Dismissed items are hidden from the main view and counts update accordingly
- Per-track dismissal for Missing Albums and Compilations - work through long lists at your own pace
- "View dismissed only" toggle to review and restore items if needed
Persistence
- Your dismissed items are saved automatically and restored when you re-import the same file
- Uses a hash of your file to identify it - different exports start fresh
- Stored locally in your browser (nothing sent to any server)
Smart Quote Detection
- Detects Unicode vs ASCII apostrophe variations (e.g., "Don't" vs "Don't")
- Common issue when copying artist/track names from MusicBrainz
- Flagged with a yellow "
⚠️ smart quote" badge
Better Onboarding
- New empty state with instructions on how to get your export file
- "What's New" section so returning users know about updates
- Links to GitHub Issues/Discussions for feedback
- Email signup for release notifications
Improved Error Handling
- Friendly error message when uploading files with missing/invalid headers
- Links to documentation for supported formats
🐛 Bug Fixes
- Fixed click-drag closing cards - You can now select text to copy without the card collapsing
- Cards stay expanded when dismissing individual tracks
📋 Technical Notes
- All data processing still happens 100% client-side
- No data is sent anywhere - your scrobble history stays private
- Persistence uses localStorage keyed by file hash
Found a bug or have feedback? Open an issue or start a discussion!
v0.4.2
v0.4.1
v0.4.1 Changes:
✅ Footer with GitHub repo/feedback link
✅ Removed username input field
✅ Last.fm links now use _ (redirects to logged-in user)
✅ Removed canonical buttons from Missing Albums & Compilations
✅ Updated README to emphasize hosted version, clarified CSV format requirements
✅ Version number updated in header
v0.4.0 - Initial Public Release
First public release of Scrobble Analyzer! 🎉
Features:
- Artist variation detection (including "The" prefix issues)
- Album variation detection (remasters, deluxe editions, etc.)
- Track variation detection (live versions, remixes, etc.)
- Missing album detection
- Compilation album detection
- Invisible character detection (Unicode issues)
- Direct Last.fm library links (with +noredirect)
- Configurable username for links
- Export report functionality
How to use:
Visit https://scoblitz.github.io/scrobble-analyzer or download index.html and open it locally.