๐ฏ SpotDiffusion Parameters - Yaser
The knob that makes tiled diffusion stop leaving seams
- model
- MODEL
If you've ever generated a huge image with tiled diffusion, you know the failure mode: the final picture is gorgeous except for faint grid lines where every tile boundary landed. That's the classic tiled-sampling seam, and it happens because each tile starts from the same fixed grid position, every step. SpotDiffusion Parameters - Yaser is the fix: it randomizes where the tile grid sits on every sampling step, so no seam ever gets to build up in one place. One small node, and your 4K+ image stops looking like a window.
It's part of the tiled-diffusion lineage that made giant images on consumer GPUs routine - this pack's sibling TiledDiffusion node offers three methods (MultiDiffusion, Mixture of Diffusers, SpotDiffusion), and this node is the companion that tunes the SpotDiffusion side of things. The community has been running 8K workflows on 3090-class cards with exactly this trick, and the "shift the grid each step" idea is the bit that separates clean big images from seam-riddled ones.
How it works
Technically it's almost nothing - and that's the point. The node clones your model and stamps two values into its model_options:
- shift_method - how the per-step tile shifts are drawn.
random(default) samples a shift size from a uniform distribution each step.sortedsorts those random shifts into ascending order.fibonaccispaces them with Fibonacci-style gaps instead of letting them cluster. - seed - the RNG seed for those shifts, so a given seed produces a repeatable seam-free pattern.
The TiledDiffusion node reads those options during sampling and rolls the latent grid by the chosen amount at each step (tile_width and tile_height per step from torch.randint). Random-ish shifts mean the seams land somewhere different every step, so the model spends no step lining up a boundary that every other step reinforces. That's the whole trick - and it's why this node sits between your base MODEL and the TiledDiffusion node in the graph.
The inputs
- model - a
MODEL(typically coming from your checkpoint loader, before theTiledDiffusionnode). The clone with the options stamped on it comes out the other side. - shift_method -
random,sorted, orfibonacci. The tooltip says it plainly: samples a shift size over a uniform distribution to shift tiles. Start withrandom; tryfibonacciif you're chasing subtle seams. - seed - 0 to 2^64โ1. Set it and forget it, unless you're A/B testing.
Output is a MODEL, wired into TiledDiffusion's model input.
Install and caveats
cd ComfyUI/custom_nodes
git clone https://github.com/YaserJaradeh/comfyui-yaser-nodes.git
restart ComfyUI, or install via ComfyUI Manager ("Yaser-nodes"). The whole tiled-diffusion subsystem here is a port of the classic A1111 multidiffusion upscaler, and it patches into ComfyUI's sampler internals (tiling_utils.py hooks comfy.samplers) - which is exactly why this node lives in the _for_testing category. It works, and works well, but it's the kind of code that can break when ComfyUI changes its sampler internals. If a ComfyUI update lands and your tiled workflow silently misbehaves, this subsystem is the first suspect.
One honest note: SpotDiffusionParams only does anything when a TiledDiffusion node is actually in your graph reading those options. On its own, it just clones a model and does nothing visible. Wire it correctly and it quietly kills your seams.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | โ | |
| shift_method | COMBO | random | Samples a shift size over a uniform distribution to shift tiles. |
| seed | INT | 00โ18446744073709550000 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | โ |