Nodes/comfyui_scail2_multi_cond/SCAIL-2 Face Composite Back
ComfyUI Node

SCAIL-2 Face Composite Back

Paste your refined SCAIL-2 face back into the full-body video without a seam

By TTPlanetPig·Created 2 months ago·Updated 2 months ago· 143
SCAIL-2 Face Composite Back
  • full_body_video
  • refined_face_video
  • crop_masks
  • frames
  • summary
  • debug_preview
crop_manifest
feather_px8
mask_contract_px0
color_correctiontrue
color_match_methodlocal_mean_std
face_fit_modecenter_crop
frame_mismatch_modetrim_to_shortest
stitch_mask_expand_px0
stitch_mask_resize_modebilinear
stitch_offset_x_px0
stitch_offset_y_px0

Every two-pass face-detail pipeline ends the same way: you have a beautiful, high-res refined face video, and you have to get it back onto the original full-body footage without a visible edge. That's this node's entire job. SCAIL-2 Face Composite Back takes the refined crop from the second SCAIL-2 pass, the original full-body video, and the crop manifest + masks from SCAIL-2 Head Track Crop, and blends the face back in frame by frame.

The inputs that matter: full_body_video, refined_face_video, crop_masks (the MASK output from the crop node), and crop_manifest (its STRING output - paste it in, it's multiline JSON). The manifest is the source of truth for where each crop sits in the full-body frame; the node reads the CropAndStitch-style crop_to_canvas_bbox coordinates first and falls back to the legacy bbox field for older saved workflows, so workflows from before that field existed still composite correctly. It keeps crop_masks in the original crop canvas recorded by the manifest, cleans the mask there, fits the refined video back to that same canvas, then blends and pastes.

Color is the thing that separates a seamless paste from a glowing face plate. color_correction (default on) with color_match_method set to local_mean_std matches the refined face crop's mean and standard deviation to the target paste area before the feather blending - the standard "make this patch's tone match its surroundings" trick, applied locally. If you disable it, the node only blends by mask and you'll see the difference in skin tone instantly. face_fit_mode handles the case where the refined video's resolution doesn't match the manifest bbox: center_crop keeps aspect ratio and crops the center (default, and the safe choice), pad keeps aspect ratio and pads, stretch just resizes - pick stretch only when you're confident the distortion won't show.

The edge controls are the fine-tuning dials. feather_px (default 8) blurs the stitch mask so the transition is gradual instead of a hard line. mask_contract_px pulls the mask edge inward - if you see a faint halo of old face around the new one, raise this a couple of pixels. stitch_mask_expand_px grows it outward if the new face is cutting off the edge of the region. stitch_mask_resize_mode defaults to bilinear so soft feathered masks stay soft when the crop is resized back to the bbox; nearest exists only for hard-mask debugging. And if the pasted face lands a couple pixels off, stitch_offset_x_px and stitch_offset_y_px do the final nudge - the README notes the pasted face looking a touch too far right is the common case, fixed with a negative stitch_offset_x_px.

frame_mismatch_mode deals with tail frames: trim_to_shortest (default) trims all inputs to the shortest frame count and discards the extra trailing frames, while error keeps strict validation and throws. Default is the right call - a one-frame mismatch between the full-body video and the refined pass shouldn't kill a whole render. Outputs are frames (the composited video, ready for VHS_VideoCombine), a summary string, and debug_preview.

Install is the pack standard - ComfyUI Manager search comfyui_scail2_multi_cond, or git clone https://github.com/TTPlanetPig/comfyui_scail2_multi_cond into ComfyUI/custom_nodes and restart. Pure image processing, no extra Python packages.

Where people get burned: color. If you're pasting a face that was generated in a slightly different lighting regime, local_mean_std gets you most of the way but not all the way - the honest fix is often generating the face pass with the same color handling as the body pass in the first place. And if the paste wobbles frame to frame, that's usually a sign the crop node's tracking (or its mask_component_mode) let a body fragment into the mask, not a composite-back problem. Get the mask right and this node's seam just... isn't there.

CategorySCAIL-2/Scheduled/Face Detail

Inputs (14)

NameTypeDefaultDescription
full_body_videoIMAGE
refined_face_videoIMAGE
crop_masksMASK
crop_manifestSTRING
feather_pxINT80–128
mask_contract_pxINT00–128
color_correctionBOOLEANtrue
color_match_methodCOMBOlocal_mean_std2 options: local_mean_std, none
face_fit_modeCOMBOcenter_crop3 options: center_crop, pad, stretch
frame_mismatch_modeCOMBOtrim_to_shortest2 options: trim_to_shortest, error
stitch_mask_expand_pxINT00–128
stitch_mask_resize_modeCOMBObilinear2 options: bilinear, nearest
stitch_offset_x_pxINT0-128–128
stitch_offset_y_pxINT0-128–128

Outputs (3)

NameTypeDescription
framesIMAGE
summarySTRING
debug_previewIMAGE