DenoiseSchedulerDetailerHookProvider
Ramp denoise across a detailer's refine cycles
- DETAILER_HOOK
Detailer nodes have a cycle setting - how many refine passes to run on the same detected region before moving on. Run several cycles at a fixed denoise and you can either under-cook it (barely changes after the first pass) or over-cook it (each cycle keeps regenerating as hard as the first). DenoiseSchedulerDetailerHookProvider fixes that by building a DETAILER_HOOK that changes the denoise as the cycle count progresses, per the README: "During the progress of the cycle, the detailer's denoise is altered up to the target_denoise."
Think of it as the same idea as DenoiseScheduleHookProvider (its PK_HOOK sibling for Iterative Upscale), but scoped to a single detailer region's repeated cycles instead of an upscale's repeated steps.
How it works
Set a target_denoise and the hook shifts denoise toward it across however many cycles the detailer runs on that region. The intent is to let an early cycle do the heavy lifting at a higher denoise and later cycles settle into finer, lower-denoise touch-ups - rather than every cycle hammering the region with the same strength, which tends to either drift the result further each pass or waste cycles once it's already converged.
The inputs and output
schedule_for_cycle- currently a single choice,simple. Selects the interpolation used to move from the detailer's current denoise towardtarget_denoiseacross the cycle count;simpleis the only option exposed right now.target_denoise(FLOAT, default 0.3, range 0–1, step 0.01) - the denoise value the schedule eases toward by the final cycle. A default in the 0.3 range sits in the same conservative band the pack recommends for detail passes generally, which tells you this hook is built to land on a light finishing touch rather than a heavy regeneration.
Output is a single DETAILER_HOOK - wire it into a detailer's detailer_hook input. Combine with other hooks (a preview hook, noise injection) via DetailerHookCombine if you need more than one behavior at once, since most detailers only expose a single hook slot.
How to install it
Ships with the Impact Pack. 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. No models needed - pure scheduling logic layered on top of whatever detailer you attach it to.
Common issues & troubleshooting
No visible effect. Check two things: the detailer's cycle value is actually greater than 1 (a schedule across one cycle has nothing to ramp between), and the hook is genuinely wired into detailer_hook, not left dangling.
Later cycles look flat or barely different. If target_denoise is set well below your starting denoise, later cycles will intentionally make smaller and smaller changes - that's the schedule working as intended, not a bug. Raise the target if you want later cycles to still contribute meaningfully.
Region drifts more than expected across cycles. The inverse case - target_denoise set too high relative to where the region already is can keep regenerating aggressively instead of settling. Lower the target, or drop cycle back down if multiple passes aren't buying you anything on this particular detector.
Not sure you need this over a fixed denoise. Most single-cycle detail passes don't need it at all - this hook only matters once you're running multiple cycles on the same region and want the denoise to taper rather than stay flat across all of them.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| schedule_for_cycle | COMBO | 1 options: simple | |
| target_denoise | FLOAT | 0.300–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| DETAILER_HOOK | DETAILER_HOOK | — |