Import MusicBrainz composer/lyricist/arranger ids#5847
Import MusicBrainz composer/lyricist/arranger ids#5847snejus merged 7 commits intobeetbox:masterfrom
Conversation
|
Thank you for the PR! The changelog has not been updated, so here is a friendly reminder to check if you need to add an entry. |
There was a problem hiding this comment.
Pull Request Overview
This PR enhances the MusicBrainz plugin by importing MBIDs for composers, lyricists, and arrangers and storing them as multi-valued fields. The changes span updates to the track information processing logic, the library schema, and the autotag hooks to accommodate the new fields.
- Updated track_info in the MusicBrainz plugin to collect both names and MBIDs for lyricists, composers, and arrangers.
- Modified the library model to add new multi-valued fields for the additional MBIDs.
- Adjusted autotag hooks and initialization to integrate the new fields into the metadata processing.
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| beetsplug/musicbrainz.py | Updated to extract and store MBIDs alongside names for lyricists, composers, and arrangers |
| beets/library.py | Added new schema entries for multi-valued MBID fields |
| beets/autotag/hooks.py | Updated constructor parameters and initialization for new lyricist, composer, and arranger fields |
| beets/autotag/init.py | Mapped new track information fields to corresponding item fields |
Comments suppressed due to low confidence (2)
beetsplug/musicbrainz.py:485
- [nitpick] Consider adding inline comments to explain the rationale for storing both the concatenated string (for legacy support) and the list of lyricists (for enhanced functionality).
if lyricists:
beets/library.py:544
- Ensure that tests are added to verify the correct import and synchronization of the new multi-valued fields for lyricists, composers, and arrangers.
"lyricists": types.MULTI_VALUE_DSV,
|
Heya, thank you for the PR! I'm not too sure if we want to mirror more ids from musicbrainz in the autotag functionalities if they are not actively used in the lookup process. Especially since mb was moved into a plugin and other metadata sources do not supply the same information. Maybe instead of specifically defining all different id properties, we can find a more generic way to allow adding arbitrary IDs (Optimally without the need to manually edit the autotag module)? Seems to me like we might have aquie some duplication for multivalue id fields. I would be highly interested in @snejus thoughts on this. Let's discuss this a bit before we continue with the merge. Best, Sebastian |
Yes, this is a good point. In my original issue in #5698 I wrote a separate plugin that contained all these properties inside, we can likely do the same for the new |
|
Rebased my changes now. Instead of adding the new fields to beets itself (library, hooks, autotag), putting them only in the plugin should be possible now after my previous PR has been merged. @snejus what do you think? Additionally, I'm still a bit confused as to why there's both a |
There’s also As for composers/lyricists/arrangers: duplicating these fields across artist_ids vs. mb_* variants probably isn’t the right long-term direction. Ideally the core schema would handle the distinction cleanly, with plugins consuming or extending it rather than re-implementing. For this specific case, I think it’s fine to add here for now and revisit later. I don’t think we should try to tackle that larger issue in this PR. |
|
Ok, that makes sense. So, should the fields still be moved to the plugin, or can I keep them in the beets core for now? |
|
In my opinion moving the fields to the plugin itself would be preferred and will spare us some work down the line. How would you achieve that? |
|
You can basically just declare them within the plugin and they'll be picked up by beets. I wonder though if that makes sense for all of these fields. A more generic |
6358f38 to
9d7605a
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #5847 +/- ##
=======================================
Coverage 70.26% 70.27%
=======================================
Files 147 147
Lines 18752 18756 +4
Branches 3059 3059
=======================================
+ Hits 13177 13181 +4
Misses 4927 4927
Partials 648 648
🚀 New features to boost your workflow:
|
|
Rebased the changes once more and fixed the changelog conflict 🙂 |
|
Is there anything else I can do to get this reviewed and merged? |
## Migrate artist-credit fields to multi-value lists Fixes: #5698 Supersedes: #5847 This converts `remixer`, `lyricist`, `composer`, and `arranger` into proper multi-value fields: `remixers`, `lyricists`, `composers`, and `arrangers`. ### What changed - **Data model** (`beets/library/models.py`): replaces the legacy single-string `remixer`, `lyricist`, `composer`, and `arranger` fields with multi-value list fields. - **Migrations** (`beets/library/migrations.py`, `beets/library/library.py`): extracts a reusable `MultiValueFieldMigration` base class and adds field-specific migrations for `remixers`, `lyricists`, `composers`, and `arrangers`. - **Metadata compatibility** (`beets/autotag/hooks.py`): centralizes legacy singular-to-plural compatibility in `Info` / `TrackInfo`, so old assignments like `info.remixer = "..."` still work and populate the new list fields. - **MusicBrainz** (`beetsplug/musicbrainz.py`): now preserves these credits as lists instead of comma-joined strings. - **Follow-up updates**: adjusts tests, docs, and related field mappings (`aura`, `bpd`) to use the plural multi-value fields, and bumps the minimum `mediafile` version to `0.16.0`. ### Impact - Existing libraries are migrated automatically on first run. - Older code assigning singular string fields continues to work via the compatibility shim, but emits `DeprecationWarning`s. - These metadata fields now behave consistently with other multi-value fields like `genres`.
|
Added remixer ids as well now. Gonna fix the tests in a bit. |
|
There we go. Everything is ready to review and merge now. |
|
Cool, will have a look at this later today! |
Updates the MusicBrainz plugin to also import MBIDs for composers/lyricists/arrangers, and also adds them as multi-valued fields.
|
Thanks for the review and all the feedback! |
Description
Updates the MusicBrainz plugin to also import MBIDs for composers/lyricists/arrangers, and adds them as multi-valued fields.
Closes #5698.
To Do
Documentation.(not required for this change)