Synthid-Bypass-Facedetailer (Legacy)
The same face detailer under its old name — and why that's fine
- 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
If this node is in your list, it's probably because you loaded a workflow that was built before the pack cleaned up its naming. In the current pack it's registered as "Synthid-Bypass-Facedetailer (Legacy)", and here's the mildly anticlimactic truth: it is the exact same node as Synthid-Bypass-Facedetailer. Same class, same inputs, same behavior - the pack just registers the class twice, under a fresh name and this older one, so older workflows and downloaded JSON that reference SEGSDetailerModelSwap keep loading without breaking. If you're building a new graph, use the newer name; if you're reviving an old one, this page is the reassurance that nothing about it changed.
What it does (the mechanics, since you're here)
It's an Impact Pack SEGS detailer that skips the BASIC_PIPE and takes model, clip, vae, positive, and negative directly, so you can re-render detected faces with any loaded checkpoint - that's the "ModelSwap." The loop is the standard one from the Impact Pack playbook: crop each face from the SEGS input, upscale the crop toward guide_size (default 512, capped by max_size at 1024), run a masked sampling pass with the usual steps (8), cfg (1.0), sampler_name, scheduler, seed, and denoise (0.1), then hand you back refined SEGS to composite with SEGSPaste.
The interesting optional bit is adaptive_denoise. Toggle it on and denoise scales with face size instead of staying fixed:
applied_denoise = clamp(base_denoise * (face_ratio / adaptive_ratio), adaptive_denoise_min, adaptive_denoise_max)
adaptive_mode chooses between largest_face (one value from the biggest face, applied to all) and per_face (a value per detected face). adaptive_ratio (default 0.1) is the face share of the frame that maps to your base denoise, and the adaptive_denoise_min/max clamps (0.05/0.35) bound the whole thing. For the Synthid-Bypass workflow this is how the face pass avoids over-cooking a large face or under-treating a tiny one - but it's equally useful in a plain portrait pipeline where you just want the detail pass to behave sensibly across different shots.
Outputs are segs (into SEGSPaste), cnet_images (ControlNet previews), denoise_values (the applied denoise per segment), and denoise_report - a text log with each segment's bbox and exactly what denoise got applied, which is the fastest way to sanity-check the adaptive math.
Installing and troubleshooting
ComfyUI Manager won't auto-install this bundled pack, so do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/timothy692/Comfyui-SynthidBypass
then restart ComfyUI. No pip dependencies of its own, but it imports Impact Pack modules at load - ComfyUI-Impact-Pack must be installed and enabled, or the node errors on load. (RES4LYF is optional, only for matching the v2 workflow's sampler/scheduler exactly.) Other things that bite: the node rejects batched images (one image at a time), and if it's missing after restart, look for a nested Comfyui-SynthidBypass/Comfyui-SynthidBypass/ folder.
The one genuinely "legacy" thing about this node is the name. The behavior is current, maintained, and identical to its renamed sibling - so load that old workflow, breathe easy, and don't feel bad about keeping the old node in place.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| segs | SEGS | — | |
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| guide_size | FLOAT | 51264–16384 | — |
| guide_size_for | BOOLEAN | true | — |
| max_size | FLOAT | 102464–16384 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 81–10000 | — |
| cfg | FLOAT | 1.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 1 options: normal | |
| denoise | FLOAT | 0.100.0001–1 | — |
| noise_mask | BOOLEAN | true | — |
| force_inpaint | BOOLEAN | true | — |
| refiner_ratio | FLOAT | 0.200–1 | — |
| batch_size | INT | 11–100 | — |
| cycle | INT | 11–10 | — |
| refiner_model_optopt | MODEL | — | |
| refiner_clip_optopt | CLIP | — | |
| refiner_positive_optopt | CONDITIONING | — | |
| refiner_negative_optopt | CONDITIONING | — | |
| inpaint_modelopt | BOOLEAN | false | — |
| noise_mask_featheropt | INT | 200–100 | — |
| adaptive_denoiseopt | BOOLEAN | false | — |
| adaptive_modeopt | COMBO | largest_face | 2 options: largest_face, per_face |
| adaptive_ratioopt | FLOAT | 0.10000.0001–1 | — |
| adaptive_denoise_minopt | FLOAT | 0.050.0001–1 | — |
| adaptive_denoise_maxopt | FLOAT | 0.350.0001–1 | — |
| scheduler_func_optopt | SCHEDULER_FUNC | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| segs | SEGS | — |
| cnet_images | IMAGE | — |
| denoise_values | FLOAT | — |
| denoise_report | STRING | — |