Comfy-Org/ComfyUI · error · RuntimeError

SeedVR2Conditioning: model object does not match expected Se

Error message

SeedVR2Conditioning: model object does not match expected SeedVR2 structure: 'model.model.diffusion_model' is None (model.model type {type(inner).__name__}).

What it means

The innermost SeedVR2 structure check: input.model.diffusion_model exists as an attribute but is None. The resolver requires a live diffusion model instance to configure conditioning, so a present-but-None value means the wrapper was constructed but the network was never attached or was cleared.

Source

Thrown at comfy_extras/nodes_seedvr.py:55

    inner = getattr(model, "model", _ATTR_MISSING)
    if inner is _ATTR_MISSING:
        raise RuntimeError(
            f"{_SEEDVR2_INVALID_MODEL_MSG_PREFIX}: input has no 'model' attribute "
            f"(got type {type(model).__name__})."
        )
    if inner is None:
        raise RuntimeError(
            f"{_SEEDVR2_INVALID_MODEL_MSG_PREFIX}: input.model is None "
            f"(input type {type(model).__name__})."
        )
    diffusion_model = getattr(inner, "diffusion_model", _ATTR_MISSING)
    if diffusion_model is _ATTR_MISSING:
        raise RuntimeError(
            f"{_SEEDVR2_INVALID_MODEL_MSG_PREFIX}: 'model.model' has no "
            f"'diffusion_model' attribute (got type {type(inner).__name__})."
        )
    if diffusion_model is None:
        raise RuntimeError(
            f"{_SEEDVR2_INVALID_MODEL_MSG_PREFIX}: 'model.model.diffusion_model' "
            f"is None (model.model type {type(inner).__name__})."
        )
    return diffusion_model


def div_pad(image, factor):
    height_factor, width_factor = factor
    height, width = image.shape[-2:]

    pad_height = (height_factor - (height % height_factor)) % height_factor
    pad_width = (width_factor - (width % width_factor)) % width_factor

    if pad_height == 0 and pad_width == 0:
        return image

    padding = (0, pad_width, 0, pad_height)
    return torch.nn.functional.pad(image, padding, mode='constant', value=0.0)

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Instantiate a fresh model load (new 'Load Diffusion Model' node) instead of reusing a disposed wrapper.
  2. Ensure load completes before the SeedVR2 node runs; check for swallowed upstream load errors.
  3. In custom code, verify model.model.diffusion_model is not None before calling the node.
Defensive patterns

Strategy: validation

Validate before calling

dm = getattr(getattr(model, 'model', None), 'diffusion_model', None)
if dm is None:
    raise ValueError("model.model.diffusion_model is None; perform a fresh model load")

Type guard

def has_live_diffusion_model(model) -> bool:
    return getattr(getattr(model, 'model', None), 'diffusion_model', None) is not None

Prevention

When it happens

Trigger: A BaseModel whose diffusion_model was set to None — partially initialized model after a failed load, post-unload state, or a manually constructed BaseModel without loading state; custom code that disposes diffusion_model then reuses the object.

Common situations: Interrupted model loads leaving stubs; aggressive memory-offload code that drops the inner network; constructing model objects programmatically without populating diffusion_model.

Related errors


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/a5b06111c364c6ea. Report an issue: GitHub.