⬡ Polyhedron Control Map
One node, every conditioning map your union wants
- images
- keypoints
- control
- keypoints
- info
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_widthsets limb thickness in pixels;draw_faceadds landmarks, but only for detected poses, not drawn ones. - depth (Depth Anything 3) - near is bright.
depth_resolutionis 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
lowandhighas 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
keypointsinput 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".
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | pose (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_model | COMBO | sdpose_wholebody_fp16.safetensors · 1.8 GB · not installed | Pose: 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_model | COMBO | depth_anything_3_small.safetensors · 131 MB · not installed | Depth: 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_hands | BOOLEAN | true | Pose: draw the hands. |
| draw_face | BOOLEAN | false | Pose: draw the face landmarks (detected poses only). |
| stick_width | INT | 41–16 | Pose: limb thickness in pixels. |
| low | FLOAT | 0.200.01–0.99 | canny / scribble: lower threshold. |
| high | FLOAT | 0.500.01–0.99 | canny / scribble: upper threshold. |
| depth_resolution | INT | 504140–2520 | Depth: working size of the model (longest side). |
| imagesopt | IMAGE | The frames to read the control from (fitted clip or image). | |
| keypointsopt | POSE_KEYPOINT | Pose keypoints to draw (keypoints mode), e.g. from Mesh Ring Render -- the skeleton of a rig, projected exactly. | |
| previewopt | BOOLEAN | true | Show 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)
| Name | Type | Description |
|---|---|---|
| control | IMAGE | Control frames -- into Apply Control. |
| keypoints | POSE_KEYPOINT | The pose keypoints (pose and keypoints modes). |
| info | STRING | What was made. |