This update brings new plugins for fetching acoustic metrics and listening statistics, many more options for the duplicate detection plugin, and flexible options for fetching multiple genres.
The "core" of beets gained a new built-in command: `beet write` updates the metadata tags for files, bringing them back into sync with your database. Thanks to Heinz Wiesinger.
We added some plugins and overhauled some existing ones:
- The new `echonest` plugin can fetch a wide range of [acoustic attributes](http://developer.echonest.com/acoustic-attributes.html) from The Echo Nest, including the "speechiness" and "liveness" of each track. The new plugin supersedes an older version (`echonest_tempo`) that only fetched the BPM field. Thanks to Pedro Silva and Peter Schnebel.
- The `duplicates` plugin got a number of new features, thanks to Pedro Silva:
- The `keys` option lets you specify the fields used detect duplicates.
- You can now use checksumming (via an external command) to find duplicates instead of metadata via the `checksum` option.
- The plugin can perform actions on the duplicates it find. The new `copy`, `move`, `delete`, `delete_file`, and `tag` options perform those actions.
- The new `mpdstats` plugin collects statistics about your listening habits from [MPD](http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki). Thanks to Peter Schnebel and Johann Klähn.
- `lastgenre`: The new `multiple` option has been replaced with the `count` option, which lets you limit the number of genres added to your music. (No more thousand-character genre fields!) Also, the `min_weight` field filters out nonsense tags to make your genres more relevant. Thanks to Peter Schnebel and rashley60.
- `lyrics`: A new `--force` option optionally re-downloads lyrics even when files already have them. Thanks to Bitdemon.
As usual, there are also innumerable little fixes and improvements:
- When writing ID3 tags for ReplayGain normalization, tags are written with both upper-case and lower-case TXXX frame descriptions. Previous versions of beets used only the upper-case style, which seems to be more standard, but some players (namely, Quod Libet and foobar2000) seem to only use lower-case names.
- `missing`: Avoid a possible error when an album's `tracktotal` field is missing.
- `ftintitle`: Fix an error when the sort artist is missing.
- `echonest_tempo`: The plugin should now match songs more reliably (i.e., fewer "no tempo found" messages). Thanks to Peter Schnebel.
- `convert`: Fix an "Item has no library" error when using the `auto` config option.
- `convert`: Fix an issue where files of the wrong format would have their transcoding skipped (and files with the right format would be needlessly transcoded). Thanks to Jakob Schnitzer.
- Fix an issue that caused the id3v23 option to work only occasionally.
- Also fix using id3v23 in conjunction with the `scrub` and `embedart` plugins. Thanks to Chris Cogburn.
- `ihate`: Fix an error when importing singletons. Thanks to Mathijs de Bruin.
- The clutter option can now be a whitespace-separated list in addition to a YAML list.
- Values for the replace option can now be empty (i.e., null is equivalent to the empty string).
- `lastgenre`: Fix a conflict between canonicalization and multiple genres.
- When a match has a year but not a month or day, the autotagger now "zeros out" the month and day fields after applying the year.
- For plugin developers: added an `optparse` callback utility function for performing actions based on arguments. Thanks to Pedro Silva.
- `scrub`: Fix scrubbing of MPEG-4 files. Thanks to Yevgeny Bezman.