deezer/spleeter · error · SpleeterError
{adapter_class_name} is not a valid AudioAdapter class
Error message
{adapter_class_name} is not a valid AudioAdapter class What it means
`AudioAdapter.get(descriptor)` resolves a dotted descriptor like `spleeter.audio.ffmpeg.FFMPEGAudioAdapter` by importing the module and fetching the class. If the resolved class is not a subclass of `AudioAdapter`, a `SpleeterError` is raised. This guards against descriptors pointing at arbitrary non-adapter classes.
Source
Thrown at spleeter/audio/adapter.py:197
Load dynamically an AudioAdapter from given class descriptor.
Parameters:
descriptor (str):
Adapter class descriptor (module.Class)
Returns:
AudioAdapter:
Created adapter instance.
"""
if not descriptor:
return cls.default()
module_desc: List[str] = descriptor.split(".")
adapter_class_name: str = module_desc[-1]
module_path: str = ".".join(module_desc[:-1])
adapter_module = import_module(module_path)
adapter_class = getattr(adapter_module, adapter_class_name)
if not issubclass(adapter_class, AudioAdapter):
raise SpleeterError(
f"{adapter_class_name} is not a valid AudioAdapter class"
)
return adapter_class()
View on GitHub (pinned to c8854001ac)
Solutions
- Use the correct descriptor, e.g. `AudioAdapter.get('spleeter.audio.ffmpeg.FFMPEGAudioAdapter')`
- If writing a custom adapter, make it inherit from `spleeter.audio.adapter.AudioAdapter` and implement its abstract methods
- Check for typos or swapped module/class parts in the dotted descriptor
Example fix
// before
AudioAdapter.get('spleeter.audio.ffmpeg.FFMPEG') # not an AudioAdapter
// after
AudioAdapter.get('spleeter.audio.ffmpeg.FFMPEGAudioAdapter') Defensive patterns
Strategy: validation
Validate before calling
from spleeter.audio.adapter import AudioAdapter
descriptor = 'spleeter.audio.ffmpeg.FFMPEGAudioAdapter'
module_name, _, class_name = descriptor.rpartition('.')
cls = getattr(__import__(module_name, fromlist=[class_name]), class_name)
assert issubclass(cls, AudioAdapter), f'{class_name} is not an AudioAdapter'
adapter = AudioAdapter.get(descriptor) Type guard
from spleeter.audio.adapter import AudioAdapter
def is_audio_adapter(obj) -> bool:
return isinstance(obj, type) and issubclass(obj, AudioAdapter) Try / catch
from spleeter.audio.adapter import AudioAdapter
from spleeter.utils.logging import SpleeterError # or spleeter SpleeterError location
try:
adapter = AudioAdapter.get(descriptor)
except Exception as e:
if 'is not a valid AudioAdapter class' in str(e):
adapter = AudioAdapter.default()
else:
raise Prevention
- Only use documented descriptors (e.g. spleeter.audio.ffmpeg.FFMPEGAudioAdapter)
- Subclass AudioAdapter when writing custom adapters
- Validate adapter strings from configs against issubclass before calling get()
When it happens
Trigger: Calling `AudioAdapter.get('some.module.SomeClass')` where SomeClass exists but does not inherit from `AudioAdapter` (e.g. pointing at a module, a function, or an unrelated class).
Common situations: Typos in the class-name portion of the descriptor, passing a custom adapter that forgot to subclass `AudioAdapter`, or config-driven adapter strings built dynamically.
Related errors
- No model function {model_type} found
- Unkwnown loss type: {loss_type}
- Invalid mask_extension parameter {extension}
- F is too large and must be set to at most frame_length/2+1.
- T is too large considering STFT parameters and chunk duratoi
AI-assisted analysis of deezer/spleeter@c8854001ac (2026-08-28).
Data as JSON: /api/errors/cf4ba4b6f410008a.
Report an issue: GitHub.