Nodes/ComfyUI Impact Pack/UnsamplerDetailerHookProvider
ComfyUI Node Runs on cloud

UnsamplerDetailerHookProvider

Reintroduce model-consistent noise on each detailer cycle

By ltdrdata·Created 3 years ago·Updated 4 months ago· 3,248
UnsamplerDetailerHookProvider
  • model
  • positive
  • negative
  • DETAILER_HOOK
steps25
start_end_at_step21
end_end_at_step24
cfg1.00
sampler_name
scheduler
normalize
schedule_for_cycle

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.

CategoryImpactPack/Detailer

Inputs (11)

NameTypeDefaultDescription
modelMODEL
stepsINT251–10000
start_end_at_stepINT210–10000
end_end_at_stepINT240–10000
cfgFLOAT1.000–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
normalizeCOMBO2 options: disable, enable
positiveCONDITIONING
negativeCONDITIONING
schedule_for_cycleCOMBO2 options: skip_start, from_start

Outputs (1)

NameTypeDescription
DETAILER_HOOKDETAILER_HOOK