Nodes/ComfyUI-Texturaizer/Circular VAE Decode (Texturaizer)
ComfyUI Node

Circular VAE Decode (Texturaizer)

Decode latents into seamless, tileable textures

By LatentSpaceDirective·Created 2 years ago·Updated 8 months ago· 21
Circular VAE Decode (Texturaizer)
  • samples
  • vae
  • IMAGE
tiling

This is the node that gives away what Texturaizer is actually for underneath the Blender integration: generating textures that tile. A normal VAE decode treats the latent's edges as, well, edges - the generated image has a left side and a right side that have no idea about each other. Wrap a texture like that onto a 3D mesh's UVs and you get a visible seam wherever the edges meet. Circular VAE Decode fixes that at decode time by padding the convolution circularly instead of the usual zero-padding, so pixels near one edge factor in what's happening at the opposite edge - the output image tiles cleanly when repeated.

How it works

Standard convolutional decoding pads the edges of each feature map with zeros before the convolution kernel slides over them, which is exactly why the output has a seam: the model has no information about what's "beyond" the edge, so it doesn't try to make the edges match. Circular (a.k.a. "wrap") padding instead pads each edge with pixels copied from the opposite side, so the convolution genuinely sees the image as continuous - left wraps into right, top wraps into bottom. Run the whole VAE decode with that padding mode and the resulting image tiles seamlessly when you repeat it, which is exactly what you want for a material texture headed onto a 3D surface rather than a single standalone image.

The inputs and outputs that matter

  • samples - the latent to decode, same as any VAE Decode node.
  • vae - the VAE model to decode with.
  • tiling - an enum: enable, x_only, y_only, or disable. This is the one field that actually matters here. enable wraps both axes for a texture that tiles in every direction; x_only or y_only wraps a single axis, useful for something like a seamless horizontal band or a vertical repeat where the other axis genuinely has a top and bottom; disable falls back to a normal decode when you don't need tiling at all and just want this node to behave like the stock one.

Output is a single IMAGE, same shape as any VAE Decode output - save it, preview it, or feed it straight into whatever texture pipeline picks it up on the Blender side.

Installing it

ComfyUI Manager → search Texturaizer → Install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/LatentSpaceDirective/ComfyUI-Texturaizer

then restart ComfyUI. No extra models or dependencies - it decodes with whatever VAE you're already using, just with a different padding mode under the hood.

Where people get burned

Tiling only works if the content of the image cooperates, not just the edges - a texture with a clear directional light source, a single obvious focal object, or strong asymmetric composition will still tile without visible seams but will look obviously repeated the moment you tile it more than once or twice, because the content itself doesn't read as tileable even when the pixels technically wrap. That's a prompting and composition problem, not something this node can fix for you - think flat, evenly-lit, pattern-like material references (the kind of thing you'd actually put in a texture library) rather than a scene with a clear "up." And don't forget tiling defaults matter: leaving it on disable gets you a perfectly normal decode with none of the wrap behavior, so if your output has the seam you were trying to avoid, check this dropdown before assuming the model itself is the problem.

CategoryTexturaizer

Inputs (3)

NameTypeDefaultDescription
samplesLATENT
vaeVAE
tilingCOMBO4 options: enable, x_only, y_only, disable

Outputs (1)

NameTypeDescription
IMAGEIMAGE