Skip to content

beets 1.3.11

Compare
Choose a tag to compare
@sampsyo sampsyo released this 06 Apr 04:28
· 7172 commits to master since this release

In this release, we refactored the logging system to be more flexible and more useful. There are more granular levels of verbosity, the output from plugins should be more consistent, and several kinds of logging bugs should be impossible in the future.

There are also two new plugins: one for filtering the files you import and an evolved plugin for using album art as directory thumbnails in file managers. There's a new source for album art, and the importer now records the source of match data. This is a particularly huge release---there's lots more below.

There's one big change with this release: Python 2.6 is no longer supported. You'll need Python 2.7. Please trust us when we say this let us remove a surprising number of ugly hacks throughout the code.

Major new features and bigger changes:

  • There are now multiple levels of output verbosity. On the command line, you can make beets somewhat verbose with -v or very verbose with -vv. For the importer especially, this makes the first verbose mode much more manageable, while still preserving an option for overwhelmingly verbose debug output. #1244
  • A new filefilter plugin lets you write regular expressions to automatically avoid importing certain files. Thanks to @mried. #1186
  • A new thumbnails plugin generates cover-art thumbnails for album folders for Freedesktop.org-compliant file managers. (This replaces the freedesktop, which only worked with the Dolphin file manager.)
  • replaygain: There is a new backend that uses the bs1770gain analysis tool. Thanks to @jmwatte. #1343
  • A new filesize field on items indicates the number of bytes in the file. #1291
  • A new searchlimit configuration option allows you to specify how many search results you wish to see when looking up releases at MusicBrainz during import. #1245
  • The importer now records the data source for a match in a new flexible attribute data_source on items and albums. #1311
  • The colors used in the terminal interface are now configurable via the new config option colors, nested under the option ui. (Also, the color config option has been moved from top-level to under ui. Beets will respect the old color setting, but will warn the user with a deprecation message.) #1238
  • fetchart: There's a new Wikipedia image source that uses DBpedia to find albums. Thanks to Tom Jaspers. #1194
  • In the config command, the output is now redacted by default. Sensitive information like passwords and API keys is not included. The new --clear option disables redaction. #1376

