Nodes/ComfyUI-WanAnimatePreprocessV2/Depth + Pose + Canny Combined (V2)
ComfyUI Node

Depth + Pose + Canny Combined (V2)

Six conditioning maps from one node, when you can't decide what the ControlNet wants

By Code2Collapse·Created 8 months ago·Updated 8 days ago· 17
Depth + Pose + Canny Combined (V2)
  • images
  • external_depth_map
  • damodel_v2
  • da3_model
  • depthcrafter_model
  • depth_pro_model
  • posemodel
  • external_pose_map
  • depth_map
  • pose_map
  • canny_map
  • normal_map
  • combined_map
  • blended_map
width832
height480
enable_depthtrue
enable_posetrue
enable_cannytrue
canny_threshold1100
canny_threshold2200
canny_aperture3
depth_colorizefalse
depth_invertfalse
pose_detection_threshold0.05
pose_draw_threshold0.30
combined_layouthorizontal_3
depth_backendauto
enable_normaltrue
normal_strength1.0
blend_modeweighted_avg
depth_weight1.00
pose_weight1.00
canny_weight1.00
normal_weight0.50
depthcrafter_steps5
depthcrafter_guidance1.0
depthcrafter_window110
depthcrafter_overlap25

This is the pack's Swiss-army ControlNet preprocessor, and it's a different animal from the other nodes here. While the rest of the pack exists to feed Wan Animate's character-animation pipeline, DepthPoseCannyCombinedV2 is a generic conditioning generator: feed it frames, get depth, pose, canny, normal, a side-by-side preview, and a blended map - six outputs you can point at whatever ControlNet you're using. It's the node you reach for when you're building a pose-control workflow for Flux, Qwen-Image or a Wan ControlNet and you're not sure yet which condition carries the shot.

If you've ever had to wire three separate preprocessors just to compare depth vs. canny vs. pose, this collapses that into one node with a layout toggle.

How it works

