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 tiled multi-diffusion denoise invocation validates cfg_scale via a pydantic field_validator requiring every value to be >= 1 (a pydantic field_validator). CFG scales below 1 are outside the sampler's supported range for this node, so input validation fails before invoke.
Source
Thrown at invokeai/app/invocations/tiled_multi_diffusion_denoise_latents.py:136
description=FieldDescriptions.unet,
input=Input.Connection,
title="UNet",
)
cfg_rescale_multiplier: float = InputField(
title="CFG Rescale Multiplier", default=0, ge=0, lt=1, description=FieldDescriptions.cfg_rescale_multiplier
)
control: ControlField | list[ControlField] | None = InputField(
default=None,
input=Input.Connection,
)
@field_validator("cfg_scale")
def ge_one(cls, v: list[float] | float) -> 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 create_pipeline(
unet: UNet2DConditionModel,
scheduler: SchedulerMixin,
) -> MultiDiffusionPipeline:
# TODO(ryand): Get rid of this FakeVae hack.
class FakeVae:
class FakeVaeConfig:
def __init__(self) -> None:
self.block_out_channels = [0]
def __init__(self) -> None:
self.config = FakeVae.FakeVaeConfig()View on GitHub (pinned to 0b6a024f2f)
Solutions
- Set every cfg_scale value to >= 1 (e.g. 7.5 or [7.5, 6.0]).
- If you want weaker guidance, use a value slightly above 1 rather than below.
- Sanitize user/batch inputs before building the node payload to clamp values to >= 1.
Example fix
// before cfg_scale = [7.5, 0.8] // after cfg_scale = [7.5, 1.0]
Defensive patterns
Strategy: validation
Validate before calling
cfg = node.cfg_scale
values = cfg if isinstance(cfg, list) else [cfg]
if any(v < 1 for v in values):
raise ValueError("All cfg_scale values must be >= 1") Type guard
def cfg_scale_valid(v) -> bool:
values = v if isinstance(v, list) else [v]
return all(x >= 1 for x in values) Try / catch
try:
result = invoke(context)
except ValueError as e:
if "cfg_scale" in str(e):
clamp_cfg_scale(node, minimum=1.0)
retry(context)
else:
raise Prevention
- Clamp user-entered CFG values to >= 1 in client code
- Check every element of cfg_scale lists, not just the first
- Never set CFG below 1 for tiled multi-diffusion denoise
When it happens
Trigger: Passing a scalar cfg_scale < 1 or a list containing any value < 1 to the Tiled Multi-Diffusion Denoise Latents node — e.g. cfg_scale 0.5, or [7.0, 0.8].
Common situations: Users experimenting with negative/low CFG guidance; UI/API payloads crafted without client-side checks; batch lists where one entry was accidentally set below 1.
Related errors
- cfg_scale values must be finite.
- stop must be greater than start
- cfg_scale must be greater than 1
- Face IDs must be a comma-separated list of integers (e.g. "1
- Unsupported cfg_scale type: {type(cfg_scale)}
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/276ff97df909ab9c.
Report an issue: GitHub.