Products BeaconMCPs
Company About Blog
Appearance

When 404 is the norm

ListenBrainz returns an MBID, not an image URL. Cover Art Archive 404s often enough that the placeholder is going to render almost as much as the real cover.

Beacon's Now Playing tile has two cover-art paths. Last.fm hands back image URLs directly. ListenBrainz returns an MBID, and you have to take that MBID and hit coverartarchive.org/release/{mbid}/front. Often, it 404s. Not every listen has a resolved MBID, and the ones that do don't always have art uploaded. In practice, the placeholder renders almost as often as the real cover does. That changes what it has to look like.

The placeholder is a tinted variant of whatever tile accent the user picked, with a centered icon from Beacon's icon set. Not the raw saturated accent: a real cover at full color cycling in next to a saturated placeholder makes the page feel uneven, while the tinted version reads as "no cover yet" instead of competing for attention.

There's no animation on the placeholder either: the tile already has the equalizer animation for the "now playing" state, and adding motion to the empty state pulls the eye to the wrong thing.

While I was at it, Last.fm's own fallback got swept into the same code path. Last.fm hands back a gray-star image when it doesn't know the cover — a specific filename, 2a96cbd8b46e442fc41c2b86b821562f.png, the same one every time. Detecting it and substituting the Beacon placeholder kills two birds.

When the unhappy path fires as often as the happy path, you have to design it like it's an intentional part of the product. The first version of the tile rendered a broken image when no cover was available, which worked fine for testing with cherry-picked albums and would have looked terrible on a real user's history.