beetbox / beets

music library manager and MusicBrainz tagger
http://beets.io/
MIT License
12.9k stars 1.82k forks source link

Prevent discogs genre overwrite / Exclude fields on import #4087

Open arsaboo opened 3 years ago

arsaboo commented 3 years ago

Discogs is a useful source for meta-data, however, the genre information in Discogs is pretty useless. Currently, when we use Discogs as a tag source, everything is overwritten by Discogs information. I posted it on Discourse here and Adrian suggested that currently, the Discogs plugin is not configurable.

In general, I think it would be a good idea to make plugins configurable so that they don't overwrite other details that the user may not want.

Proposed solution

Make Discogs plugin configurable so that users can choose fields to be ignored. The current behavior (where it imports everything) can be the default so that this is not a breaking change.

Objective

Avoid getting unwanted information from Discogs.

Goals

Provide more fine-grained user control.

wisp3rwind commented 3 years ago

Maybe the solution here should be a more general mechanism to configure auto-tagging rather than a discogs-specific approach? Something like a keep-fields importer option? The *sync plugins might want to respect such a setting, too.

wisp3rwind commented 3 years ago

In fact, we could have something like the following to also address (a part of) #4071

import:
    autotag: yes|no
    autotag-fields:
        genre: 'append'  # see #4071
        year: 'as-is'   # import as-is, don't apply autotagger data
        comment: 'set: foo'   # set field to a constant value
        title: 'auto'   # the default, autotag this field
        albumartist_sort: 'zero'   # clear the field

and deprecate the set_fields option.

sampsyo commented 3 years ago

That's a pretty good idea! We could start with just the "filter" functionality (selecting fields not to apply) and then later expand it to take on the role of stuff like set_fields.

arsaboo commented 3 years ago

I like the idea of configuring inputs (with sensible defaults) that other auto-taggers could follow.

snejus commented 2 years ago

I've got something similar implemented in the beetcamp plugin, where most of the fields can be excluded. See the readme or the implementation

bandcamp:
  ...
  exclude_extra_fields: []
  ...
snejus commented 2 years ago

Running import without exclusions: image

Running import with

  exclude_extra_fields:
    - genre
    - style
    - albumartist
    - comments
    - title
    - albumstatus

image

The configuration option should actually be called exclude_fields instead, probably :)

JOJ0 commented 2 years ago

That's a pretty good idea! We could start with just the "filter" functionality (selecting fields not to apply) and then later expand it to take on the role of stuff like set_fields.

Should the goal of a first "filter" functionality be just this?

(beets) jojo@gin ~/git/beets (skip_write) $ beet info every day | grep title:
               title: Every Day - Ebm - 84
(beets) jojo@gin ~/git/beets (skip_write) $ beet info -l every day | grep title:
           disctitle:
               title: Every Day
(beets) jojo@gin ~/git/beets (skip_write) $

Adding to beets db as matched, but not writing to file? Or should it also skip writing the changed value to beets db?

martimpassos commented 2 years ago

I'm just here for a +1. As of now I think I'll copy my current genres to a flexible attribute so I don't loose that information, and let write do it's job

raphaelyancey commented 2 years ago

+1

I'm curious @arsaboo, why do you think Discogs' genre is useless? Do you have a better source? I think the static genre/style they define is pretty solid compared to say Last.fm tags as genre. And as far as I know, Spotify genres are pretty much the same as Discogs'.

JOJ0 commented 2 years ago

One thing I dont like about Discogs as the genre source is that it only provides the genre for the whole release. I'd prefer something that provides it on a track basis.

I tried whatslastgenre plugin but often it feels like all tracks of an release get the same genre anyway, even if I configure the plug to work on a track basis. Not sure why but could be that I'm using it wrong.

Does the discogs plugin actually grab the genre only from Discogs or does it grab style as well? (let me look into the code....). For a lot of Music it would then just save Electronic for example, which is indeed pretty useless IMHO 😆 Maybe that's what @arsaboo was referring to??

raphaelyancey commented 2 years ago

Does the discogs plugin actually grab the genre only from Discogs or does it grab style as well?

It grabs the style as well, and it can be appended as a genre with an option

arsaboo commented 2 years ago

@raphaelyancey I have manually defined genres. Most of my music is Bollywood songs. For international music, Discogs mostly defaults to genres like Folk, World, & Country, Stage & Screen.

It would be nice to get track-level genres, but the problem is Plex (the client that I use) cannot use track-level genres. Style is great.

Overall, I think we should let the user decide what attribute they want from which service. Genre from Discogs, the popularity from Spotify, tags from Musicbrainz, etc. @JOJ0 has a PR on obtaining Discogs ID from MB. it would be great to have similar plugins to translate attributes across services, e.g., I would like to obtain the MB artist id from the Spotify artist ID that is captured by the Spotify plugin. Once we have all the identifiers, it should be easy to configure.

raphaelyancey commented 2 years ago

I have manually defined genres. Most of my music is Bollywood songs. For international music, Discogs mostly defaults to genres like Folk, World, & Country, Stage & Screen.

You're right it's poor for international music.

I've drafted something to solve my specific problem (choosing which fields to consider from Discogs & Spotify), if that can be of any help to you : https://discourse.beets.io/t/pick-some-fields-from-a-metadata-source-and-some-other-elsewhere/2147/3?u=ryancey

JOJ0 commented 2 years ago

I'd like to remind everyone that out of this thread there came this feature idea, which I stll think would be valuable to inplement: https://github.com/beetbox/beets/issues/4087#issuecomment-932901710

The title of this issue is a little misleading now. Should it be renamed? Or rather a new issue about the feature idea openend? @wisp3rwind how should we proceed to make this feature request obvious again?