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
- Set discretization to one of the supported strings in SamplingParams (see sgm/inference/api.py, e.g. "ddpm", "edm").
- Check the if/elif chain in get_discretization_config for the exact accepted values and match one exactly.
- 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
- Define SamplingParams with Literal/enum-typed discretization fields.
- Copy accepted values from the if/elif chain in get_discretization_config.
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
- unknown sampler {params.sampler}!
- Model {model_id} not supported
- Sampler and loss function need to be set for training.
- unsupported dimensions: {dims}
- unknown merge strategy {self.merge_strategy}
AI-assisted analysis of Stability-AI/generative-models@e8cd657656 (2026-08-29).
Data as JSON: /api/errors/a0402294281dce88.
Report an issue: GitHub.