1. Adrian Sampson
  2. beets


beets / NEWS

* "Various artists" releases are handled much more gracefully. The
  autotagger now sets the "comp" flag on albums whenever the album is
  identified as a "various artists" release by MusicBrainz. Also,
  there is now a distinction between the "album artist" and the "track
  artist", the latter of which is never "Various Artists" or other such
  bogus stand-in. (Thanks to Jonathan Buchanan for the bulk of the
* The directory hierarchy can now be customized based on release type.
  In particular, the "path_format" setting in .beetsconfig has been
  replaced with a new [paths] section, which allows you to specify
  different path formats for normal releases, "compilation" releases,
  and every release type (see below). The default path formats have
  been changed to use $albumartist instead of $artist. More information
  about this change is available on the wiki.
* A new "albumtype" field reflects the release type as specified by
  MusicBrainz: http://wiki.musicbrainz.org/ReleaseType
* When deleting files, beets now appropriately "prunes" the directory
  tree -- empty directories are automatically cleaned up. (Thanks to
  wlof on GitHub for this!)
* When importing with the "delete" option and importing files that are
  already at their destination, files could be deleted (leaving zero
  copies afterward). This is fixed.
* Always show album directory in tagger output.
* "import -l" now logs duplicate albums.
* A new "import_resume" option can be used to disable the importer's
  resuming feature or force it to resume without asking. This option
  may be either "yes", "no", or "ask", with the obvious meanings. The
  -p and -P command-line flags override this setting and correspond to
  the "yes" and "no" settings.
* Resuming is automatically disabled when the importer is in quiet (-q)
  mode. Progress is still saved, however, and the -p flag (above) can
  be used to force resuming.
* The BEETSCONFIG environment variable can now be used to specify the
  location of the config file that is at ~/.beetsconfig by default.
* A new "import_quiet_fallback" option specifies what should happen in
  quiet mode when there is no strong recommendation. The options are
  "skip" (the default) and "asis".
* The "version" command now lists all the loaded plugins.
* A new plugin, called "info", just prints out audio file metadata.
* Fix a bug where some files would be erroneously interpreted as MP4.
* Fix permission bits applied to album art files.
* Fix malformed MusicBrainz queries caused by null characters.
* Fix a bug with old versions of the Monkey's Audio format.
* Fix a crash on broken symbolic links.
* Retry in more cases when MusicBrainz servers are slow/overloaded.
* The old "albumify" plugin for upgrading databases was removed.

* A new "-q" command line switch for the import command suppresses all
  prompts for input; it pessimistically skips all albums that the
  importer is not completely confident about.
* Added support for the WavPack and Musepack formats. Unfortunately,
  due to a limitation in the Mutagen library (used by beets for
  metadata manipulation), Musepack SV8 is not yet supported. Here's
  the upstream bug in question:
* BPD now uses a pure-Python socket library and no longer requires
  eventlet/greenlet (the latter of which is a C extension). For the
  curious, the socket library in question is called Bluelet:
* Non-autotagged imports are now resumable (just like autotagged
* Fix a terrible and long-standing bug where track orderings were never
  applied. This manifested when the tagger appeared to be applying a
  reasonable ordering to the tracks but, later, the database reflects a
  completely wrong association of track names to files. The order
  applied was always just alphabetical by filename, which is frequently
  but not always what you want.
* We now use Windows' "long filename" support. Filenames on Windows now
  also never end in spaces.
* Fix crash in lastid when the artist name is not available.
* Fixed a spurious crash when LANG or a related environment variable is
  set to an invalid value (such as 'UTF-8' on some installations of Mac
  OS X).
* Fixed an error when trying to copy a file that is already at its
* When copying read-only files, the importer now tries to make the copy
  writable. (Previously, this would just crash the import.)
* Fixed an UnboundLocalError when no matches are found during autotag.
* Fixed a Unicode encoding error when entering special characters into
  the "manual search" prompt.
* New command "beet version" just shows the current version.

* A new plugin, "lastid", adds Last.fm acoustic fingerprinting support
  to the autotagger. Similar to the PUIDs used by MusicBrainz Picard,
  this system allows beets to recognize files that don't have any
  metadata at all. You'll need to install some dependencies for this
  plugin to work; a guide is available on the project wiki here:
* To support the above, there's also a new system for extending the
  autotagger via plugins. Plugins can currently add components to the
  track and album distance functions as well as augment the MusicBrainz
* String comparisons in the autotagger have been augmented to act more
  intuitively. Previously, if your album had the title "Something (EP)"
  and it was officially called "Something", then beets would think this
  was a fairly significant change. It now checks for and appropriately
  reweights certain parts of each string. As another example, the title
  "The Great Album" is considered equal to "Great Album, The".
* New event system for plugins (thanks, Jeff!). Plugins can now get
  callbacks from beets when certain events occur in the core.
* The BPD plugin is now disabled by default. This greatly simplifies
  installation of the beets core, which is now 100% pure Python. To use
  BPD, though, you'll need to set "plugins: bpd" in your .beetsconfig.
* The "import" command can now remove original files when it copies
  items into your library. (This might be useful if you're low on disk
  space.) Set the "import_delete" option in your .beetsconfig to "yes".
* Importing without autotagging ("beet import -A") now prints out album
  names as it imports them to indicate progress.
* There's a new "mpdupdate" plugin that will automatically update your
  MPD index whenever your beets library changes. Read the plugin's
  documentation on the wiki:
* Efficiency tweak should reduce the number of MusicBrainz queries per
  autotagged album.
* A new "-v" command line switch enables debugging output.
* Fixed bug that completely broke non-autotagged imports ("import -A").
* Fixed bug that logged the wrong paths when using "import -l".
* Fixed autotagging for the creatively-named band !!!.
* Fixed normalization of relative paths.
* Fixed escaping of / characters in paths on Windows.

* Parallel tagger. The autotagger has been reimplemented to use
  multiple threads. This means that it can concurrently read files
  from disk, talk to the user, communicate with MusicBrainz, and
  write data back to disk. Not only does this make the tagger much
  faster because independent work may be performed in parallel, but it
  makes the tagging process much more pleasant for large imports. The
  user can let albums queue up in the background while making a
  decision rather than waiting for beets between each question it asks.
  The parallel tagger is on by default but a sequential (single-
  threaded) version is still available by setting the "threaded"
  config value to "no" (because the parallel version is still quite
* Colorized tagger output. The autotagger interface now makes it a
  little easier to see what's going on at a glance by highlighting
  changes with terminal colors. This feature is on by default, but you
  can turn it off by setting "color" to "no" in your .beetsconfig (if,
  for example, your terminal doesn't understand colors and garbles the
* Pause and resume imports. The "import" command now keeps track of its
  progress, so if you're interrupted (beets crashes, you abort the
  process, an alien devours your motherboard, etc.), beets will try to
  resume from the point where you left off. The next time you run
  "import" on the same directory, it will ask if you want to resume. It
  accomplishes this by "fast-forwarding" through the albums in the
  directory until it encounters the last one it saw. (This means it
  might fail if that album can't be found.) Also, you can now abort the
  tagging process by entering "B" (for aBort) at any of the prompts.
* Overhauled methods for handling fileystem paths to allow filenames
  that have badly encoded special characters. These changes are pretty
  fragile, so please report any bugs involving UnicodeErrors or SQLite
  ProgrammingErrors with this version.
* The destination paths (the library directory structure) now respect
  album-level metadata. This means that if you have an album in which
  two tracks have different album-level attributes (like year, for
  instance), they will still wind up in the same directory together.
  (There's currently not a very smart method for picking the "correct"
  album-level metadata, but we'll fix that later.)
* Fixed a bug where the CLI would fail completely if the LANG
  environment variable was not set.
* Fixed removal of albums (beet remove -a): previously, the album
  record would stay around although the items were deleted.
* The setup script now makes a beet.exe startup stub on Windows; 
  Windows users can now just type "beet" at the prompt to run beets.
* Fixed an occasional bug where Mutagen would complain that a tag was
  already present.
* Fixed a bug with reading invalid integers from ID3 tags.
* The tagger should now be a little more reluctant to reorder tracks
  that already have indices.

* Album art. The tagger now, by default, downloads album art from
  Amazon that is referenced in the MusicBrainz database. It places the
  album art alongside the audio files in a file called (for example)
  "cover.jpg". The "import_art" config option controls this behavior,
  as do the -r and -R options to the import command. You can set the
  name (minus extension) of the album art file with the
  "art_filename" config option.
* Plugin architecture. Add-on modules can now add new commands to the
  beets command-line interface. The "bpd" and "dadd" commands were
  removed from the beets core and turned into plugins; BPD is loaded
  by default. To load the non-default plugins, use the "plugins" config
  value (a space-separated list of plugin names). You can also set the
  "pluginpath" config option to a colon-separated list of directories
  to search for plugins. Plugins are just Python modules under the
  "beetsplug" namespace package containing subclasses of
  beets.plugins.BeetsPlugin. See the "beetsplug" directory for examples.
* Support for MusicBrainz ID tags. The autotagger now keeps track of the
  MusicBrainz track, album, and artist IDs it matched for each file. It
  also looks for album IDs in new files it's importing and uses those to
  look up data in MusicBrainz. Furthermore, track IDs are used as a
  component of the tagger's distance metric now. Tangentially, change
  required the database code to support a lightweight form of migrations
  so that new columns could be added to old databases--this is a
  delicate feature, so it would be very wise to make a backup of your
  database before upgrading to this version.
* As a consequence of adding album art, the database was significantly
  refactored to keep track of some information at an album (rather than
  item) granularity. Databases created with earlier versions of beets
  should work fine, but they won't have any "albums" in them--they'll
  just be a bag of items. This means that commands like "beet ls -a"
  and "beet rm -a" won't match anything. To "upgrade" your database,
  you can use the included "albumify" plugin. Running "beets albumify"
  with the plugin activated will group all your items into albums,
  making beets behave more or less as it did before.
* Fixed some bugs with encoding paths on Windows. Also, : is now
  replaced with - in path names (instead of _) for readability.
* MediaFiles now have a "format" attribute, so you can use $format in
  your library path format strings like "$artist - $album ($format)"
  to get directories with names like "Paul Simon - Graceland (FLAC)".

* Support for Ogg Vorbis and Monkey's Audio files and their tags.
  (This support should be considered preliminary: I haven't tested it
  heavily because I don't use either of these formats regularly.)
* An option to the "beet import" command for logging albums that
  are untaggable (i.e., are skipped or taken "as-is"). Use
  "beet import -l LOGFILE PATHS". The log format is very simple: it's
  just a status (either "skip" or "asis") followed by the path to the
  album in question. The idea is that you can tag a large collection
  and automatically keep track of the albums that weren't found in
  MusicBrainz so you can come back and look at them later.
* Fixed UnicodeEncodeError on terminals that don't (or don't claim to)
  support UTF-8.
* Importing without autotagging ("beet import -A") is now faster and
  doesn't print out a bunch of whitespace. It also lets you specify
  single files on the command line (rather than just directories).
* Fixed importer crash when attempting to read a corrupt file.
* Reorganized code for CLI in preparation for adding pluggable
  subcommands. Also removed dependency on the aging "cmdln" module.

First public release.