Nodes/Universal Seamless Tiles/Make Circular VAE (DiT)
ComfyUI Node

Make Circular VAE (DiT)

Circular VAE decode done right — the half that actually kills the pixel seam

By OliverCrosby·Created 2 months ago·Updated 2 months ago· 14
Make Circular VAE (DiT)
  • vae
  • VAE
tiling
copy_vae

If you've ever made a "seamless" image in ComfyUI and still seen a hairline seam right at the canvas edge when you tile it, this node is the part of the fix you were missing. MakeCircularVAEDiT takes a VAE and patches its decoder so the edges wrap - the pixel-level seam disappears instead of getting baked into every tile.

Here's the context: the diffusion model works in a compressed latent space, and the VAE is what turns that latent back into pixels. You can have a perfectly periodic latent and still get a seam at decode time if the VAE's convolutions use normal padding. This node rewrites that padding to circular mode, so when you decode a tileable latent, the pixels at the right edge blend into the left edge the way they should. It handles the two VAE families that actually matter: Conv2d (SD/Flux AutoencoderKL) and Conv3d/CausalConv3d (Wan's video VAE) - and on Wan it preserves the causal temporal padding and the single-frame fast path, so you don't break video decode to fix an image.

The inputs that matter

Three inputs, all straightforward:

  • vae - the VAE you want to make tileable.
  • tiling - enable for both axes, x_only/y_only for a single axis, disable to leave it alone.
  • copy_vae - Make a copy (recommended) or Modify in place. The copy path deep-copies the VAE, which is the "don't poison my other workflows" option.

Wiring it in

The output is a VAE, and you feed it straight into a normal VAE Decode.

The honest part: it's only half the fix

Now the honest part: on its own, a circular VAE is not enough for a seamless texture. If you remember the SD-era "circular padding" workflow, the VAE fix was only half of it - the model itself also has to produce tileable structure, and on transformer models (Flux, Wan) the old conv-padding trick that handled that side does nothing. People have tried exactly this and reported back "circular VAE with no luck, frustrating." That's why this node is designed to be paired with its packmate SeamlessTileModelDiT: the model node rolls the latent during sampling so no fixed seam can form, and this node cleans up the actual pixel edge. Use both, set both to the same tiling mode, and then offset your output by 50% in x/y to confirm no seam appears. One without the other leaves you with a line somewhere.

Install

Install is painless - this pack ships no dependencies and downloads no model files. ComfyUI Manager: search "Universal Seamless Tiles". Or:

cd ComfyUI/custom_nodes
git clone https://github.com/OliverCrosby/ComfyUI-Universal-Seamless-Tiles

then restart ComfyUI.

Notes & gotchas

The one thing to watch: keep copy_vae on Make a copy unless you're deliberately patching a throwaway VAE, because in-place modification mutates the object other parts of your graph may share. It's a young, MIT-licensed, single-commit pack, so there's not much of a community trail yet - but the mechanism is sound and it's the piece that turns "tileable latent" into "actually tileable image" on DiT models.

Categorylatent

Inputs (3)

NameTypeDefaultDescription
vaeVAE
tilingCOMBO4 options: enable, x_only, y_only, disable
copy_vaeCOMBO2 options: Make a copy, Modify in place

Outputs (1)

NameTypeDescription
VAEVAE