Nodes/ComfyUI-seamless_latent_tiling/Seamless Color Harmonize ✦
ComfyUI Node

Seamless Color Harmonize ✦

The seam isn't content, it's color — fix that before you reach for inpainting

By mikemojen·Created 6 months ago·Updated 6 months ago· 0
Seamless Color Harmonize ✦
  • image
  • image
strip_width16
strength1.00
harmonize_xtrue
harmonize_ytrue

Ever tiled a texture and seen the seam - but the shapes line up fine and it's only a tone mismatch? Left edge slightly brighter than the right, or a faint color cast that doesn't carry across the boundary? That's not a content problem, that's a color problem, and inpainting is the wrong tool for it. This node measures the difference between opposing edges and smooths it out across the whole image.

It's the only post-processing node in the pack, and it sits after decoding. Run your image through it before you tile it, and the edge-to-edge color step disappears.

How it works

Straightforward and honest: it samples a strip of pixels along each edge, computes the per-channel mean difference between left and right (and top and bottom), then builds a smooth cosine ramp that goes from +half the difference at one edge to −half at the other. Add that gradient to the image and both edges meet in the middle. The author chose cosine over a linear ramp specifically so the correction doesn't create a hard bend line - the transition is soft across the full width.

One thing to keep in mind: this is a global gradient correction. It will not fix content that doesn't line up, like a leaf that's cut off mid-shape at the edge. It only fixes the color/brightness mismatch, which is exactly what it claims. If your edges already match in color, it's a near no-op - nothing to be afraid of either way.

The inputs you'll actually set

  • strip_width (default 16) - the width of the edge strip used to measure the difference, in pixels. Larger = more stable measurement but it averages over more of the image, which can wash out a tight local mismatch. The node also clamps it to a quarter of the image dimension internally, so you can't overreach.
  • strength (default 1.0) - the correction strength. 1.0 fully equalizes the measured difference, below 1 applies partial correction, above 1 overcorrects. The overcorrect direction is genuinely useful: if the strips underestimate the true edge difference - common when a pattern's detail varies near the edge - nudging strength to 1.1 or 1.2 often lands better than trying to widen the strip.
  • harmonize_x / harmonize_y - correct the horizontal and vertical edges independently. If you only care about one axis, disable the other so the correction doesn't touch it.

Output is a single image, ready to feed a save node or to continue into the offset + inpaint pair from this same pack.

Install

Same as the rest of the pack - ComfyUI Manager (search "ComfyUI-seamless_latent_tiling") or:

cd ComfyUI/custom_nodes
git clone https://github.com/mikemojen/ComfyUI-seamless_latent_tiling

Restart ComfyUI. It shows up under image/seamless. No requirements.txt, no model downloads - this is plain tensor math, so installation is a two-line affair and it can't fight your other nodes over dependencies.

When to reach for it

This is the one I'd describe as cheap insurance. Run your Seamless Latent Tiling output through it before saving, and if the edges almost meet it finishes the job without a regeneration. And if you're going the offset-and-inpaint route instead, harmonizing first shrinks what the inpaint pass has to fix - a smaller, less visible seam mask. If the color step is glaring, fix it here for free instead of asking an inpaint model to guess at it.

Categoryimage/seamless

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
strip_widthINT162–128Width of the edge strip (in pixels) used to measure the color difference. Larger = more stable measurement but averages over more of the image.
strengthFLOAT1.000–2Correction strength. 1.0 = fully equalize the measured difference. Values below 1 apply a partial correction. Values above 1 overcorrect (useful if strips underestimate the true edge difference).
harmonize_xBOOLEANtrueCorrect left↔right color difference.
harmonize_yBOOLEANtrueCorrect top↔bottom color difference.

Outputs (1)

NameTypeDescription
imageIMAGE