YDem Pose Renderer
Actually Seeing What You're Feeding ControlNet
- kps
- image
A POSE_KEYPOINT is JSON, not an image. You can stare at the numbers all day and learn nothing about whether your skeleton actually looks like a person doing something sensible. YDem Pose Renderer turns the pose data back into a picture - the stick-figure skeleton you've seen in every ControlNet demo - so you can see exactly what you're about to condition your model with. Every serious pose workflow should have one of these hanging off a preview node, and this one has a nice party trick.
How it works
The clever bit is what it doesn't do: it doesn't reimplement pose drawing. It imports draw_poses and decode_json_as_poses straight from comfyui_controlnet_aux's dwpose module and calls them. That's the same renderer that pack uses internally, so what you see is what ControlNet actually gets - no approximation, no third-party drift.
The output is a proper IMAGE tensor, converted to float32 and scaled to 0–1, so it plugs into PreviewImage, SaveImage, or any image input without ceremony.
The party trick
Most pose renderers handle a single frame. This one handles a list - a multi-frame POSE_KEYPOINT from an AnimateDiff or video workflow - and stacks every frame into one batch, giving you a [B, H, W, C] image tensor out. Render one skeleton, and you get one image. Render a whole clip's worth, and you get a stack you can run through a video preview node or save frame by frame.
That's genuinely the reason to reach for this over the stock openpose renderers when you're working with video: it batch-renders the whole pose sequence in one call instead of you wiring up a loop.
The inputs
kps- thePOSE_KEYPOINTyou want to visualize. Feed it the raw output of a DWPose Estimator, or the output of the pack's YDem Pose Filter or YDem Pose Remove Hand to preview what they did to it.render_body- body skeleton, default true.render_hand- hand keypoints, default true.render_face- face landmarks, default true.
For previewing, turn off what you don't care about - a face skeleton can make a clean pose map look like a horror show, and hands clutter the frame when you're only checking body position. (Handy trick: leave render_hand on right after YDem Pose Remove Hand to verify the hands actually got wiped.)
Installing it
Part of luoq24/ydem_nodes - ComfyUI Manager, search "ydem_nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/luoq24/ydem_nodes
Restart, then make sure comfyui_controlnet_aux is installed, because this node literally imports from it. Here's the one real gotcha: the import is guarded, so if comfyui_controlnet_aux is missing you won't get an error at startup - you'll get an ImportError the first time you actually run the node. It's the pack's most common failure by far, and the fix is one Manager install away. DWPose's own install can be rocky on non-NVIDIA hardware (the ROCm/AMD path has tripped people up for years), so if this node errors, check comfyui_controlnet_aux first before touching anything else.
It's a small node, but it's the difference between debugging pose workflows blind and actually seeing your skeletons. For a beginner, that's not a luxury - it's the tool that tells you whether the problem is your pose or your ControlNet.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| kps | POSE_KEYPOINT | — | |
| render_body | BOOLEAN | true | — |
| render_hand | BOOLEAN | true | — |
| render_face | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |