Nodes/Mickmumpitz-Nodes/OpenPose Part Crop
ComfyUI Node

OpenPose Part Crop

Detail a hand, a face, or any pose region — without hand-drawing the mask

By mickmumpitz·Created 8 months ago·Updated 18 days ago· 48
OpenPose Part Crop
  • image
  • pose_keypoint
  • stitch
  • cropped_image
  • cropped_mask
  • info
regionright_hand
person_index0
padding1.40
make_squaretrue
min_size128
output_resize1024
multiple_of8
mask_feather16
upscale_methodbicubic
downscale_methodarea
mirror_left_rightfalse
confidence0.05
person_orderdetection
keypoint_indices

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

  • image and pose_keypoint - the source frame and its keypoints (from a pose detector, or from this pack's OpenPoseImageToKeypoints).
  • 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. Flip mirror_left_right if you think in image-space instead.
  • person_index - which person, when there are several. With two characters, set person_order to "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 - an OPP_STITCH handle 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".

CategoryMickmumpitz/OpenPosePartCropper

Inputs (16)

NameTypeDefaultDescription
imageIMAGE
pose_keypointPOSE_KEYPOINT
regionCOMBOright_handLeft/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_indexoptINT00–64
paddingoptFLOAT1.401–4
make_squareoptBOOLEANtrueSquare crops are convenient for detailers.
min_sizeoptINT1288–4096
output_resizeoptINT10240–8192Resize the crop so its long side = this (0 = keep native size).
multiple_ofoptINT81–64Force crop/output dims to a multiple of this (VAE-friendly).
mask_featheroptINT160–512Feather used when stitching the crop back.
upscale_methodoptCOMBObicubic4 options: nearest, bilinear, bicubic, area
downscale_methodoptCOMBOarea4 options: nearest, bilinear, bicubic, area
mirror_left_rightoptBOOLEANfalseLeft/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.
confidenceoptFLOAT0.050–1
person_orderoptCOMBOdetectionHow 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_indicesoptSTRINGCrop 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)

NameTypeDescription
stitchOPP_STITCH
cropped_imageIMAGE
cropped_maskMASK
infoSTRING