Let's share our configurations #6269
Replies: 2 comments 2 replies
-
Music Library SizePlugins
Highlights
Why This Works for MeI purchase most of my music from Bandcamp, so this configuration prioritizes Bandcamp's rich underground metadata while maintaining fallback to Discogs and MusicBrainz for authority. The Configurationformat: "$id | \e[1;33m$year\e[0m / \e[1;34m$album\e[0m: \e[1;35m$artist\e[0m - \e[1;32m$title\e[0m"
# --------------- Search ---------------
format_item: "$id | \e[1;33m$year\e[0m / \e[1;34m$album\e[0m: \e[1;35m$artist\e[0m - \e[1;32m$title\e[0m"
format_album: "#$id: \e[1;33mAlbum \e[34m$album\e[0m by \e[1;35m$albumartist\e[0m | \e[2m$label\e[0m | \e[1m$catalognum\e[0m | $year\e[0m | $country\e[0m"
.artistreplace:
^Dj: DJ
.*Acolytes Of.*: Acolytes Of Yama
1LUU: 1luu
Alya7h: ALYA7H
BEHEADER: "BEHE\u0100DER"
"B\u039BNDI": "B \u039B N D I"
Chane: "Chan\xE9"
Clair: CLAIR
(?i)Die+rich: Die+Rich
DJLOSER: DJ LOSER
DJ mantis: DJ Mantis
DJSUPER: DJ SUPER
Enko: "Enk\u014D"
Ex Machina: Ex_Machina
Felicie: "F\xE9licie"
Franky-B: Franky B
"Gara\u017Ee Ner\u016Bkoma": "Garazhe Ner\u016Bkoma"
Gutkein: gutkein
(?i)hatelove: "HA\u2020ELOVE"
(?i)Huffy fibryyx: huffy fibryyx
Hyperforce: hyperforce
Melissa D'Lima: Melissa D'lima
(?i) ibon: ' IBON'
Isolated Incident: ISOLATED INCIDENT
Kas:st: KAS:ST
Oblidarmeno: oblidarmeno
Szahala: "Sz\xE1hala"
Toxicspikeback: toxicspikeback
"Varg2\u2122": "Varg\xB2\u2122"
VENDEX: Vendex
(?i)less instructions: Less Instructions
"(?i)whiteshadowhurts|\U0001D534\U0001D525\U0001D526\U0001D531\U0001D522\U0001D530\U0001D525\U0001D51E\U0001D521\U0001D52C\U0001D534\U0001D525\U0001D532\U0001D52F\U0001D531\U0001D530": whiteshadowhurts
ZEBAR: Zebar
.*?(?i)presents\s: ''
.titlereplace:
(?i) ?\(original( mix)?\): ''
(?i) ?\([0-9]+ ?bpm\): ''
(\([A-Z][^A-Z][^)]+) (?i:mix): \1 Mix
(\([A-Z][^)]+) (?i:remix): \1 Remix
(\([A-Z][^)]+) (?i:edit): \1 Edit
" - (.*?(?i)mix\b)": ' (\1)'
^ *| *$: ''
"\u2019": ''''
(?i) *\([^)]*\bLP\b[^)]+\): ''
\ .FREE TRACK THURSDAY.: ''
"[\xE2\xA6\xF0\xCB]": ''
\ (?i)\(bonus track\): ''
' +\([EL]P\)': ''
' \((19[89]\d|20\d\d) M\.\)': ''
importreplace:
replacements:
- album_fields: album
item_fields: album
replace:
^Dj: DJ
.*Acolytes Of.*: Acolytes Of Yama
1LUU: 1luu
Alya7h: ALYA7H
BEHEADER: "BEHE\u0100DER"
"B\u039BNDI": "B \u039B N D I"
Chane: "Chan\xE9"
Clair: CLAIR
(?i)Die+rich: Die+Rich
DJLOSER: DJ LOSER
DJ mantis: DJ Mantis
DJSUPER: DJ SUPER
Enko: "Enk\u014D"
Ex Machina: Ex_Machina
Felicie: "F\xE9licie"
Franky-B: Franky B
"Gara\u017Ee Ner\u016Bkoma": "Garazhe Ner\u016Bkoma"
Gutkein: gutkein
(?i)hatelove: "HA\u2020ELOVE"
(?i)Huffy fibryyx: huffy fibryyx
Hyperforce: hyperforce
Melissa D'Lima: Melissa D'lima
(?i) ibon: ' IBON'
Isolated Incident: ISOLATED INCIDENT
Kas:st: KAS:ST
Oblidarmeno: oblidarmeno
Szahala: "Sz\xE1hala"
Toxicspikeback: toxicspikeback
"Varg2\u2122": "Varg\xB2\u2122"
VENDEX: Vendex
(?i)less instructions: Less Instructions
"(?i)whiteshadowhurts|\U0001D534\U0001D525\U0001D526\U0001D531\U0001D522\U0001D530\U0001D525\U0001D51E\U0001D521\U0001D52C\U0001D534\U0001D525\U0001D532\U0001D52F\U0001D531\U0001D530": whiteshadowhurts
ZEBAR: Zebar
.*?(?i)presents\s: ''
(?i) ?\(original( mix)?\): ''
(?i) ?\([0-9]+ ?bpm\): ''
(\([A-Z][^A-Z][^)]+) (?i:mix): \1 Mix
(\([A-Z][^)]+) (?i:remix): \1 Remix
(\([A-Z][^)]+) (?i:edit): \1 Edit
" - (.*?(?i)mix\b)": ' (\1)'
^ *| *$: ''
"\u2019": ''''
(?i) *\([^)]*\bLP\b[^)]+\): ''
\ .FREE TRACK THURSDAY.: ''
"[\xE2\xA6\xF0\xCB]": ''
\ (?i)\(bonus track\): ''
' +\([EL]P\)': ''
' \((19[89]\d|20\d\d) M\.\)': ''
"\U0001D650\U0001D655\U0001D651\U0001D63C": UZVA
"\U0001D64F\U0001D667\U0001D656\U0001D663\U0001D668\U0001D662\U0001D66A\U0001D669\U0001D656\U0001D667": Transmutar
"\u2080\u2083": '03'
"\u2080\u2084": '04'
"\U0001D402\U0001D411\U0001D408\U0001D413\U0001D408\U0001D402\U0001D400\U0001D40B \U0001D402\U0001D407\U0001D400\U0001D40E\U0001D412": Critical Chaos
'DXM - ': ''
'under.net compilation ': ''
- album_fields: artist artist_sort artist_credit artists artists_sort artists_credit
item_fields: artist artist_sort artist_credit artists artists_sort artists_credit
replace:
^Dj: DJ
.*Acolytes Of.*: Acolytes Of Yama
1LUU: 1luu
Alya7h: ALYA7H
BEHEADER: "BEHE\u0100DER"
"B\u039BNDI": "B \u039B N D I"
Chane: "Chan\xE9"
Clair: CLAIR
(?i)Die+rich: Die+Rich
DJLOSER: DJ LOSER
DJ mantis: DJ Mantis
DJSUPER: DJ SUPER
Enko: "Enk\u014D"
Ex Machina: Ex_Machina
Felicie: "F\xE9licie"
Franky-B: Franky B
"Gara\u017Ee Ner\u016Bkoma": "Garazhe Ner\u016Bkoma"
Gutkein: gutkein
(?i)hatelove: "HA\u2020ELOVE"
(?i)Huffy fibryyx: huffy fibryyx
Hyperforce: hyperforce
Melissa D'Lima: Melissa D'lima
(?i) ibon: ' IBON'
Isolated Incident: ISOLATED INCIDENT
Kas:st: KAS:ST
Oblidarmeno: oblidarmeno
Szahala: "Sz\xE1hala"
Toxicspikeback: toxicspikeback
"Varg2\u2122": "Varg\xB2\u2122"
VENDEX: Vendex
(?i)less instructions: Less Instructions
"(?i)whiteshadowhurts|\U0001D534\U0001D525\U0001D526\U0001D531\U0001D522\U0001D530\U0001D525\U0001D51E\U0001D521\U0001D52C\U0001D534\U0001D525\U0001D532\U0001D52F\U0001D531\U0001D530": whiteshadowhurts
ZEBAR: Zebar
.*?(?i)presents\s: ''
' [(][&]?.*(?i:remix).*': ''
DJVALENTIMES: DJ VALENTIMES
viscerale: Viscerale
- album_fields: catalognum
replace:
-TFT.*: ''
\s: ''
'[\[]none[]]': ''
^[0-9-]+$: ''
- album_fields: genre style
item_fields: genre style
replace:
' ?90 techno,?': ''
-techno: ' techno'
hardt: hard t
Techno .*: techno
A: a
B: b
C: c
D: d
E: e
F: f
G: g
H: h
I: i
J: j
L: l
M: m
N: n
O: o
P: p
R: r
S: s
T: t
U: u
W: w
V: v
Drum n [Bb]ass: drum & bass
iDm: idm
([0-9])0's: \0s
experiemental: experimental
deeptechno: deep techno
([a-z])techno: \1 techno
psy-trance: psytrance
drumandbass: drum and bass
drum[' ]n[' ]bass: drum and bass
ukbass: uk bass
- album_fields: label
item_fields: label
replace:
' ?(?i:record(ing)?s) ?$': ''
' (?i:LTD)': ''
' - Techno movement': ''
'[ ]*$': ''
.*\b(?i:self)\b.*: self
"\uFF23\uFF28\uFF2F\uFF33\uFF25\uFF2E\uFF11": CHOSEN1
"\U0001D402\U0001D411\U0001D408\U0001D413\U0001D408\U0001D402\U0001D400\U0001D40B \U0001D402\U0001D407\U0001D400\U0001D40E\U0001D412": Critical Chaos
"\U0001D650\U0001D663\U0001D659\U0001D65A\U0001D667\U0001D66F\U0001D664\U0001D663\U0001D65A": Underzone
BASSIANI: Bassiani
Collection Disques Durs: COLLECTION DISQUES DURS
ILIAN TAPE: Ilian Tape
Industrial Violence: INDUSTRIAL VIOLENCE
Kazakhstan nose shifters: Kazakhstan Nose Shifters
Mama [Tt]old [Yy]a: Mama told ya
Mau5trap: mau5trap
MRAMA Division: MRAMA DIVISION
Not on Label: Not On Label
Parasite Label: PARASITE LABEL
3Beat: 3 Beat
C O U P: COUP
"Raster[-\u2010-]Noton": Raster-Noton
"R\xC9Vzrt": "R\xC9V.zrt"
bbbbbb.*: bbbbbb
Cloud 9 Dance: Cloud 9
HEX .*: Hex
Ministry Of Sound Recordings\.: Ministry Of Sound
raster - .*: Raster-Noton
Safe Cloud Recs: Safe Cloud
Soma Qual.*: Soma
Speedcore Worldwide Audio Netlabel: SWAN
Speedmaster Records: Speedmaster
trip recordings: "\u0442\u0440\u0438\u043F"
Universal Music .*: Universal Music
- album_fields: comments
item_fields: comments
replace:
(?i:remixes|listen\ to|Follow|Stream|previews|snippets)[^\n:]+:[^\n]*: ''
(?i:Tracklist)[^.:\n]*:(\n[0-9][^\n]+|\n|[^\n]+(bonus|digital)[^\n]+)+: ''
\n[0-9]+- [^\n]+: ''
'\s*([.!?]*)\s+Favorite track: ([^\n\r]+)': \1 **Fave:** \2\n
(Soundcloud|Facebook):[^\n]+(\n+| |$): ''
\r: \n
' [.] |\n+': \n\n
("[^"]+" -): \n\1
'[*]': ''
(^|\n)((?:(?!http|by|exception)[\w&]+[^\w\n]*){,4}) *(?::|(by)): '\1**\2\3**:'
' [*][*]:': '**:'
'- - > \[([\w ]+)\]:': '## \1'
::+: ':'
\n[^\n]+(?ims:tour date.+): ''
\n([A-Z][^\n:]:[^\n]*)(http|www[.]|[^ \n]+[.]com)[^\n]*: ''
? '([^\n:]+: |[^\n-]+-)( *http|www[.])[^ \n]*(instag|facebook|mixcloud|spotify|teespring|@gmail|bandcamp|discogs|ra.co|soundcloud|youtu.?be)[^\n]*'
: ''
\n[-]\n\s+: ''
(^|\n)[\S\n]*(?i:www[.]|instagram|spotify|soundcloud|facebook|stream|bit[.]ly)[^\n]+: ''
^[\n\s]+: ''
(\n\s*){2,}: \n\n
'[\n\s]+$': ''
' *\((?i:free|instagram)[^)]+\)': ''
"[\xE2\xA6\xF0\xCB]": ''
"[\t]": ''
\[url=http.*?\[/url\]: ''
- album_fields: media
item_fields: media
replace:
File: Digital Media
All Media: Digital Media
CDr: CD
Copy Control CD: CD
'12. ': ''
- item_fields: title
replace:
^Dj: DJ
.*Acolytes Of.*: Acolytes Of Yama
1LUU: 1luu
Alya7h: ALYA7H
BEHEADER: "BEHE\u0100DER"
"B\u039BNDI": "B \u039B N D I"
Chane: "Chan\xE9"
Clair: CLAIR
(?i)Die+rich: Die+Rich
DJLOSER: DJ LOSER
DJ mantis: DJ Mantis
DJSUPER: DJ SUPER
Enko: "Enk\u014D"
Ex Machina: Ex_Machina
Felicie: "F\xE9licie"
Franky-B: Franky B
"Gara\u017Ee Ner\u016Bkoma": "Garazhe Ner\u016Bkoma"
Gutkein: gutkein
(?i)hatelove: "HA\u2020ELOVE"
(?i)Huffy fibryyx: huffy fibryyx
Hyperforce: hyperforce
Melissa D'Lima: Melissa D'lima
(?i) ibon: ' IBON'
Isolated Incident: ISOLATED INCIDENT
Kas:st: KAS:ST
Oblidarmeno: oblidarmeno
Szahala: "Sz\xE1hala"
Toxicspikeback: toxicspikeback
"Varg2\u2122": "Varg\xB2\u2122"
VENDEX: Vendex
(?i)less instructions: Less Instructions
"(?i)whiteshadowhurts|\U0001D534\U0001D525\U0001D526\U0001D531\U0001D522\U0001D530\U0001D525\U0001D51E\U0001D521\U0001D52C\U0001D534\U0001D525\U0001D532\U0001D52F\U0001D531\U0001D530": whiteshadowhurts
ZEBAR: Zebar
.*?(?i)presents\s: ''
(?i) ?\(original( mix)?\): ''
(?i) ?\([0-9]+ ?bpm\): ''
(\([A-Z][^A-Z][^)]+) (?i:mix): \1 Mix
(\([A-Z][^)]+) (?i:remix): \1 Remix
(\([A-Z][^)]+) (?i:edit): \1 Edit
" - (.*?(?i)mix\b)": ' (\1)'
^ *| *$: ''
"\u2019": ''''
(?i) *\([^)]*\bLP\b[^)]+\): ''
\ .FREE TRACK THURSDAY.: ''
"[\xE2\xA6\xF0\xCB]": ''
\ (?i)\(bonus track\): ''
' +\([EL]P\)': ''
' \((19[89]\d|20\d\d) M\.\)': ''
directory: /mnt/music/Music
# --------------- Main ---------------
library: ~/.music/beets/library.db
include: [replacements.yaml]
artist_credit: yes
asciify_paths: yes
aunique:
bracket: '[]'
keys: mb_albumid
sunique:
keys: mb_trackid
format_raw_length: no
fuzzy:
threshold: 0.7
id3v23: no
ignore:
- .*
- '*~'
- lost+found
- custom
ignore_hidden: yes
import:
autotag: yes
bell: no
copy: no
default_action: apply
delete: yes
detail: yes
duplicate_action: ask
from_scratch: no
flat: no
group_albums: yes
hardlink: no
incremental: yes
incremental_skip_later: yes
languages: [jp, en]
log: importlog.txt
move: yes
none_rec_action: skip
link: no
resume: ask
pretend: no
quiet_fallback: ask
quiet: no
search_ids: []
set_fields: {}
singletons: no
timid: yes
write: no
duplicate_keys:
album: [album, albumartist, label]
item: [artist, title]
match:
distance_weights:
album: 4.0
album_id: 0.0
albumdisambig: 4.5
artist: 4.0
catalognum: 3.0
missing_catalognum: 3.0
missing_month: 3.0
country: 1.0
genre: 1.0
label: 3.0
media: 1.0
mediums: 1.0
missing_tracks: 0.0
data_source: 0.0
track_artist: 4.0
track_index: 0.0
track_id: 1.0
track_length: 5.0
track_title: 4.0
tracks: 0.0
unmatched_tracks: 5
year: 4.0
missing_fields: 5.0
ignored: []
ignored_media: []
ignore_data_tracks: yes
ignore_video_tracks: yes
medium_rec_thresh: 0.6
preferred:
countries: []
original_year: no
rec_gap_thresh: 0.25
required: []
strong_rec_thresh: 0.15
track_length_grace: 0
track_length_max: 20
album_disambig_fields:
- data_source
- artist
- album
- media
- year
- month
- day
- catalognum
- label
- albumtype
- albumstatus
- distance
- country
- genre
singleton_disambig_fields:
- index
- data_source
- album
- media
- artist
- title
- year
- month
- day
- label
- albumtype
- albumstatus
- distance
- country
- genre
- length
max_filename_length: 0
# --------------- Autotagger ---------------
overwrite_null:
album:
- artist_sort
- artists_sort
- artwork
- artwork_url
- bandcamp_album_id
- catalognum
- country
- data_source
- label
- mastering
- media
- price
- style
- visual_url
- track_alt
track:
- album
- album_id
- artist
- artist_sort
- artists_sort
- country
- disctitle
- index
- label
- medium_index
- title
- track
- track_alt
original_date: no
overwrite_attributes:
- album
- data_source
- mastering
- track_alt
- artist_sort
- artwork
- artwork_url
- data_source
- label
- index
- media
- mastering
- price
- visual_url
- index
- times_bought
- track
- track_alt
# --------------- Paths ---------------
path_sep_replace: _
item_fields:
has_lyrics: bool(lyrics)
label_or_albumartist: "aartist = (albumartist or artist).split(\", \")[0]\nif not label or label.lower() in {\"self\", \"not on label\", aartist.lower()}:
return aartist\nreturn label or albumartist or artist\n"
singleton_track_artist: '"" if label.lower() == artist.lower() else f"{artist}_"'
track_artist: '"" if album and (label.lower() == artist.lower() or albumartist == artist) else f"{artist}_"'
album_name: "return \"_\".join((a for a in [
catalognum if catalognum != album else \"\",
(albumartist if albumartist not in {label, \"Various Artists\"} else \"\"),
album\n] if a.strip()))\n"
track_identification: "if (track_alt := globals().get(\"track_alt\")) and track_alt[0].isalpha():
idx = track_alt\nelif track:
idx = str(track).zfill(2)\nelse:
return \"\"\n\nif disctotal > 1:
idx = f\"{disc}_{idx}\"\n\nreturn f\"{idx}_\"\n"
withdrawn: albumstatus == "Withdrawn"
album_fields:
label_or_albumartist: "aartist = (albumartist or artist).split(\", \")[0]\nif not label or label.lower() in {\"self\", \"not on label\", aartist.lower()}:
return aartist\nreturn label or albumartist or artist\n"
multiple_artists: "(
', ' in albumartist
or 'Various' in albumartist
or (len(set(item.artist.split()[0] for item in items)) > 1)\n)\n"
paths:
albumtype:broadcast: "sets/\n%lower{
%if{$album,$album/}
$track_identification$track_artist$title\n}\n"
singleton: "%lower{
$label_or_albumartist/
%if{$withdrawn,_withdrawn/}
%if{$catalognum,${catalognum}_}
$singleton_track_artist$title\n}\n"
comp: "%lower{
$label_or_albumartist/
%if{$withdrawn,_withdrawn/}
$album_name-%aunique{}/
$track_identification${artist}_$title\n}\n"
default: "%lower{
$label_or_albumartist/
%if{$withdrawn,_withdrawn/}
$album_name-%aunique{}/
$track_identification${track_artist}$title\n}\n"
# --------------- Tagging ---------------
per_disc_numbering: yes
pluginpath: []
# --------------- Plugins ---------------
plugins:
- autobpm
- bandcamp
- deezer
- discogs
- duplicates
- edit
- embedart
- fetchart
- importreplace
- info
- inline
- lastimport
- lastgenre
- lyrics
- missing
- musicbrainz
- mbcollection
- mbsync
- mpdstats
- mpdupdate
- parentwork
- scrub
- spotify
- replaygain
- types
- unimported
replace:
\W:
sort_album: ''
sort_item: ''
sort_case_insensitive: yes
statefile: stat.pickle
terminal_encoding: utf-8
# --------------- Performance ---------------
threaded: no
timeout: 5.0
types:
rating: float
play_count: int
skip_count: int
price: float
helicopta: int
riot: int
hidden: bool
times_bought: int
ui:
import:
album_track_fields:
always:
- index
- track_alt
- artist
- title
- length
never:
- album
- artist_credit
- artists_credit
- artists_ids
- artist_sort
- artists_sort
- deezer_track_id
- deezer_updated
- media
- medium_index
- release_track_id
- spotify_artist_id
- spotify_track_id
singleton_fields:
always:
- index
- track_alt
- artist
- title
- length
length_diff_thresh: 10.0
color: yes
# --------------- UI ---------------
verbose: 0
autobpm:
auto: no
beat_track_kwargs:
start_bpm: 160
overwrite: yes
bandcamp:
data_source_mismatch_penalty: 0.1
include_digital_only_tracks: yes
search_max: 3
excluded_extra_fields:
comments_separator: '
'
art: yes
truncate_comments: yes
genre:
mode: psychedelic
always_include:
- (core|techno|trance)$
- ^(hard.|acid)
- psy|mental
- free|tek
- phonk
- trib(e|al)$
- (?<!g )bass
capitalize: no
maximum: 0
field_patterns:
times_bought:
expr: len(sponsor)
default: 0
price:
pattern: 'price: (\S+)'
replace_expr: float(match.group(1))
artwork:
pattern: "\\b(?i:art(?:work)?|cover)\\b\n[^|:,.\\n-]*?\n(?:[-:]\\ ?|by:?\\ )\n(
https:[^ ]+
| (
[\\w@]
(?:[^|:,.\\n-]|[.]\\w)+
[^|:,.\
-]
)+\n)\n([|:,.\
\\\"-]|$)\n"
replace: \1
default: ''
city:
pattern: ': Place\s+.*: ([^,\n]+), '
replace: \1
mastering:
pattern: "(?i)\n\\bmaster[\\w ]*\n(?::[ ]?|by:?[ ])\n(.+)\n(.\\ |\\)\\n||$)\n# (\n# (\n# (?![ ]at)\n# (\n# (\n# https:[^ ]+\n# | [^|,.\
-]+\n# | \\w+\n# | [\u2019./]\\b\n# | ,\\ \\b\n# )\n# | [ &@]\n# )\n# )+\n# )\n"
replace: \1
default: ''
search_limit: 5
exclude_extra_fields: []
deezer:
data_source_mismatch_penalty: 0.4
search_limit: 3
search_query_ascii: no
discogs:
data_source_mismatch_penalty: 0.2
search_limit: 3
user_token: REDACTED
index_tracks: no
featured_string: feat.
apikey: REDACTED
apisecret: REDACTED
tokenfile: discogs_token.json
separator: ', '
append_style_genre: no
strip_disambiguation: yes
anv:
artist_credit: yes
artist: no
album_artist: no
edit:
ignore_fields: []
albumfields:
- album
- artist
- artists
- artist_sort
- artwork
- artpath
- title
- label
- year
- month
- day
- track
- catalognum
- album
- albumartist
- albumstatus
- albumtype
- albumtypes
- catalognum
- comments
- comp
- country
- data_source
- data_url
- day
- disctitle
- genre
- media
- label
- mb_albumid
- mb_artistid
- mediums
- medium
- medium_total
- path
- albumtotal
- month
- style
- year
itemfields:
- album
- albumartist
- album_id
- artist
- artists
- artist_sort
- artwork
- title
- label
- year
- month
- day
- track
- catalognum
- albumstatus
- albumtype
- albumtypes
- artwork_url
- bpm
- comments
- country
- cuelist
- data_source
- data_url
- disc
- disctitle
- disctotal
- genre
- genres
- index
- length
- lyrics
- mb_albumid
- mb_artistid
- mb_releasegroup_id
- mb_releasetrack_id
- mb_trackid
- media
- medium
- medium_index
- medium_total
- mediums
- path
- play_count
- rating
- skip_count
- style
- track_alt
- track_id
- tracklist
- tracktotal
- visual_url
embedart:
ifempty: yes
remove_art_file: no
auto: yes
maxwidth: 0
compare_threshold: 0
quality: 0
fetchart:
lastfm_key: REDACTED
auto: yes
store_source: yes
sources:
- filesystem
- cover_art_url
- bandcamp
- lastfm
- '*'
maxwidth: 700
minwidth: 0
quality: 0
max_filesize: 0
enforce_ratio: no
cautious: no
cover_names:
- cover
- front
- art
- album
- folder
fallback:
high_resolution: no
deinterlace: no
cover_format:
google_key: REDACTED
google_engine: REDACTED
fanarttv_key: REDACTED
lastfm:
user: REDACTED
api_key: REDACTED
lyrics:
force: no
fallback: ''
dist_thresh: 0.15
google_API_key: REDACTED
translate:
to_language: en
api_key: REDACTED
from_languages: []
google_engine_ID: REDACTED
auto_ignore: 'data_source:bandcamp
,
genre:techno
,
data_source:soundcloud
'
sources: [lrclib, tekstowo, google]
synced: yes
auto: yes
genius_api_key: REDACTED
local: no
print: no
mbcollection:
auto: no
collection: 19c7c1d7-cdb7-4855-839d-737c92a279ee
remove: no
mpd:
host: /run/user/60460/mpd/socket
music_directory: /mnt/music/Music
port: 6600
strip_path: ''
rating: yes
rating_mix: 0.75
password: REDACTED
played_ratio_threshold: 0.85
musicbrainz:
data_source_mismatch_penalty: 0.3
search_limit: 3
host: musicbrainz.org
genres: yes
external_ids:
discogs: yes
bandcamp: yes
spotify: yes
deezer: yes
tidal: yes
beatport: yes
user: snejus
pass: REDACTED
https: no
ratelimit: 1
ratelimit_interval: 1
genres_tag: genre
extra_tags: []
replaygain:
backend: ffmpeg
force: yes
auto: no
overwrite: no
threads: 8
parallel_on_import: no
per_disc: no
peak: 'true'
targetlevel: 89
r128: [Opus]
r128_targetlevel: 84
spotify:
data_source_mismatch_penalty: 0.4
search_limit: 5
search_query_ascii: no
mode: list
tiebreak: popularity
show_failures: no
region_filter:
regex: []
client_id: REDACTED
client_secret: REDACTED
tokenfile: spotify_token.json
scrub:
auto: no
unimported:
ignore_extensions: jpg png
ignore_subdirectories: []
ytimport:
directory: /tmp/ytimport
format: mp3
disabled_plugins: []
duplicates:
album: no
checksum: ''
copy: ''
count: no
delete: no
format: ''
full: no
keys: []
merge: no
move: ''
path: no
tiebreak: {}
strict: no
tag: ''
remove: no
pathfields: {}
lastimport:
per_page: 500
retry_limit: 3
lastgenre:
whitelist: yes
min_weight: 10
count: 1
fallback:
canonical: no
source: album
force: no
keep_existing: no
auto: yes
separator: ', '
prefer_specific: no
title_case: yes
pretend: no
missing:
count: no
total: no
album: no
parentwork:
auto: no
force: no |
Beta Was this translation helpful? Give feedback.
-
Henry's Set UpMusic Library Size(Still only partway through importing my library...) Plugins
HighlightsMy first priority is Musicbrainz - the metadata from there is usually higher quality than Discogs, but lacks in 12" releases. Discogs can offer more breadth, but quality can be all over the place. Deezer and bandcamp cover the digital releases as a fallback. Right now it's not quite as automatic as I like, but the more I import of my collection, the better I tune the settings how I need them! Why This Works for MeA lot of my collection comes from CD rips or vinyl rips I make, I try to be as accurate to the release the tracks came from, so getting specific down to the label and edition (somewhat) is important for me. Configurationdirectory: E:\Media Library\Music
library: E:\Media Library\Data\musiclibrary.db
import:
incremental: yes
incremental_skip_later: yes
log: beets_import_log.txt
move: yes
write: yes
plugins:
- bandcamp
- copyartifacts
- deezer
- discogs
- duplicates
- embedart
- fetchart
- fromfilename
- inline
- importadded
- musicbrainz
- mbsubmit
- replaygain
- the
- titlecase
- unimported
bandcamp:
art: True
# https://github.com/adammillerio/beets-copyartifacts
# I like to keep the CD rip logs, gives me a trail to follow.
copyartifacts:
extensions: .cue .log .m3u
# Musicbrainz tends to have the best quality of information, but has less releases.
musicbrainz:
data_source_mismatch_penalty: 0.0
genres: yes
extra_tags: [barcode, catalognum, country, label, media, year]
# Discogs has the most - but sometimes the quality of the information is finicky.
discogs:
index_tracks: no
data_source_mismatch_penalty: 0.1
append_style_genre: True
# Deezer covers most of the digital releases.
deezer:
data_source_mismatch_penalty: 0.3
# Bandcamp as a fallback. Releases on bandcamp can be particularly finicky for compilations, so I try to
# prioritize other datasources.
bandcamp:
data_source_mistmatch_penalty: 0.5
unimported:
ignore_extensions: jpg png cue txt m3u nfo
titlecase:
# The titlecase plugin handles most of the normalizing for strings in my collection.
# I try to preserve the albums with weird casing - mainly because I think it reflects artistic intent.
replace:
- "–": "-"
- "…": "..."
- "’": "'"
- "‘": "'"
- "´": "'"
- "“": '"'
- "”": '"'
- "″": '"'
all_caps: yes
all_lowercase: yes
fields: [
'album',
'albumartist',
'albumartist_credit',
'albumartists',
'albumartists_credit',
'artist',
'artist_credit',
'artists',
'artists_credit',
'composer',
'disctitle',
'work',
'title'
]
separators: ["/", "@", "&"]
preserve: [
'123mrk',
'7G',
'ASC', 'ATFC', 'ATB', 'ATC', 'AWB', 'AIFF', 'ABBA', 'AFX',
'B So glObal', 'BT', 'CLSM', 'cv313', 'CEP', 'BADBADNOTGOOD',
'CD', 'Charli XCX',
'Deepchord', 'DiY', 'DRS', 'dRamatic & dbAudio', 'DNA', 'DJ', "D'Angelo",
'EQD', 'EP', 'easyFun', 'Erika de Casier', 'em:t', 'ESCM',
'feat.', 'FAX +49-69/450464', 'Falty DL', 'FabricLive', 'FKA Twigs', 'FBD Project', 'FLAC',
'GFOTY', 'BK', 'GTO', 'gecs',
'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X',
'ICR', 'ISAM',
'JAKAZiD',
'KH', 'KLF',
'LA Synthesis', 'LA Vampires', 'LCD', 'LFO', 'LTJ',
'MP3',
'r_AW', 'RCA',
'USA', 'UK',
't:me',
'Y2K'
]
album_fields:
# Produces the "[FLAC 16-44]" string.
quality: |
qual = ""
if len(set([item.format for item in items])) != 1 or len(set([item.bitdepth for item in items])) != 1 or len(set([item.samplerate for item in items])) != 1:
qual += "[MUTT]"
i = items[0]
if i.format == "MP3":
qual += f"[MP3 {i.bitrate // 1000}]"
else:
qual += f"[{i.format} {i.bitdepth}-{i.samplerate // 1000}]"
return qual
# Gives a string along the lines of (2025, Label CATNO)
release_info: |
item = items[0]
info = ""
added_year = False
if item.original_year or item.year:
if item.original_year:
info += str(item.original_year)
else:
info += str(item.year)
added_year = True
if item.catalognum or item.label:
if added_year:
info += ", "
if item.label:
info += item.label
if item.catalognum:
if item.label:
info += " "
info += item.catalognum
if info:
info = "(" + info + ")"
return info
# Format track items as 1-02 or just 01 if single disc.
item_fields:
track_no: f"{disc}-{track:02d}" if disctotal > 1 else f"{track:02d}"
# Convert non-ascii characters to ascii
asciify_paths: yes
per_disc_numbering: yes
paths:
# I have two main directories - one that is just for my vinyl rips, another for digital releases / CD rips.
# Example directory
# Digital/s/Secret, The/Hold Me!!! Do No Wrong!!! (1999, Secret Records SECT 10) [FLAC 24-44]/01 - The Secret - Hold Me!!!.flac
vinyl_rip:1: Vinyl Rips/%lower{%left{%the{$albumartist}, 1}}/%the{$albumartist}/$album $release_info $quality/$track_no - $artist - $title
default: Digital/%lower{%left{%the{$albumartist}, 1}}/%the{$albumartist}/$album $release_info $quality/$track_no - $artist - $title
# I keep compilations in "Various Artists" because I don't like having a non alphabetic folder in the main directory.
comp: Digital/%lower{%left{%the{$albumartist}, 1}}/%the{$albumartist}/$album $release_info $quality/$track_no - $artist - $title
ext:log: $albumpath/$artist - $album
ext:cue: $albumpath/$artist - $album
ext:m3u: $albumpath/$artist - $album
fetchart:
sources: filesystem coverart cover_art_url itunes
max_filesize: 5000000
match:
max_rec:
missing_tracks: low
preferred:
original_year: yes
media: ['CD', 'Digital Media', 'File']
replaygain:
threads: 4
overwrite: no
backend: ffmpeg |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I thought it would be interesting to see how people utilise
beets. I have caught myself thinking 'oh, I didn't realise this was possible' many times after seeing various configurations in issues, so I hope this discussion may help people to get some inspiration!Please use the following template to keep this discussion navigable:
Feel free to skip the title, Highlights or Why This Works For Me sections.
Beta Was this translation helpful? Give feedback.
All reactions