Comfy-Org/ComfyUI · error · RuntimeError

SeedVR2Conditioning: model object does not match expected Se

Error message

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

What it means

Raised by the SeedVR2 resolver when the input does have a 'model' attribute but its value is None. This distinguishes a half-initialized or cleared wrapper from a wrong type entirely (error 956), and reports the input's type to help identify which object was connected.

Source

Thrown at comfy_extras/nodes_seedvr.py:44

)

from torchvision.transforms import functional as TVF
from torchvision.transforms.functional import InterpolationMode


_SEEDVR2_INVALID_MODEL_MSG_PREFIX = "SeedVR2Conditioning: model object does not match expected SeedVR2 structure"
_ATTR_MISSING = object()


def _resolve_seedvr2_diffusion_model(model):
    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):

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Re-load the SeedVR2 model with a fresh 'Load Diffusion Model' node and reconnect it.
  2. If custom code nils out .model for memory reasons, restore the inner model before invoking the node.
  3. Verify the load node actually succeeded (no upstream load errors swallowed).
Defensive patterns

Strategy: validation

Validate before calling

if getattr(model, 'model', None) is None:
    raise ValueError("model wrapper has model=None; reload the checkpoint before use")

Type guard

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

Prevention

When it happens

Trigger: A model wrapper whose .model was set to None — e.g. after unloading/disposal, a failed load that left a stub object, or a mock/placeholder passed from custom code.

Common situations: Memory-management code that offloads and nulls inner models; failed/interrupted checkpoint loads; test doubles that mimic the wrapper shape but leave model=None.

Related errors


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