ComfyUI Node

Apply Pose

Turn a POSE Object Into the Stick Figure ControlNet Actually Wants

By Spit8·Created 2 months ago·Updated 2 months ago· 1
Apply Pose
  • pose
  • skeleton
  • pose
width0
height0
stick_width0

Here's the thing that trips up everyone on their first CharacterPose workflow: the POSE objects floating around this pack are not images. They're small JSON bundles of 18 OpenPose COCO-18 keypoints - [x, y, confidence] triples plus a canvas size. A ControlNet doesn't eat JSON. It eats pixels. CP_ApplyPose is the node that draws the stick figure so you can actually look at a pose or feed it to a ControlNet OpenPose model.

It's the most boring node in the pack and you'll still use it constantly. Compose a pose in 3D, extract one from a reference drawing, or load one from the library - at some point you'll want to see it, and this is the renderer that does that.

How it works

The node takes a POSE, optionally rescales it to a target canvas, and draws the classic OpenPose skeleton: joints as dots, limb pairs as colored sticks, all on a black background. That's the format ControlNet OpenPose conditioners are trained on, so the output drops straight into the image input of your ControlNet apply node without any preprocessing step.

The inputs that matter

  • pose (required) - any POSE output from this pack: CP_PoseComposer3D, CP_PoseLibraryLoad, CP_ExtractPose, CP_WarpToPose's aligned_target_pose, you name it.
  • width / height - leave at 0 and the node keeps the pose's own stored canvas size. Set them if you want the skeleton scaled to match a specific render size (say, the sprite you're about to condition).
  • stick_width - 0 means the default line thickness. Crank it up if you're blending the skeleton over an image and want beefier, more visible sticks.

You get two outputs: skeleton (the IMAGE of the drawn stick figure) and pose (the scaled POSE). The pose passthrough is the quietly useful one - resize a pose here and hand the scaled version to whatever comes next, instead of fighting the scale yourself.

Installing

From ComfyUI Manager, search for _ComfyUI_CharacterPose and hit install, or clone it manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Spit8/_ComfyUI_CharacterPose
pip install -r _ComfyUI_CharacterPose/requirements.txt

Restart ComfyUI and it shows up under CharacterPose/Pose. The pack's core deps are lightweight (numpy, opencv, Pillow, scikit-learn, scipy); the heavy extras like DWPose and Florence-2 only matter if you use the pose-extraction or captioning nodes.

Gotchas

  • If your skeleton looks tiny or misaligned, it's a canvas-size mismatch: the pose was authored at one resolution and you're drawing it at another. Set width/height explicitly to your render size.
  • This node draws a pose. If you were expecting it to apply ControlNet conditioning, that's a different node - this one just makes the picture.

A one-node job, honestly. When you need to see a pose or hand one to a ControlNet, it's the move.

CategoryCharacterPose/Pose

Inputs (4)

NameTypeDefaultDescription
posePOSE
widthoptINT00–4096
heightoptINT00–4096
stick_widthoptINT00–32

Outputs (2)

NameTypeDescription
skeletonIMAGE
posePOSE