beetbox / beetbox/beets

absubmit: Actually implement `auto` for analysis on import

Open
#2,861 7 comments 0 reactions 0 assignees View on GitHub
absubmit feature
Dominant language
Python
Stars
15.7k
Forks
2.1k
Avg merge
4d 21h
Merged PRs (30d)
31

Description

### Problem
When importing absubmit isn't triggered even though it is set to auto in my config file.

Running this command in verbose (`-vv`) mode:

```sh
$ beet -vv import /net/nfs4/server/mediacentre/Downloads/seeding/Music/.store/Amy\ Allison\ -\ 2003\ -\ No\ Frills\ Friend
```

Led to this problem:

There is no output about absubmit, acousticbrainz (which is listed after absubmit in plugins) functions but pulls no data for unrecognised tracks:
```
acousticbrainz: getting data for: Amy Allison - No Frills Friend - What's the Deal?
acousticbrainz: fetching URL: https://acousticbrainz.org/45c3643b-2102-4daa-b15f-1d1ce7089e8b/low-level
acousticbrainz: recording ID 45c3643b-2102-4daa-b15f-1d1ce7089e8b not found
acousticbrainz: getting data for: Amy Allison - No Frills Friend - No Frills Friend
acousticbrainz: fetching URL: https://acousticbrainz.org/13c7456c-270b-49a6-9fda-7cc26c97f7ed/low-level
acousticbrainz: recording ID 13c7456c-270b-49a6-9fda-7cc26c97f7ed not found
```
After import, running beet absubmit on the album works, then running beet acousticbrainz retrieves the data.

### Setup

* OS: Arch linux
* Python version: 3.6.4
* beets version: 1.4.6

My configuration (output of `beet config`) is:

```yaml
llyrics:
bing_lang_from: []
auto: yes
google_API_key: REDACTED
sources: google
bing_client_secret: REDACTED
bing_lang_to:
google_engine_ID: REDACTED
genius_api_key: REDACTED
fallback:
force: no
local: no
importfeeds:
relative_to: !!binary |
L25ldC9uZnM0L3NlcnZlci9tZWRpYWNlbnRyZS9NdXNpYy9MaWJyYXJ5
formats: m3u
dir: /media/mediacentre/Mediacentre/Music/Playlists/
m3u_name: imported.m3u
absolute_path: no
directory: /net/nfs4/server/mediacentre/Music/Library
library: /net/nfs4/server/mediacentre/Music/Catalogs/beets.blb

plugins: inline edit fromfilename zero rewrite fuzzy info missing random types replaygain smartplaylist duplicates badfiles play chroma absubmit acousticbrainz mbsync mbsubmit lastimport embedart fetchart thumbnails importfeeds lyrics wlg popularity
pluginpath: ~/projects/whatlastgenre/plugin/beets/beetsplug
per_disc_numbering: yes
threaded: no

import:
write: yes
copy: yes
hardlink: no
autotag: yes
incremental: no
resume: yes
quiet_fallback: skip
none_rec_action: ask
timid: yes
log: ~/.config/beets/beetslog.txt
detail: yes
bell: yes
from_scratch: yes

replace:
'[\\/]': _
^\.: _
'[\x00-\x1f]': _
\.$: _
\s+$: ''
^\s+: ''
^-: _

ui:
color: yes

paths:
default: $albumartist_credit/($original_year) $album%aunique{albumartist album year,albumtype label catalognum albumdisambig}/%if{$multidisc,Disc${disc}%if{$disctitle, - $disctitle}/}$track $title
singleton: $artist/-Misc-/$title
comp: Various Artists/$album%aunique{albumartist album year,albumtype label catalognum albumdisambig} ($year)/%if{$multidisc,Disc$disc%if{$disctitle, - $disctitle}/}$track $title
ext:cue: $albumpath/$artist - $album
ext:log: $albumpath/$artist - $album
ext:jpg: $albumpath/cover
ext:jpeg: $albumpath/cover
ext:png: $albumpath/cover
item_fields:
multidisc: 1 if disctotal > 1 else 0

match:
strong_rec_thresh: 0.04
medium_rec_thresh: 0.25
rec_gap_thresh: 0.25
max_rec:
missing_tracks: medium
unmatched_tracks: medium
preferred:
countries:
- US
- GB|UK

musicbrainz:
searchlimit: 5
art_filename: cover
fetchart:
auto: yes
cautious: yes
minwidth: 450
maxwidth: 1010
enforce_ratio: 1.5%
sources: filesystem albumart amazon wikipedia coverart fanarttv google
google_key: REDACTED
store_source: yes
cover_names:
- cover
- front
- art
- album
- folder
google_engine: 001442825323518660753:hrh5ch1gjzm
fanarttv_key: REDACTED
embedart:
auto: no
maxwidth: 300
compare_threshold: 0 - AU
- AR
- ES
ifempty: no
remove_art_file: no
thumbnails:
auto: yes
force: no
dolphin: no
replaygain:
auto: yes
backend: bs1770gain
overwrite: yes
targetlevel: 89
r128: [Opus]
chunk_at: 5000
method: replaygain
wlg:
auto: yes
force: yes
count: 4
whitelist: ~/.whatlastgenre/genres.txt
separator: ', '
mpdstats:
rating_mix: 0.75
zero:
auto: yes
fields: images
update_database: yes
keep_fields: []
smartplaylist:
relative_to: /net/nfs4/server/mediacentre/Music/Library/
playlist_dir: /net/nfs4/server/mediacentre/Music/Playlists/
playlists: [{name: Loved.m3u, query: 'loved:1'}, {name: Genre_acoustic-country-folk-americana.m3u, album_query: ['genre:Folk', 'genre:Country', 'genre:Acoustic', 'genre:Americana']}]
auto: yes
types:
loved: int
play_count: int
lastfm:
user: REDACTED
api_key: REDACTED
play:
command: mpv
use_folders: no
relative_to:
raw: no
warning_threshold: 100
copyartifacts:
extensions: .cue .log .jpg .jpeg .png
print_ignored: yes
acousticbrainz:
auto: yes
force: no
tags: []
absubmit:
auto: yes
extractor: /usr/bin/streaming_extractor_music
chroma:
auto: yes
acoustid:
apikey: REDACTED
lastimport:
per_page: 500
retry_limit: 3
missing:
count: no
total: no
album: no
rewrite: {}
pathfields: {}
album_fields: {}
edit:
albumfields: album albumartist
itemfields: track title artist album
ignore_fields: id path
duplicates:
album: no
checksum: ''
copy: ''
count: no
delete: no
format: ''
full: no
keys: []
merge: no
move: ''
path: no
tiebreak: {}
strict: no
tag: ''
fuzzy:
prefix: '~'
threshold: 0.7
mbsubmit:
format: $track. $title - $artist ($length)
threshold: medium
```
More generally I think the logic of absubmit should be something like acousticbrainz - it should run only on tracks without acoustic data and the newly created data should automatically be retrieved from acousticbrainz afterwards (ie: running beet absubmit on one's entire collection should perform audio analysis only on tracks with no acoustibrainz data, then retrieve that data to the tracks).

Contributor guide

Open the contributing guide

Research direction

Start by locating the absubmit and acousticbrainz plugin entry points and their import-time hooks; compare their existing command behavior and how missing acoustic data is detected. Done means import with absubmit auto performs analysis only for tracks lacking data and retrieves the resulting AcousticBrainz data, while collection-wide absubmit avoids already analyzed tracks.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.