Skip to content

fix(library): new singles and albums with a dead cover link get their cover from Deezer - #1880

Merged
lklynet merged 1 commit into
mainfrom
lklynet/fix-missing-album-covers
Nov 13, 2026
Merged

lklynet merged 1 commit into
mainfrom
lklynet/fix-missing-album-covers

Conversation

@lklynet

@lklynet lklynet commented Nov 13, 2026

Copy link
Copy Markdown
Owner

Lots of Library albums showed no cover. Two cases, both common for new singles from playlist syncs:

  • No MusicBrainz ID. A new single MusicBrainz doesn't list yet has no release group, and the cover lookup stopped there without trying anything else.
  • Dead cover link. When the release group's saved cover link returned 404, Aurral counted it as a temporary failure and kept retrying the same link.

Now, when an album has no release group or its release-group cover won't download, Aurral asks Deezer for that artist and album title. Deezer is only asked when the release-group lookup hasn't already asked it, so there are no duplicate calls and no new BrainzMash calls. A cover found this way is saved like any other, including the cover.jpg beside Aurral-downloaded tracks, so the lookup runs once.

Proof: one new case in album-artwork.test.ts covers both, failing on main. The file now stubs Deezer with an empty catalogue so other tests don't reach it. pnpm run check, pnpm test (perf baseline unchanged), and pnpm run test:integration pass.

Created with Claude Opus 5.5 in Claude Code (T3 Code).

@github-actions github-actions Bot added bug Something is broken or behaving incorrectly. size:M 30-99 changed lines. labels Nov 13, 2026
@github-actions

Copy link
Copy Markdown
Preview image: ghcr.io/lklynet/aurral:pr-1880

Built from pr.1880+537d8a3. Each push replaces it.

docker pull ghcr.io/lklynet/aurral:pr-1880

Back up your Aurral config, point your compose service at this image, then docker compose pull aurral && docker compose up -d aurral. Switch back to your usual tag when you're done.

@github-actions

Copy link
Copy Markdown
Performance: Nothing is slower than main.

50,336 tracks, 2 alternating rounds per side, lower quartiles.

main this PR change queries
app shell 3.7 ms 3.7 ms +2% 13
library home 112 ms 113 ms 0% 121
library albums 18.5 ms 19.4 ms +5% 20
library albums, last page 25.5 ms 26.1 ms +2% 20
library albums, recently added 42.8 ms 42.8 ms 0% 20
library artists 17.4 ms 18.1 ms +4% 12
library tracks 9.4 ms 9.0 ms -4% 21
library artist and track sorts 295 ms 295 ms 0% 66
library genres 2.9 ms 2.9 ms 0% 4
library genre filter 20.7 ms 20.2 ms -2% 20
library status filter 41.7 ms 40.5 ms -3% 32
library filter 23.2 ms 23.9 ms +3% 20
artist page 18.1 ms 18.0 ms 0% 57
album page 4.2 ms 4.4 ms +3% 24
favorites 27.5 ms 27.9 ms +2% 53
search 20.5 ms 20.9 ms +2% 21
discover recently added 9.1 ms 9.0 ms -1% 28
discover releases 3.9 ms 4.3 ms +8% 9
releases page 12.0 ms 11.0 ms -9% 27
discover artist 19.1 ms 19.3 ms +2% 58
discover album 2.0 ms 1.9 ms -6% 3
discover album tracks 5.3 ms 5.3 ms -1% 8
discover album editions 2.4 ms 2.6 ms +6% 4
discover search 1.6 ms 1.5 ms -3% 3
similar artists 2.0 ms 2.0 ms +2% 6
playlists 22.2 ms 24.1 ms +8% 19
activity queue 51.8 ms 47.2 ms -9% 12
listening history 2.0 ms 1.8 ms -9% 4
subsonic getArtists 20.5 ms 20.6 ms +1% 9
subsonic getAlbumList2 93.6 ms 92.8 ms -1% 43
subsonic getArtist 5.6 ms 5.1 ms -8% 15
subsonic getAlbum 3.9 ms 3.8 ms -3% 14
subsonic search3 22.7 ms 22.9 ms +1% 22
subsonic getStarred2 35.0 ms 34.8 ms -1% 15
subsonic getRandomSongs 5.3 ms 5.2 ms -3% 15
subsonic getGenres 1.9 ms 1.9 ms -4% 3
subsonic getSongsByGenre 37.5 ms 37.8 ms +1% 14
subsonic playlists 46.0 ms 45.5 ms -1% 49
album match 2.4 ms 2.3 ms -1% 4
track match 1.9 ms 2.0 ms +4% 5
artist match 1.7 ms 1.7 ms +3% 4
subsonic edit playlist 192 ms 191 ms -1% 964
server startup 1131 ms 1115 ms -1%
server memory at startup 174.8 MiB 175.9 MiB +1%
initial JS and CSS, gzip 283.5 KiB 283.5 KiB 0%

@lklynet
lklynet merged commit 0efa2e8 into main Nov 13, 2026
15 checks passed
@lklynet
lklynet deleted the lklynet/fix-missing-album-covers branch November 13, 2026 20:04
lklynet added a commit that referenced this pull request Nov 13, 2026
…k to the base edition (#1881)

After #1880, a few new albums still had no cover. Deezer had all of
them, but the fallback asked for the wrong thing:

- It picked a Deezer artist by name first and took the first match.
"Avatar" hit a 2-fan artist instead of the Swedish band, and "Girlband"
hit "Girl Band" instead of GIRLBAND!.
- It then matched the artist's albums by title and picked "ENCORE
(Extended Version)", which Deezer lists without a cover until it comes
out.

Now the fallback searches Deezer's albums for the artist and title in
one request, and only accepts a result whose artist and title both match
and that has a cover. If an edition like "(Extended Version)" has no
art, it searches once more without the bracketed part and uses the base
album's cover. It asks Deezer whenever the release-group path found no
artwork, and a Deezer error is retried in 5 minutes instead of being
remembered as missing for a day.

Proof: the album-artwork test (a same-name decoy artist, a dead cover
link, an edition without art) fails on `main`. Calling the new lookup
against real Deezer returns the right cover for all three albums that
were still missing. `pnpm run check`, `pnpm test`, and `pnpm run
test:integration` pass.

Reviewed with sol-loop: 1 round with gpt-6.1-sol on high. Sol verdict:
approved

Created with Claude Opus 5.5 in Claude Code (T3 Code), reviewed by
gpt-6.1-sol.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something is broken or behaving incorrectly. size:M 30-99 changed lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant