UnsamplerDetailerHookProvider
Reintroduce model-consistent noise on each detailer cycle
- model
- positive
- negative
- DETAILER_HOOK
Every sampler in ComfyUI walks noise down to an image; an Unsampler runs that walk backwards - given a clean region and a model, it works out what noise, at a given step, would produce that region if you sampled forward from there. UnsamplerDetailerHookProvider wraps that idea into a DETAILER_HOOK, applying an Unsampler pass during each detailer cycle. Per the README: "Apply Unsampler during each cycle. To use this node, ComfyUI_Noise must be installed."
The practical effect: instead of a detailer just resampling a region at a fixed denoise, this hook re-derives the noise the region "should" have at a given step and reintroduces it, which is a more controllable - if more advanced - way to steer how much a cycle changes than a single denoise slider gives you. This needs BlenderNeko's ComfyUI_Noise installed separately; without it the hook can't function.
How it works
model, positive, negative, sampler_name, and scheduler describe the pass this hook runs as part of each detailer cycle - the same conditioning as your main detail pass, since the unsample step needs the model and prompt to work out what noise is consistent with them. steps is the total schedule length; start_end_at_step/end_end_at_step control roughly how far back into that schedule the hook unwinds, and matching this correctly to the sampler doing the forward pass is the part that matters most - mismatched step ranges are the most common way this hook produces mush instead of a controlled effect. cfg near the default of 1 keeps the round trip faithful; push it up once you understand the baseline behavior. normalize matters if the resulting noise feeds into something expecting normalized noise. schedule_for_cycle (skip_start / from_start) decides whether the effect ramps in from the very first cycle or is skipped ahead a bit.
The inputs and output
model/positive/negative- same conditioning as your detail pass.steps(default 25) - total schedule length for the unsample.start_end_at_step(default 21) /end_end_at_step(default 24) - where in that schedule the hook operates.cfg(default 1) - keep near 1 for a faithful round trip.sampler_name/scheduler- should generally match what the rest of your detail pass is using.normalize(disable/enable) - whether the output noise gets normalized.schedule_for_cycle(skip_start/from_start) - whether the effect applies from cycle one or ramps in.
Output is a single DETAILER_HOOK - wire it into a detailer's detailer_hook input.
How to install it
Via ComfyUI Manager: search ComfyUI Impact Pack, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack comfyui-impact-pack
cd comfyui-impact-pack
python -m pip install -r requirements.txt # ComfyUI's python; python_embeded on portable
then restart. Also install BlenderNeko/ComfyUI_Noise - search "ComfyUI Noise" in Manager, or clone it manually. Required, not optional.
Common issues & troubleshooting
Node errors or does nothing. Missing ComfyUI_Noise - check that first.
Detail pass looks like mush instead of a controlled effect. Your start_end_at_step/end_end_at_step almost certainly don't match the step range your detailer's own sampler is using for that cycle. These two need to line up with the forward-sampling pass, the same way an Unsampler's end_at_step needs to match a downstream sampler's start_at_step - mismatched ranges are the single most common source of garbage output with any Unsampler-based node.
Region barely changes at all. cfg much above 1 stops behaving like a faithful round trip; if you want a strong, controlled effect rather than near-identity, that's more steps/step-range tuning than raw cfg.
Not sure you need this over a plain detail pass. Most detailers work fine on a fixed denoise with no hook at all. This is an advanced tool for when you specifically want detailer cycles to reintroduce structured, model-consistent noise instead of a flat denoise - reach for it deliberately, not by default.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| steps | INT | 251–10000 | — |
| start_end_at_step | INT | 210–10000 | — |
| end_end_at_step | INT | 240–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 | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| normalize | COMBO | 2 options: disable, enable | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| schedule_for_cycle | COMBO | 2 options: skip_start, from_start |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| DETAILER_HOOK | DETAILER_HOOK | — |