Nodes/Comfyui-SynthidBypass/Synthid-Bypass-Facedetailer
ComfyUI Node

Synthid-Bypass-Facedetailer

Face detailing where denoise scales with the face — and the model is yours to pick

By timothy692·Created 3 months ago·Updated 3 months ago· 0
Synthid-Bypass-Facedetailer
  • image
  • segs
  • model
  • clip
  • vae
  • positive
  • negative
  • refiner_model_opt
  • refiner_clip_opt
  • refiner_positive_opt
  • refiner_negative_opt
  • scheduler_func_opt
  • segs
  • cnet_images
  • denoise_values
  • denoise_report
guide_size512
guide_size_fortrue
max_size1024
seed0
steps8
cfg1.00
sampler_name
scheduler
denoise0.10
noise_masktrue
force_inpainttrue
refiner_ratio0.20
batch_size1
cycle1
inpaint_modelfalse
noise_mask_feather20
adaptive_denoisefalse
adaptive_modelargest_face
adaptive_ratio0.1000
adaptive_denoise_min0.05
adaptive_denoise_max0.35

Ignore the pack name for a second. This node is a face detailer, and a good one. It ships inside the Synthid-Bypass workflow (the one that re-noses an image through a diffusion pass to scramble Google's SynthID watermark), but the node itself is just the Impact Pack SEGS detail loop with two genuinely useful twists bolted on: it takes the model directly instead of hiding it behind a BASIC_PIPE, and it scales denoise to how much of the frame each face actually occupies. If you ever wanted FaceDetailer's behavior with your own checkpoint wired in and a denoise that stops being a guess, this is the version.

What it actually does

The loop is the same four steps every detailer runs, and you've seen them before: a detector hands you SEGS, the node crops each face, upscales the crop to guide_size, runs a fresh masked sampling pass, and you paste the result back with Impact Pack's SEGSPaste. Where this differs from stock SEGSDetailer is the "ModelSwap" part - instead of a BASIC_PIPE, you wire model, clip, vae, positive, and negative straight in from a checkpoint loader and CLIPTextEncode. That means you can re-render faces with a different checkpoint than the one that made the base image - a face-focused model, a lora you loaded separately, whatever. For the bypass workflow that's load-bearing: the detail pass re-renders the face region with whatever sampling the workflow already has in hand.

The part people actually talk about: adaptive denoise

The base denoise (default 0.1) is what every segment gets if you leave the optional adaptive_denoise toggle off. Turn it on and each face gets its own value:

applied_denoise = clamp(base_denoise * (face_ratio / adaptive_ratio), adaptive_denoise_min, adaptive_denoise_max)

adaptive_ratio (default 0.1) is the face-area share of the frame that maps to your base denoise; faces bigger than that scale denoise up, smaller faces scale it down, and the min/max clamps (defaults 0.05 and 0.35) keep it sane. Then adaptive_mode decides how it's applied: largest_face computes one value from the biggest face and applies it to every segment - good for a single portrait or a group where you want uniform treatment - while per_face gives each detected face its own. The intuition is simple: a face that fills half the frame and a face that's 90 pixels of a 1024 image should not be re-rendered at the same strength. One will be over-processed, the other barely touched.

The outputs you'll actually use

  • segs - the refined segments; wire into SEGSPaste to composite back onto the image.
  • denoise_report - a STRING, one line per segment, logging the bbox, both ratios, and exactly what denoise was applied. Paste it into a text viewer; it's the fastest way to see what the adaptive math decided.
  • cnet_images and denoise_values - ControlNet previews and per-segment denoise values, mostly for debugging or wiring into a display node.

The rest of the sampler inputs (steps default 8, cfg 1.0, sampler_name, scheduler, seed) behave exactly like a normal KSampler, and the optional refiner_* set lets you run a second pass.

Installing it

ComfyUI Manager's "Install Missing Custom Nodes" won't find this one - the README is explicit that it's a bundled pack from the workflow repo. Install manually:

cd ComfyUI/custom_nodes
git clone https://github.com/timothy692/Comfyui-SynthidBypass

then restart ComfyUI. (Or copy the folder into ComfyUI/custom_nodes/Comfyui-SynthidBypass; cloning the full Synthid-Bypass repo into custom_nodes/ also works because the repo root ships a compatibility loader.) It has no Python dependencies of its own, but it imports Impact Pack modules at load, so ComfyUI-Impact-Pack must be installed and enabled or the node throws on load. RES4LYF is optional - it's only needed if you want the exact sampler/scheduler pair the v2 workflow used.

Troubleshooting

  • Node not in your list after restart: the pack didn't load. Check for nested folders like Comfyui-SynthidBypass/Comfyui-SynthidBypass/.
  • It errors on load: Impact Pack is missing or disabled.
  • It refuses to run on an image batch - it raises if you feed more than one image at a time. One frame at a time.
  • A report line says skipped=empty_mask: the detector returned a segment with no mask pixels, and the node skipped it rather than breaking.
CategorySynthidBypass

Inputs (33)

NameTypeDefaultDescription
imageIMAGE
segsSEGS
modelMODEL
clipCLIP
vaeVAE
positiveCONDITIONING
negativeCONDITIONING
guide_sizeFLOAT51264–16384
guide_size_forBOOLEANtrue
max_sizeFLOAT102464–16384
seedINT00–18446744073709550000
stepsINT81–10000
cfgFLOAT1.000–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO1 options: normal
denoiseFLOAT0.100.0001–1
noise_maskBOOLEANtrue
force_inpaintBOOLEANtrue
refiner_ratioFLOAT0.200–1
batch_sizeINT11–100
cycleINT11–10
refiner_model_optoptMODEL
refiner_clip_optoptCLIP
refiner_positive_optoptCONDITIONING
refiner_negative_optoptCONDITIONING
inpaint_modeloptBOOLEANfalse
noise_mask_featheroptINT200–100
adaptive_denoiseoptBOOLEANfalse
adaptive_modeoptCOMBOlargest_face2 options: largest_face, per_face
adaptive_ratiooptFLOAT0.10000.0001–1
adaptive_denoise_minoptFLOAT0.050.0001–1
adaptive_denoise_maxoptFLOAT0.350.0001–1
scheduler_func_optoptSCHEDULER_FUNC

Outputs (4)

NameTypeDescription
segsSEGS
cnet_imagesIMAGE
denoise_valuesFLOAT
denoise_reportSTRING