beetbox / beetbox/beets

Bug: Import excessively updates db - and behaves differently / possibly based on whitespace in path

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

Description

I try to import entries, some files run through, some take forever

### Problem

```sh
# explicitly importing the new file in case that has something todo with the dedup checksum calculation
root@beets:~ # beet -vv import -p /media/music/Bodycode/Immune/02\ Hyperlightdup.mp3
user configuration: /root/.config/beets/config.yaml
data directory: /root/.config/beets
plugin paths: []
Loading plugins: convert, duplicates, embedart, fetchart, info, scrub, web
fetchart: google: Disabling art source due to missing key
fetchart: lastfm: Disabling art source due to missing key
fetchart: To use Spotify as an album art source, you must install the beautifulsoup4 module. See the documentation for further details.
Sending event: pluginload
library database: /root/.config/beets/library.db
library directory: /media/music
Sending event: library_opened
Sending event: import_begin
Sending event: import_task_created
Sending event: import_task_start
Looking up: /media/music/Bodycode/Immune/02 Hyperlightdup.mp3
Item search terms: Bodycode - Hyperlight
Found 0 candidates.

/media/music/Bodycode/Immune/02 Hyperlightdup.mp3
Importing as-is.
Sending event: import_task_choice
0 of 1 items replaced
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: import_task_files
scrub: auto-scrubbing /media/music/Non-Album/Bodycode/Hyperlight.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
Sending event: item_imported
Sending event: import
Sending event: cli_exit

# checking db for entries
root@beets:~ # sqlite3 /root/.config/beets/library.db
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
sqlite> select * from item_attributes;
1|37529|data_source|MusicBrainz
5|17608|ffmpeg|
6|17607|ffmpeg|CRC=0x17e9b4f7

sqlite> .exit

# Adding new copy without whitespaces - it does make a difference at least in the import! - I am quite surprised about all the recalculations!
root@beets:~ # cp /media/music/Bodycode/Immune/02\ Hyperlight.mp3 /media/music/Bodycode/Immune/02_Hyperlight.mp3
root@beets:~ # beet -vv import -p /media/music/Bodycode/Immune/02_Hyperlight.mp3
user configuration: /root/.config/beets/config.yaml
data directory: /root/.config/beets
plugin paths: []
Loading plugins: convert, duplicates, embedart, fetchart, info, scrub, web
fetchart: google: Disabling art source due to missing key
fetchart: lastfm: Disabling art source due to missing key
fetchart: To use Spotify as an album art source, you must install the beautifulsoup4 module. See the documentation for further details.
Sending event: pluginload
library database: /root/.config/beets/library.db
library directory: /media/music
Sending event: library_opened
Sending event: import_begin
Sending event: import_task_created
Sending event: import_task_start
Looking up: /media/music/Bodycode/Immune/02_Hyperlight.mp3
Item search terms: Bodycode - Hyperlight
Found 0 candidates.

/media/music/Bodycode/Immune/02_Hyperlight.mp3
Importing as-is.
Sending event: import_task_choice
found duplicates: [52722]
default action for duplicates: m
Sending event: import_task_start
Looking up: /media/music/Bodycode/Immune/02_Hyperlight.mp3; /media/music/Non-Album/Bodycode/Hyperlight.mp3
Tagging Bodycode - Immune
No album ID found.
Search terms: Bodycode - Immune
Album might be VA: False
Evaluating 0 candidates.

/media/music/Bodycode/Immune/02_Hyperlight.mp3
/media/music/Non-Album/Bodycode/Hyperlight.mp3 (2 items)
Sending event: import_task_before_choice
Importing as-is.
Sending event: import_task_choice
found duplicates: [865]
default action for duplicates: m
Sending event: import_task_start
Looking up: /media/music/Bodycode/Immune/02_Hyperlight.mp3; /media/music/Non-Album/Bodycode/Hyperlight.mp3; /media/music/Bodycode/Immune/01 Meaning And Memory.mp3; /media/music/Bodycode/Immune/02 Hyperlight.mp3; /media/music/Bodycode/Immune/02 Hyperlight.2.mp3; /media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3; /media/music/Bodycode/Immune/03 I'll Hold Your Hand.2.mp3; /media/music/Bodycode/Immune/04 What Did You Say.mp3; /media/music/Bodycode/Immune/04 What Did You Say.2.mp3; /media/music/Bodycode/Immune/05 Imitation Lover.mp3; /media/music/Bodycode/Immune/05 Imitation Lover.2.mp3; /media/music/Bodycode/Immune/06 Arigato.mp3; /media/music/Bodycode/Immune/06 Arigato.1.mp3; /media/music/Bodycode/Immune/07 Subspace Radio.mp3; /media/music/Bodycode/Immune/07 Subspace Radio.1.mp3; /media/music/Bodycode/Immune/08 Spacial Harmonics.mp3; /media/music/Bodycode/Immune/08 Spacial Harmonics.1.mp3; /media/music/Bodycode/Immune/09 Immune.mp3; /media/music/Bodycode/Immune/09 Immune.1.mp3
Tagging Bodycode - Immune
No album ID found.
Search terms: Bodycode - Immune
Album might be VA: False
Evaluating 0 candidates.

/media/music/Bodycode/Immune/02_Hyperlight.mp3
/media/music/Non-Album/Bodycode/Hyperlight.mp3
/media/music/Bodycode/Immune/01 Meaning And Memory.mp3
/media/music/Bodycode/Immune/02 Hyperlight.mp3
/media/music/Bodycode/Immune/02 Hyperlight.2.mp3
/media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3
/media/music/Bodycode/Immune/03 I'll Hold Your Hand.2.mp3
/media/music/Bodycode/Immune/04 What Did You Say.mp3
/media/music/Bodycode/Immune/04 What Did You Say.2.mp3
/media/music/Bodycode/Immune/05 Imitation Lover.mp3
/media/music/Bodycode/Immune/05 Imitation Lover.2.mp3
/media/music/Bodycode/Immune/06 Arigato.mp3
/media/music/Bodycode/Immune/06 Arigato.1.mp3
/media/music/Bodycode/Immune/07 Subspace Radio.mp3
/media/music/Bodycode/Immune/07 Subspace Radio.1.mp3
/media/music/Bodycode/Immune/08 Spacial Harmonics.mp3
/media/music/Bodycode/Immune/08 Spacial Harmonics.1.mp3
/media/music/Bodycode/Immune/09 Immune.mp3
/media/music/Bodycode/Immune/09 Immune.1.mp3 (19 items)
Sending event: import_task_before_choice
Importing as-is.
Sending event: import_task_choice
Replacing item 52722: /media/music/Non-Album/Bodycode/Hyperlight.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17609: /media/music/Bodycode/Immune/01 Meaning And Memory.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17607: /media/music/Bodycode/Immune/02 Hyperlight.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17608: /media/music/Bodycode/Immune/02 Hyperlight.2.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17611: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17612: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.2.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17613: /media/music/Bodycode/Immune/04 What Did You Say.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17614: /media/music/Bodycode/Immune/04 What Did You Say.2.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17615: /media/music/Bodycode/Immune/05 Imitation Lover.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17616: /media/music/Bodycode/Immune/05 Imitation Lover.2.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17617: /media/music/Bodycode/Immune/06 Arigato.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17618: /media/music/Bodycode/Immune/06 Arigato.1.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17619: /media/music/Bodycode/Immune/07 Subspace Radio.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17620: /media/music/Bodycode/Immune/07 Subspace Radio.1.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17621: /media/music/Bodycode/Immune/08 Spacial Harmonics.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17622: /media/music/Bodycode/Immune/08 Spacial Harmonics.1.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17623: /media/music/Bodycode/Immune/09 Immune.mp3
Sending event: database_change
Sending event: item_removed
Replacing item 17624: /media/music/Bodycode/Immune/09 Immune.1.mp3
Sending event: database_change
Sending event: database_change
Sending event: album_removed
Sending event: item_removed
18 of 19 items replaced
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Reimported album 1581. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune
Reimported album 1581. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune
Reimported item 52723. Preserving attribute ['added']. Path: /media/music/Non-Album/Bodycode/Hyperlight.mp3
Reimported item 52723. Preserving flexible attributes []. Path: /media/music/Non-Album/Bodycode/Hyperlight.mp3
Sending event: database_change
Reimported item 52724. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/01 Meaning And Memory.mp3
Reimported item 52724. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/01 Meaning And Memory.mp3
Sending event: database_change
Reimported item 52725. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/02 Hyperlight.mp3
Reimported item 52725. Preserving flexible attributes ['ffmpeg']. Path: /media/music/Bodycode/Immune/02 Hyperlight.mp3
Sending event: database_change
Reimported item 52726. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/02 Hyperlight.2.mp3
Reimported item 52726. Preserving flexible attributes ['ffmpeg']. Path: /media/music/Bodycode/Immune/02 Hyperlight.2.mp3
Sending event: database_change
Reimported item 52727. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3
Reimported item 52727. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3
Sending event: database_change
Reimported item 52728. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.2.mp3
Reimported item 52728. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/03 I'll Hold Your Hand.2.mp3
Sending event: database_change
Reimported item 52729. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/04 What Did You Say.mp3
Reimported item 52729. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/04 What Did You Say.mp3
Sending event: database_change
Reimported item 52730. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/04 What Did You Say.2.mp3
Reimported item 52730. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/04 What Did You Say.2.mp3
Sending event: database_change
Reimported item 52731. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/05 Imitation Lover.mp3
Reimported item 52731. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/05 Imitation Lover.mp3
Sending event: database_change
Reimported item 52732. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/05 Imitation Lover.2.mp3
Reimported item 52732. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/05 Imitation Lover.2.mp3
Sending event: database_change
Reimported item 52733. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/06 Arigato.mp3
Reimported item 52733. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/06 Arigato.mp3
Sending event: database_change
Reimported item 52734. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/06 Arigato.1.mp3
Reimported item 52734. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/06 Arigato.1.mp3
Sending event: database_change
Reimported item 52735. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/07 Subspace Radio.mp3
Reimported item 52735. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/07 Subspace Radio.mp3
Sending event: database_change
Reimported item 52736. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/07 Subspace Radio.1.mp3
Reimported item 52736. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/07 Subspace Radio.1.mp3
Sending event: database_change
Reimported item 52737. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/08 Spacial Harmonics.mp3
Reimported item 52737. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/08 Spacial Harmonics.mp3
Sending event: database_change
Reimported item 52738. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/08 Spacial Harmonics.1.mp3
Reimported item 52738. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/08 Spacial Harmonics.1.mp3
Sending event: database_change
Reimported item 52739. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/09 Immune.mp3
Reimported item 52739. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/09 Immune.mp3
Sending event: database_change
Reimported item 52740. Preserving attribute ['added']. Path: /media/music/Bodycode/Immune/09 Immune.1.mp3
Reimported item 52740. Preserving flexible attributes []. Path: /media/music/Bodycode/Immune/09 Immune.1.mp3
Sending event: database_change
fetchart: trying source filesystem[default] for album Bodycode - Immune
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Parsed query: AndQuery([BooleanQuery('comp', 1, fast=True)])
Parsed sort: NullSort()
Parsed query: AndQuery([NoneQuery('album_id', True)])
Parsed sort: NullSort()
Parsed query: AndQuery([OrQuery([SubstringQuery('artist', 'albumtype_soundtrack', fast=True), SubstringQuery('title', 'albumtype_soundtrack', fast=True), SubstringQuery('comments', 'albumtype_soundtrack', fast=True), SubstringQuery('album', 'albumtype_soundtrack', fast=True), SubstringQuery('albumartist', 'albumtype_soundtrack', fast=True), SubstringQuery('genre', 'albumtype_soundtrack', fast=True)])])
Parsed sort: NullSort()
Sending event: before_item_moved
Sending event: item_moved
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: import_task_files
scrub: auto-scrubbing /media/music/Bodycode/Immune/02 Hyperlight.1.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/02 Hyperlight.3.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/01 Meaning And Memory.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/02 Hyperlight.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/02 Hyperlight.4.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/03 I'll Hold Your Hand.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/03 I'll Hold Your Hand.1.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/04 What Did You Say.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/04 What Did You Say.1.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/05 Imitation Lover.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/05 Imitation Lover.1.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/06 Arigato.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/06 Arigato.2.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/07 Subspace Radio.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/07 Subspace Radio.2.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/08 Spacial Harmonics.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/08 Spacial Harmonics.2.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/09 Immune.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
scrub: auto-scrubbing /media/music/Bodycode/Immune/09 Immune.2.mp3
scrub: writing new tags after scrub
Sending event: write
Sending event: after_write
scrub: restoring art
Sending event: album_imported
Sending event: import
Sending event: cli_exit

# Checking DB
root@beets:~ # sqlite3 /root/.config/beets/library.db
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
sqlite> select * from item_attributes;
1|37529|data_source|MusicBrainz
2|52725|ffmpeg|CRC=0x17e9b4f7

3|52726|ffmpeg|
sqlite> .exit

## surprised by the new id's - see the import step - a lot of recalculation

```

