Duplicates Plugin

This plugin adds a new command, duplicates or dup, which finds and lists duplicate tracks or albums in your collection.

Installation

Enable the plugin by putting duplicates on your plugins line in your config file:

plugins: duplicates

Configuration

By default, the beet duplicates command lists the names of tracks in your library that are duplicates. It assumes that Musicbrainz track and album ids are unique to each track or album. That is, it lists every track or album with an ID that has been seen before in the library.

You can customize the output format, count the number of duplicate tracks or albums, and list all tracks that have duplicates or just the duplicates themselves. These options can either be specified in the config file:

duplicates:
    checksum: no
    copy: no
    keys: mb_trackid album
    album: no
    count: no
    delete: no
    format: "$albumartist - $album - $title"
    full: no
    move: no
    path: no
    tag: no

or on the command-line:

-h, --help            show this help message and exit
-f FMT, --format=FMT  print with custom format
-a, --album           show duplicate albums instead of tracks
-c, --count           count duplicate tracks or albums
-C PROG, --checksum=PROG
                      report duplicates based on arbitrary command
-d, --delete          delete items from library and disk
-F, --full            show all versions of duplicate tracks or albums
-k, --keys            report duplicates based on keys
-m DEST, --move=DEST  move items to dest
-o DEST, --copy=DEST  copy items to dest
-p, --path            print paths for matched items or albums
-t TAG, --tag=TAG     tag matched items with 'k=v' attribute

format

The format option (default: list_format_item) lets you specify a specific format with which to print every track or album. This uses the same template syntax as beets’ path formats. The usage is inspired by, and therefore similar to, the list command.

path

Convenience wrapper for -f \$path.

count

The count option (default: false) prints a count of duplicate tracks or albums, with format hard-coded to $albumartist - $album - $title: $count or $albumartist - $album: $count (for the -a option).

album

The album option (default: false) lists duplicate albums instead of tracks.

full

The full option (default: false) lists every track or album that has duplicates, not just the duplicates themselves.

keys

The keys option (default: [mb_trackid, mb_albumid]) defines in which track or album fields duplicates are to be searched. By default, the plugin uses the musicbrainz track and album IDs for this purpose. Using the keys option (as a YAML list in the configuration file, or as space-delimited strings in the command-line), you can extend this behavior to consider other attributes.

checksum

The checksum option (default: ffmpeg -i {file} -f crc -) enables the use of any arbitrary command to compute a checksum of items. It overrides the keys option the first time it is run; however, because it caches the resulting checksums as flexattrs in the database, you can use --keys=name_of_the_checksumming_program any_other_keys the second time around.

copy

The copy option (default: no) takes a destination base directory into which it will copy matched items.

move

The move option (default: no) takes a destination base directory into which it will move matched items.

delete

The delete option (default: no) removes matched items from the library and from the disk.

tag

The tag option (default: no) takes a key=value string, and adds a new key attribute with value value as a flexattr to the database.

Examples

List all duplicate tracks in your collection:

beet duplicates

List all duplicate tracks from 2008:

beet duplicates year:2008

Print out a unicode histogram of duplicate track years using spark:

beet duplicates -f '$year' | spark
▆▁▆█▄▇▇▄▇▇▁█▇▆▇▂▄█▁██▂█▁▁██▁█▂▇▆▂▇█▇▇█▆▆▇█▇█▇▆██▂▇

Print out a listing of all albums with duplicate tracks, and respective counts:

beet duplicates -ac

The same as the above but include the original album, and show the path:

beet duplicates -acf '$path'

Get tracks with the same title, artist, and album:

beet duplicates -k title albumartist album

Compute Adler CRC32 or MD5 checksums, storing them as flexattrs, and report back duplicates based on those values:

beet dup -C 'ffmpeg -i {file} -f crc -'
beet dup -C 'md5sum {file}'

Copy highly danceable items to party directory:

beet dup --copy /tmp/party

Move likely duplicates to trash directory:

beet dup --move ${HOME}/.Trash

Delete items (careful!), if they’re Nickelback:

beet duplicates --delete --keys albumartist albumartist:nickelback

Tag duplicate items with some flag:

beet duplicates --tag dup=1

TODO

  • better duplicate disambiaguation strategies (eg, based on bitrate, etc)