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

DenoiseScheduleHookProvider

Ease denoise toward a target across an iterative upscale

By ltdrdata·Created 3 years ago·Updated 4 months ago· 3,242
DenoiseScheduleHookProvider
    • PK_HOOK
    schedule_for_iteration
    target_denoise0.20

    Impact Pack's Iterative Upscale splits a scale factor into a series of steps and resamples at each one. Left alone, every one of those steps uses whatever fixed denoise you set on the upscaler provider. DenoiseScheduleHookProvider builds a PK_HOOK that changes that: it gradually shifts denoise from wherever the upscaler starts toward a target_denoise as the iterations progress, per the README, "gradually changes the denoise to target_denoise as the iterative-step progresses."

    A PK_HOOK (Pixel-KSample Hook) is the upscale-side counterpart to a detailer's DETAILER_HOOK - a small plug-in behavior attached to an upscaler-provider node's hook slot that modifies something about each iteration as the loop runs. This one's job is denoise, specifically.

    Why ramp denoise instead of holding it fixed

    Early upscale steps are working from a coarser base and can usually tolerate more change; later steps are closer to the final image and a high denoise there risks drifting away from what you already built up. A common pattern is starting at a moderate denoise and easing it down toward a lower target_denoise as the passes accumulate, so the image keeps refining without the later steps overwriting what the earlier ones got right.

    The inputs and output

    • schedule_for_iteration - currently a single choice, simple. This picks the interpolation style used to move from the current denoise to target_denoise across the iteration count; simple is the only option exposed.
    • target_denoise (FLOAT, default 0.2, range 0–1, step 0.01) - the denoise value the schedule moves toward by the final iteration. A default this low tells you the built-in assumption: ease denoise down as the upscale progresses, landing on a light final touch rather than a heavy one.

    Output is a single PK_HOOK - wire it into the hook slot of an upscaler-provider node (PixelKSampleUpscalerProvider, PixelKSampleUpscalerProviderPipe, or the tiled/masked variants). If you also want to schedule CFG or steps at the same time, build those hooks separately and merge them first with PixelKSampleHookCombine - most upscaler providers only expose one hook input.

    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 - this is pure scheduling logic.

    Common issues & troubleshooting

    Denoise doesn't seem to change across iterations. Confirm the hook is actually wired into the upscaler provider node's hook input, not into Iterative Upscale itself - that top-level node doesn't take a PK_HOOK directly, only the provider feeding it does.

    Want to ramp CFG or steps too. This node only touches denoise. Its siblings are CfgScheduleHookProvider for CFG and StepsScheduleHookProvider for steps - build each separately, then fuse them with PixelKSampleHookCombine before the single hook slot on your upscaler provider.

    Later passes look washed out or over-smoothed. If target_denoise is too low relative to where you started, the tail end of the upscale barely changes anything and can leave earlier-pass artifacts baked in. Raise the target slightly, or reconsider whether a flat denoise would serve you better for this particular upscale.

    Is this worth the setup? For most iterative upscales a fixed denoise on the provider node is simpler and fine. Reach for this hook when you're specifically seeing over-aggressive changes on later passes and want the schedule handled automatically rather than hand-tuning one static value.

    CategoryImpactPack/Upscale

    Inputs (2)

    NameTypeDefaultDescription
    schedule_for_iterationCOMBO1 options: simple
    target_denoiseFLOAT0.200–1

    Outputs (1)

    NameTypeDescription
    PK_HOOKPK_HOOK