Comfy-Org/ComfyUI · error · ValueError

pose_method='ray_pose' requires a DualDPT head, but the load

Error message

pose_method='ray_pose' requires a DualDPT head, but the loaded model has a '{diffusion.head_type}' head. Use pose_method='cam_dec' instead.

What it means

Depth-Anything-3 raises this when pose_method is 'ray_pose' but the loaded model's head_type is not 'dualdpt'. Ray-pose estimation comes from the DualDPT head, so a checkpoint with a different head cannot produce ray-based camera poses; the message points to the cam_dec alternative.

Source

Thrown at comfy_extras/nodes_depth_anything_3.py:287

        has_cam_dec = diffusion.cam_dec is not None
        has_dualdpt = diffusion.head_type == "dualdpt"

        if not has_cam_dec and not has_dualdpt:
            raise ValueError(
                "multi-view mode requires Small or Base model. The loaded model "
                f"(head_type='{diffusion.head_type}') does not support cross-view "
                "attention or camera pose estimation. Switch mode to 'mono', or "
                "load Small or Base model for mult-view."
            )

        if pose_method == "cam_dec" and not has_cam_dec:
            raise ValueError(
                "pose_method='cam_dec' requires a camera decoder, but the loaded "
                f"model (head_type='{diffusion.head_type}') does not have one. "
                "Use pose_method='ray_pose' instead."
            )
        if pose_method == "ray_pose" and not has_dualdpt:
            raise ValueError(
                "pose_method='ray_pose' requires a DualDPT head, but the loaded "
                f"model has a '{diffusion.head_type}' head. "
                "Use pose_method='cam_dec' instead."
            )

        return cls._execute_multiview(
            da3_model, image, resolution, resize_method,
            ref_view_strategy, pose_method,
        )

    @classmethod
    def _execute_mono(cls, model, image, resolution, resize_method) -> io.NodeOutput:
        depth, confidence, sky = _run_da3(model, image, resolution, method=resize_method)

        geometry: dict = {
            "depth": depth.contiguous(),
            "image": image[..., :3].cpu(),
            "mode": "mono",

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Set pose_method to 'cam_dec' for this checkpoint.
  2. Or load a Small/Base model with a dualdpt head if ray_pose is required.
Defensive patterns

Strategy: validation

Validate before calling

if pose_method == 'ray_pose' and da3_model.model.diffusion_model.head_type != 'dualdpt':
    pose_method = 'cam_dec'  # DualDPT head required for ray_pose

Type guard

def da3_has_dualdpt(da3_model) -> bool:
    return da3_model.model.diffusion_model.head_type == 'dualdpt'

Prevention

When it happens

Trigger: Loading a model whose head_type != 'dualdpt' (a head variant with a camera decoder but not DualDPT) and running multi-view with pose_method='ray_pose'.

Common situations: Mirrors error 867: switching pose_method when swapping checkpoints; keeping 'ray_pose' from a Base-model workflow after loading a different variant.

Related errors


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