Integrated Face Composite π
The two-image node that pastes a face callout onto any background
- background_image
- source_image_for_face
- composited_image
Picture the workflow: you generated a character shot you like, but the face deserves the hero treatment on a completely different backdrop. Or you want a thumbnail where a face callout sits over a clean scene. That's two images and one obvious job - cut the face out, circle it, glue it onto the background - and this node collapses all of it into a single step.
IntegratedFaceComposite takes a background image plus a separate source image for the face, runs the same circular-callout logic as the pack's IsolatedFaceCallout internally, then alpha-composites the result onto the background with real placement control. You don't wire nodes together or manage transparency yourself; you hand it both images and it returns one.
It's the one node in the pack I'd describe as genuinely workflow-shaped: two inputs in, one composited image out, no intermediate bookkeeping. Great for collages, picture-in-picture zoom effects, and "react" style layouts where the face floats in a circle over a scene.
How it works
The face detection is the same OpenCV Haar cascade bundled in the repo (no model download, CPU-only). The node crops and circles the face with your padding and border settings, then treats it as a transparent RGBA layer. It scales that layer by composite_scale_factor, works out where to paste it from position_x_percent / position_y_percent, applies the pivot_* offset, and merges with Image.alpha_composite.
The inputs that matter
background_imageandsource_image_for_face- both are required IMAGE inputs. The face is found in the second one.position_x_percent/position_y_percent- where the callout lands, as fractions of the background. Defaults are the top-right (0.8 / 0.15), and notice the range goes from β0.5 to 1.5: you can push the callout partially off-frame, which is handy for edge-bumping.composite_scale_factor- how big the sticker is relative to its natural size (0.05 to 5). This is the one you'll babysit most, because it depends on your background's resolution.pivot_x_percent/pivot_y_percent- which point of the callout is anchored at the position. Center (0.5/0.5) by default, which is usually what you want.callout_border_thickness/callout_border_color- the circle's rim. Default 5 is chunky; 0 gives a borderless face.fallback_no_face-Use Blank Callout(default),Return Background, orError. The trap here: if no face is found and you've pickedReturn Background, you silently get the untouched background - which can look like the node "did nothing." For batch runs that's often the safest choice, but it's worth knowing.
Output is a single composited_image IMAGE.
Install
Same pack as the other two nodes, so one install covers all three. ComfyUI Manager β search "FaceCallout" β install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/theshubzworld/ComfyUI-FaceCalloutNode
No model files to fetch. Needs torch, numpy, Pillow, and opencv-python - the pack ships no requirements.txt, so if a manual clone throws an import error about cv2, pip install opencv-python sorts it.
Issues you'll actually hit
The usual pack-wide caveats apply: the Haar cascade misses small faces, side profiles, and stylized art, and it's a single-frame node, so a batch input only processes its first frame. The "no face found β returned background silently" behavior is the one that'll genuinely confuse you mid-debug, so decide your fallback_no_face deliberately. And remember the callout is a hard circle - the person behind it still shows through the background where the circle doesn't cover, so pick a busy or solid backdrop, not a face-laden one.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| background_image | IMAGE | β | |
| source_image_for_face | IMAGE | β | |
| face_padding_percent | FLOAT | 0.200β1 | β |
| callout_scale_factor | FLOAT | 1.00.1β3 | β |
| callout_border_thickness | INT | 50β30 | β |
| callout_border_color | STRING | #FFFFFF | β |
| multiple_face_behavior | COMBO | Largest Face | 2 options: First Detected, Largest Face |
| position_x_percent | FLOAT | 0.80-0.5β1.5 | β |
| position_y_percent | FLOAT | 0.15-0.5β1.5 | β |
| composite_scale_factor | FLOAT | 1.000.05β5 | β |
| pivot_x_percent | FLOAT | 0.500β1 | β |
| pivot_y_percent | FLOAT | 0.500β1 | β |
| fallback_no_face | COMBO | Use Blank Callout | 3 options: Use Blank Callout, Return Background, Error |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| composited_image | IMAGE | β |