Nov 052016
 

This is mostly for my own convenience. I recently rebuilt a host for managing my beets library, and these are the packages (both deb and pip) that I needed to install for my particular beets config to work. And since that’s not really very helpful to anyone else without my beets config, I’ve included that as well.

This should work for both ubuntu trusty and xenial.

Requirements for beets:

$ sudo apt-get install python-dev python-pip python-gi libchromaprint-tools imagemagick mp3val flac lame flac gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0 plugins-ugly gir1.2-gstreamer-1.0 libxml2-dev libxslt1-dev zlib1g-dev
$ sudo pip install beets pyacoustid discogs-client pylast requests bs4 isodate lxml

I use two plugins not included by default:
bandcamp
rymgenre

Beets config:

############################################################################
## Beets Configuration file.
## ~./config/beets/config.yaml
#############################################################################

### Global Options
library: ~/.config/beets/library.blb
directory: /mnt/music/
pluginpath: ~/.config/beets/plugins
ignore: .AppleDouble ._* *~ .DS_Store
per_disc_numbering: true
threaded: yes

# Plugins
plugins: [
  # autotagger extentions
  chroma,
  discogs,
  # metadata plugins
  acousticbrainz,
  embedart,
  fetchart,
  ftintitle,
  lastgenre,
  mbsync,
  replaygain,
  scrub,
  # path format plugins
  bucket,
  inline,
  the,
  # interoperability plugins
  badfiles,
  # misc plugins
  missing,
  info,
  # other plugins
  bandcamp
]

# Import Options
import:
  copy: true
  move: false
  write: true
  delete: false
  resume: ask
  incremental: false
  quiet_fallback: skip
  none_rec_fallback: skip
  timid: false
  languages: en
  log: ~/beets-import.log

# Path options
paths:
  # Albums/A/ASCI Artist Name, The/[YEAR] ASCI Album Name, The [EP]/01 - Track Name.mp3
  default: 'Albums/%bucket{%upper{%left{%the{%asciify{$albumartist}},1}}}/%the{%asciify{$albumartist}}/[%if{$year,$year,0000}] %asciify{$album} %aunique{albumartist album year, albumtype label catalognum albumdisambig}/%if{$multidisc,$disc-}$track - %asciify{$title}'
  # Singles/ASCII Artist Name, The - Track Name.mp3
  singleton: 'Singles/%%the{%asciify{$artist}} - %asciify{$title}'
  # Compilations/[YEAR] ASCI Compilation Name, The/01-01 - Track Name.mp3
  comp: 'Compilations/[%if{$year,$year,0000}] %the{%asciify{$album}%if{%aunique, %aunique{albumartist album year, albumtype label catalognum albumdisambig}}}/%if{$multidisc,$disc-}$track - %asciify{$title}'
  # Sountracks/[YEAR] ASCI Soundtrack Name, The/01 - Track Name.mp3
  albumtype:soundtrack: 'Soundtracks/[%if{$year,$year,0000}] %the{%asciify{$album}%if{%aunique, %aunique{albumartist album year, albumtype label catalognum albumdisambig}}}/%if{$multidisc,$disk-}$track - %asciify{$title}'

### Plugin Options

# Inline plugin multidisc template
item_fields:
  multidisc: 1 if disctotal > 1 else 0

# Collects all special characters into single bucket
bucket:
  bucket_alpha:
    - _
    - A
    - B
    - C
    - D
    - E
    - F
    - G
    - H
    - I
    - J
    - K
    - L
    - M
    - N
    - O
    - P
    - Q
    - R
    - S
    - T
    - U
    - V
    - W
    - X
    - Y
    - Z
  bucket_alpha_regex:
    '_': ^[^A-Z]

# Per album genres selected from a custom list
# My genre-tree.yaml is ever so slightly custom as well
# I found per-album genres in last.fm could be very misleading.
lastgenre:
  canonical: ~/.config/beets/genres-tree.yaml
  whitelist: ~/.config/beets/genres.txt
  min_weight: 20
  source: artist
  fallback: 'Unknown'

# rymgenre doesn't run on import, so I use it as a backup
# for when lastgenre is giving me garbage results.
rymgenre:
  classes: primary
  depth: node

# Fetch fresh album art for new imports
fetchart:
  sources: coverart itunes amazon albumart
  store_source: yes

# I want the option to scrub, but don't feel the need to scrub automatically
scrub:
  auto: no

# Gstreamer is a pain, but still the correct backend
replaygain:
  backend: gstreamer
  overwrite: yes

acoustid:
  apikey: <API_KEY>

echonest:
  apikey: <API_KEY>
  auto: yes
 Posted by at 1:01 AM

Sorry, the comment form is closed at this time.