Nodes/ComfyUI-FaceCalloutNode/Integrated Face Composite 🎭
ComfyUI Node

Integrated Face Composite 🎭

The two-image node that pastes a face callout onto any background

By theshubzworldΒ·Created about a year agoΒ·Updated 9 months agoΒ· 0
Integrated Face Composite 🎭
  • background_image
  • source_image_for_face
  • composited_image
β—„face_padding_percent0.20β–Ί
β—„callout_scale_factor1.0β–Ί
β—„callout_border_thickness5β–Ί
β—„callout_border_color#FFFFFFβ–Ί
β—„multiple_face_behaviorLargest Faceβ–Ί
β—„position_x_percent0.80β–Ί
β—„position_y_percent0.15β–Ί
β—„composite_scale_factor1.00β–Ί
β—„pivot_x_percent0.50β–Ί
β—„pivot_y_percent0.50β–Ί
β—„fallback_no_faceUse Blank Calloutβ–Ί

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_image and source_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, or Error. The trap here: if no face is found and you've picked Return 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.

Categoryimage/Layering

Inputs (13)

NameTypeDefaultDescription
background_imageIMAGEβ€”
source_image_for_faceIMAGEβ€”
face_padding_percentFLOAT0.200–1β€”
callout_scale_factorFLOAT1.00.1–3β€”
callout_border_thicknessINT50–30β€”
callout_border_colorSTRING#FFFFFFβ€”
multiple_face_behaviorCOMBOLargest Face2 options: First Detected, Largest Face
position_x_percentFLOAT0.80-0.5–1.5β€”
position_y_percentFLOAT0.15-0.5–1.5β€”
composite_scale_factorFLOAT1.000.05–5β€”
pivot_x_percentFLOAT0.500–1β€”
pivot_y_percentFLOAT0.500–1β€”
fallback_no_faceCOMBOUse Blank Callout3 options: Use Blank Callout, Return Background, Error

Outputs (1)

NameTypeDescription
composited_imageIMAGEβ€”