microsoft/VibeVoice · error · ValueError

Cannot use `timesteps` with `config.use_lu_lambdas = True`

Error message

Cannot use `timesteps` with `config.use_lu_lambdas = True`

What it means

Custom `timesteps` conflict with `use_lu_lambdas=True`: the Lu schedule derives sigmas from a log-linear interpolation of the model's lambda(t) values and then back-maps them to timesteps, so a hand-supplied timestep list cannot coexist with it. `set_timesteps` enforces this with a ValueError, mirroring diffusers.

Source

Thrown at vibevoice/schedule/dpm_solver.py:347

        Args:
            num_inference_steps (`int`):
                The number of diffusion steps used when generating samples with a pre-trained model.
            device (`str` or `torch.device`, *optional*):
                The device to which the timesteps should be moved to. If `None`, the timesteps are not moved.
            timesteps (`List[int]`, *optional*):
                Custom timesteps used to support arbitrary timesteps schedule. If `None`, timesteps will be generated
                based on the `timestep_spacing` attribute. If `timesteps` is passed, `num_inference_steps` and `sigmas`
                must be `None`, and `timestep_spacing` attribute will be ignored.
        """
        if num_inference_steps is None and timesteps is None:
            raise ValueError("Must pass exactly one of `num_inference_steps` or `timesteps`.")
        if num_inference_steps is not None and timesteps is not None:
            raise ValueError("Can only pass one of `num_inference_steps` or `custom_timesteps`.")
        if timesteps is not None and self.config.use_karras_sigmas:
            raise ValueError("Cannot use `timesteps` with `config.use_karras_sigmas = True`")
        if timesteps is not None and self.config.use_lu_lambdas:
            raise ValueError("Cannot use `timesteps` with `config.use_lu_lambdas = True`")

        if timesteps is not None:
            timesteps = np.array(timesteps).astype(np.int64)
        else:
            # Clipping the minimum of all lambda(t) for numerical stability.
            # This is critical for cosine (squaredcos_cap_v2) noise schedule.
            clipped_idx = torch.searchsorted(torch.flip(self.lambda_t, [0]), self.config.lambda_min_clipped)
            last_timestep = ((self.config.num_train_timesteps - clipped_idx).numpy()).item()

            # "linspace", "leading", "trailing" corresponds to annotation of Table 2. of https://arxiv.org/abs/2305.08891
            if self.config.timestep_spacing == "linspace":
                timesteps = (
                    np.linspace(0, last_timestep - 1, num_inference_steps + 1)
                    .round()[::-1][:-1]
                    .copy()
                    .astype(np.int64)
                )
            elif self.config.timestep_spacing == "leading":

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Set `use_lu_lambdas=False` when you need custom timesteps.
  2. Or keep Lu lambdas and call `set_timesteps(num_inference_steps=N)`.
  3. Audit scheduler config defaults merged from files so use_lu_lambdas is not silently True.

Example fix

# before
sched = DPMSolverMultistepScheduler(..., use_lu_lambdas=True)
sched.set_timesteps(timesteps=[880, 600, 200])

# after
sched = DPMSolverMultistepScheduler(..., use_lu_lambdas=False)
sched.set_timesteps(timesteps=[880, 600, 200])
Defensive patterns

Strategy: validation

Validate before calling

if timesteps is not None and scheduler.config.use_lu_lambdas:
    raise ValueError("Custom timesteps require a scheduler built with use_lu_lambdas=False")
scheduler.set_timesteps(num_inference_steps=n, timesteps=timesteps)

Type guard

def can_use_custom_timesteps(scheduler) -> bool:
    return not (scheduler.config.use_karras_sigmas or scheduler.config.use_lu_lambdas)

Prevention

When it happens

Trigger: `DPMSolverMultistepScheduler(..., use_lu_lambdas=True)` followed by `scheduler.set_timesteps(timesteps=[...])`.

Common situations: Config templates that enable Lu lambdas for quality while a pipeline branch (e.g. audio editing / partial denoising) supplies explicit timesteps; porting diffusers img2img code into vibevoice.

Related errors


AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15). Data as JSON: /api/errors/affd132ffc024640. Report an issue: GitHub.