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' has no 'diffusion_model' attribute (got type {type(inner).__name__}). What it means
Raised by the SeedVR2 resolver when input.model exists and is non-None but lacks a 'diffusion_model' attribute. The node specifically needs the ComfyUI BaseModel (model.model.diffusion_model) to reach the SeedVR2 network internals; a wrapper of a different shape fails here with the inner object's type name.
Source
Thrown at comfy_extras/nodes_seedvr.py:50
_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):
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
View on GitHub (pinned to 1c6d8d45b3)
Solutions
- Use the standard model loader output (ModelPatcher over BaseModel) as the node's model input.
- If writing a custom wrapper, expose .diffusion_model on the inner object the node receives.
- Audit the graph for a mis-connected CLIP/VAE output on the model line.
Defensive patterns
Strategy: validation
Validate before calling
inner = getattr(model, 'model', None)
if inner is not None and not hasattr(inner, 'diffusion_model'):
raise TypeError(f"model.model is {type(inner).__name__}, not a BaseModel with diffusion_model") Type guard
def has_diffusion_model(model) -> bool:
inner = getattr(model, 'model', None)
return inner is not None and getattr(inner, 'diffusion_model', None) is not None Prevention
- Use the standard 'Load Diffusion Model' node output; avoid custom wrappers for SeedVR2.
- Audit graphs for CLIP/VAE outputs accidentally connected to model sockets.
When it happens
Trigger: Connecting an object whose .model is a CLIP, VAE, or other component instead of a BaseModel; custom model classes that nest the network differently (e.g. .network instead of .diffusion_model); adapters that wrap without forwarding the attribute.
Common situations: Cross-wiring CLIP/VAE loader outputs that happen to have a .model field; using an alternative loader from a custom node pack that builds a non-standard wrapper; version changes in wrapper class layout.
Related errors
- SeedVR2Conditioning: model object does not match expected Se
- SeedVR2Conditioning: model object does not match expected Se
- SeedVR2Conditioning: model object does not match expected Se
- INVALID_TAG_FILTER
- ERROR: audio encoder file is invalid or unsupported embed_di
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/c651b83d7e1b8879.
Report an issue: GitHub.