ImageResizeWithBBox(FaceParsing)
Resize an image to a detected face box
- bbox
- image
- IMAGE
Take an image, take a bbox, get back an image resized to match that box. That's the entire node - it's the image-side counterpart to ImageResizeWithBBox's mask sibling, MaskCropWithBBox, and it exists for the same reason: this whole pack is built around working on a small, tightly-framed crop of a face rather than a whole picture, and something has to actually produce that crop.
Why the pack bothers cropping first
The README is upfront about this: the face-parsing model gets noticeably more accurate segmentation when it's handed a tight face crop instead of a full scene, which is why a YOLOv8 face detector runs first purely to locate the face before parsing even starts. That's the same underlying insight ADetailer and Impact Pack's FaceDetailer are built on - a face that's a small fraction of a large frame doesn't have enough pixels for a model to do its best work on, so you crop it out, work on it at a sensible resolution, then put it back. Those tools do detect-crop-inpaint; this pack does detect-crop-parse, and ImageResizeWithBBox is the crop step.
Practically, you'll see this node sitting right after your face detector, feeding a cropped, correctly-sized face into the segmentation model - and again later in more elaborate graphs, wherever something needs an image resized to line up with a bbox that was computed elsewhere (say, one derived from MaskToBBox after you've already got a parsed mask and want to re-crop the original image to match it more tightly).
Inputs and outputs - there's not much to configure
bbox- the target region. In the common case this comes straight from a face detector node; it can equally come fromMaskToBBoxin this pack if you're deriving your crop region from an existing mask instead.image- the image to resize.
There's no extra knob here - no interpolation mode, no separate width/height override. The bbox alone determines the output size; you don't get to fine-tune how the resize happens. Output is a single IMAGE, sized to the bbox, which typically wires straight into the face-parsing model node, or into a sampler if you're about to run a fresh generation pass on just that region.
Installing it
Through ComfyUI Manager: search comfyui_face_parsing, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Ryuukeisyou/comfyui_face_parsing.git
Restart ComfyUI afterward. The first workflow run that actually needs them will pull the face-parsing model files into models/face_parsing/ and the YOLOv8 face detector (face_yolov8m.pt) into models/ultralytics/bbox, both from HuggingFace (jonathandinu/face-parsing and Bingsu/adetailer). If your network can't reach HuggingFace reliably, the README has the direct file links for a manual drop-in.
Where this goes wrong
Because there's no interpolation control exposed, you don't have much to misconfigure - which also means when the output looks bad, the fault is almost always upstream. A blurry or badly-stretched crop usually means the bbox feeding this node is wrong: too small (barely covering the face, forcing an aggressive upscale that looks soft), badly positioned (off-center, half the face clipped), or aimed at the wrong image entirely - a leftover bbox from a previous node in a graph with multiple crop stages. If the resized output looks off, check the bbox with a debug/preview node before assuming this node itself is broken; it's doing exactly what the box tells it to, nothing more.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| bbox | BBOX | — | |
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |