Comfy-Org/ComfyUI · error · ValueError

SeedVR2 requires conditioning latents from the SeedVR2Condit

Error message

SeedVR2 requires conditioning latents from the SeedVR2Conditioning node.

What it means

SeedVR2's NaDiT forward pulls its reference/conditioning latents from the 'condition' entry of kwargs, which ComfyUI only populates when the SeedVR2Conditioning node attached them to the model input. A missing 'condition' means the model was run as a plain generative DiT, which SeedVR2 (a restoration model) does not support.

Source

Thrown at comfy/ldm/seedvr/model.py:1287

        if NaDiT._seedvr2_is_single_conditioning_branch(cond_or_uncond):
            return out
        pos, neg = out.chunk(2, dim=0)
        return torch.cat([neg, pos], dim=0)

    def forward(
        self,
        x,
        timestep,
        context,  # l c
        disable_cache: bool = False,
        **kwargs
    ):
        transformer_options = kwargs.get("transformer_options", {})
        patches_replace = transformer_options.get("patches_replace", {})
        blocks_replace = patches_replace.get("dit", {})
        conditions = kwargs.get("condition")
        if conditions is None:
            raise ValueError("SeedVR2 requires conditioning latents from the SeedVR2Conditioning node.")
        x = self._check_seedvr2_video_latent(x, SEEDVR2_LATENT_CHANNELS, "latent")
        conditions = self._check_seedvr2_video_latent(conditions, SEEDVR2_LATENT_CHANNELS + 1, "conditioning")
        b, _, t, h, w = x.shape
        if conditions.shape[0] != b or conditions.shape[2:] != (t, h, w):
            raise ValueError(
                f"SeedVR2 conditioning shape must match latent batch/temporal/spatial dimensions; got latent {tuple(x.shape)} and conditioning {tuple(conditions.shape)}."
            )
        x = x.movedim(1, -1)
        conditions = conditions.movedim(1, -1)
        cache = Cache(disable=disable_cache)

        txt, txt_shape = self._resolve_text_conditioning(context, transformer_options.get("cond_or_uncond"))

        vid, vid_shape = flatten(x)
        cond_latent, _ = flatten(conditions)

        vid = torch.cat([vid, cond_latent], dim=-1)

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Insert the SeedVR2Conditioning node between the SeedVR2 MODEL and the sampler, feeding it the LQ latent (and mask).
  2. Un-bypass the SeedVR2Conditioning node if it is muted.
  3. Verify the conditioning actually flows on the model object ComfyUI samples with (check the model input patch is present).
  4. Do not attempt unconditional generation with SeedVR2 — it is restoration-only.
Defensive patterns

Strategy: validation

Validate before calling

def validate_seedvr2_model_input(model_input_kwargs):
    if model_input_kwargs.get("condition") is None:
        raise ValueError("SeedVR2 requires SeedVR2Conditioning; attach LQ latent + mask before sampling")
    return model_input_kwargs

Prevention

When it happens

Trigger: Sampling with a SeedVR2 model whose MODEL output never passed through the SeedVR2Conditioning node; bypassing the conditioning node in the workflow (bypass passes inputs through unchanged, dropping the attached condition); custom node code calling model forward without the condition kwarg.

Common situations: User connects SeedVR2 model + positive prompt directly to a sampler; the SeedVR2Conditioning node is muted; a ported workflow lost the conditioning link.

Related errors


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