Concepts
Painted Seams
How a tile actually gets painted so it joins its neighbour without a visible seam
Every tile has to continue from its neighbour. If we just painted each tile from scratch, the joins would look like a photo collage — visible cuts wherever two tiles meet. Here's how we paint a tile so the seam disappears.
Start with a rough sketch of what should run through.
A short painted strip shows the path, river, or corridor that needs to cross from the neighbour into this tile, in roughly the right art style. Think of it as a colour-and-shape note, not a finished tile.
Mark which pixels are allowed to change.
A "freedom map" grades how much each pixel can be repainted — locked at the seam, gradually freer toward the centre. It's a soft fade, not an on/off line, which is what keeps the join from showing.
→ The freedom map in detailPaste the neighbour just outside the tile.
The neighbour's edge sits in a margin around the canvas, so the painter can see what's coming in but doesn't have to repaint it. The tile area itself is empty and ready to be filled.
Paint inward.
The painter fills the tile, allowed to vary by exactly how much the freedom map says — pinned at the edge, free in the middle. The path continues, the grass continues, the colours flow.
Crop back to size.
The neighbour margin was just context — we throw it away. What's left is a tile that flows out of its neighbour seamlessly.
Flow direction (optional)
The flow tool adds a directional layer on top of presence masks. Drag strokes encode where a river or path should go — the painter records angle (R channel, 0→2π) and magnitude (G channel) per pixel as an RGBA signal alongside the grayscale mask. The backend converts this into a gradient stencil: the generation hint color peaks at the river's centerline and tapers toward the bank, giving the diffusion model a shaped target to refine rather than a flat uniform fill. Flow strokes are optional and compose on top of any existing river or path mask; tiles without flow data fall back to the existing flat stencil.
Why this works
- The neighbour sits outside the painted area, so it can't be accidentally repainted.
- The freedom map is a smooth fade, not an on/off mask, so the join blends instead of butting against a hard line.
- The painter sees real neighbour pixels as context, so it knows what colour and texture to continue.
How this is built (technical)
Built on Differential Diffusion (Levin & Fried 2023) for the gradient freedom map and an exterior-anchor inpainting pattern (Sartor et al. 2024) for the neighbour margin. Style anchors are seeded from a small bank of reference VTT maps so each biome stays internally consistent across a run.