ClownGuides Sync_Advanced
The kitchen-sink guide behind RES4LYF faceswaps
- guide_masked
- guide_unmasked
- mask
- mask_sync
- mask_drift_x
- mask_drift_y
- mask_lure_x
- mask_lure_y
- weights_masked
- weights_unmasked
- syncs_masked
- syncs_unmasked
- drift_xs_masked
- drift_xs_unmasked
- drift_ys_masked
- drift_ys_unmasked
- lure_xs_masked
- lure_xs_unmasked
- lure_ys_masked
- lure_ys_unmasked
- guides
This is the most parameter-dense node in RES4LYF, and it's not close. ClownGuides Sync Advanced exposes the full guidance machine - separate masked and unmasked control over weight, "sync," "drift" on two axes, and "lure," each with its own scheduler, step window, and mask. It's the node under the pack's zero-shot faceswap and universal style-transfer workflows, where the author needed to guide masked and unmasked regions of an image along different trajectories at the same time.
The context is worth it. The author built the sync guide mode specifically to fight the classic problem with zero-shot faceswaps: source-image color and lighting bleeding into the result. As he put it, PuLID-style methods leave you "more likely to end up with some part of the source image in your generation, such as incongruously colored hair or uncanny lighting," and the sync mode plus scattersort were his answer. This node is where that control lives at full resolution.
How it works
Like every RES4LYF guide it builds a GUIDES bundle for the sampler's guides input. What makes it "advanced" is that almost every effect is split into a masked and an unmasked channel - so the face region and the background can be guided independently. On top of the base guide weight it layers three more families of control: sync (how tightly the guide locks the generation to the reference), drift on X and Y (directional pull of the guided content), and lure (an iterative attraction with its own sequence order). Each of those has masked/unmasked weights, a scheduler, and start/end steps. It's a mixing desk, not a single knob.
The inputs and outputs that matter
Do not try to set all of these by hand. The load-bearing ones:
guide_masked/guide_unmasked(LATENT, optional) - references for the masked region and everything else.mask(MASK, optional) - the region split; there are also per-effect masks (mask_sync,mask_drift_x, …) for finer separation.weight_masked/weight_unmasked(FLOAT, default1) - the base strengths. Start here.sync_masked/sync_unmasked(FLOAT) - how hard each region syncs to its guide; the defaults (masked 0, unmasked 1) are tuned for the faceswap case.- The
drift_*andlure_*families plus every*_scheduler_*and*_step_*- advanced shaping. Leave at defaults until you have a reason.
Output is a guides (GUIDES) bundle for the sampler.
How to install it
ComfyUI Manager: search RES4LYF, install, restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/ClownsharkBatwing/RES4LYF/, pip install -r requirements.txt in the venv (portable: embedded python's pip), restart, hard-refresh F5. Do not build this from scratch - load one of the pack's faceswap or style-transfer example workflows and adjust from there. Nested sampler menu: rgthree-comfy with "Auto Nest Subdirectories" on.
Common issues
The honest warning: this node is where people get overwhelmed and conclude RES4LYF is impenetrable. With this many masked/unmasked pairs, it is very easy to set contradictory values - a sync that fights a drift, a masked window that doesn't overlap its unmasked counterpart - and end up with mush and no idea which of forty parameters caused it. Start from a working example workflow, change one channel at a time, keep the seed fixed.
Faceswap-specific: likeness is inherently limited with zero-shot methods (the author says so himself - loras are still the best method), and this node won't fix a weak PuLID embed. If the face is off, the fix is usually upstream (better reference, more zoom on the face), not another pass through these knobs. And the pack-wide scheduler trap applies across every scheduler field here: bong_tangent ignores the workflow's shift, so if a channel misbehaves, try beta57 or constant first.
Inputs (81)
| Name | Type | Default | Description |
|---|---|---|---|
| weight_masked | FLOAT | 1.00-100–100 | Set the strength of the guide. |
| weight_unmasked | FLOAT | 1.00-100–100 | Set the strength of the guide_bkg. |
| weight_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| weight_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| weight_start_step_masked | INT | 00–10000 | — |
| weight_start_step_unmasked | INT | 00–10000 | — |
| weight_end_step_masked | INT | 30-1–10000 | — |
| weight_end_step_unmasked | INT | -1-1–10000 | — |
| sync_masked | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| sync_unmasked | FLOAT | 1.00-100–100 | Set the strength of the guide_bkg. |
| sync_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| sync_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| sync_start_step_masked | INT | 00–10000 | — |
| sync_start_step_unmasked | INT | 00–10000 | — |
| sync_end_step_masked | INT | -1-1–10000 | — |
| sync_end_step_unmasked | INT | -1-1–10000 | — |
| drift_x_data | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| drift_x_sync | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| drift_x_masked | FLOAT | 1.00-100–100 | Set the strength of the guide. |
| drift_x_unmasked | FLOAT | 0.00-100–100 | Set the strength of the guide_bkg. |
| drift_x_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| drift_x_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| drift_x_start_step_masked | INT | 00–10000 | — |
| drift_x_start_step_unmasked | INT | 00–10000 | — |
| drift_x_end_step_masked | INT | -1-1–10000 | — |
| drift_x_end_step_unmasked | INT | -1-1–10000 | — |
| drift_y_data | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| drift_y_sync | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| drift_y_guide | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| drift_y_masked | FLOAT | 1.00-100–100 | Set the strength of the guide. |
| drift_y_unmasked | FLOAT | 0.00-100–100 | Set the strength of the guide_bkg. |
| drift_y_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| drift_y_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| drift_y_start_step_masked | INT | 00–10000 | — |
| drift_y_start_step_unmasked | INT | 00–10000 | — |
| drift_y_end_step_masked | INT | -1-1–10000 | — |
| drift_y_end_step_unmasked | INT | -1-1–10000 | — |
| lure_x_masked | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| lure_x_unmasked | FLOAT | 0.00-100–100 | Set the strength of the guide_bkg. |
| lure_x_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| lure_x_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| lure_x_start_step_masked | INT | 00–10000 | — |
| lure_x_start_step_unmasked | INT | 00–10000 | — |
| lure_x_end_step_masked | INT | -1-1–10000 | — |
| lure_x_end_step_unmasked | INT | -1-1–10000 | — |
| lure_y_masked | FLOAT | 0.00-100–100 | Set the strength of the guide. |
| lure_y_unmasked | FLOAT | 0.00-100–100 | Set the strength of the guide_bkg. |
| lure_y_scheduler_masked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| lure_y_scheduler_unmasked | COMBO | constant | 12 options: constant, simple, sgm_uniform, karras, exponential, ddim_uniform, +6 |
| lure_y_start_step_masked | INT | 00–10000 | — |
| lure_y_start_step_unmasked | INT | 00–10000 | — |
| lure_y_end_step_masked | INT | -1-1–10000 | — |
| lure_y_end_step_unmasked | INT | -1-1–10000 | — |
| lure_iter | INT | 00–10000 | — |
| lure_sequence | COMBO | y -> x | 3 options: x -> y, y -> x, xy -> xy |
| invert_mask | BOOLEAN | false | — |
| invert_mask_sync | BOOLEAN | false | — |
| invert_mask_drift_x | BOOLEAN | false | — |
| invert_mask_drift_y | BOOLEAN | false | — |
| invert_mask_lure_x | BOOLEAN | false | — |
| invert_mask_lure_y | BOOLEAN | false | — |
| guide_maskedopt | LATENT | — | |
| guide_unmaskedopt | LATENT | — | |
| maskopt | MASK | — | |
| mask_syncopt | MASK | — | |
| mask_drift_xopt | MASK | — | |
| mask_drift_yopt | MASK | — | |
| mask_lure_xopt | MASK | — | |
| mask_lure_yopt | MASK | — | |
| weights_maskedopt | SIGMAS | — | |
| weights_unmaskedopt | SIGMAS | — | |
| syncs_maskedopt | SIGMAS | — | |
| syncs_unmaskedopt | SIGMAS | — | |
| drift_xs_maskedopt | SIGMAS | — | |
| drift_xs_unmaskedopt | SIGMAS | — | |
| drift_ys_maskedopt | SIGMAS | — | |
| drift_ys_unmaskedopt | SIGMAS | — | |
| lure_xs_maskedopt | SIGMAS | — | |
| lure_xs_unmaskedopt | SIGMAS | — | |
| lure_ys_maskedopt | SIGMAS | — | |
| lure_ys_unmaskedopt | SIGMAS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| guides | GUIDES | — |