Nodes/Yaser-nodes for ComfyUI/๐ŸŽฏ SpotDiffusion Parameters - Yaser
ComfyUI Node

๐ŸŽฏ SpotDiffusion Parameters - Yaser

The knob that makes tiled diffusion stop leaving seams

By YaserJaradehยทCreated about a year agoยทUpdated 11 months agoยท 8
๐ŸŽฏ SpotDiffusion Parameters - Yaser
  • model
  • MODEL
โ—„shift_methodrandomโ–บ
โ—„seed0โ–บ

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. sorted sorts those random shifts into ascending order. fibonacci spaces 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 the TiledDiffusion node). The clone with the options stamped on it comes out the other side.
  • shift_method - random, sorted, or fibonacci. The tooltip says it plainly: samples a shift size over a uniform distribution to shift tiles. Start with random; try fibonacci if 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.

Category_for_testing

Inputs (3)

NameTypeDefaultDescription
modelMODELโ€”
shift_methodCOMBOrandomSamples a shift size over a uniform distribution to shift tiles.
seedINT00โ€“18446744073709550000โ€”

Outputs (1)

NameTypeDescription
MODELMODELโ€”