Twelve procedural patterns that tile exactly, verified live with a measured wrap error and a 3 by 3 repeat view. Perlin, fractal, ridged, Voronoi, marble, wood and geometric grids.
Initializing in your browser…
Remove backgrounds from images with smart edge detection. Supports color picker, corner detection, and preset colors with adjustable tolerance.
Generate favicons and app icons in all required sizes. Supports iOS, Android, Windows, and web platforms with one-click preset generation.
Create sprite sheets from multiple images with JSON metadata, or slice existing sprite sheets into individual frames. Perfect for game development.
You need a seamless tileable noise texture for a CSS background that does not show its repetition.
Input
Fractal noise · 4 features · warp 0.3 · 512x512 PNG
Output
texture-fbm-1234-512.png, wrap error 6.7e-16, no seam in the 3x3 repeat
Tiling here is structural: the Perlin lattice wraps modulo an integer period and each fractal octave doubles both frequency and period, so every layer meets on the same boundary. Sampling one tile over returns the identical value, which the tool measures and shows you. The 3 by 3 preview is where a seam would be obvious, and it is the view the texture will actually be used in.
Generate procedural textures that genuinely tile. Twelve patterns from Perlin and fractal noise to Voronoi, marble, wood and geometric grids, all built from functions that wrap exactly across the tile. A live 3 by 3 repeat and a measured wrap error show you the seam really is gone.
Produce a subtle repeating background that covers any viewport without showing where the tile ends.
Generate seamless diffuse, roughness or height maps that join cleanly across adjacent surfaces.
Build a repeating motif for wrapping paper, fabric or packaging where the repeat must be invisible.
Make quick abstract imagery for mockups without hunting for stock images or worrying about licensing.
Pick fractal noise at 4 features with a low contrast gradient, check the 3 by 3 repeat shows no seam, and export 512 pixels. Set it as a CSS background-repeat and it covers any size without the tell-tale grid of a badly tiled texture.
Choose ridged noise at 6 octaves, turn contrast up a little and export 1024 in greyscale by setting both gradient stops to black and white. Because it tiles exactly, adjacent terrain chunks join without a ridge along the seam.
Load the Stone preset, which is Voronoi at 8 cells with a warm grey gradient. Voronoi feature points wrap on a torus, so the cells continue across the tile edge instead of being clipped.
Seamless tiling is this tool's headline claim, so it is now structural rather than a checkbox. Every pattern is built from functions that are periodic across the tile: the Perlin gradient lattice wraps modulo an integer period, each fractal octave doubles both its frequency and its period so all layers meet on the same boundary, Voronoi feature points live on a wrapping cell grid, and the geometric patterns are locked to whole numbers of features. The result is that sampling one tile to the right or one tile down returns the identical value, measured in the browser at around ten to the minus fifteen, which is floating point noise. The panel shows that wrap error live, next to a 3 by 3 repeat of the current texture, so you can see for yourself that the edges meet.
That matters because the previous version did not tile. Its seamless branch handled Perlin only and fell through to the ordinary path for everything else, so the toggle did nothing at all for Simplex, Voronoi, fractal noise, dots, lines, grid and waves. Even for Perlin it averaged four samples taken at the cosine and sine of the coordinate, which is periodic but mirror symmetric about the centre of the tile, so the texture visibly folded into quadrants. Two patterns needed rethinking to tile honestly: a checkerboard only meets itself with an even number of squares, so odd counts are rounded up, and wood grain cannot be concentric rings, because distance from a point is not periodic, so it is built from a bent, noise-roughened grain that completes whole cycles across the tile.
Twelve patterns are available: Perlin and Simplex smooth noise, layered fractal noise, ridged multifractal for mountainous creases, cellular Voronoi, marble veins, wood grain, and the geometric dots, lines, grid, checker and interfering waves. Shaping controls cover the number of features across the tile (whole numbers only, because a fractional count would cut the last feature in half at the edge, which is precisely what breaks tiling), octaves and persistence for the fractal patterns, a domain warp that displaces the sampling position with a second periodic noise field, a contrast control that pushes toward hard edges without ever clipping, invert, and a seed. The seed drives a Fisher-Yates shuffle of the permutation table, so adjacent seeds give genuinely different textures rather than near-duplicates.
Colour is a multi-stop gradient of up to six stops, each with its own position, mapped through a 256 entry lookup table. Crucially the noise field and the colouring are separate stages: the field is computed once and recoloured on demand, so dragging a gradient stop is instant even at high feature counts, where the previous build re-ran the entire noise calculation for every colour change. Export renders at 256, 512, 1024 or 2048 pixels, regenerating the field at that size rather than scaling the preview up, so a large tile carries real detail and still meets itself at the edges. Eight presets cover clouds, marble, stone, mountains, wood grain, lava, blueprint and polka dots, and the whole configuration travels in the shareable link.
Yes, and you can check. Sampling one tile to the right or one tile down returns the identical value; the measured difference is around ten to the minus fifteen, which is floating point rounding. The interface shows that wrap error live and offers a 3 by 3 repeat view so you can see the edges meeting.
The old seamless option only did anything for Perlin, and for the other seven patterns the toggle had no effect at all. Even the Perlin path averaged samples taken at the cosine and sine of the coordinate, which is periodic but mirror symmetric, so the texture folded into visible quadrants. Tiling is now built into every pattern rather than applied afterwards.
Because a fractional count cuts the last feature in half at the tile edge, and when the tile repeats those halves do not line up. Locking the count to whole numbers is what lets dots, grids, checkers and cellular patterns meet themselves exactly.
A checkerboard only meets itself across the seam when there is an even number of squares, so odd counts are rounded up to the next even one. With an odd count the square at the right edge and the square at the left edge would share a colour and the repeat would show a visible band.
It displaces the position at which the pattern is sampled, using a second noise field, which turns regular-looking noise into something more organic and flowing. The displacing field is itself periodic, so warping never breaks the tiling.
No. The noise field is recomputed at the export resolution, so a large tile contains genuine fine detail rather than an interpolated version of the 384 pixel preview, and it still tiles exactly.
No. The textures are generated by JavaScript in your browser and drawn to a canvas. Nothing is sent anywhere and nothing is downloaded except the PNG you export.
Images are decoded, edited, and exported entirely inside this browser tab. No originals, exports, or metadata are uploaded.