invoke-ai/InvokeAI · error · ValueError
cfg_scale must be greater than 1
Error message
cfg_scale must be greater than 1
What it means
The DenoiseLatents invocation validates that every classifier-free-guidance scale value is >= 1 via a pydantic field_validator. CFG below 1 would invert the guidance direction, which InvokeAI considers invalid, so a single float below 1 raises this ValueError at model validation time.
Source
Thrown at invokeai/app/invocations/denoise_latents.py:245
default=None,
description=FieldDescriptions.latents,
input=Input.Connection,
ui_order=4,
)
denoise_mask: Optional[DenoiseMaskField] = InputField(
default=None,
description=FieldDescriptions.denoise_mask,
input=Input.Connection,
ui_order=8,
)
@field_validator("cfg_scale")
def ge_one(cls, v: Union[List[float], float]) -> Union[List[float], float]:
"""validate that all cfg_scale values are >= 1"""
if isinstance(v, list):
for i in v:
if i < 1:
raise ValueError("cfg_scale must be greater than 1")
else:
if v < 1:
raise ValueError("cfg_scale must be greater than 1")
return v
@staticmethod
def _get_text_embeddings_and_masks(
cond_list: list[ConditioningField],
context: InvocationContext,
device: torch.device,
dtype: torch.dtype,
) -> tuple[Union[list[BasicConditioningInfo], list[SDXLConditioningInfo]], list[Optional[torch.Tensor]]]:
"""Get the text embeddings and masks from the input conditioning fields."""
text_embeddings: Union[list[BasicConditioningInfo], list[SDXLConditioningInfo]] = []
text_embeddings_masks: list[Optional[torch.Tensor]] = []
for cond in cond_list:
cond_data = context.conditioning.load(cond.conditioning_name)
text_embeddings.append(cond_data.conditionings[0].to(device=device, dtype=dtype))View on GitHub (pinned to 0b6a024f2f)
Solutions
- Raise cfg_scale to a value >= 1 (typically 6-12 for SD)
- Check each element if passing a list — remove or raise any element below 1
- If you truly want unguided output, set cfg_scale = 1 (equivalent to no CFG) rather than < 1
Example fix
// before DenoiseLatents(cfg_scale=0.75, ...) // after DenoiseLatents(cfg_scale=1.0, ...) # or higher, e.g. 7.5
Defensive patterns
Strategy: validation
Validate before calling
values = cfg_scale if isinstance(cfg_scale, list) else [cfg_scale]
if any(v < 1 for v in values):
raise ValueError("all cfg_scale values must be >= 1") Type guard
def is_valid_cfg(cfg: object) -> bool:
if isinstance(cfg, list):
return all(isinstance(v, (int, float)) and v >= 1 for v in cfg)
return isinstance(cfg, (int, float)) and cfg >= 1 Try / catch
try:
denoise = DenoiseLatents(cfg_scale=cfg, ...)
except pydantic.ValidationError as e:
cfg = max(cfg, 1.0)
denoise = DenoiseLatents(cfg_scale=cfg, ...) Prevention
- Clamp cfg_scale to >= 1 in any UI or API wrapper
- Validate list elements individually, not just the container
- Use cfg_scale = 1 for unguided generation instead of values below 1
When it happens
Trigger: Constructing a DenoiseLatents with `cfg_scale` < 1 as a plain float; passing a list of cfg_scale values where any single element is < 1 (list branch at this line).
Common situations: Users experimenting with negative/low CFG borrowed from other tools (some samplers allow cfg<1); API clients submitting per-step CFG lists where one entry is wrong; UI defaults carried over from libraries that permit cfg 0.x.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- x_min ({self.x_min}) is greater than x_max ({self.x_max}).
- The Anima ControlNet-LLLite model '{lllite_field.control_mod
- This Anima ControlNet-LLLite adapter is an inpainting adapte
- Unsupported Anima ControlNet-LLLite adapter: expected 3 or 4
- stop must be greater than start
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/db122b97c3fd08a2.
Report an issue: GitHub.