beets
beets copied to clipboard
Using auto: yes in convert fails imports for any music file
Problem
Running this command in verbose (-vv) mode:
$ beet -vv import "almost monday"
Led to this problem:
Command Output
➜ [A]pply, More candidates, Skip, Use as-is, Enter search, enter Id, aBort?
Sending event: import_task_choice
Sending event: import_task_apply
0 of 1 items replaced
Sending event: database_change
Parsed query: OrQuery([AndQuery([SubstringQuery('format', 'MP3', fast=True)]), AndQuery([SubstringQuery('format', 'FLAC', fast=True)]), AndQuery([SubstringQuery('format', 'OPUS', fast=True)])])
Parsed sort: NullSort()
convert: Encoding /home/user/.var/app/com.usebottles.bottles/data/bottles/bottles/iTunes/drive_c/users/steamuser/Music/iTunes/iTunes Media/Music/almost monday/only wanna dance - Single/01 only wanna dance.m4a
convert: Finished encoding /home/user/.var/app/com.usebottles.bottles/data/bottles/bottles/iTunes/drive_c/users/steamuser/Music/iTunes/iTunes Media/Music/almost monday/only wanna dance - Single/01 only wanna dance.m4a
Sending event: write
Traceback (most recent call last):
File "/home/user/.beet-venv/lib/python3.13/site-packages/mediafile.py", line 132, in mutagen_call
return func(*args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_util.py", line 164, in wrapper_func
return func(h, *args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_file.py", line 302, in File
return Kind(fileobj, filename=filething.filename)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_file.py", line 48, in __init__
self.load(*args, **kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_util.py", line 156, in wrapper
return func(self, h, *args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/id3/_file.py", line 420, in load
self.info = self._Info(fileobj, offset)
~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_util.py", line 185, in wrapper
return func(*args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/mp3/__init__.py", line 401, in __init__
raise HeaderNotFoundError("can't sync to MPEG frame")
mutagen.mp3.HeaderNotFoundError: can't sync to MPEG frame
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/library/models.py", line 969, in write
mediafile = MediaFile(syspath(path), id3v23=id3v23)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mediafile.py", line 160, in wrapper
return mutagen_call('loadfile', '', f, *args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mediafile.py", line 132, in mutagen_call
return func(*args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mutagen/_util.py", line 156, in wrapper
return func(self, h, *args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/mediafile.py", line 1540, in __init__
self.mgfile = mutagen_call(
~~~~~~~~~~~~^
'open', self.filename, mutagen.File, filething
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/user/.beet-venv/lib/python3.13/site-packages/mediafile.py", line 135, in mutagen_call
raise UnreadableFileError(filename, str(exc))
mediafile.UnreadableFileError: can't sync to MPEG frame
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/ui/__init__.py", line 1713, in main
_raw_main(args)
~~~~~~~~~^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/ui/__init__.py", line 1692, in _raw_main
subcommand.func(lib, suboptions, subargs)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/ui/commands.py", line 1378, in import_func
import_files(lib, byte_paths, query)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/ui/commands.py", line 1322, in import_files
session.run()
~~~~~~~~~~~^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/importer/session.py", line 234, in run
pl.run_parallel(QUEUE_SIZE)
~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/util/pipeline.py", line 468, in run_parallel
raise exc_info[1].with_traceback(exc_info[2])
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/util/pipeline.py", line 333, in run
out = self.coro.send(msg)
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/util/pipeline.py", line 216, in coro
func(*(args + (task,)))
~~~~^^^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/importer/stages.py", line 247, in plugin_stage
func(session, task)
~~~~^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/plugins.py", line 329, in wrapper
return func(*args, **kwargs)
File "/home/user/.beet-venv/lib/python3.13/site-packages/beetsplug/convert.py", line 245, in auto_convert
par_map(
~~~~~~~^
lambda item: self.convert_on_import(config.lib, item),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
task.imported_items(),
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/util/__init__.py", line 1050, in par_map
pool.map(transform, items)
~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/multiprocessing/pool.py", line 367, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/multiprocessing/pool.py", line 774, in get
raise self._value
File "/usr/lib/python3.13/multiprocessing/pool.py", line 125, in worker
result = (True, func(*args, **kwds))
~~~~^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/multiprocessing/pool.py", line 48, in mapstar
return list(map(*args))
File "/home/user/.beet-venv/lib/python3.13/site-packages/beetsplug/convert.py", line 246, in <lambda>
lambda item: self.convert_on_import(config.lib, item),
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beetsplug/convert.py", line 665, in convert_on_import
item.write()
~~~~~~~~~~^^
File "/home/user/.beet-venv/lib/python3.13/site-packages/beets/library/models.py", line 971, in write
raise ReadError(path, exc)
beets.library.exceptions.ReadError: error reading <super: <class 'ReadError'>, <ReadError object>>
error reading <super: <class 'ReadError'>, <ReadError object>>
Here's a link to the music files that trigger the bug (if relevant): This happens with any music file I give it.
Setup
- OS: Kubuntu 25.04
- Python version: 3.13.3
- beets version: 2.5.1
- Turning off plugins made problem go away (yes/no): no - I disabled every plugin but
convertand still have this issue
My configuration (output of beet config) is:
directory: /music/Library
library: /music/beets/musiclibrary.db
artist_credit: no
replace: {
"“": '',
"”": '',
'"': "",
"’": "'",
# remove ascii control characters
'[\x00-\x1f]': "_",
# spaces at the beginning and and
'\s+$': "",
'^\s+': "",
":": "",
"\\?": "",
}
import:
move: yes
bell: yes
timid: yes
paths:
default: $albumartist/$album%aunique{}/$track $title
singleton: $artist/Singles/$title
comp: Compilations/$album%aunique{}/$track $title
plugins:
- convert
convert:
auto: yes
format: mp3
dest: /music/Originals
max_bitrate: 256
no_convert: "format:MP3 , format:FLAC , format:OPUS"
delete_originals: true
formats:
mp3:
command: ffmpeg -i $source -hide_banner -loglevel error -acodec libmp3lame -ar 44100 -b:a 256k -vn $dest
extension: mp3
aac:
command: ffmpeg -i $source -c:a aac -b:a 256k -c:v copy -map_metadata 0 -map 0:a -map 0:v? -disposition:v:0 attached_pic $dest
extension: m4a
If I set convert's config to use auto: no, import works fine.