KSampler Adv. Fooocus
The Fooocus sampler, split across passes
- model
- positive
- negative
- latent_image
- LATENT
This is Fooocus_KSampler's bigger sibling: same Fooocus-flavored sampling - including the sharpness knob that fights SDXL's tendency toward plastic-looking skin - but built for runs that need to be split across more than one sampler call instead of denoised in a single pass. If you've used ComfyUI's built-in KSampler (Advanced) for a base-model-then-refiner handoff, or to resume sampling on a latent that's already partway denoised, this is that same shape with Fooocus's tricks layered on top.
Fooocus itself has been frozen at SDXL-only, bug-fixes-only since August 2024 - its author pointed anyone wanting newer architectures at Forge or ComfyUI and isn't developing it further. What made Fooocus's output distinctive wasn't the app, though, it was a handful of internal tricks including a low-weight self-attention-guidance term tuned specifically against waxy skin. This node carries that trick into a live, still-updated ComfyUI graph, in the multi-pass form.
How it works
The mechanism is standard split-sampling: instead of denoising a latent from full noise straight through to steps, you tell the node which slice of the schedule to run (start_at_step to end_at_step) and whether to add fresh noise at the start or continue from an already-noisy latent. Chain two of these nodes - one covering the early steps, a second continuing where the first left off, possibly with a different model or LoRA stack in between - and you get a base/refiner-style two-stage generation. The sharpness guidance rides along on every pass, same as the simple version.
The inputs and outputs that matter
Everything from a stock advanced sampler is here: model, noise_seed, steps (default 20), cfg (default 8), sampler_name / scheduler (the full 44-sampler, 9-scheduler lists), positive/negative, and latent_image. Four fields specifically manage the split:
add_noise(enable/disable) -enablefor a pass that starts from pure noise (your first stage);disableto continue denoising an already-noisy latent handed off from a previous sampler, without injecting fresh noise on top.start_at_step/end_at_step- which slice of thestepsschedule this call actually runs. A first-stage node might run steps 0–15 of 20; a second-stage node picks up at 15 and runs to the end.return_with_leftover_noise(disable/enable) -enableif this pass hands off to another sampler afterward (keeps some noise in the latent for the next stage to consume);disableon the final pass so you get a fully denoised result ready for VAE decode.
Plus the same sharpness dial as the simple node (optional, default 2, 0–100) - the Fooocus anti-plastic-skin trick, subtle by default.
Output is a single LATENT.
How to install it
Ships with the Art Venture pack. ComfyUI Manager: search comfyui-art-venture, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/sipherxyz/comfyui-art-venture
then pip install -r comfyui-art-venture/requirements.txt and restart. No model download - it's a sampler.
Common issues & troubleshooting
Just want one clean pass - this feels like overkill. It is, for that case. Use the plain Fooocus_KSampler instead; it has a normal denoise dial and none of the step/noise bookkeeping.
Double-denoised, mushy output when chaining two of these. Check return_with_leftover_noise on the first-stage node - it needs to be enable so the second stage receives a latent that still has noise left to work with. Leave it disable only on your last stage.
Artifacts or a hard seam partway through the image. start_at_step/end_at_step on the two nodes don't line up - gaps or overlaps in the step range produce exactly this. The second node's start_at_step should equal the first node's end_at_step.
Skin still looks flat even with sharpness cranked up. The effect is subtle by design - Fooocus's own default is low for a reason. Also check your CFG isn't past the point where SDXL starts burning out regardless (5–9 is the usual sweet spot); no amount of sharpness fixes an already-oversaturated image.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| add_noise | COMBO | 2 options: enable, disable | |
| noise_seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| start_at_step | INT | 00–10000 | — |
| end_at_step | INT | 100000–10000 | — |
| return_with_leftover_noise | COMBO | 2 options: disable, enable | |
| sharpnessopt | FLOAT | 2.000–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |