Lucky
Charm
Charm
Run
Streak
Streak
House
Cup
Cup
The
Spectrum
Spectrum
Match
book
book
Ancient
Rune
Rune
Spirit
Spirit
Melder · Direction A test · SDXL vs gpt-image-2
I built the recommended direction for real: procedural bakelite tiles, a walnut rack, a felt surface instead of a painted room, printed board-game UI chrome — then generated the same eight icons twice, through two different models, with identical post-processing.
Tiles, rack and felt are procedural — drawn in code, identical in both frames. Only the eight bench icons differ. That isolates the variable: which model can actually hold a mid-century screenprint style across a set?
Both arms got the same subject list and the same style brief — Charley Harper / Alexander Girard flat geometry, four inks, thick keyline, single object, plain ground. Both went through the same post.py: background key, trim, pad, snap to the seven-ink palette, 1px red-plate misregistration, print grain.
gpt-image-2 wins this one outright, and it is not close. Eight subjects, one attempt each, no rerolls: eight usable icons with a consistent keyline weight, a consistent palette, a consistent optical size, and a clean alpha every time. SDXL needed six seeds per job and still produced a grid of pocket watches, a repeating pattern instead of a bag, and several renders whose background never keyed out — the square board-coloured tiles in row A are failed keys, not design choices.
It is free and it is fast — the whole eight-icon arm cost nothing and ran in about ninety seconds against roughly six minutes and $0.34 for the API arm. For bulk exploration, silhouette hunting, or backgrounds and textures where isolation doesn't matter, it is the right tool.
It is the set consistency that defeats it. Melder needs 194 icons that look like one hand drew them; base SDXL has no memory between calls.
My reroll harness scored coverage plus largest-connected-blob. A render whose background
never keys out scores blob = 1.00 — a perfect score for a total failure. Any
production run needs a third gate: border transparency must exceed ~0.85, which the existing
Clean/assetgen driver already implements. I'd port that over before trusting
any automated batch.
Tiles, rack and felt are procedural — tiles.py, about 200 lines of PIL.
No model, no rerolls, no palette drift, and all 52 tiles regenerate in under a second. The
bakelite body (tone ramp, warm centre glow, satin bevel, cast mottle, contact shadow) is the
single highest-value asset in Direction A and it never needed AI at all.
The colour chip at the foot is a deliberate compromise: real Rummikub tiles carry only a coloured numeral, but a chip keeps the suit readable when 30 tiles are on the board.
Two things carry over regardless of which model you use. Replacing the painted room with a felt surface immediately makes the tiles the brightest objects on screen. And drawing the buttons and panels as printed board-game furniture — flat ink, thick keyline, hard offset shadow — removes the web-app chrome that was breaking the old screen.
medium that is roughly $8 for a full regeneration pass — a rounding error against
the time cost of babysitting SDXL rerolls.Clean/assetgen/melder_assetgen.py
into post.py so a failed key can never pass as a good asset.tiles.py and it is the only open question I could not answer for
you.