Nodes/DOGMA Nodes/DOGMA v35 Global Spatially-Aligned Noise
ComfyUI Node

DOGMA v35 Global Spatially-Aligned Noise

One noise field for every tile — why your seams were never a mask problem

By axior·Created 4 months ago·Updated 3 days ago· 1
DOGMA v35 Global Spatially-Aligned Noise
  • dac_data
  • noise
  • info
seed1976

Every tiled sampler has the same original sin: it hands each tile an independent random noise tensor. Move the seed along by one tile and you're sampling two unrelated images into a region they both cover, so the overlap has to be blended, and the blend is your grid. The masks are innocent. The prompts are innocent. It's the noise.

DOGMAAlignedTileNoiseV35 fixes it properly rather than papering over it. Two inputs - dac_data from DOGMAAlignedDacPrepareV35 and a seed (default 1976) - and two outputs: noise, a list of NOISE objects, one per tile in the grid, and info.

The mechanism

It builds one global noise field on the CPU at the working canvas's latent resolution: working_width / 16 by working_height / 16 for the channel count the latent asks for, generated from a single seeded generator and cached. Each tile gets a lightweight NOISE object that, when the sampler asks it for noise, crops that global field at the tile's global latent coordinate and returns it at the tile's shape.

Same seed, same field, one continuous draw across the whole canvas. Two tiles that share an overlap region literally see the same noise values there - the generation is globally consistent by construction, not blended after the fact. The 16 comes from the Flux-family VAE scale factor, and it's why the prep node snaps every tile origin and stride to multiples of 16: field cropping only lines up if both grids agree.

The node also handles the degenerate cases defensively - if the crop comes up short it pads by replication, and multi-batch latents get expanded - but with v35 geometry neither should trigger. info gives you the seed, the tile count and the global latent size, which is the number to sanity check against your grid (a 3072×2048 working canvas is a 192×128 latent field).

Wiring

dac_data in from the DAC prepare node, noise into your sampler. It's an OUTPUT_IS_LIST node, so one per-tile iteration downstream. Standard shape: prepare → encode → this node's noise + the sampler's sigmas into a custom-sampling pair per tile → the aligned stitch. With a Flux.2 Klein-family model at CFG 1 and 4-8 steps for the distilled variant (per our concepts notes, distilled is guidance-distilled so CFG stays 1; the 9B base runs 20-50 steps at CFG 4-5), a tile pass is cheap enough that this whole architecture is practical.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes

Or Manager → DOGMA Nodes, then restart. The pack declares no Python dependencies at all, so there's no install step to fight with. Nothing to download either - you bring the checkpoint. Note the repo README documents only the WAN VACE and sampler nodes; the v35 alignment family lives in the source.

Common issues

"dac_data" mismatch on the sampler input. The noise list length is set by the grid in dac_data. If you re-run the prep node with different tile_size or target_scale and keep an old cached noise list, the counts disagree. Re-run the whole chain.

Seams gone in the middle, still visible at the very edges. Edge tiles are the ones where alignment matters most, because the last tile in each axis is placed flush against the boundary. Check the ui string from the prep node says both strides are multiples of 16.

The image is subtly different from a single-tile render. It will be - the field is generated at the working canvas size, not the original. If you need a byte-exact match to a non-tiled render, don't tile.

Slow first tile. The field is generated once and cached per channel count, so the first call pays for it and the rest are crops. If every tile feels slow, something is re-instantiating the noise node.

CategoryDOGMA/Semantic Detailer

Inputs (2)

NameTypeDefaultDescription
dac_dataDAC_DATA
seedINT19760–18446744073709550000

Outputs (2)

NameTypeDescription
noiseNOISE
infoSTRING