Think of it as four passes with a merge stage at the end:

  • Depth. The depth_backend dropdown is the interesting part. auto tries, in order: an external_depth_map input you wired → any depth-model bundle connected → a built-in MiDaS-small that downloads ~80MB via torch.hub on first use. built_in_midas makes the node fully self-contained with zero extra packs. Or point it at DepthAnything V2 (damodel_v2, via Kijai's pack), DepthAnything V3, DepthCrafter (temporally consistent video depth), or Depth-Pro (metric depth) by wiring their model bundles in.
  • Pose. Uses posemodel (the POSEMODEL from the loader node) unless you wire external_pose_map - e.g. a DWPose/OpenPose render from Fannovel16's controlnet_aux - which takes priority.
  • Canny. Pure OpenCV, canny_threshold1/canny_threshold2 (100/200) plus canny_aperture (3/5/7). Nothing to download.
  • Normal. Sobel-from-depth, no model needed. normal_strength scales the gradients; higher = more contrast.

Then the blend_mode dropdown merges them. The defaults are weighted_avg, but the interesting ones are the research-backed modes: linear_dodge (additive, sharp - the community favourite for pose+canny), screen (highlight-safe stacking), max, multiply, overlay, and channel_split which packs R=depth, G=canny, B=pose into one RGB image in the Fun-Control / IP-Adapter style. Per-channel depth_weight / pose_weight / canny_weight / normal_weight tune the mix.

The inputs a beginner actually sets

  • images - your frames. width/height - output canvas (832×480).
  • enable_depth / enable_pose / enable_canny / enable_normal - flip off the passes you don't need; each one you disable saves compute.
  • depth_invert - invert so near = bright, which is what most ControlNets expect. Turn it on if your source produces "far = bright".
  • combined_layout - horizontal_3 (default), vertical_3, grid_2x2, or single-map outputs for previewing.
  • pose_detection_threshold / pose_draw_threshold - only used when posemodel is wired; same meanings as the detection node.

Outputs: depth_map, pose_map, canny_map, normal_map, combined_map (the layout preview), and blended_map (per blend_mode). For a depth-anything ControlNet you'll typically grab depth_map (maybe after depth_invert); for a pose ControlNet grab pose_map; the combined_map is mostly a debugging convenience.

Gotchas

  • enable_depth with nothing wired. "Requires at least ONE depth source wired" is the tooltip, and it means it: leave it on with no external map and no loader and the node errors. Either wire something or switch depth_backend to built_in_midas.
  • Depth model packs are optional dependencies. The tooltips name the exact repo and model folder for each backend (e.g. ComfyUI/models/depthanything/ for DepthAnything V2). If you haven't installed that pack, that backend just won't be selectable/useful - the node itself doesn't install them.
  • Blend modes are easy to overthink. weighted_avg is a fine default; switch to linear_dodge when you specifically want pose+canny edges to stay sharp. Don't start with channel_split unless you know your ControlNet was trained for that packing.

The ControlNet context here is worth repeating: conditioning images steer composition, but the community's standing advice is to release the condition partway through sampling once structure is locked. A clean preprocessed map helps; a good control-strength curve helps more. This node just makes the map part trivial.

CategoryWanAnimatePreprocess_V2

Inputs (33)

NameTypeDefaultDescription
imagesIMAGEInput video frames (B,H,W,3) float32 [0,1].
widthINT83264–4096Output canvas width.
heightINT48064–4096Output canvas height.
enable_depthBOOLEANtrueRun the depth pass. Requires at least ONE depth source wired.
enable_poseBOOLEANtrueRun the pose pass.
enable_cannyBOOLEANtrueRun the canny pass.
canny_threshold1INT1000–500Canny lower hysteresis threshold.
canny_threshold2INT2000–500Canny upper hysteresis threshold.
canny_apertureCOMBO3Sobel aperture for Canny (odd: 3/5/7).
depth_colorizeBOOLEANfalseIf true, colorize grayscale depth with INFERNO colormap. Skipped when external_depth_map is already RGB.
depth_invertBOOLEANfalseInvert depth (1 - depth). Use when source produces 'far = bright' but you want 'near = bright' (typical ControlNet expectation).
pose_detection_thresholdFLOAT0.050–1YOLO confidence threshold (only used when posemodel is wired).
pose_draw_thresholdFLOAT0.300–1Per-keypoint score threshold for drawing the skeleton.
combined_layoutCOMBOhorizontal_3Layout for the combined output. grid_2x2 = depth | pose // canny | original.
depth_backendCOMBOautoWhich depth backend to use. 'auto' tries: external_depth_map -> any wired loader -> built_in_midas. 'built_in_midas' makes the node fully self-contained (downloads MiDaS small via torch.hub on first use, ~80MB).
enable_normalBOOLEANtrueCompute Sobel-from-depth NORMAL map. No model required (uses depth pass output).
normal_strengthFLOAT1.00.1–10Scales the Sobel gradients before normalisation. Higher = stronger normal contrast.
blend_modeCOMBOweighted_avgHow to combine depth+pose+canny+normal into blended_map. linear_dodge=additive (sharp), screen=highlight-safe, channel_split=Fun-Control (R=depth/G=canny/B=pose).
depth_weightFLOAT1.000–4Weight of depth in blended_map.
pose_weightFLOAT1.000–4Weight of pose in blended_map.
canny_weightFLOAT1.000–4Weight of canny in blended_map.
normal_weightFLOAT0.500–4Weight of normal map in blended_map.
external_depth_mapoptIMAGEPre-computed depth IMAGE batch from ANY upstream node. Highest priority.
damodel_v2optDAMODELDepthAnything V2 model bundle from kijai/ComfyUI-DepthAnythingV2 (DownloadAndLoadDepthAnythingV2Model). Models: ComfyUI/models/depthanything/.
da3_modeloptDA3MODELDepthAnything V3 config bundle from PozzettiAndrea/ComfyUI-DepthAnythingV3. Use the V3 pack's Inference node and feed its IMAGE output into external_depth_map. Models: ComfyUI/models/depthanything3/.
depthcrafter_modeloptDEPTHCRAFTER_MODELDepthCrafter bundle from akatz-ai/ComfyUI-DepthCrafter-Nodes. Temporally consistent video depth. Models: ComfyUI/models/depthcrafter/.
depth_pro_modeloptDEPTH_PRO_MODELDepth-Pro bundle from spacepxl/ComfyUI-Depth-Pro. Metric depth. Models: ComfyUI/models/depth/ml-depth-pro/.
posemodeloptPOSEMODELFrom ONNX Detection Model Loader (V2) or animal-pose loader. Used if enable_pose=True AND no external_pose_map wired.
external_pose_mapoptIMAGEPre-rendered pose map from any upstream node (e.g. Fannovel16/comfyui_controlnet_aux DWPose / OpenPose / AnimalPose). Highest priority for pose.
depthcrafter_stepsoptINT51–100DepthCrafter only: diffusion inference steps.
depthcrafter_guidanceoptFLOAT1.00.1–10DepthCrafter only: classifier-free guidance.
depthcrafter_windowoptINT1101–200DepthCrafter only: temporal window size.
depthcrafter_overlapoptINT250–100DepthCrafter only: window overlap.

Outputs (6)

NameTypeDescription
depth_mapIMAGEPer-frame depth IMAGE batch (3-channel, height x width).
pose_mapIMAGEPer-frame pose IMAGE batch (3-channel, on black canvas).
canny_mapIMAGEPer-frame canny edge IMAGE batch (3-channel grayscale).
normal_mapIMAGEPer-frame normal map (RGB-encoded surface normals from Sobel-of-depth).
combined_mapIMAGESide-by-side combined preview per `combined_layout`.
blended_mapIMAGEWeighted blend of {depth, pose, canny, normal} per `blend_mode` and per-channel weights.