Nodes/Polyhedron Suite/⬡ Polyhedron Control Map
ComfyUI Node

⬡ Polyhedron Control Map

One node, every conditioning map your union wants

By PolyhedronAI·Created 5 months ago·Updated a day ago· 7
⬡ Polyhedron Control Map
  • images
  • keypoints
  • control
  • keypoints
  • info
◄modepose (SDPose)►
◄pose_modelsdpose_wholebody_fp16.safetensors · 1.8 GB · not installed►
◄depth_modeldepth_anything_3_small.safetensors · 131 MB · not installed►
◄draw_handstrue►
◄draw_facefalse►
◄stick_width4►
◄low0.20►
◄high0.50►
◄depth_resolution504►
◄previewtrue►

Half of the old ControlNet ritual was a pile of preprocessor nodes, each with its own model loader and its own opinion about install paths. ⬡ Polyhedron Control Map folds that pile into one dropdown: pose, depth, canny, gray, scribble, soft edges, or keypoints drawn from data you already have. Frames in, control frames out.

What each mode actually runs

mode is the whole story:

  • pose (SDPose) - whole-body skeleton including hands by default (draw_hands). That's the unusual part: most pose estimators do body-plus-face and give you mittens for hands, which is exactly where gesture-heavy shots fall apart. stick_width sets limb thickness in pixels; draw_face adds landmarks, but only for detected poses, not drawn ones.
  • depth (Depth Anything 3) - near is bright. depth_resolution is the model's working size on the longest side (504 default, 140–2520, step 14). DA3 replaced MiDaS and Depth Anything v1/v2 in that slot; for this job its single-image depth is only incrementally better than v2, so pick it for convenience rather than expecting a different result. The list runs small (131 MB) up to the metric-large 1.2 GB files.
  • canny / scribble - thresholded lines with low and high as your threshold pair, same as every canny node since 2023, same trade-off: low thresholds give a hairy map that over-constrains, high thresholds lose structure.
  • soft edges - gradient edges, thicker and more forgiving than canny, the right choice for organic subjects and fabric.
  • gray - the frames in greyscale. Sounds useless until you want the model to recolour something while keeping luminance structure, or when you're using one model to imitate the colour of another.
  • keypoints (draw only) - draws the keypoints input instead of detecting anything. This is how a rig's skeleton gets projected exactly, from something like a mesh ring render, with no estimator guessing in the middle.

Inputs and outputs

Optional images (the fitted clip or still) and optional keypoints are the only two data pins. Everything else is a knob. preview paints the result in the node - a clip plays as a small animated WebP, a still as a still.

Out comes control (into Apply Control), keypoints as POSE_KEYPOINT data for pose and keypoints modes, and info. Hand keypoints to Polyhedron Save and you get an OpenPose-format <name>_keypoints.json written next to the frames - which is how a control you liked becomes a reusable asset rather than a one-off.

The full chain looks like:

Media Loader → Control Fit → Control Map (pose) → Apply Control → Sampler
                            └─ control → Save (template for next time)

The models, and where they go

Two separate folders, and mixing them up is the most common install mistake:

  • SDPose → models/checkpoints (sdpose_wholebody_fp16.safetensors, 1.8 GB)
  • Depth Anything 3 → models/geometry_estimation (small / base / mono-large / metric-large)

The combo lists them with sizes and marks missing ones not installed; the Download button on the node's line fetches exactly that file, over https, sha256-checked. A run never downloads, which I appreciate - nothing worse than a queue that stalls on a 4 GB fetch you didn't ask for.

Install

Manager → "Polyhedron Suite". Or:

cd ComfyUI/custom_nodes
git clone https://github.com/PolyhedronAI/ComfyUI-PolyhedronLoRAStack.git
# restart ComfyUI

The pack requires no Python packages. Note the models are the heavy part, not the code - that's 1.8 GB for pose plus up to 1.2 GB per depth model, so decide which mode you actually need before downloading the set.

Where it goes wrong

Pose on a clip with no visible body. SDPose returns nothing usable on a dark silhouette or a shot where a subject is mostly out of frame; you get empty maps and the render drifts. Check the preview before queueing.

White lines on black, or black on white? Unions expect lines on black. If your map comes out inverted for whatever reason, don't fight it downstream - fix it with Polyhedron Blend using over (black = clear), which is what that mode exists for.

Depth resolution is VRAM, not quality. 504 is the default for a reason. Push it to 2520 on a long clip and you'll find out what your card does under memory pressure.

Pose without hands. Set draw_hands off for fast iteration, on for the final. Hand poses are most of the difference between "the model gestured" and "the model gestured like that".

CategoryPolyhedron/Control

Inputs (12)

NameTypeDefaultDescription
modeCOMBOpose (SDPose)pose: whole-body skeleton found in the frames (SDPose). depth: near = bright (Depth Anything 3). canny / scribble / soft edges: lines. gray: the frames in grey (recolour control). keypoints: draw the keypoints input (e.g. from Mesh Ring Render) -- exact.
pose_modelCOMBOsdpose_wholebody_fp16.safetensors · 1.8 GB · not installedPose: the SDPose checkpoint (models/checkpoints). A file marked 'not installed' is fetched by the Download on the node's line (shown while mode is pose).
depth_modelCOMBOdepth_anything_3_small.safetensors · 131 MB · not installedDepth: a Depth Anything 3 model (models/geometry_estimation). A file marked 'not installed' is fetched by the Download on the node's line (shown while mode is depth).
draw_handsBOOLEANtruePose: draw the hands.
draw_faceBOOLEANfalsePose: draw the face landmarks (detected poses only).
stick_widthINT41–16Pose: limb thickness in pixels.
lowFLOAT0.200.01–0.99canny / scribble: lower threshold.
highFLOAT0.500.01–0.99canny / scribble: upper threshold.
depth_resolutionINT504140–2520Depth: working size of the model (longest side).
imagesoptIMAGEThe frames to read the control from (fitted clip or image).
keypointsoptPOSE_KEYPOINTPose keypoints to draw (keypoints mode), e.g. from Mesh Ring Render -- the skeleton of a rig, projected exactly.
previewoptBOOLEANtrueShow the control frames in the node (a clip plays as a small animated WebP, an image as a still). To keep them -- as a template for another run -- wire `control` into a Save node.

Outputs (3)

NameTypeDescription
controlIMAGEControl frames -- into Apply Control.
keypointsPOSE_KEYPOINTThe pose keypoints (pose and keypoints modes).
infoSTRINGWhat was made.