FaceShaper Composite
Paste a reshaped face crop back into the full photo
- source_image
- cropped_image
- crop_info
- mask
- full_images
- mask
This is the third and final step of FaceShaper's V2 pipeline. FaceShaperCropper cut a face out of your photo and leveled it; FaceShaperMatchV2 reshaped it (or you ran a face swap on the reshaped crop, per the pack's own suggested workflow); now this node undoes the crop transform and pastes the result back where it came from, at the original scale and rotation.
What it does
It reads the crop_info produced by FaceShaperCropper - position, scale, and rotation of the original crop - and uses it to place cropped_image back into source_image at exactly the spot it was lifted from. This is what makes the whole crop-warp-composite loop invisible in the final output: without accurate crop_info, you'd have to manually figure out where and how big to paste the processed face back in, which is exactly the fiddly manual work this node exists to automate.
The inputs and outputs that matter
source_image(IMAGE) - the original, full, un-cropped photo you want the result composited into.cropped_image(IMAGE) - the processed face crop. This is typically theImage1output fromFaceShaperMatchV2, or the output of a face-swap node you ran on top of that - the README explicitly supports both orderings.crop_info(CROPINFO) - must come from the sameFaceShaperCropperrun that originally produced the crop being pasted back. This is what tells the node exactly where and how to place it.mask(MASK, optional) - controls the blend at the edges of the pasted region. If you don't provide one, wire inFaceShaperFaceMask's output when you want a soft, feathered edge instead of a hard rectangular paste.
Outputs: full_images (IMAGE) is the final composited photo - usually the last node in the chain, or the input to whatever detail pass you run afterward. mask (MASK) is the mask actually used for the composite, worth piping onward if you want to inspect it or feed it into a further inpaint/refine step.
Installing it
Through ComfyUI Manager, search "ComfyUI_FaceShaper," or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/fssorc/ComfyUI_FaceShaper
then restart ComfyUI. This node has no dependencies of its own - it's pure image compositing math using whatever crop_info you feed it, so nothing needs downloading specifically for it. Its correctness depends entirely on getting valid, matching inputs from earlier in the pipeline.
Common issues & troubleshooting
Visible seam or hard edge around the pasted face. Add a mask input from FaceShaperFaceMask, with a bit of blur and grow_tapered on - a hard-edged paste with no mask is the default behavior if you skip that input, and it will show.
The face lands in the wrong spot, or at the wrong size/rotation. This means crop_info doesn't match cropped_image - either it came from a different FaceShaperCropper run, or the wrong output got wired somewhere upstream. Trace back to confirm the crop_info you're feeding here is genuinely paired with the image you're feeding as cropped_image.
Result looks fine up close but wrong at full size. Check that source_image here is the original, uncropped photo - not a resized or otherwise altered copy of it. crop_info's coordinates are relative to the exact image FaceShaperCropper ran against; feeding a different-resolution version of that image in here will place the paste incorrectly.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| source_image | IMAGE | — | |
| cropped_image | IMAGE | — | |
| crop_info | CROPINFO | — | |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| full_images | IMAGE | — |
| mask | MASK | — |