soulsync/tests/metadata
BoulderBadgeDad b202c176f7 Cover-art sources: skip low-res art (min-resolution guard) + max-res iTunes
Follow-up to the preferred-art feature. Real test runs showed a source could
win on priority while handing back a small cover: Cover Art Archive is
volunteer-uploaded with no size floor, so CAA-first gave a 599x531 (Taylor
Swift) and a 600x600 (Kendrick GNX) -- front-1200 only caps the max, so a
~600px upload stays ~600px -- and Deezer/iTunes lower in the order never got a
turn.

Fix:
- Minimum-resolution guard: artwork._min_size_art_validator builds the
  resolver's validate hook -- it fetches each candidate, caches the bytes (so
  the winner isn't fetched twice), and accepts art only when its shortest side
  >= metadata_enhancement.min_art_size (default 1000px; 0 disables). Art that's
  too small is a miss, so the resolver falls through to the next source instead
  of winning on priority. Unmeasurable images are accepted (don't over-reject;
  fallback is still today's art). Wired into both embed_album_art_metadata and
  download_cover_art.
- iTunes art upgraded to /3000x3000bb/ (was the 600px default) so it
  contributes high-res when it wins.
- select_preferred_art_url gains a validate passthrough to the resolver.
- config default metadata_enhancement.min_art_size: 1000.

Effect: with an order like caa > deezer > spotify > itunes, a ~600px CAA upload
is now skipped and Deezer's ~1900px wins -- consistent big art. (Spotify art
often maxes ~640px, so it's skipped at the 1000 floor in favor of bigger
sources; lower min_art_size to ~640 to allow it.)

Tests: tests/metadata/test_art_min_size.py (6 -- incl. the real 599x531 and
600x600 cases, shortest-side logic, unmeasurable-accept, no-bytes-reject,
0-disables) + iTunes max-res upgrade test. Full metadata suite green (617).
2026-06-01 12:24:51 -07:00
..
test_album_artist_unknown.py Fix: import overwrites album-artist tag to "Unknown Artist" (#735) 2026-05-29 09:30:38 -07:00
test_album_mbid_cache.py
test_album_type_normalization.py
test_art_lookup.py Cover-art sources: skip low-res art (min-resolution guard) + max-res iTunes 2026-06-01 12:24:51 -07:00
test_art_min_size.py Cover-art sources: skip low-res art (min-resolution guard) + max-res iTunes 2026-06-01 12:24:51 -07:00
test_art_sources.py Feature: preferred album-art source selection (opt-in, ordered, with fallback) 2026-06-01 11:45:07 -07:00
test_artist_resolution.py
test_artist_source_detail.py feat: artist-detail deep linking — /artist-detail/:source/:id 2026-05-18 13:07:54 -07:00
test_artist_source_lookup.py
test_artwork_resolution.py HiFi/MB cover art: use CAA 1200px thumbnail, not the flaky /front original 2026-05-28 14:37:03 -07:00
test_build_album_info_typed_path.py
test_cache_capacity_eviction.py Cache cap test: exercise the REAL _run_maintenance_write, not a stub 2026-05-30 23:31:35 -07:00
test_cache_maintenance_retry.py Handle transient SQLite IO during maintenance 2026-05-21 17:50:30 -07:00
test_deezer_cover_url_upgrade.py Embed highest-resolution album art across all art paths 2026-05-28 13:21:53 -07:00
test_deezer_search_query.py
test_deezer_track_cache_validity.py
test_discography_filters.py
test_discography_typed_path.py
test_enrichment_events.py
test_image_url_normalization.py feat(webui): cache artwork images on disk 2026-05-20 10:43:47 -07:00
test_metadata_album_tracks.py
test_metadata_artist_image.py
test_metadata_cache.py
test_metadata_cache_batch_lookup.py
test_metadata_discography.py
test_metadata_enrichment.py
test_metadata_gap_filler.py
test_metadata_musicmap.py
test_metadata_registry.py Add MusicBrainz as a metadata source 2026-05-18 18:47:13 -07:00
test_multi_artist_tag_settings.py
test_musicbrainz_client_query.py MusicBrainz manual search: field-scope the artist in non-strict mode (#754) 2026-05-31 10:05:24 -07:00
test_musicbrainz_search.py Fix: MusicBrainz artist discography capped at 25 releases 2026-05-28 12:00:05 -07:00
test_release_type.py fix(metadata): surface MusicBrainz 'Other' release-groups in discography (#650) 2026-05-19 20:20:28 -07:00
test_relevance.py Branch cleanup: lift manual-match helpers, fix length-pref ordering, profile-scope view toggle 2026-05-27 07:43:21 -07:00
test_runtime_bundle.py
test_track_number_format.py
test_typed_metadata_types.py Add MusicBrainz as a metadata source 2026-05-18 18:47:13 -07:00