EasyKsampler (Downscale Unet)
Kohya Deep Shrink baked into the sampler
- pipe
- model
- pipe
- image
This sampler is Easy-Use's packaged version of a trick most people know as Kohya Deep Shrink: shrink the UNet's working resolution for the first chunk of sampling steps, then let it expand back to full size for the rest. It sounds backwards - why would generating at a lower resolution first help a high-resolution image? - but it's a genuinely well-established fix for a specific problem: pushing a model well past the resolution it was trained on tends to produce duplicated features (extra limbs, repeated heads, that "two people fused together" look), because the model's internal receptive field gets confused about scale. Doing the early steps at something closer to native resolution establishes a sane overall composition before the detail pass runs at full size.
How it works
Rather than pairing a separate downscale-patch node with a plain sampler, this node folds the whole technique into one box, reading its base settings (model, prompts, latent) off the pipe like every other Easy-Use sampler. The mechanism itself: for the steps between 0% and your end_percent, the UNet's internal feature maps get shrunk by downscale_factor; once you pass that percentage, it upscales back to the original working size and finishes sampling normally. The community's plain-language description of the same underlying node holds here too - it downscales the empty latent by the given factor, runs the early portion of your steps at that smaller size, then upscales back and runs the rest at full size, and the payoff is fewer duplicate/extra features in the final image, particularly when you're generating well above a model's native training resolution.
The inputs and outputs that matter
pipe- the required wire carrying model, prompts, latent, and sampling settings.downscale_mode- None, Auto, or Custom (default Auto). Auto picks sensible values for you; Custom hands you the block/factor/percent controls below directly.block_number(default 3) - which UNet block the downscale patch targets. Leave at default unless you're specifically tuning this technique.downscale_factor(default 2) - how much smaller the early steps run. 2 means half resolution during the shrink window.start_percent(default 0) /end_percent(default 0.35) - the window, as a fraction of total steps, during which the downscale is active. The community's rule of thumb for this exact technique: end it somewhere in the 30-40% range so the composition-setting phase happens small and the detail-refining phase happens at full size.downscale_after_skip(default true) anddownscale_method/upscale_method(bicubic, nearest-exact, bilinear, area, bislerp) - the interpolation used going down and coming back up. Defaults are reasonable; touch these only if you're chasing a specific artifact.image_output,link_id,save_prefix- the usual output-node plumbing shared across Easy-Use samplers.
Optional model input overrides the pipe's model at the last moment. Outputs: pipe (pass-through) and image.
Installing it
Ships with the base pack. ComfyUI Manager: search ComfyUI Easy Use, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install.bat on Windows or pip install -r requirements.txt, restart. No extra models - this is a pure sampling-time technique on whatever checkpoint your pipe already has loaded.
Common issues & troubleshooting
Only reach for this above native resolution. The whole benefit is specific to pushing a model past what it was trained on (the classic case: generating well above 1024x1024 on an SDXL-class model). Running it at or below native resolution buys you nothing and just adds an unnecessary shrink/grow round-trip to your sampling - leave downscale_mode on None for normal-resolution generations.
End percent set too high or too low. Too low and the shrink window barely runs, so you don't get the composition-stabilizing benefit; too high and you're doing too much of the actual detail work at reduced resolution, which can leave the image visibly softer than a normal full-resolution pass. Start near the 0.3-0.4 default and adjust from there rather than guessing from scratch.
Combining this with ControlNet and getting weird results. This is a known rough edge with the underlying technique in general - a shrinking/growing UNet mid-sample doesn't always play nicely with spatial conditioning that expects a fixed resolution throughout. If you're layering ControlNet on top and results look off, try disabling the downscale step first to isolate whether it's the interaction causing the problem.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | PIPE_LINE | — | |
| downscale_mode | COMBO | Auto | 3 options: None, Auto, Custom |
| block_number | INT | 31–32 | — |
| downscale_factor | FLOAT | 2.0000.1–9 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 0.3500–1 | — |
| downscale_after_skip | BOOLEAN | true | — |
| downscale_method | COMBO | 5 options: bicubic, nearest-exact, bilinear, area, bislerp | |
| upscale_method | COMBO | 5 options: bicubic, nearest-exact, bilinear, area, bislerp | |
| image_output | COMBO | Preview | 6 options: Hide, Preview, Save, Hide&Save, Sender, Sender&Save |
| link_id | INT | 00–9223372036854776000 | — |
| save_prefix | STRING | ComfyUI | — |
| modelopt | MODEL | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE_LINE | — |
| image | IMAGE | — |