Why Roblox clothing looks frayed at the seams

Two different faults get called a seam, and only one of them is the file’s fault. The common one: the avatar does not sample your texture one pixel at a time, so where a face meets its 2px gutter a single sample straddling that edge picks up half painted pixel and half nothing — measured, it keeps 50% of full opacity, and that missing half reads as a pale fringe. Filling the gutter takes the same sample back to 100%.

Which seam you haveWhat is wrongFixable on export?
Sampling seamThe artwork already lines up. The gutter and texture filtering expose a hairline anyway.Yes — measured below
Authoring seamThe two sides of a fold are painted different colours, so there is a real edge in the design.No. Nothing can invent the colour you did not paint

Everything below is about the first one. If the two sides of your fold are genuinely different colours, that is a drawing to change, not an export setting — and a tool claiming otherwise is one export away from being caught.

The measurement

A single face filled to its own boundary, then the same file after the exporter’s bleed stage. These are the real texels either side of the edge of torso.front, at x = 358, magnified:

Painted to the edge — the gutter is empty

After the bleed — the gutter carries the edge colour

Six texels across the boundary. The crossed cells are transparent. Produced by tools/make_seam_demo.mjs, which runs the same dilate() the exporter runs.
Sample centred on the boundaryAlphaColour returned
Painted to the edge50%rgb(0, 57, 107)
After the bleed100%rgb(0, 114, 214)

Bilinear sampling on premultiplied alpha, which is what the hardware does. Averaging straight RGB instead would hide the effect entirely — it is the alpha that goes missing, not the colour.

Why it gets worse the further away you stand

The measurement above is the gentlest case: one sample, four texels. At distance the renderer switches to smaller mip levels, where a single texel already averages several of yours, so the same missing alpha is spread across a wider band. This is why a shirt can look clean in Studio at full size and show pale lines at the seams in a real game — nothing changed except how far away the camera is.

Why you cannot just paint past the edge

You can, and you should — but not by hand. The 2px gutter is unpainted template, not part of any face, and what belongs in it is whatever sits at the edge of the face beside it. Painting into it by eye means guessing that colour 18 times over, and getting it wrong is a coloured line rather than a pale one.

The correct fill is mechanical: take the colour of the nearest painted texel and extend it outward far enough to survive filtering. Our exporter runs 3 passes, one more than the gutter is wide, so a sample landing anywhere on the boundary lands on colour.

Next door on the sheet is not next door on the body

Filling the gutter from the face beside it is only right when that face is the one the surface actually continues onto. Often it is not: the template packs the limb strips so that a rectangle’s neighbour on the sheet can be a completely different part of the avatar, and the two limb strips do not even run in the same order.

So the exporter does not guess from the layout. It asks the body geometry which texel continues the surface across each 3D edge — including a check that the two surfaces face the same way, which is what stops the chest bleeding onto the hidden inner face of an arm pressed against it. That correction runs in a 2-texel band before the gutter is filled at all.

Transparent designs are the case that breaks naive fixes

The obvious implementation — flood the gutter with a solid colour — ruins any design that is meant to be see-through, because it puts an opaque halo around something transparent. The bleed has to carry alpha out with the colour, so a transparent edge yields a transparent gutter. That is the difference between a fix and a different bug.

The sampling seam is handled on export, automatically. Roblox Clothes Maker carries each edge across the 3D join and then fills the gutter when it writes your PNG, so the file you upload samples cleanly. It cannot repair a fold whose two sides you painted different colours — nothing can — but it will not be the reason your edges fray. Open the editor.

Related: the template, measured · why an upload failed