Shima Sliced Upscaler
Upscale giant images on a small GPU by doing it in strips
- image
- upscale_model
- sliced_commons
- shima.commonparams
- image
- slices
Upscaling a 4096×4096 image with an ESRGAN-style model is a VRAM brick wall on an 8GB card - the model wants the whole image in memory at once. The classic escape is tiling: cut it up, process pieces, stitch. Shima Sliced Upscaler is that idea applied with a model-driven upscaler: it splits the image into overlapping strips, runs the UPSCALE_MODEL on each strip one at a time, then merges the results with feathered alpha-blending.
Two outputs come back: image (the fully merged, upscaled result - this is what you save) and slices (the batch of individual processed strips, for when you want to inspect or further process them).
The inputs that matter
image- what you're upscaling. Single image in, strips out.upscale_model- theUPSCALE_MODEL(e.g. an ESRGAN.pth). Leave it unconnected and the node becomes a pure slicer/combiner at 1× - it still splits and stitches, just without any scaling. That's the documented "1x mode."orientation-Vertical(strips along X) orHorizontal(rows along Y).slices- 2–10, default 4. More slices = smaller per-slice VRAM footprint but more seams to hide.overlap(default 64) andfeather_size(default 32) - the overlap gives neighboring strips shared pixels, and the feather blends them so the join disappears.feathering- master toggle; off forces overlap and feather to zero for hard edges.save_pieces/output_dir- optionally save the raw strips to disk (default foldershima_upscale_slicesunder ComfyUI's output dir). Handy for debugging seams.active- a bypass; when false the node passes the image straight through untouched. This lets you keep the node in a workflow and toggle it off without rewiring.sliced_commons/shima.commonparams/use_commonparams- the sync bundle overrides widgets; the commonparams dict can redirect the output dir into a project structure.
How it works
The clever part is model scale detection: it runs the upscaler on an 8×8 probe crop to learn the model's actual scale factor (2×, 4×…), then upscales each overlap-padded strip, and assembles a weight-averaged canvas so overlapping regions blend instead of doubling up. Padding extends each crop by the overlap on both sides, which keeps context at the seam - the same reason tile upscalers pad crops.
Installing it
Part of KDB-USJP/shima_wf:
cd ComfyUI/custom_nodes
git clone https://github.com/KDB-USJP/shima_wf
Restart ComfyUI. It uses core ComfyUI's ImageUpscaleWithModel, so no pack dependencies - just a UPSCALE_MODEL of your choosing.
The honest take
This is a lighter-weight cousin of Ultimate SD Upscale: it slices, upscales with a plain model, and merges - no diffusion pass, no ControlNet-tile conditioning. That means it's fast and predictable, but it only adds pixels, not generative detail. If "more detail" is what you want, a tiled-diffusion or SeedVR-style upscaler is the bigger hammer. Where this shines is the big-but-clean source image on a modest GPU. Set slices high enough that the largest strip fits comfortably in VRAM, keep overlap ≥ your feather, and the seams mostly vanish. If they don't, check that every slice went through the same sliced_commons orientation - mismatched geometry is the #1 cause of stitch artifacts.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| orientation | COMBO | Vertical | 2 options: Vertical, Horizontal |
| slices | INT | 42–10 | — |
| overlap | INT | 640–1024 | — |
| feather_size | INT | 320–512 | — |
| upscale_modelopt | UPSCALE_MODEL | — | |
| featheringopt | BOOLEAN | true | — |
| save_piecesopt | BOOLEAN | false | — |
| sliced_commonsopt | SLICED_COMMONS | — | |
| shima.commonparamsopt | DICT | — | |
| use_commonparamsopt | BOOLEAN | true | — |
| activeopt | BOOLEAN | true | — |
| output_diropt | STRING | shima_upscale_slices | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| slices | IMAGE | — |