beetbox / beetbox/beets

Multiple plugin paths is not working

Open
#5,825 11 comments 0 reactions 0 assignees View on GitHub
needinfo
Dominant language
Python
Stars
15.7k
Forks
2.1k
Avg merge
4d 21h
Merged PRs (30d)
31

Description

### Problem

Documentation states that multiple plugin paths can be defined (https://beets.readthedocs.io/en/stable/reference/config.html#plugins - plugin path subheader). The documentation states the format should be:
```
pluginpath:
- /path/one
- /path/two
```
Use of the dashes causes a yaml error. This may be an error in the document. Removing the dashes allows the format to be accepted, however, the two paths do not seem to be used. I created a separate directory for a custom plugin that I developed for my own use. I want to keep it separate from the main body of beets.

Using the pluginpath configuration does not seem to be recognized by beets at all. I tested:
- having the first path point to the default plugin directory (.../beetsplug) and having a second pluginpath pointing to my custom plugin directory
- switching the order of the two directories so that the custom directory was first
- putting in a non-existent directory as the sole pluginpath

In all cases delivered plugins were found (e.g. the delivered beetsplug directory was referenced) and the custom plugin was not. It appears that other than confirming that the yaml is formatted, the pluginpath is not referenced at all.

### Setup

* OS: MacOS Sequoia 15.5
* Python version: 3.12.2
* beets version: 2.3.1
* Turning off plugins made problem go away (yes/no): no

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

```yaml
beet config
directory: /Volumes/share/music
# --------------- Main ---------------

library: /Volumes/share/beets/library1.db

import:
copy: no
move: yes
write: yes
log: /Volumes/share/beets/import.log
singletons: no
asciify_paths: yes
bell: yes
incremental: no
incremental_skip_later: yes
resume: yes
paths:
default: Albums/$albumartist/$album%aunique{}/$disc-$track $artist - $title
singleton: Non-Album/$artist ($year) - $title
comp: Compilations/$album%aunique{}/$disc-$track $artist - $title
albumtype_soundtrack: Soundtracks/$album/$disc-$track $artist - $title

pluginpath: /Users/myname/ownCloud/GitHub/beets/src/beets/beetsplug /Users/myname/ownCloud/GitHub/beets/custom/beetsplug
replace:
'[\\/]': _
^\.: _
'[\x00-\x1f]': _
'[<>:"\?\*\|]': _
\.$: _
\s+$: ''
^\s+: ''
^-: _

match:
strong_rec_thresh: 0.2
max_rec:
missing_tracks: low
unmatched_tracks: low
preferred:
countries: [US, GB|UK]
original_year: yes
musicbrainz:
genre: no

# --------------- Plugins ---------------

plugins: fetchart
plugfiles:
mode: stage
format: $albumartist - $title
temp_dir: /Volumes/share/tempmusic
scrub:
auto: yes
embedart:
compare_threshold: 0
fetchart:
cover_names: front art album folder
sources: filesystem coverart amazon albumart
auto: yes
minwidth: 0
maxwidth: 0
quality: 0
max_filesize: 0
enforce_ratio: no
cautious: no
store_source: no
high_resolution: no
deinterlace: no
cover_format:
google_key: REDACTED
google_engine: REDACTED
fanarttv_key: REDACTED
lastfm_key: REDACTED
lyrics:
auto: yes
google_API_key: REDACTED
google_engine_ID: REDACTED
sources: google musixmatch genius tekstowo
lastgenre:
auto: yes
canonical: no
count: 3
fallback: none
force: yes
min_weight: 10
prefer_specific: no
source: album
whitelist: yes
title_case: yes
replaygain:
auto: yes
backend: ffmpeg
per_disc: no
convert:
auto: no
copy_album_art: yes
embed: yes
never_convert_lossy_files: yes
delete_originals: yes
missing:

# --------------- Search ---------------

format_item: $album - $disc-$track $title
count: no
total: no
```

Contributor guide

Open the contributing guide

Research direction

Start with the plugin path configuration documented in the plugin path subsection and reproduce the YAML error and plugin discovery behavior using the reported `beet config` setup. Trace how `pluginpath` is read during plugin loading, then verify that multiple valid directories are accepted, nonexistent paths behave as expected, and a custom plugin can be loaded.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.