Stability-AI/generative-models · error · ValueError

unknown discretization {params.discretization}

Error message

unknown discretization {params.discretization}

What it means

get_discretization_config maps the `discretization` field of SamplingParams to a known discretization config builder (DDPM, EDM, etc.). If the string is not one of the recognized values, it raises this ValueError. It is a config-validation failure inside sampler construction.

Source

Thrown at sgm/inference/api.py:299

    return guider_config


def get_discretization_config(params: SamplingParams):
    if params.discretization == Discretization.LEGACY_DDPM:
        discretization_config = {
            "target": "sgm.modules.diffusionmodules.discretizer.LegacyDDPMDiscretization",
        }
    elif params.discretization == Discretization.EDM:
        discretization_config = {
            "target": "sgm.modules.diffusionmodules.discretizer.EDMDiscretization",
            "params": {
                "sigma_min": params.sigma_min,
                "sigma_max": params.sigma_max,
                "rho": params.rho,
            },
        }
    else:
        raise ValueError(f"unknown discretization {params.discretization}")
    return discretization_config


def get_sampler_config(params: SamplingParams):
    discretization_config = get_discretization_config(params)
    guider_config = get_guider_config(params)
    sampler = None
    if params.sampler == Sampler.EULER_EDM:
        return EulerEDMSampler(
            num_steps=params.steps,
            discretization_config=discretization_config,
            guider_config=guider_config,
            s_churn=params.s_churn,
            s_tmin=params.s_tmin,
            s_tmax=params.s_tmax,
            s_noise=params.s_noise,
            verbose=True,
        )

View on GitHub (pinned to e8cd657656)

Solutions

  1. Set discretization to one of the supported strings in SamplingParams (see sgm/inference/api.py, e.g. "ddpm", "edm").
  2. Check the if/elif chain in get_discretization_config for the exact accepted values and match one exactly.
  3. If you need a new discretization, add an elif branch constructing the corresponding config object instead of inventing a string.

Example fix

// before
params = SamplingParams(sampler="ddim", discretization="ddim")
// after
params = SamplingParams(sampler="ddim", discretization="ddpm")  # accepted value
Defensive patterns

Strategy: validation

Validate before calling

VALID_DISCRETIZATIONS = {"ddpm", "edm"}  # per sgm/inference/api.py
assert params.discretization in VALID_DISCRETIZATIONS, \
    f"{params.discretization!r} not in {VALID_DISCRETIZATIONS}"

Type guard

Discretization = Literal["ddpm", "edm"]
def is_valid_discretization(x: str) -> bool:
    return x in get_args(Discretization)

Try / catch

try:
    out = text_to_image(params=params)
except ValueError as e:
    if "unknown discretization" in str(e):
        params.discretization = "edm"  # safe default
        out = text_to_image(params=params)

Prevention

When it happens

Trigger: Calling text_to_image/image_to_image with SamplingParams where discretization is set to an unrecognized string (e.g. "ddim", "v", typo like "edm-2"), or passing a raw SamplingParams object into get_sampler_config with a bogus discretization value.

Common situations: Renaming fields when copying examples from another diffusers/ldm codebase; typos like "ddm" vs "ddpm"; constructing SamplingParams programmatically with a variable that is None or misnamed.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of Stability-AI/generative-models@e8cd657656 (2026-08-29). Data as JSON: /api/errors/a0402294281dce88. Report an issue: GitHub.