bvandeusen and Claude Opus 4.7
a7bea43a13
feat(discover): on-demand Lidarr artist art for suggestions
...
Out-of-library suggestion artists (artist_similarity_unmatched rows)
have no local art row, so the Discover card always showed a
placeholder. Resolve art on-demand from Lidarr's artist lookup,
matched by MBID (foreignArtistId == candidate_mbid), and pass the
remote image URL straight through — no caching (a suggestion may
never be viewed; the browser fetches the URL directly).
- suggestionView gains image_url (omitempty); handler resolves it via
bounded-concurrency Lidarr LookupArtist, best-effort, never fails
the request.
- Lidarr is the sole source: disabled / unreachable / no-match →
empty → existing placeholder. (No inline TheAudioDB fallback — it's
externally rate-limited and there's no cache to amortize it.)
- web: ArtistSuggestion.image_url?; SuggestionFeed passes it to
DiscoverResultCard (already supports imageUrl).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 20:16:56 -04:00
..
2026-05-06 13:08:45 -04:00
2026-05-07 20:10:18 -04:00
2026-05-06 10:08:58 -04:00
2026-05-07 20:10:18 -04:00
2026-05-07 07:59:40 -04:00
2026-05-07 20:10:18 -04:00
2026-05-16 18:41:21 -04:00
2026-05-16 18:41:21 -04:00
2026-05-07 12:01:16 -04:00
2026-05-08 10:46:43 -04:00
2026-05-08 23:07:47 -04:00
2026-05-08 23:07:15 -04:00
2026-05-08 10:40:03 -04:00
2026-05-12 21:28:05 -04:00
2026-05-08 10:40:03 -04:00
2026-05-12 20:55:33 -04:00
2026-05-06 22:59:23 -04:00
2026-05-07 20:10:18 -04:00
2026-05-04 20:13:31 -04:00
2026-05-07 20:10:18 -04:00
2026-05-07 12:43:44 -04:00
2026-05-08 10:18:35 -04:00
2026-05-08 10:40:03 -04:00
2026-05-08 10:46:43 -04:00
2026-05-07 12:17:14 -04:00
2026-05-08 08:17:35 -04:00
2026-05-16 18:41:21 -04:00
2026-05-07 12:49:30 -04:00
2026-05-07 21:33:14 -04:00
2026-05-07 11:56:19 -04:00
2026-05-13 11:58:24 -04:00
2026-05-07 12:49:30 -04:00
2026-05-07 21:33:14 -04:00
2026-05-08 10:40:03 -04:00
2026-05-07 20:25:26 -04:00
2026-05-10 20:28:27 -04:00
2026-05-10 20:28:27 -04:00
2026-04-21 23:02:20 -04:00
2026-05-04 17:41:16 -04:00
2026-05-07 19:48:25 -04:00
2026-05-07 19:48:25 -04:00
2026-05-12 21:28:05 -04:00
2026-05-12 20:44:37 -04:00
2026-05-08 11:29:36 -04:00
2026-05-15 11:14:21 -04:00
2026-05-13 20:41:44 -04:00
2026-05-13 20:41:44 -04:00
2026-05-01 18:00:59 -04:00
2026-05-07 20:48:20 -04:00
2026-04-28 09:27:06 -04:00
2026-05-09 22:47:25 -04:00
2026-05-10 18:47:30 -04:00
2026-05-10 18:47:30 -04:00
2026-05-10 18:47:30 -04:00
2026-05-16 18:41:21 -04:00
2026-05-15 21:37:29 -04:00
2026-04-29 17:35:45 -04:00
2026-05-07 21:19:35 -04:00
2026-05-08 10:40:03 -04:00
2026-05-13 14:27:23 -04:00
2026-04-28 09:27:06 -04:00
2026-05-08 08:26:43 -04:00
2026-05-04 07:05:49 -04:00
2026-05-08 08:44:50 -04:00
2026-05-07 12:38:48 -04:00
2026-05-08 08:44:50 -04:00
2026-05-07 12:38:48 -04:00
2026-05-08 08:44:50 -04:00
2026-05-04 18:13:13 -04:00
2026-05-08 08:44:50 -04:00
2026-05-08 11:29:36 -04:00
2026-05-13 11:54:45 -04:00
2026-05-13 11:58:24 -04:00
2026-05-07 12:38:48 -04:00
2026-05-08 08:26:43 -04:00
2026-05-07 20:25:26 -04:00
2026-05-04 15:21:24 -04:00
2026-05-11 22:18:58 -04:00
2026-05-15 13:21:09 -04:00
2026-05-15 13:29:27 -04:00
2026-05-08 10:40:03 -04:00
2026-05-15 13:33:52 -04:00
2026-05-08 08:17:35 -04:00
2026-04-30 20:19:39 -04:00
2026-05-12 21:28:05 -04:00
2026-05-08 11:05:25 -04:00
2026-05-08 08:43:36 -04:00
2026-05-08 12:05:35 -04:00
2026-05-12 20:55:33 -04:00
2026-05-07 22:18:40 -04:00
2026-05-07 21:28:20 -04:00
2026-04-21 08:29:28 -04:00
2026-05-08 10:46:43 -04:00
2026-05-01 06:23:08 -04:00
2026-05-16 20:16:56 -04:00
2026-05-13 20:41:44 -04:00