You should probably also know about these core changes to the way beets works:

  • As mentioned above, Python 2.6 is no longer supported.
  • The tracktotal attribute is now a track-level field instead of an album-level one. This field stores the total number of tracks on the album, or if the per_disc_numbering config option is set, the total number of tracks on a particular medium (i.e., disc). The field was causing problems with that per_disc_numbering mode: different discs on the same album needed different track totals. The field can now work correctly in either mode.
  • To replace tracktotal as an album-level field, there is a new albumtotal computed attribute that provides the total number of tracks on the album. (The per_disc_numbering option has no influence on this field.)
  • The list_format_album and list_format_item configuration keys now affect (almost) every place where objects are printed and logged. (Previously, they only controlled the list command and a few other scattered pieces.) #1269
  • Relatedly, the beet program now accept top-level options --format-item and --format-album before any subcommand to control how items and albums are displayed. #1271
  • list_format_album and list_format_album have respectively been renamed format_album and format_item. The old names still work but each triggers a warning message. #1271
  • Path queries are automatically triggered only if the
    path targeted by the query exists. Previously, just having a slash somewhere
    in the query was enough, so beet ls AC/DC` wouldn't work to refer to the artist.

There are also lots of medium-sized features in this update:

  • duplicates: The command has a new --strict option that will only report duplicates if all attributes are explicitly set. #1000
  • smartplaylist: Playlist updating should now be faster: the plugin detects, for each playlist, whether it needs to be regenerated, instead of obliviously regenerating all of them. The splupdate command can now also take additional parameters that indicate the names of the playlists to regenerate.
  • play: The command shows the output of the underlying player command and lets you interact with it. #1321
  • The summary shown to compare duplicate albums during import now displays the old and new filesizes. #1291
  • lastgenre: Add comedy, humor, and stand-up as well as a longer list of classical music genre tags to the built-in whitelist and canonicalization tree. #1206 #1239 #1240
  • web: Add support for cross-origin resource sharing for more flexible in-browser clients. Thanks to Andre Miller. #1236 #1237
  • plugins/mbsync: A new -f/--format option controls the output format when listing unrecognized items. The output is also now more helpful by default. #1246
  • fetchart: A new option, -n, extracts the cover art of all matched albums into their respective directories. Another new flag, -a, associates the extracted files with the albums in the database. #1261
  • info: A new option, -i, can display only a specified subset of properties. #1287
  • The number of missing/unmatched tracks is shown during import. #1088
  • permissions: The plugin now also adjusts the permissions of the directories. (Previously, it only affected files.) #1308 #1324
  • ftintitle: You can now configure the format that the plugin uses to add the artist to the title. Thanks to @amishb. #1377

And many little fixes and improvements:

  • replaygain: Stop applying replaygain directly to source files when using the mp3gain backend. #1316
  • Path queries are case-sensitive on non-Windows OSes. #1165
  • lyrics: Silence a warning about insecure requests in the new MusixMatch backend. #1204
  • Fix a crash when beet is invoked without arguments. #1205 #1207
  • fetchart: Do not attempt to import directories as album art. #1177 #1211
  • mpdstats: Avoid double-counting some play events. #773 #1212
  • Fix a crash when the importer deals with Unicode metadata in --pretend mode. #1214
  • smartplaylist: Fix album_query so that individual files are added to the playlist instead of directories. #1225
  • Remove the beatport plugin. Beatport_ has shut off public access to their API and denied our request for an account. We have not heard from the company since 2013, so we are assuming access will not be restored.
  • Incremental imports now (once again) show a "skipped N directories" message.
  • embedart: Handle errors in ImageMagick's output. #1241
  • keyfinder: Parse the underlying tool's output more robustly. #1248
  • embedart: We now show a comprehensible error message when beet embedart -f FILE is given a non-existent path. #1252
  • Fix a crash when a file has an unrecognized image type tag. Thanks to Matthias Kiefer. #1260
  • importfeeds and smartplaylist: Automatically create parent directories for playlist files (instead of crashing when the parent directory does not exist). #1266
  • The write-cmd` command no longer tries to "write" non-writable fields, such as the bitrate. #1268
  • The error message when MusicBrainz is not reachable on the network is now much clearer. Thanks to Tom Jaspers. #1190 #1272
  • Improve error messages when parsing query strings with shlex. #1290
  • embedart: Fix a crash that occured when used together with the check plugin. #1241
  • scrub: Log an error instead of stopping when the beet scrub command cannot write a file. Also, avoid problems on Windows with Unicode filenames. #1297
  • discogs: Handle and log more kinds of communication errors. #1299 #1305
  • lastgenre: Bugs in the pylast library can no longer crash beets.
  • convert: You can now configure the temporary directory for conversions. Thanks to @autochthe. #1382 #1383
  • rewrite: Fix a regression that prevented the plugin's rewriting from applying to album-level fields like $albumartist. #1393
  • play: The plugin now sorts items according to the configuration in album mode.
  • fetchart: The name for extracted art files is taken from the art_filename configuration option. #1258
  • When there's a parse error in a query (for example, when you type a malformed date in a date query), beets now stops with an error instead of silently ignoring the query component.

For developers:

  • The database_change event now sends the item or album that is subject to a change.
  • The OptionParser is now a CommonOptionsParser that offers facilities for adding usual options (--album, --path and --format). See add_subcommands. #1271
  • The logging system in beets has been overhauled. Plugins now each have their own logger, which helps by automatically adjusting the verbosity level in import mode and by prefixing the plugin's name. Logging levels are dynamically set when a plugin is called, depending on how it is called (import stage, event or direct command). Finally, logging calls can (and should!) use modern {}-style string formatting lazily. See plugin-logging in the plugin API docs.
  • A new import_task_created event lets you manipulate import tasks immediately after they are initialized. It's also possible to replace the originally created tasks by returning new ones using this event.