{"record":{"id":"b568b61aa6b3993e","repo":"Comfy-Org/ComfyUI","slug":"seedvr2temporalchunk-expected-seedvr2-latent-cha","errorCode":null,"errorMessage":"SeedVR2TemporalChunk: expected {SEEDVR2_LATENT_CHANNELS} latent channels; got shape {tuple(samples.shape)}.","messagePattern":"SeedVR2TemporalChunk: expected (.+?) latent channels; got shape (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"comfy_extras/nodes_seedvr.py","lineNumber":463,"sourceCode":"            ],\n            outputs=[\n                io.Latent.Output(display_name=\"latents\", is_output_list=True,\n                                 tooltip=\"The temporal chunks in sequence order.\"),\n                io.Int.Output(display_name=\"temporal_overlap\",\n                              tooltip=\"The effective latent-frame overlap between adjacent chunks, for Merge SeedVR2 Latents.\"),\n            ],\n        )\n\n    @classmethod\n    def execute(cls, latent, temporal_overlap, chunking_mode) -> io.NodeOutput:\n        samples = latent[\"samples\"]\n        if samples.ndim != 5:\n            raise ValueError(\n                f\"SeedVR2TemporalChunk: expected a 5-D video latent (B, C, T, H, W); \"\n                f\"got shape {tuple(samples.shape)}.\"\n            )\n        if samples.shape[1] != SEEDVR2_LATENT_CHANNELS:\n            raise ValueError(\n                f\"SeedVR2TemporalChunk: expected {SEEDVR2_LATENT_CHANNELS} latent channels; \"\n                f\"got shape {tuple(samples.shape)}.\"\n            )\n        if temporal_overlap < 0:\n            raise ValueError(\n                f\"SeedVR2TemporalChunk: temporal_overlap must be >= 0; got {temporal_overlap}.\"\n            )\n        mode = chunking_mode[\"chunking_mode\"]\n        if mode not in (\"auto\", \"manual\"):\n            raise ValueError(\n                f\"SeedVR2TemporalChunk: chunking_mode must be 'auto' or 'manual'; \"\n                f\"got {mode!r}.\"\n            )\n        t_latent = samples.shape[2]\n        t_pixel = 4 * (t_latent - 1) + 1\n\n        if mode == \"auto\":\n            free_gb = comfy.model_management.get_free_memory(","sourceCodeStart":445,"sourceCodeEnd":481,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy_extras/nodes_seedvr.py#L445-L481","documentation":"After the rank check, SeedVR2TemporalChunk verifies the latent has 16 channels (SEEDVR2_LATENT_CHANNELS) in dim 1, matching the SeedVR2 VAE. A 5-D latent from a different model family (or wrong VAE) fails here with the full shape.","triggerScenarios":"Passing a 5-D latent whose channel dim != 16 — e.g. a 48-channel video VAE latent from another architecture, or a 4-channel image latent with extra dims unsqueezed.","commonSituations":"Mixing video model pipelines (Wan/Hunyuan latents into the SeedVR2 chunker); loading a non-SeedVR2 VAE for the encode step.","solutions":["Use the SeedVR2 video VAE for encoding so the latent is (B, 16, T, H, W).","Check the chain: the latent fed to Split must come from SeedVR2 encode/sample nodes.","Print samples.shape[1]; anything other than 16 means the wrong VAE/model produced it."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"samples = latent['samples']\nif samples.ndim != 5 or samples.shape[1] != 16:\n    raise ValueError(f'need SeedVR2 latent (B,16,T,H,W), got {tuple(samples.shape)}')","typeGuard":"def is_seedvr_chunk_input(s) -> bool:\n    return s.ndim == 5 and s.shape[1] == 16","tryCatchPattern":null,"preventionTips":["Use one model family's VAE consistently per workflow.","Verify channel count (16) before chunking.","Don't adapt other architectures' latents with unsqueeze hacks."],"tags":["seedvr","latent","channels","chunking","validation"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}