Skip to content

Commit 3bd3a59

Browse files
committed
Import MusicBrainz composer/lyricist/arranger ids
Updates the MusicBrainz plugin to also import MBIDs for composers/lyricists/arrangers, and also adds them as multi-valued fields.
1 parent 8fd20b9 commit 3bd3a59

File tree

4 files changed

+55
-15
lines changed

4 files changed

+55
-15
lines changed

beets/autotag/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,21 @@ def apply_item_metadata(item: Item, track_info: TrackInfo):
173173
item.artist_credit = track_info.artist_credit
174174
item.artists_credit = track_info.artists_credit
175175
item.title = track_info.title
176+
item.lyricists = track_info.lyricists
177+
item.composers = track_info.composers
178+
item.arrangers = track_info.arrangers
176179
item.mb_trackid = track_info.track_id
177180
item.mb_releasetrackid = track_info.release_track_id
178181
if track_info.artist_id:
179182
item.mb_artistid = track_info.artist_id
180183
if track_info.artists_ids:
181184
item.mb_artistids = track_info.artists_ids
185+
if track_info.lyricists_ids:
186+
item.mb_lyricistids = track_info.lyricists_ids
187+
if track_info.composers_ids:
188+
item.mb_composerids = track_info.composers_ids
189+
if track_info.arrangers_ids:
190+
item.mb_arrangerids = track_info.arrangers_ids
182191

183192
_apply_metadata(track_info, item)
184193
correct_list_fields(item)

beets/autotag/hooks.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,15 @@ def __init__(
195195
data_url: str | None = None,
196196
media: str | None = None,
197197
lyricist: str | None = None,
198+
lyricists: list[str] | None = None,
199+
lyricists_ids: list[str] | None = None,
198200
composer: str | None = None,
199201
composer_sort: str | None = None,
202+
composers: list[str] | None = None,
203+
composers_ids: list[str] | None = None,
200204
arranger: str | None = None,
205+
arrangers: list[str] | None = None,
206+
arrangers_ids: list[str] | None = None,
201207
track_alt: str | None = None,
202208
work: str | None = None,
203209
mb_workid: str | None = None,
@@ -229,9 +235,15 @@ def __init__(
229235
self.data_source = data_source
230236
self.data_url = data_url
231237
self.lyricist = lyricist
238+
self.lyricists = lyricists or []
239+
self.lyricists_ids = lyricists_ids or []
232240
self.composer = composer
233241
self.composer_sort = composer_sort
242+
self.composers = composers or []
243+
self.composers_ids = composers_ids or []
234244
self.arranger = arranger
245+
self.arrangers = arrangers or []
246+
self.arrangers_ids = arrangers_ids or []
235247
self.track_alt = track_alt
236248
self.work = work
237249
self.mb_workid = mb_workid

beets/library.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,12 +541,18 @@ class Item(LibModel):
541541
"discogs_artistid": types.INTEGER,
542542
"discogs_labelid": types.INTEGER,
543543
"lyricist": types.STRING,
544+
"lyricists": types.MULTI_VALUE_DSV,
545+
"lyricists_ids": types.MULTI_VALUE_DSV,
544546
"composer": types.STRING,
545547
"composer_sort": types.STRING,
548+
"composers": types.MULTI_VALUE_DSV,
549+
"composers_ids": types.MULTI_VALUE_DSV,
546550
"work": types.STRING,
547551
"mb_workid": types.STRING,
548552
"work_disambig": types.STRING,
549553
"arranger": types.STRING,
554+
"arrangers": types.MULTI_VALUE_DSV,
555+
"arrangers_ids": types.MULTI_VALUE_DSV,
550556
"grouping": types.STRING,
551557
"year": types.PaddedInt(4),
552558
"month": types.PaddedInt(2),
@@ -563,6 +569,9 @@ class Item(LibModel):
563569
"mb_albumid": types.STRING,
564570
"mb_artistid": types.STRING,
565571
"mb_artistids": types.MULTI_VALUE_DSV,
572+
"mb_lyricistids": types.MULTI_VALUE_DSV,
573+
"mb_composerids": types.MULTI_VALUE_DSV,
574+
"mb_arrangerids": types.MULTI_VALUE_DSV,
566575
"mb_albumartistid": types.STRING,
567576
"mb_albumartistids": types.MULTI_VALUE_DSV,
568577
"mb_releasetrackid": types.STRING,

beetsplug/musicbrainz.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,10 @@ def track_info(
457457
if recording.get("isrc-list"):
458458
info.isrc = ";".join(recording["isrc-list"])
459459

460-
lyricist = []
461-
composer = []
460+
lyricists = []
461+
lyricists_ids = []
462+
composers = []
463+
composers_ids = []
462464
composer_sort = []
463465
for work_relation in recording.get("work-relation-list", ()):
464466
if work_relation["type"] != "performance":
@@ -474,26 +476,34 @@ def track_info(
474476
if "type" in artist_relation:
475477
type = artist_relation["type"]
476478
if type == "lyricist":
477-
lyricist.append(artist_relation["artist"]["name"])
479+
lyricists.append(artist_relation["artist"]["name"])
480+
lyricists_ids.append(artist_relation["artist"]["id"])
478481
elif type == "composer":
479-
composer.append(artist_relation["artist"]["name"])
480-
composer_sort.append(
481-
artist_relation["artist"]["sort-name"]
482-
)
483-
if lyricist:
484-
info.lyricist = ", ".join(lyricist)
485-
if composer:
486-
info.composer = ", ".join(composer)
482+
composers.append(artist_relation["artist"]["name"])
483+
composers_ids.append(artist_relation["artist"]["id"])
484+
composer_sort.append(artist_relation["artist"]["sort-name"])
485+
if lyricists:
486+
info.lyricist = ", ".join(lyricists)
487+
info.lyricists = lyricists
488+
info.lyricists_ids = lyricists_ids
489+
if composers:
490+
info.composer = ", ".join(composers)
491+
info.composers = composers
492+
info.composers_ids = composers_ids
487493
info.composer_sort = ", ".join(composer_sort)
488494

489-
arranger = []
495+
arrangers = []
496+
arrangers_ids = []
490497
for artist_relation in recording.get("artist-relation-list", ()):
491498
if "type" in artist_relation:
492499
type = artist_relation["type"]
493500
if type == "arranger":
494-
arranger.append(artist_relation["artist"]["name"])
495-
if arranger:
496-
info.arranger = ", ".join(arranger)
501+
arrangers.append(artist_relation["artist"]["name"])
502+
arrangers_ids.append(artist_relation["artist"]["id"])
503+
if arrangers:
504+
info.arranger = ", ".join(arrangers)
505+
info.arrangers = arrangers
506+
info.arrangers_ids = arrangers_ids
497507

498508
# Supplementary fields provided by plugins
499509
extra_trackdatas = plugins.send("mb_track_extract", data=recording)

0 commit comments

Comments
 (0)