huggingface/transformers · error · ValueError
Unknown log_mel option: {log_mel}
Error message
Unknown log_mel option: {log_mel} What it means
Thrown by `spectrogram` when `log_mel` is not one of "log", "log10", or "dB" while `power` is not None. The log_mel parameter selects the post-processing applied to the mel spectrogram; an unrecognized string cannot be applied, so the function raises after the spectrogram has been computed but before returning.
Source
Thrown at src/transformers/audio_utils.py:1013
spectrogram = spectrogram.T
if mel_filters is not None:
spectrogram = np.maximum(mel_floor, np.dot(mel_filters.T, spectrogram))
if power is not None and log_mel is not None:
if log_mel == "log":
spectrogram = np.log(spectrogram)
elif log_mel == "log10":
spectrogram = np.log10(spectrogram)
elif log_mel == "dB":
if power == 1.0:
spectrogram = amplitude_to_db(spectrogram, reference, min_value, db_range)
elif power == 2.0:
spectrogram = power_to_db(spectrogram, reference, min_value, db_range)
else:
raise ValueError(f"Cannot use log_mel option '{log_mel}' with power {power}")
else:
raise ValueError(f"Unknown log_mel option: {log_mel}")
spectrogram = np.asarray(spectrogram, dtype)
return spectrogram
def spectrogram_batch(
waveform_list: list[np.ndarray],
window: np.ndarray,
frame_length: int,
hop_length: int,
fft_length: int | None = None,
power: float | None = 1.0,
center: bool = True,
pad_mode: str = "reflect",
onesided: bool = True,
dither: float = 0.0,
preemphasis: float | None = None,View on GitHub (pinned to a597f97485)
Solutions
- Use exactly one of "log", "log10", or "dB"
- Set log_mel=None if you want the raw (mel) spectrogram without log compression
- Fix the config/preprocessor override that supplies the invalid string
Example fix
// before spec = spectrogram(waveform, window, 400, 160, power=2.0, mel_filters=mel, log_mel="db") # ValueError // after spec = spectrogram(waveform, window, 400, 160, power=2.0, mel_filters=mel, log_mel="dB")
Defensive patterns
Strategy: validation
Validate before calling
VALID_LOG_MEL = {None, "log", "log10", "dB"}
if log_mel not in VALID_LOG_MEL:
raise ValueError(f"log_mel must be one of {sorted(v for v in VALID_LOG_MEL if v)}, got {log_mel!r}")
spec = spectrogram(waveform, window, frame_length, hop_length, power=2.0, mel_filters=mel, log_mel=log_mel) Type guard
def is_valid_log_mel(v) -> bool:
return v is None or v in {"log", "log10", "dB"} Try / catch
try:
spec = spectrogram(..., log_mel=log_mel)
except ValueError as e:
if "Unknown log_mel option" in str(e):
spec = spectrogram(..., log_mel="log")
else:
raise Prevention
- Match the pretrained model's log_mel string exactly (case-sensitive)
- Map other toolkits' names ('db'->'dB', 'ln'->'log') when porting
- Set log_mel=None when no log compression is wanted
When it happens
Trigger: Calling `spectrogram(..., log_mel="ln")`, `log_mel="dBFS"`, `log_mel="Log"` (capitalized), or any typo, together with a non-None power. Feature-extractor configs that carry a log-mel mode string hit this if the vocabulary differs.
Common situations: Porting mode names from librosa/torchaudio (e.g. "log_mels", "db"); casing or abbreviation mistakes in JSON configs; values copied from another model's preprocessor config.
Related errors
- mel_scale should be one of "htk", "slaney" or "kaldi".
- norm must be one of None or "slaney"
- Require num_frequency_bins: {num_frequency_bins} >= 2
- Require min_frequency: {min_frequency} <= max_frequency: {ma
- You have provided `mel_filters` but `power` is `None`. Mel s
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/9758809b90e8bd67.
Report an issue: GitHub.