invoke-ai/InvokeAI · error · ValueError
cfg_scale values must be finite.
Error message
cfg_scale values must be finite.
What it means
The Krea2 denoise invocation is a pydantic model with a field_validator on cfg_scale that rejects any non-finite value (NaN or ±Infinity), whether cfg_scale is a single float or a list of per-step floats. Non-finite guidance scales would poison the denoising math, so validation fails at model construction time with 'cfg_scale values must be finite.'
Source
Thrown at invokeai/app/invocations/krea2_denoise.py:106
# CFG uses the standard formulation (uncond + cfg_scale*(cond-uncond)); cfg_scale <= 1 disables it.
# Krea-2-Turbo is distilled and runs with CFG disabled (cfg_scale=1.0).
cfg_scale: float | list[float] = InputField(default=1.0, description=FieldDescriptions.cfg_scale, title="CFG Scale")
width: int = InputField(default=1024, gt=0, multiple_of=16, description="Width of the generated image.")
height: int = InputField(default=1024, gt=0, multiple_of=16, description="Height of the generated image.")
steps: int = InputField(default=8, gt=0, description=FieldDescriptions.steps)
seed: int = InputField(default=0, description="Randomness seed for reproducibility.")
shift: Optional[float] = InputField(
default=None,
description="Override the resolution-aware timestep shift (mu). Leave unset to use the model default "
"(mu=1.15 for the distilled Turbo checkpoint).",
)
@field_validator("cfg_scale")
@classmethod
def validate_cfg_scale_is_finite(cls, value: float | list[float]) -> float | list[float]:
values = value if isinstance(value, list) else [value]
if not all(math.isfinite(item) for item in values):
raise ValueError("cfg_scale values must be finite.")
return value
@field_validator("shift")
@classmethod
def validate_shift_is_finite(cls, value: float | None) -> float | None:
if value is not None and not math.isfinite(value):
raise ValueError("shift must be finite.")
return value
@torch.no_grad()
def invoke(self, context: InvocationContext) -> LatentsOutput:
latents = self._run_diffusion(context)
latents = latents.detach().to("cpu")
name = context.tensors.save(tensor=latents)
return LatentsOutput.build(latents_name=name, latents=latents, seed=None)
def _prep_inpaint_mask(self, context: InvocationContext, latents: torch.Tensor) -> torch.Tensor | None:
if self.denoise_mask is None:View on GitHub (pinned to 0b6a024f2f)
Solutions
- Set cfg_scale to a finite positive float (or list of finite floats), e.g. 1.0–10.0.
- Fix the upstream computation producing NaN/inf before it reaches cfg_scale.
- Parse JSON with parse_constant rejecting NaN/Infinity so bad payloads fail early with a clearer message.
Example fix
// before
cfg_scale=float("inf") # or [1.0, float("nan")]
// after
cfg_scale=7.5 # or [1.0, 7.5, 3.0] Defensive patterns
Strategy: validation
Validate before calling
import math
def cfg_scale_ok(v) -> bool:
vals = v if isinstance(v, list) else [v]
return all(isinstance(x, float) and math.isfinite(x) for x in vals) Type guard
def is_finite_number(x: object) -> bool:
return isinstance(x, (int, float)) and math.isfinite(x) Try / catch
try:
node = Krea2DenoiseInvocation(**params)
except ValueError as e:
if "cfg_scale values must be finite" in str(e):
params["cfg_scale"] = 7.5
node = Krea2DenoiseInvocation(**params) Prevention
- Validate cfg_scale with math.isfinite before building the graph.
- Compute guidance scale with zero-division guards.
- Configure JSON parsing to reject NaN/Infinity literals (json.loads(..., parse_constant=...)).
When it happens
Trigger: Constructing or deserializing a Krea2 denoise invocation (via graph submission or the API) with cfg_scale=nan, cfg_scale=float('inf'), or a list containing any NaN/inf element.
Common situations: Programmatic graph generation computing cfg_scale from upstream math that produced NaN; JSON payloads with 'NaN'/'Infinity' literals (Python's json accepts these by default); config interpolation bugs.
Related errors
- shift must be finite.
- per_layer_weights must be comma-separated numbers: {e}
- per_layer_weights must have exactly {_NUM_TEXT_LAYERS} value
- per_layer_weights must contain only finite values.
- At least one Krea-2 conditioning is required.
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/5fabaf4d55401bf7.
Report an issue: GitHub.