huggingface/transformers · error · ValueError

Unknown log_mel option

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.

Solutions

  1. Use exactly one of "log", "log10", or "dB"
  2. Set log_mel=None if you want the raw (mel) spectrogram without log compression
  3. 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

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


AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14). Data as JSON: /api/errors/9758809b90e8bd67. Report an issue: GitHub.

Appendix: 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)