From 0f408416ace2f3186f38c210e0cdda8bb7edb1cd Mon Sep 17 00:00:00 2001 From: J0J0 Todos Date: Tue, 16 Sep 2025 08:34:00 +0200 Subject: [PATCH] lastgenre: Album to item genre fallback In case individual track sources are enabled but no genre could be fetched from last.fm, fall back to the album's genre (only if that is not the fallback genre already). --- beetsplug/lastgenre/__init__.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index b67a4476f..49b208838 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -582,16 +582,25 @@ class LastGenrePlugin(plugins.BeetsPlugin): if "track" in self.sources: item_genre, label = self._get_genre(item) - if not item_genre: + # Fallback to album genre if required + if ( + not item_genre + or item_genre == self.config["fallback"].get() + and album.genre + and album.genre != self.config["fallback"].get() + ): + item_genre = album.genre + label = "inherit from album" + + if item_genre: + self._apply_item_genre(item, label, item_genre) + if write: + item.try_write() + else: self._log.info( 'No genre found for track "{0.title}"', item, ) - else: - self._apply_item_genre(item, label, item_genre) - if write: - item.try_write() - else: # Just query single tracks or singletons for item in lib.items(args): @@ -614,6 +623,17 @@ class LastGenrePlugin(plugins.BeetsPlugin): if "track" in self.sources: for item in album.items(): item_genre, label = self._get_genre(item) + + # Fallback to album genre if required + if ( + not item_genre + or item_genre == self.config["fallback"].get() + and album.genre + and album.genre != self.config["fallback"].get() + ): + item_genre = album.genre + label = "inherit from album" + self._apply_item_genre(item, label, item_genre) else: