metadata: nightly full beet import re-autotags every album; a transient MB miss silently drops it from album_art_sync #270
Labels
No labels
audit-work
bug
docs
general-admin
major-upgrade
needs-vps-sync
new-service
on-hold
outside-work
post-podman
renovate
upstream
vps
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
mysticalsoap/docker#270
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What happens
album_art_sync.pystarts every run with a whole-librarybeet import -q /music(beets/config.yaml, noincremental). That is not a no-op for albums already in the library: beets re-runs MusicBrainz autotagging on every album and replaces the existing items (-vshowsReplacing item NNN: …per track;addedand flexible attrs survive, the tagged fields come from the new match). Any run where a given album's MusicBrainz lookup comes back short (rate limit, timeout, fewer candidates) falls toquiet_fallback: asis, and the album'smb_releasegroupid/mb_albumidare wiped.album_art_sync.pythen treats the album as having no source, and because it already has acover.jpgit silently pops the state entry (state.pop(album)in the no-source loop). No ntfy, no log line. The album stops being tracked against the archive until some later night re-matches it.Evidence (2026-09-18)
Two sync runs ~40 min apart (forced recheck after #269, then the LONG SEASON override fix), each with its own full import:
76 album(s) with a usable source, 75 covers rewritten74 album(s) with a usable source; state went 76 → 74 entriesA Tribe Called Quest/The Low End Theory,Daft Punk/Discovery,Jeff Buckley/Grace— beets showedrg=andmb_albumid=empty,data_source=MusicBrainzstill set,addedunchanged, track files untouched (only cover.jpg modified in 24h)beet -v import -qon each afterwards matched at distance 0.00–0.01 and restored both ids (done, all three are back). So the misses were transient, and the nightly job re-rolls the dice for all ~106 albums every night.Options (design call)
import: incremental: yesin beets/config.yaml — existing dirs are skipped, new albums still import. Retagged albums are already refreshed explicitly bymusic_retag.pyviabeet update path:…, so the nightly full re-autotag isn't what keeps them current. Cheapest, removes the flapping entirely.matchedin state loses its beets source, keep the entry (last known release-group) and report it through ntfy likenewly_no_source.Either way the
state.poppath deserves at least a log line.Proposed shape (discussed 2026-09-19): album art is static, so drop the interval recheck entirely and make re-fetching event-driven — source changed (already immediate) or cover.jpg missing (new nightly check, covers Lidarr rebuilding an album folder on a quality upgrade). Pair with option 1 (
incremental: yes) so existing dirs aren't re-autotagged nightly. An edition swap stays under the same release group, and a real release-group change shows up as a beets re-match. Movie posters keep their schedule since Letterboxd art does change.