# # Beets configuration file # # Tip: Import works best by first importing albums, ideally one album at a time, then singles to address duplicates properly # library: /home/wuff/.config/beets/beetslibrary.db directory: /media/music/beets2 import: # write metadata to music files write: yes # copy imported files from source to the music directory copy: yes # move imported files from source to the music directory - takes precedence over copy! move: yes link: no hardlink: no #deprecated by move function #delete: no resume: ask incremental: no incremental_skip_later: no from_scratch: no quiet_fallback: skip none_rec_action: ask timid: no #log: log: /home/wuff/.config/beets/beetslog.txt # use auto-tagging where possible do not require confirmation on strong matches autotag: yes # no output, use quiet_fallback - skip - as default action quiet: no #default to full album import, singleton mode via command line -s switch singletons: no # default selected action on command line for return for a match query default_action: apply languages: [] detail: no #multi disk albums split in multiple directories can be seen as flat using cmd option --flat flat: no group_albums: no pretend: false search_ids: [] duplicate_action: ask #duplicate verbose uses format_item settings duplicate_verbose_prompt: yes bell: no set_fields: {} art: yes # files matching these patterns are deleted from source after import clutter: ["Thumbs.DB", ".DS_Store", "desktop.ini", "*.m3u", "*.nfo", "*.pls", "*.torrent"] # files/directories matching one of these patterns are ignored during import ignore: [".*", "*~", "System Volume Information", "lost+found", "cover.jpg"] ignore_hidden: yes # replace special characters in generated filenames replace: '[\\/]': '-' '^\.': _ '[\x00-\x1f]': _ '[<>\?\*\|]': _ '[:]': ' -' # dot at end of directories causes problems with some clients on samba shares '\.$': _ '\s+$': '' '^\s+': '' '^-': _ # no special quotes thank you '[\u2018\u2019]': '''' '[\u201c\u201d]': '"' '[\x91\x92]': "'" # double quotes to single quote '"': '''' #replacement character for path separator (forward/backslack), precedence over replace function path_sep_replace: '-' #replacement character for drive separator (colon?), NO precedence over replace function drive_sep_replace: '-' #default false, set to yes, all special characters or accents are converted to ascii equivalent. #avoids having to wrap all paths with asciify function asciify_paths: true art_filename: folder # results in "folder.jpg", default "cover.jpg" max_filename_length: 0 # 0 unlimited #add more details for duplicate album names aunique: keys: albumartist album disambiguators: albumtype year label catalognum albumdisambig releasegroupdisambig bracket: '[]' overwrite_null: album: [] track: [] plugins: [fetchart,lyrics,lastgenre,embedart,bucket,the,chroma,ftintitle,discogs,scrub,inline,fromfilename,edit,importadded,duplicates,replaygain,web,bpd,webimport,yearfixer,zero,badfiles,importreplace] #copyartifacts broken pluginpath: [] threaded: yes timeout: 5.0 # per disc numbering no = 2nd disk starts with N+1 track number # if set to yes, second disk track starts at 1 again. # If "per disk", make sure tracknames do not collide ("paths" setting) and include disks in path (and/or inline plugin). per_disc_numbering: yes verbose: 0 #for debug info. equivalent to -v. can be used twice for even more details -vv terminal_encoding: utf8 # use the release-date of the original (first) release of an album? original_date: yes artist_credit: no id3v23: no va_name: "Various Artists" ui: terminal_width: 80 length_diff_thresh: 10.0 #undocumented color: yes colors: text_success: green text_warning: yellow text_error: red text_highlight: red text_highlight_minor: lightgray action_default: turquoise action: blue #Define how to show items using the list command (formerly list_format_item/list_format_album) format_item: %upper{$artist} - $album - $track. $title ($length) format_album: %upper{$albumartist} - $album [$year] ($totaltracks) #format_item: $artist - $album - $title time_format: '%Y-%m-%d %H:%M:%S' #Track length is displayed as "M:SS" rather than a raw number of seconds. Queries on track length also accept this format. To use raw seconds, set format_raw_length to yes format_raw_length: no #Default sort order when fetching items from database sort_album: albumartist+ album+ sort_item: artist+ album+ disc+ track+ sort_case_insensitive: yes #used by inline plugin to define specific template variables for paths item_fields: disc_and_track: f'{disc:02}-{track:02}' if disctotal > 1 else f'{track:02}' artist_and_title: f'{artist} - {title}' if artist != albumartist else title original_date: "'-'.join(filter(None, (original_year and f'{original_year:04}', original_month and f'{original_month:02}', original_day and f'{original_day:02}')))" album_year: f'{year:04}' album_fields: totaltracks: str(items[0].tracktotal) + ' tracks' album_ends_with_ep: 1 if str({album})[-2:] == "EP" else 0 # Paths and filenames for music files relative to music directory # setting asciify to true in general settings avoids having to wrap individual paths with %asciify{} function. # In addition to default, comp, and singleton, you can condition path queries based on beets queries (eg albumtype:soundtrack). The queries are tested in the order they appear in the configuration file. paths: default: Album/%bucket{%the{$albumartist},alpha}/%the{$albumartist}/$albumartist - $album%aunique{} [$year]/$albumartist - $disc_and_track - $title singleton: Non-Album/%bucket{%the{$artist}}/$artist - $title albumtype:ep: Album/%bucket{%the{$albumartist},alpha}/%the{$albumartist}/$albumartist - $album%aunique{}%if{$album_ends_with_ep,, EP} [$year]/$albumartist - $disc_and_track - $title albumtype:soundtrack: Soundtracks/$album%aunique{} [$year]/$disc_and_track - $artist - $title comp: Compilations/%bucket{$year}/%the{$album%aunique{}}/$disc_and_track - $artist - $title statefile: state.pickle musicbrainz: host: musicbrainz.org ratelimit: 1 ratelimit_interval: 1.0 searchlimit: 20 extra_tags: [] match: strong_rec_thresh: 0.1 # match 90% or better for auto import (default is 0.04 = 96%) medium_rec_thresh: 0.25 rec_gap_thresh: 0.25 max_rec: missing_tracks: medium unmatched_tracks: medium # https://discourse.beets.io/t/can-beets-fix-tracks-which-are-wrongly-named/671/4 distance_weights: source: 2.0 artist: 3.0 album: 3.0 media: 1.0 mediums: 1.0 year: 1.0 country: 0.5 label: 0.5 catalognum: 0.5 albumdisambig: 0.5 album_id: 5.0 tracks: 4.0 #default 2 missing_tracks: 0.9 unmatched_tracks: 0.4 #default 0.6 track_title: 3.0 track_artist: 2.0 track_index: 1.0 track_length: 2.0 track_id: 5.0 preferred: countries: ['XW', 'US', 'GB|UK', 'JP', 'DE'] media: ['Digital Media', 'CD', 'File'] original_year: yes ignored: [] required: [] #ignore matches from video sources instead of audio ignored_media: ['Data CD', 'DVD', 'DVD-Video', 'Blu-ray', 'HD-DVD', 'VCD', 'SVCD', 'UMD', 'VHS'] ignore_data_tracks: yes ignore_video_tracks: yes track_length_grace: 10 track_length_max: 30 embedart: auto: yes compare_threshold: 20 ifempty: no #only embed if empty: default no maxwidth: 800 remove_art_file: no fetchart: auto: yes cover_names: front folder cover album enforce_ratio: 2% bucket: bucket_alpha: ['0-9', 'A-C', 'D-F', 'G-J', 'K-N', 'O-R', 'S', 'T-Z' ] bucket_year: ['1960s', '1970s', '1980s', '1990s', '2000s', '2010s', '2020s'] bucket_alpha_regex: '0-9': ^[^a-zA-Z] lyrics: auto: yes on_import: true processes: 10 force: no fallback: '' #moves featured artists from artists to the title field ftintitle: auto: yes format: feat. {0} #Scrub plugin removes all non-beet tags scrub: auto: no #copies additional files from source folder (except ignored files) copyartifacts: extensions: .cue .jpg .gif .png .pdf print_ignored: yes edit: itemfields: track title artist album year albumartist artist_sort artist_credit albumfields: album albumartist year importadded: preserve_mtime: yes #after import reset mtime to original value preserve_write_mtime: yes #after writing to files reset mtime duplicates: # creating checksums is expensive #checksum: no #By default, the tie-breaking procedure favors the most complete metadata attribute set. If you would like to consider the lower bitrates as duplicates, for example, set tiebreak: { items: [bitrate] } chroma: auto: yes #Plugin needs gstreamer and python-gi installed, or mp3gain or aacgain replaygain: auto: yes #no=disable during import backend: gstreamer overwrite: yes #re-analyze files with replaygain tag default no targetlevel: 89 #decibel target level default 89 #manual analysis beet replaygain -wf /my/music/directory #Note this takes about 10 seconds for 7 files which is about 6h for 15k songs. web: host: 0.0.0.0 port: 8337 webimport: host: 0.0.0.0 port: 8338 bpd: host: 127.0.0.1 port: 6600 password: seekrit volume: 30 acoustid: apikey: 9NQqkUUg6p # null/remove specific tag fields on import (not when importing as-is) # regex condition on comments field, this removes useless comments: zero: fields: comments comments: [EAC, LAME, from.+collection, 'ripped by'] update_database: true # check integrity of files on import, note that mp3val # required for mp3s: apt-get install mp3val # mp3val is quite verbose, multiple stream errors indicate issues badfiles: check_on_import: yes commands: mp3: mp3val -f -si -nb -t #replace unicode apostrophes from mb with ascii version in tags importreplace: replacements: - item_fields: title artist artist_sort artist_credit album_fields: album artist artist_sort artist_credit replace: '[\u2018-\u201B]': '''' '[\u201C-\u201F]': '"' '[\u2010-\u2015]': '-'