The MusicBrainz database does not contain genre information. Therefore, when
importing and autotagging music, beets does not assign a genre. The
lastgenre plugin fetches tags from Last.fm and assigns them as genres
to your albums and items. The plugin is included with beets as of version
pip install pylast
After you have pylast installed, enable the plugin by putting
plugins line in config file.
The plugin chooses genres based on a whitelist, meaning that only certain
tags can be considered genres. This way, tags like “my favorite music” or “seen
live” won’t be considered genres. The plugin ships with a fairly extensive
internal whitelist, but you can set your own in the config file using the
whitelist configuration value:
lastgenre: whitelist: /path/to/genres.txt
…or go for no whitelist altogether by setting the option to false.
The genre list file should contain one genre per line. Blank lines are ignored. For the curious, the default genre list is generated by a script that scrapes Wikipedia.
By default, beets will always fetch new genres, even if the files already have
once. To instead leave genres in place in when they pass the whitelist, set
force option to no.
If no genre is found, the file will be left unchanged. To instead specify a
fallback genre, use the
fallback configuration option. You can, of
course, use the empty string as a fallback, like so:
lastgenre: fallback: ''
The plugin can also canonicalize genres, meaning that more obscure genres can be turned into coarser-grained ones that are present in the whitelist. This works using a tree of nested genre names, represented using YAML, where the leaves of the tree represent the most specific genres.
To enable canonicalization, set the
canonical configuration value:
lastgenre: canonical: true
Setting this value to true will use a built-in canonicalization
tree. You can also set it to a path, just like the
whitelist config value,
to use your own tree.
When looking up genres for albums or individual tracks, you can choose whether
to use Last.fm tags on the album, the artist, or the track. For example, you
might want all the albums for a certain artist to carry the same genre. Set the
source configuration value to “album”, “track”, or “artist”, like so:
lastgenre: source: artist
The default is “album”. When set to “track”, the plugin will fetch both album-level and track-level genres for your music when importing albums.
By default, the plugin chooses the most popular tag on Last.fm as a genre. If
you prefer to use a list of popular genre tags, you can increase the number
count config option:
lastgenre: count: 3
Lists of up to count genres will then be used instead of single genres. The
genres are separated by commas by default, but you can change this with the
separator config option:
lastgenre: separator: ' / '
Last.fm provides a popularity factor, a.k.a. weight, for each tag ranging
from 100 for the most popular tag down to 0 for the least popular.
The plugin uses this weight to discard unpopular tags. The default is to
ignore tags with a weight less then 10. You can change this by setting
min_weight config option:
lastgenre: min_weight: 15
In addition to running automatically on import, the plugin can also be run manually
from the command line. Use the command
beet lastgenre [QUERY] to fetch
genres for albums matching a certain query.
To disable automatic genre fetching on import, set the
auto config option