{"record":{"id":"7f8aedcd816aae3b","repo":"Comfy-Org/ComfyUI","slug":"seedvr2-decoder-only-supports-updecoderblock3d-go","errorCode":null,"errorMessage":"SeedVR2 decoder only supports UpDecoderBlock3D, got {up_block_type}.","messagePattern":"SeedVR2 decoder only supports UpDecoderBlock3D, got (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"comfy/ldm/seedvr/vae.py","lineNumber":1253,"sourceCode":"            resnet_time_scale_shift=\"default\",\n            attention_head_dim=block_out_channels[-1],\n            resnet_groups=norm_num_groups,\n            temb_channels=temb_channels,\n            add_attention=mid_block_add_attention,\n            inflation_mode=inflation_mode,\n            time_receptive_field=time_receptive_field,\n        )\n\n        reversed_block_out_channels = list(reversed(block_out_channels))\n        output_channel = reversed_block_out_channels[0]\n        for i, up_block_type in enumerate(up_block_types):\n            prev_output_channel = output_channel\n            output_channel = reversed_block_out_channels[i]\n\n            is_final_block = i == len(block_out_channels) - 1\n            is_temporal_up_block = i < self.temporal_up_num\n            if up_block_type != \"UpDecoderBlock3D\":\n                raise ValueError(f\"SeedVR2 decoder only supports UpDecoderBlock3D, got {up_block_type}.\")\n            up_block = UpDecoderBlock3D(\n                num_layers=self.layers_per_block + 1,\n                in_channels=prev_output_channel,\n                out_channels=output_channel,\n                add_upsample=not is_final_block,\n                resnet_eps=1e-6,\n                resnet_groups=norm_num_groups,\n                temb_channels=temb_channels,\n                temporal_up=is_temporal_up_block,\n                inflation_mode=inflation_mode,\n                time_receptive_field=time_receptive_field,\n            )\n            self.up_blocks.append(up_block)\n            prev_output_channel = output_channel\n\n        self.conv_norm_out = ops.GroupNorm(\n            num_channels=block_out_channels[0], num_groups=norm_num_groups, eps=1e-6\n        )","sourceCodeStart":1235,"sourceCodeEnd":1271,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy/ldm/seedvr/vae.py#L1235-L1271","documentation":"The SeedVR2 VAE Decoder constructor iterates the configured up_block_types and hard-rejects anything except the literal string \"UpDecoderBlock3D\". SeedVR2's 3D decoder blocks are the only implementation wired up, so any other block type name is a configuration error, not a missing feature. The check fires per block during model construction, before any weights are loaded.","triggerScenarios":"Instantiating the SeedVR2 Decoder (comfy/ldm/seedvr/vae.py) with an up_block_types list containing anything other than \"UpDecoderBlock3D\" — e.g. a config ported from a 2D AutoencoderKL (\"UpDecoderBlock2D\", \"UpDecoderBlockCX\") or a typo.","commonSituations":"Copying a diffusers-style VAE config JSON into a SeedVR2 checkpoint config; hand-editing model config YAML; converting a 2D VAE checkpoint and reusing its block list.","solutions":["Set every entry in up_block_types to \"UpDecoderBlock3D\" (e.g. [\"UpDecoderBlock3D\"] * len(block_out_channels)).","If porting a config from another VAE family, rebuild the decoder section for SeedVR2 instead of editing the old one.","Validate config before construction: assert all(t == \"UpDecoderBlock3D\" for t in up_block_types)."],"exampleFix":"// before\nup_block_types=[\"UpDecoderBlock2D\", \"UpDecoderBlock2D\"]\n// after\nup_block_types=[\"UpDecoderBlock3D\", \"UpDecoderBlock3D\"]","handlingStrategy":"validation","validationCode":"def check_seedvr_up_blocks(up_block_types):\n    bad = [t for t in up_block_types if t != \"UpDecoderBlock3D\"]\n    if bad:\n        raise ValueError(f\"Unsupported up block types: {bad}; SeedVR2 requires UpDecoderBlock3D\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never copy up_block_types from a 2D VAE config into a SeedVR2 config.","Generate the list programmatically: [\"UpDecoderBlock3D\"] * len(block_out_channels)."],"tags":["seedvr","vae","config","decoder"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}