ClownOptions Cycles
Unsample-and-resample loops for refinement
- options
- options
Cycles turns a single sampling pass into a refinement loop. The idea: after the sampler produces a result, you unsample it partway back toward noise and then resample it forward again, and repeat. Each round lets the model reconsider the image with the composition already roughly in place, which can clean up detail and coherence in a way a single forward pass doesn't. It's the same unsampling/RF-inversion family the pack is known for, packaged as an OPTIONS module you drop onto a sampler.
You'd use this when a one-shot generation is close but not quite settled - smearing that won't resolve, a face that's almost right, texture that's a little mushy. Rather than crank steps or re-roll the seed, you cycle it: nudge it back, run it forward, let convergence do the work.
How it works
The node configures the unsample leg of each cycle. cycles sets how many unsample/resample rounds to run. The unsample_* parameters control that backward pass - its eta, its CFG, whether bongmath is on, and optionally a different solver just for unsampling. The forward (resample) leg uses your main sampler settings. Package it as OPTIONS, feed it to the sampler, and the loop runs internally.
The inputs and outputs that matter
- cycles (
FLOAT, default 0) - how many refinement rounds. 0 means no cycling (the node is inert), so this is the one you must raise to make it do anything. 1–2 is plenty to start; each cycle costs another partial sampling pass. - unsample_eta (
FLOAT, default 0.5) - noise amount on the backward pass. Governs how much the image is disturbed before being resolved again. - unsample_cfg (
FLOAT, default 1) - CFG during unsampling; 1.0 (off) is the usual choice, matching the pack's advice that unsampling often needs no conditioning. - unsampler_override (default
none) - optionally run a different solver for the unsample leg;nonereuses your main sampler. - unsample_bongmath (
BOOLEAN, default false) - bongmath on the backward pass.
The single output is options (OPTIONS) - wire it to your RES4LYF sampler, or chain it with other ClownOptions nodes.
Installing it
ComfyUI Manager: search RES4LYF, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ClownsharkBatwing/RES4LYF/
cd RES4LYF
pip install -r requirements.txt
pip install in the venv or portable Python, restart, hard-refresh (F5). No downloads.
Where people get tripped up
The first surprise is that leaving cycles at 0 does nothing - it's the default, and the node is a no-op until you raise it. If you added the node expecting a change and saw none, that's why.
The second is cost and drift. Every cycle is roughly another sampling pass, so cycles of 3 means you're paying three-ish times the render time - this is not a free quality button. And too much cycling, or too high an unsample_eta, can walk the image away from what you wanted, softening or mutating it instead of refining it, because each backward pass gives the model room to change its mind. Start at one cycle with a modest eta, compare against the un-cycled result on the same seed, and add more only if it's genuinely improving. Like the other ClownOptions nodes, it's inert without a RES4LYF sampler to read the OPTIONS.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| cycles | FLOAT | 0.00–10000 | — |
| eta_decay_scale | FLOAT | 1.00-10000–10000 | Multiplies etas by this number after every cycle. May help drive convergence. |
| unsample_eta | FLOAT | 0.50-10000–10000 | — |
| unsampler_override | COMBO | none | 119 options: none, multistep/res_2m, multistep/res_3m, multistep/dpmpp_2m, multistep/dpmpp_3m, multistep/abnorsett_2m, +113 |
| unsample_steps_to_run | INT | -1-1–10000 | — |
| unsample_cfg | FLOAT | 1.00-10000–10000 | — |
| unsample_bongmath | BOOLEAN | false | — |
| optionsopt | OPTIONS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| options | OPTIONS | — |