The downscaling landed and the device kept serving 1920px art, because _cover_for has two branches and only one of them went through the cache. An album with a cover.jpg already sitting beside its audio - which most of this library has - had its `cover` point straight at that file, so FileResponse served whatever the internet had given it. The cache directory was full of tidy 640px files that half the albums never used. Both branches now store through the cache, in _cover_for and in _cover_for_episode (sidecar and shared-folder art alike). The undownscaled bytes still come back alongside the path, because colour extraction wants the real thing. That re-points `cover` for every album, but only for albums that are actually rescanned, and the scanner reuses anything whose fingerprint is unchanged - so _INDEX_VERSION goes to 5. An index from 4 is discarded and rebuilt, which is what that mechanism is for and is cheap by design. Two tests asserted `cover == <the library file>`, which is precisely the behaviour being changed. The episode one was also checking something real - that an episode's own sidecar art beats the show's shared cover - and both covers now live under their own album id, so it reads the colour back out of the stored file instead of comparing paths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 KiB
32 KiB