I have an extensive collection to import into beets. I also did some things wrong in the beginning which resulted in various errors. Here is my current workflow.


  • old collection in ~/x/
  • new collection in ~/music/

Paths should be genre/artist/year - album/track - title.

Here is the config:

directory: ~/music

asciify_paths: True
plugins: chroma discogs duplicates info fromfilename
format_item: $artist - $album - $track - $title

  copy: no
  move: no
  write: no

  default: %lower{$genre}/$albumartist/%if{year,$year - }$album%aunique{}/$track - $title
  singleton: singles/%if{year,$year - }$album/$artist - $title
  comp: %lower{$genre}/0-various-artists/%if{year,$year - }$album%aunique{}/$track - $title

Note that I do not copy, move or write on import. This is essential.

I import per genre. Here is an example for importing funk:

beet import ~/x/Funk
# decide when prompted
# use another terminal to "beet info {somefile}"
# use browser to find weird stuff on musicbrains or discogs

# do some manual tagging here
# usually i disagree with the genres ;)

beet move
# to actually move the files from ~/x to ~/music

beet fingerprint
# i believe fingerprinting to be a great idea

beet write
# write library info to the individual files

Import, fix genre, and reorganize files:

beet import foo
beet ls -f '$format $genre $path' fooquery
beet ls fooquery genre:wrong
beet modify fooquery genre:wrong genre=right
beet import --noautotag -L fooquery

Grep for stuff and remove it (easy :>):

beet ls -p fooquery | grep 'EXCLUDEME' | xargs --delimiter "\n" --replace printf "path:{}\0" | xargs -0 -L1 --replace beet remove -f '{}'