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

  1. Set every cfg_scale value to >= 1 (e.g. 7.5 or [7.5, 6.0]).
  2. If you want weaker guidance, use a value slightly above 1 rather than below.
  3. 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

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


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/276ff97df909ab9c. Report an issue: GitHub.