Akatz Seamless Tile
Make your model tile
- model
- MODEL
You've done it: prompted for a brick texture, got a beautiful wall, and the moment you tile it side by side the seam is a crime scene. Akatz Seamless Tile fixes this at the source instead of in an editor. It patches the model so the image it generates is already seamless - tile it a hundred times and the edges flow into each other like nothing happened. That's the whole job, and it does it without you touching a pixel.
This is the node people actually mean when they say "seamless tiling" in ComfyUI. It's the direct descendant of spinagon's classic ComfyUI-seamless-tiling, which the community has used for years for game textures, tileable material maps, wallpapers, and pattern design. This pack re-implements it under the AK_ name and even registers the old node names as aliases, so workflows built against spinagon's pack keep working.
How it works
Every UNet-style diffusion model is a stack of Conv2d layers, and each one pads its input with zeros before convolving. Zero padding is exactly why your texture meets itself with a hard edge: at the border, the filter is reading "nothing," not "the other side of the image."
Akatz Seamless Tile swaps each convolution's padding mode to circular, so the left edge wraps around to the right edge and top wraps to bottom. To the model, the image is now a torus - there's no border, so there's no seam. That's the whole mechanism: no retraining, no LoRA, no magic. The tiling menu just decides which axes get the treatment.
enable- circular padding on both X and Y. Your classic wallpaper texture.x_only- seamless horizontally, not vertically. Great for long panorama strips you'll wrap around a cylinder.y_only- the vertical version, for the rare thing that tiles up/down but not left/right.disable- returns the model to normal padding. Handy for A/B testing in the same workflow.
One honest caveat, grounded in real reports: this trick works on UNet-style models - SD 1.5, SDXL, Flux - but not on DiT models like Qwen Image, which have no convolutional architecture to patch. If your texture isn't coming out seamless, check which family of model you're sampling before you blame the node.
The inputs that matter
Beyond tiling, the one beginners trip on is copy_model. "Make a copy" clones the model patcher before patching, leaving the original model untouched for the rest of your graph. This is the recommended default, and it's the pack's headline feature: the clone uses ComfyUI's model patcher clone() API rather than Python deepcopy, which is what kept breaking on current dynamic model patchers. "Modify in place" patches the model object you passed in - slightly cheaper, but every other branch wired to that model downstream is now seamless too, which is rarely what you want.
The single output is MODEL - wire it straight into your KSampler in place of the model from your checkpoint loader. Add a SaveImage and you have a seamless tile workflow in about four nodes.
Install
Easiest via ComfyUI Manager: search "Akatz Seamless Tiling" and hit Install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/akatz-ai/Akatz-Seamless-Tiling
Then restart ComfyUI. The pack's dependencies are just numpy and opencv-python-headless, both of which you almost certainly already have - this pack pulls no model files and calls no API. If a shared workflow also wants the depth-map nodes from this pack, grab ComfyUI DepthAnythingV2 and ComfyUI Depthflow separately; the README calls them out as requirements for those specific workflows, not for this node.
Troubleshooting
- No visible change in output - you're probably on a DiT model, or
tilingis set todisable. Verify the sampler is running off this node's MODEL output. - Other branches changed too - you used "Modify in place". Switch to "Make a copy".
- ComfyUI says a node is missing when loading an old workflow - this pack ships the old
SeamlessTile/CircularVAEDecodenames as compatibility aliases, so old workflows should load cleanly after install.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| tiling | COMBO | 4 options: enable, x_only, y_only, disable | |
| copy_model | COMBO | 2 options: Make a copy, Modify in place |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |