Nodes/was-node-suite-comfyui/Tiled Diffusion Model Patch
ComfyUI Node Runs on cloud

Tiled Diffusion Model Patch

Tiled attention inside any sampler, no extension required

By WASasquatch·Created 4 years ago·Updated about 9 hours ago· 1,884
Tiled Diffusion Model Patch
  • model
  • model
◄tiling▾►
◄start_percent0.30►
◄end_percent1.00►

If you've done any tiled upscaling, you already know the shape of this: chop the image into overlapping tiles, run the model on each one, blend the seams. In A1111 that was the Tiled Diffusion extension; for years ComfyUI's version of it lived inside specific upscale nodes. This one is different - it's a model patch, so any sampler you own denoises tile by tile without knowing about it.

Why you'd reach for it

The usual complaint about a 2 MP or 4 MP render isn't noise, it's that the background has the detail budget of a postage stamp. A diffusion model at native resolution gives every pixel the same attention; give it a 2048-wide latent and the interesting small things - signage, foliage, distant faces - turn into mud. Tiling fixes that by making the model see each region at the size it was trained on, so background and foreground get the attention a whole frame would get.

It also keeps per-call attention memory bounded, which is a different lever from a VAE tiling fix. It is not free, though: every tile is a model call, so a 4×3 grid costs about twelve passes per step. That's why start_percent exists.

How it works

The node clones the model and installs two wrappers. One adjusts the noise shape the sampler prepares, the other intercepts the model call itself, plans a tile grid over the latent, crops each tile, runs it, and recombines with weights that sum to one across the overlaps. Tile starts and sizes snap to multiples of eight latent pixels so nothing drifts.

The clever bit is the range. Your start_percent and end_percent are converted to sigmas on the model's own curve, and the tiles only kick in between them. So 0.3 means the first 30% of the schedule is laid out whole-frame - composition, spacing, big shapes - and then the tiling takes over for detail. Set start_percent to 0 and you've got tiles from step one, which is how you get a beautiful patchwork of individually-nice regions that don't agree with each other.

A latent no bigger than one tile isn't tiled at all, which is a common reason a node like this "does nothing" on a 1024 render with auto tiling.

The inputs and outputs

model - the MODEL wire, straight off the loader or a LoRA.

tiling - auto uses the model's native tile: 512 for SD1-family, 1024 for everything else, sharing a quarter of a tile as overlap. manual reveals tile height, tile width and overlap in pixels, which is where you go when a specific seam keeps showing.

start_percent (default 0.3) and end_percent (default 1.0) - the share of the schedule where tiles are active. End at 0.9 and the last couple of steps run whole, which tidies up any faint grid.

The single model output feeds KSampler, SamplerCustom, anything that takes a MODEL. Because it's a patch, it composes with other patches: a flow shift before it, a RoPE patch after it, a guidance patch in between.

Installing it

ComfyUI Manager → search WAS Node Suite v3 → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

Requires ComfyUI 0.14.0+ and Python 3.10+. No pip step, no downloaded weights, no outbound calls. (The pack's older v2 line was notorious for installing a pile of packages and breaking on ComfyUI updates; that's gone, but it's why old threads make this look scary.)

Where it goes wrong

end_percent before start_percent. The node refuses outright and names both values. Harmless, just re-read the two boxes.

Seams. Two causes. Either you started tiling too early and lost whole-frame coherence, or your overlap is thin for the content - a busy texture needs more shared border than a sky does. Nudge start_percent up to 0.4–0.5, or switch to manual and raise the overlap.

It got slower and not better. That's the honest failure mode. On a model already sampling near its native size, tiling is mostly extra passes. Check what tile size auto is actually choosing: if your latent is 1408 wide and the tile is 1024, you're paying for a 2×2 grid to gain very little.

Expecting it to make an oversized model fit. It won't. This is a detail tool, not a VRAM one - the model still has to load, and if it doesn't, quantize it instead.

Order against the shift. A Flow Shift set before this node lays out only the whole-frame steps, because the patch rejoins the shifted curve to the model's native one where the tiles begin. Set after, and your tiles get the shifted schedule too. Before is almost always what you wanted.

CategoryWAS Suite/Sampling

Inputs (4)

NameTypeDefaultDescription
modelMODELThe diffusion model to patch; MODEL, such as from Load Diffusion Model.
tilingCOMBO`auto` = tiles the size the model was trained at, 512 for SD1 and 1024 for the rest, sharing a quarter of a tile; `manual` = set the tile size and overlap.
start_percentFLOAT0.300–1Share of the model's own noise schedule laid out whole before the tiles take over. 0 = tiled from the first step; 0.3 = the first 6 of 20 steps on simple; 0.5 = from sigma 0.87 on Flux 3 Klein.
end_percentFLOAT1.000–1Share of the model's own noise schedule where the tiles stop. 1 = tiled to the last step; 0.9 = the last 2 of 20 steps on simple run whole.

Outputs (1)

NameTypeDescription
modelMODELThe patched model, for KSampler or any sampler; MODEL. A latent no bigger than one tile is not tiled.