OpenPose Part Crop
Detail a hand, a face, or any pose region — without hand-drawing the mask
- image
- pose_keypoint
- stitch
- cropped_image
- cropped_mask
- info
The single most useful pattern in post-processing is "detect a region, crop it, run a fresh pass at proper resolution, paste it back" - that's the idea behind ADetailer and Impact Pack's FaceDetailer, and it's what fixes mushy hands and faces on an otherwise finished image. OpenPose Part Crop is that loop, but driven by pose keypoints instead of a YOLO or SAM detector. You tell it "right hand," it crops exactly the right hand, and hands you everything you need to detail it and stitch it back.
The inputs that actually matter
imageandpose_keypoint- the source frame and its keypoints (from a pose detector, or from this pack'sOpenPoseImageToKeypoints).region- head, face, left/right/both hands, feet, arms, legs. The trap is baked into the tooltip: left/right are anatomical, the subject's own sides. "right_hand" is the person's right hand, which usually appears on the left of your image. Flipmirror_left_rightif you think in image-space instead.person_index- which person, when there are several. With two characters, setperson_orderto "left_right" so index 0 is reliably the leftmost person - the default "detection" order is unstable between frames.output_resize(default 1024) - resizes the crop so its long side equals this. This is the "give a 64px hand a 1024px generation budget" knob, and it's the whole point of a detailer pass.padding(default 1.4) - expands the crop around the region so the detailer has context. 1.0 is tight.
There's also keypoint_indices, which lets you bypass the named regions entirely and crop to an arbitrary set of BODY_18 bone numbers (e.g. 2-4 for the right arm chain). The tooltip carries the full index map.
What it returns
stitch- anOPP_STITCHhandle that records the crop geometry. This is what the Stitch node needs to put things back.cropped_image- the resized crop, ready for your detailer model.cropped_mask- a feathered mask matching the crop, if your detailer wants one.info- diagnostics: people found, box used, and an honest "NO BOX … falling back to WHOLE IMAGE" when a region isn't detected, so the graph doesn't silently break.
How to build the loop
Crop → run your detail model on cropped_image (ControlNet, an inpaint pass, a hi-res fix) → OpenPose Part Stitch with the stitch handle and the processed image. The crop gets resized back to its native box and blended with a feathered mask, so the seam is invisible. mask_feather (default 16) controls that blend.
Where it sits vs. the ecosystem
Impact Pack's FaceDetailer is the famous auto-detailer and it's great at faces - but it's detector-driven and does the whole detect-mask-detail-stitch in one node. This trio is the pose-driven, more surgical variant: you can target "right hand" specifically, and the crop-and-stitch half matches the crop-edit-stitch pattern that became the 2026 default for region fixes. If you want a mask without the full crop pipeline, OpenPose Part Mask gives you the bbox + mask alone to feed into InpaintCropAndStitch or any inpaint node.
Install
Part of Mickmumpitz-Nodes (MIT, deps: numpy, Pillow, opencv-python - no models). ComfyUI Manager, search "Mickmumpitz", or:
cd ComfyUI/custom_nodes && git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes.git
Restart, find it under Mickmumpitz/OpenPosePartCropper as "OpenPose Part Crop".
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| pose_keypoint | POSE_KEYPOINT | — | |
| region | COMBO | right_hand | Left/right are anatomical (the subject's own side). 'right_hand' is the person's right hand, which usually appears on the LEFT of the image. Enable mirror_left_right if you prefer image-space sides. |
| person_indexopt | INT | 00–64 | — |
| paddingopt | FLOAT | 1.401–4 | — |
| make_squareopt | BOOLEAN | true | Square crops are convenient for detailers. |
| min_sizeopt | INT | 1288–4096 | — |
| output_resizeopt | INT | 10240–8192 | Resize the crop so its long side = this (0 = keep native size). |
| multiple_ofopt | INT | 81–64 | Force crop/output dims to a multiple of this (VAE-friendly). |
| mask_featheropt | INT | 160–512 | Feather used when stitching the crop back. |
| upscale_methodopt | COMBO | bicubic | 4 options: nearest, bilinear, bicubic, area |
| downscale_methodopt | COMBO | area | 4 options: nearest, bilinear, bicubic, area |
| mirror_left_rightopt | BOOLEAN | false | Left/right are anatomical (the subject's own side). 'right_hand' is the person's right hand, which usually appears on the LEFT of the image. Enable mirror_left_right if you prefer image-space sides. |
| confidenceopt | FLOAT | 0.050–1 | — |
| person_orderopt | COMBO | detection | How person_index is ordered when there are multiple characters. 'detection' = the detector's raw order (unstable between frames). 'left_right' = index 0 is the leftmost character, 1 the next, etc. Use left_right for a stable 2-character setup. |
| keypoint_indicesopt | STRING | Crop a box enclosing these BODY keypoint numbers instead of the named region. Leave empty to use 'region'. Examples: '4' | '2,3,4' | '2-4'. BODY_18: 0 nose, 1 neck, 2 R-shoulder, 3 R-elbow, 4 R-wrist, 5 L-shoulder, 6 L-elbow, 7 L-wrist, 8 R-hip, 9 R-knee, 10 R-ankle, 11 L-hip, 12 L-knee, 13 L-ankle, 14 R-eye, 15 L-eye, 16 R-ear, 17 L-ear. (R/L are the subject's anatomical sides.) |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| stitch | OPP_STITCH | — |
| cropped_image | IMAGE | — |
| cropped_mask | MASK | — |
| info | STRING | — |