```
I had sometimes files taking 15min to import
```

### Setup
```
root@beets:~ # beets version
beets version 2.5.1
Python version 3.11.13
plugins: convert, duplicates, embedart, fetchart, info, scrub, web
root@beets:~ #

```

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

```yaml
directory: /media/music
library: ~/.config/beets/library.db
logging:
level: DEBUG

# ------------------------------------------------------------------
import:
move: yes # relocate files into /media/music
copy: no
autotag: yes
assume_album: yes
singletons: yes
none_rec_action: asis
duplicate_action: merge
incremental: yes
incremental_skip_later: yes
write: yes
languages: [en]
auto: yes

acoustid:
apikey: ...

match:
strong_rec_thresh: 0.30 # a bit stricter than default
medium_rec_thresh: 0.10
preferred:
countries: ['US', 'GB|UK', 'DE']
media: ['CD', 'Digital Media|File']
original_year: yes

# ------------------------------------------------------------------
paths: # tidy, deterministic layout
default: $albumartist/$album%aunique{}/$track $title
comp: Compilations/$album/$track $title
singleton: Non-Album/$artist/$title
albumtype_soundtrack: Soundtracks/$album/$track $title

# ------------------------------------------------------------------
plugins: [
info,
duplicates,
convert,
web,
fetchart, # optional quality-of-life extras
embedart,
scrub,
]

# --- duplicates configuration ---
duplicates:
strict: true

# authoritative grouping order
keys:
- checksum # exact decoded audio match
- acoustid_id # same recording, different releases
- mb_albumid # exact album duplicate
- artist
- album
- title

# content-based fingerprint
checksum: "ffmpeg -v error -i {file} -map 0:a -f crc -"

# never auto-delete
delete: false
move: /media/music/_duplicates
full: true
path: true

# deterministic best-version selection
tiebreak:
items:
- lossless # True > False
- bits_per_sample # 32 > 24 > 16
- samplerate # 192k > 96k > 48k > 44.1k
- bitrate # higher kbps
- added # earliest import wins last

info:
fields:
- title
- artist
- album
- albumartist
- track
- length
- bitrate
- samplerate
- bits_per_sample
- format
- lossless
- added
- path
- mb_trackid
- mb_albumid
- acoustid_id
- checksum
- ffmpeg

convert:
auto: yes
format: flac

threads: 2
keep_original: no
never_convert_lossy_files: yes
copy_album_art: yes
command: ffmpeg -i "$source" -y -vn -acodec flac "$dest"

replaygain:
backend: ffmpeg # or loudgain / bs1770gain if you prefer
auto: yes
overwrite: no
per_disc: no
targetlevel: 89
threads: 2

web:
host: 0.0.0.0
port: 8337

# ------------------------------------------------------------------

```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the two `beet -vv import -p` commands with the whitespace and underscore paths, then compare their duplicate and reimport behavior in `library.db`. Trace the import and duplicate-handling entry points shown by the verbose logs and define done as preventing an unrelated album from being replaced while preserving the intended import result.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, sqlite
Domain
cli, database
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.