Jakkanna Replace OpenPose Hands
Swap in hands that actually look like hands
- base_keypoints
- vnccs_keypoints
- keypoints
VNCCS_ReplaceOpenPoseHands is a small compositor for OpenPose keypoint streams, and it exists because of a very specific pain: detected hands are often garbage, while a mannequin's hands are whatever you deliberately posed them to be.
OpenPose hand keypoints are 21 joints per hand - the KB's ControlNet notes list 21 per hand, 70 face landmarks, 17 body joints - and anyone who's run OpenPose detection on a real photo knows the hands come back mangled half the time. Fingers merged, joints in the wrong place, a grip that reads as a blob. Meanwhile, if you've posed a VNCCS/Jakkanna mannequin in the Pose Studio, the hands are exactly what you set them to be. This node takes a base pose and overwrites the parts you trust less with the parts you trust more.
Mechanically, it deep-copies base_keypoints and, frame by frame, copies from the VNCCS stream:
- both
hand_left_keypoints_2dandhand_right_keypoints_2d- 63 floats each, i.e. 21 keypoints × x/y/confidence - but only when a full 63-value hand is present - two body segments at OpenPose indices 12:15 and 21:24 - in the standard body layout that's the left hip–knee–ankle chain and the heel/toe region
If either stream is missing hands for a frame, it leaves the base as-is rather than inventing data. The streams are matched frame by frame and it stops at whichever is shorter.
Inputs and output:
base_keypoints- POSE_KEYPOINT; the pose you want to keep as the foundationvnccs_keypoints- POSE_KEYPOINT; the pose whose hands (and arm-ish segments) you wantkeypoints- the merged POSE_KEYPOINT, ready to feed a ControlNet OpenPose preconditioner
The direction is worth internalizing: the node keeps the base body and pulls the hands from the VNCCS stream. The typical setup is base = detection from a reference photo, VNCCS = mannequin pose, and the output gets you a photo-derived body with deliberate, readable hands.
A couple of honest notes. First, this is a compatibility node: it ships under the original VNCCS_* identifier so old VNCCS workflows keep loading in the Jakkanna fork, and the fork keeps a separate legacy registration (VNCCSReplaceOpenPoseHands) marked deprecated. Use the underscore one. Second, the README's own advice applies if you're starting from zero: if you only need lightweight 2D keypoint editing and don't live in VNCCS workflows, a dedicated OpenPose editor is a smaller fit than this whole stack.
Install: part of the Jakkanna pack - ComfyUI Manager, search "Jakkanna", or:
cd ComfyUI/custom_nodes
git clone https://github.com/teenu/ComfyUI-VNCCS-Utils-Maintained
cd ComfyUI-VNCCS-Utils-Maintained
pip install -r requirements.txt
Restart after. And the one rule that applies to every node in this pack: don't install it alongside the upstream vnccs-utils in the same ComfyUI instance - the two register overlapping node names and conflict. The fork exists precisely so existing VNCCS graphs keep working; run one or the other, not both.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| base_keypoints | POSE_KEYPOINT | — | |
| vnccs_keypoints | POSE_KEYPOINT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| keypoints | POSE_KEYPOINT | — |