@@ -63,6 +63,9 @@ def __getattr__(name: str):
6363# Global logger.
6464log = logging .getLogger ("beets" )
6565
66+ # The data_source value produced by MusicBrainzPlugin.
67+ _MUSICBRAINZ_SOURCE = "MusicBrainz"
68+
6669# Metadata fields that are already hardcoded, or where the tag name changes.
6770SPECIAL_FIELDS = {
6871 "album" : (
@@ -199,12 +202,18 @@ def apply_item_metadata(item: Item, track_info: TrackInfo):
199202 item .artist_credit = track_info .artist_credit
200203 item .artists_credit = track_info .artists_credit
201204 item .title = track_info .title
202- item .mb_trackid = track_info .track_id
203- item .mb_releasetrackid = track_info .release_track_id
204- if track_info .artist_id :
205- item .mb_artistid = track_info .artist_id
206- if track_info .artists_ids :
207- item .mb_artistids = track_info .artists_ids
205+ if track_info .data_source == _MUSICBRAINZ_SOURCE :
206+ item .mb_trackid = track_info .track_id
207+ item .mb_releasetrackid = track_info .release_track_id
208+ if track_info .artist_id :
209+ item .mb_artistid = track_info .artist_id
210+ if track_info .artists_ids :
211+ item .mb_artistids = track_info .artists_ids
212+ else :
213+ item .mb_trackid = ""
214+ item .mb_releasetrackid = ""
215+ item .mb_artistid = ""
216+ item .mb_artistids = []
208217
209218 _apply_metadata (track_info , item )
210219 correct_list_fields (item )
@@ -305,22 +314,37 @@ def apply_metadata(
305314 item .disc = track_info .medium
306315 item .disctotal = album_info .mediums
307316
308- # MusicBrainz IDs.
309- item .mb_trackid = track_info .track_id
310- item .mb_releasetrackid = track_info .release_track_id or item .mb_trackid
317+ # MusicBrainz IDs: only write when the data source is MusicBrainz,
318+ # to avoid storing service-specific IDs (Spotify, Deezer, etc.) in
319+ # MusicBrainz fields. When the source is not MusicBrainz, clear any
320+ # stale values so retagging does not leave invalid IDs behind.
321+ if album_info .data_source == _MUSICBRAINZ_SOURCE :
322+ item .mb_trackid = track_info .track_id
323+ item .mb_releasetrackid = (
324+ track_info .release_track_id or item .mb_trackid
325+ )
311326
312- item .mb_albumid = album_info .album_id
313- item .mb_releasegroupid = album_info .releasegroup_id
327+ item .mb_albumid = album_info .album_id
328+ item .mb_releasegroupid = album_info .releasegroup_id
314329
315- item .mb_albumartistid = album_info .artist_id
316- item .mb_albumartistids = album_info .artists_ids or (
317- [ai ] if (ai := item .mb_albumartistid ) else []
318- )
330+ item .mb_albumartistid = album_info .artist_id
331+ item .mb_albumartistids = album_info .artists_ids or (
332+ [ai ] if (ai := item .mb_albumartistid ) else []
333+ )
319334
320- item .mb_artistid = track_info .artist_id or item .mb_albumartistid
321- item .mb_artistids = track_info .artists_ids or (
322- [iai ] if (iai := item .mb_artistid ) else []
323- )
335+ item .mb_artistid = track_info .artist_id or item .mb_albumartistid
336+ item .mb_artistids = track_info .artists_ids or (
337+ [iai ] if (iai := item .mb_artistid ) else []
338+ )
339+ else :
340+ item .mb_trackid = ""
341+ item .mb_releasetrackid = ""
342+ item .mb_albumid = ""
343+ item .mb_releasegroupid = ""
344+ item .mb_albumartistid = ""
345+ item .mb_albumartistids = []
346+ item .mb_artistid = ""
347+ item .mb_artistids = []
324348
325349 # Compilation flag.
326350 item .comp = album_info .va
0 commit comments