Skip to content

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

@til2000

Description

@til2000

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

Problem

  # 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:

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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions