Seamless Texture Checker — Find and Fix Tiling Seams
"Mean difference 23" means nothing on its own. The checker compares the wrap edges with the difference between two ordinary neighbouring lines inside the same tile, so the verdict says how much worse the seam is than the texture itself.

- TilesMeasured· Pillow
- Padded atlasMeasured· Pillow
- Seam reportMeasured· Pillow
What it does
- 2×2 and 3×3 repeat previews of the whole image (or any tile of a sheet).
- Left↔right and top↔bottom mean and worst difference, next to the same measurement inside the tile.
- Edge heatmap scaled against that interior difference, and an optional edge match against a second tile.
- Make seamless: half-offset and cross-fade across the seam, with before/after shown.
How to do it
- Drop the texture or tile.
- Read the verdict and the numbers per axis.
- Look at the heatmap and the repeat preview.
- Optionally make it seamless and download.
Outputs and how each was checked
"Measured" means the downloaded file was opened again outside the page (Pillow, numpy or an independent parser) and the property was measured. Loading these files in a game engine was not tested.
| Target | Files | Check |
|---|---|---|
| Tiles | tiles/tile-NNN.png · metadata.json | Measured PillowEvery sliced tile equals its source region pixel for pixel (margin, spacing, blanks, duplicates). |
| Padded atlas | padded-atlas.png | Measured PillowEdge pixels duplicated outward; the recorded atlas-padding quality checks pass in Chromium and Firefox. |
| Seam report | PNG (healed) · JSON measurements | Measured PillowA wrapping tile is reported seamless, a ramp is reported as a seam, and the healed tile's wrap differs by at most 8 levels. |
Evidence
Grid detection ranked the true grid first on 10 of 10 synthetic sheets (margin 1 / spacing 2 included); 13/13 sliced tiles byte-identical to their source regions; a 1600-tile slice finishes in 2.2 s and can be cancelled; seam verdicts measured against the tile's own interior.
Limits
- Regular grids only; above 4 megapixels the tile size is typed in instead of measured.
- Near-duplicate detection is a pixel threshold, not perceptual similarity.
- "Make seamless" changes the art inside its blend bands and synthesises nothing; before and after are shown.
- A tile smaller than 2 × 2 cannot be measured for seams.
Questions
Does "make seamless" change my art?
Yes, inside the blend bands: it offsets by half the tile and cross-fades. It synthesises nothing, and shows before and after.
Why is a noisy texture judged seamless with a big edge difference?
Because its interior differs just as much. The verdict compares the seam with the texture's own variation.
Is it free, and do I need an account?
Everything on these pages is free and works without an account. There is no watermark and no export that is held back.
Are my sprites uploaded?
No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.
Does it need Aseprite or an engine plugin installed?
No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).