Nodes/ComfyUI-TextureAlchemy/Seamless Tiling Maker
ComfyUI Node

Seamless Tiling Maker

Killing the visible seam before it reaches your material

By amtarr·Created 9 months ago·Updated 4 months ago· 58
Seamless Tiling Maker
  • image
  • image
  • edge_mask
methodblend_edges
blend_width0.10

A texture only becomes a material when it tiles. The moment you repeat a photo across a floor, the hard edge where left meets right screams "AI scan." Seamless Tiling Maker is the pack's answer: it rewrites the edges so the texture wraps around without a visible boundary, and it hands you an edge_mask for the one case where the math alone isn't enough.

How it works

You pick a method, and each is a genuinely different trick:

  • mirror - flips the image left-right, top-bottom, and both, then averages all four. It's the fastest and it's shockingly good for organic textures like rock and bark, because mirroring a pattern reads as the same pattern.
  • blend_edges (default, and the one the author calls "best") - cross-fades the top edge into the bottom and the left into the right over a region controlled by blend_width (a fraction of the image, 0–0.5). Smoother than mirror, and the right default.
  • offset - rolls the image by half in both directions with torch.roll, which moves the seam to the exact middle as a cross. This one is a preparation step: it exposes the worst seam dead-center where you can inpaint it away.

blend_width doubles as the feather width for the edge mask, so it controls both how far the blend extends and how soft the mask is.

The edge_mask is the real feature

This is the part most tiling nodes skip. The edge_mask output is white at the seams and black in the center. In offset mode it marks that center cross precisely. That's a ready-made inpaint mask: you run the texture through a masked inpaint, feed the mask here, and let the model sew the seam properly - the mask-guided cleanup that classic inpainting still owns. Masked inpainting hasn't gone anywhere even in the age of instruction editors; what it still uniquely gives you is leaving the rest of the pixels untouched, and that's exactly what seam repair wants.

The two inputs that matter

method and blend_width, that's it. image in, image + edge_mask out. About as minimal as a texture node gets.

Installing it

In the amtarr/ComfyUI-TextureAlchemy pack. ComfyUI Manager → search "Texture Alchemy", or:

cd ComfyUI/custom_nodes
git clone https://github.com/amtarr/ComfyUI-TextureAlchemy

Restart, then right-click → Add Node → Texture Alchemist → Texture. No extra dependencies, no model files.

Where people get burned

blend_edges and mirror fix discontinuities, not lighting gradients. If your source photo has a shadow falling across it, you'll still see a brightness step repeat no matter how you blend the edges - that's a job for the pack's Texture Equalizer first. And if the texture has a strong directional element like wood grain, mirroring can create a telltale "butterfly" pattern; switch to offset plus inpainting instead. The pack prints a console banner on every run, which is normal. Don't crank blend_width past ~0.25 for photography - wide blends turn the center of your texture into mush.

CategoryTexture Alchemist/Texture

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
methodCOMBOblend_edgesTiling method: mirror (fastest), blend_edges (best), offset (simple)
blend_widthFLOAT0.100–0.5Edge blend width (0-0.5, fraction of image)

Outputs (2)

NameTypeDescription
imageIMAGE
edge_maskIMAGE