ROUND 2 · ROMAN MOSAIC · 500,000 TILES · ONE BRIEF

Mosaic Showdown — Muse Spark vs Codex

Two AI builders, the exact same brief, one shot each — rebuilt from the actual reference video. A 500,000-tile animated Roman mosaic engine: a spec ad for American Express in gold tesserae, centurion, travel scenes, ending on a mosaic platinum card.

The origin, and what went wrong in round 1

"Spec ad for AmEx — Claude built a mosaic animation engine with 500,000 tiles. No video models. Javascript is the language of the universe." — Steven Liss (@This_Liss) · view the post
Honest note: round 1 was built from the post's text description without watching the video — and it showed. Both entries rendered abstract blue sine-wave fields that looked nothing like the reference. Luke called it out immediately. For round 2 the video was actually watched: the real look is an ancient Roman mosaic — gold tesserae, a centurion, travel scenes, ending on a mosaic platinum card. Both builders got the new brief below, verbatim, one shot each, no iteration, no peeking.
Who built what: the Muse Spark entry was written directly by Kit (this assistant, powered by Meta's Muse Spark — not Anthropic's Claude). The Codex entry was generated by OpenAI's Codex CLI (model gpt-5.6-sol) signed into Luke's ChatGPT account, from the same brief, one shot, no iteration. So this is assistant-vs-Codex on identical briefs — not a Claude product comparison.
Build a single self-contained HTML file (no external assets): an animated ROMAN MOSAIC engine recreating the look of a reference video — a spec ad for American Express rendered as an ancient Roman mosaic. VISUAL TARGET: Thousands of visibly discrete square tesserae tiles separated by thin dark grout lines; each tile has slight per-tile brightness variation so the surface shimmers like real mosaic. Palette (flat, graphic): dominant gold/ochre (#C9A227 family), lapis lazuli blue (#1B4F9C), Roman red (#A63A2E), teal green (#2E8B7A), parchment stone (#D8CDB4), charcoal (#2A2A2A) outlines. Scenes (drawn as flat bold shapes, mosaic-poster style): (1) a Roman centurion helmet in profile as a medallion on gold; (2) a traveler with rolling luggage beside a centurion guard holding a spear, standing before a tall arched doorway, palm trees and striped columns at the frame edges, teal ground band; (3) a night scene — deep blue starry sky, a golden airplane silhouette, a reclining traveler in a lounge chair, the caption 'THE SEAT' in mosaic capitals along the bottom; (4) end card — a credit card rendered in mosaic (blue logo box left, silver card body with gold chip and centurion medallion), caption 'THE PLATINUM CARD' below, all on gold mosaic. Animation: tiles shimmer continuously (brightness oscillation phased by tile position); scenes cycle every ~7 seconds with a diagonal wave of tile flips (each tile flips old-to-new color with staggered timing); a slow continuous Ken Burns pan/zoom drifts across the artwork. The 1000x500 tile field is the full artwork; the viewport shows a zoomed window (roughly 1/3 of the field) so individual tesserae stay clearly visible. Small caption: 'Spec ad — not affiliated with American Express'. ENGINEERING: exactly 500,000 tiles (1000x500 grid); per-frame tile colors from scene sampling plus animated shimmer; 60fps (ImageData or equivalent — no naive per-tile fillRect); expose window.__mosaic = {tiles: 500000, fps: <measured>}; zero console errors; no emojis.
ENTRY A

Muse Spark built by Kit, your assistantBEST VISUAL MATCH

Tiles500,000 ✓
Measured fps (headless)41 – 60
Console errors0
File size18.9 KB
Build timeauthored directly
Scenes4, all on-brief

Technique: 4 scenes pre-painted into 1000×500 Uint32 buffers with a raster toolkit (scanline polygons, ellipses, 5×7 mosaic-capitals font); per-frame the tile loop picks old/new scene color across a diagonal flip wave with a bright leading edge, then applies a 4096-entry sine shimmer LUT phased by tile position. Display: zoomed Ken Burns window drawn pixelated, grout grid stroked in one path aligned to tile boundaries.

ENTRY B

Codex gpt-5.6-solSTEADIEST FPS

Tiles500,000 ✓
Measured fps (headless)52.5 – 60
Console errors0
File size15.9 KB
Build time≈122 s wall clock
Scenes4, all on-brief

Technique: procedural scene painters (helmet, palm, person, laurel, border helpers), packed-pixel compositing with a 1550 ms diagonal flip transition and per-tile flip shading, sine shimmer, ~2.7× zoom window with sinusoidal drift, grout overlay, fps sampled every 500 ms into window.__mosaic.

Screenshots — identical viewport (1280×720)

t = 3 s and t = 10 s after load, headless Chromium. Both animate (frames differ across time), both cycle all four scenes, both expose window.__mosaic.tiles === 500000.

Muse Spark build at 3 seconds
Muse Spark · t = 3 s — centurion medallion on gold
Codex build at 3 seconds
Codex · t = 3 s — medallion close-up, Ken Burns drift
Muse Spark build at 10 seconds
Muse Spark · t = 10 s — arrival scene, diagonal flip mid-wave
Codex build at 10 seconds
Codex · t = 10 s — traveler before the arched doorway

The builds are the actual single-file entries, copied verbatim — open them to watch the animation live.

Honest verdict — round 2

Caveats: fps measured in headless Chromium (software rendering) on a 2-core VM; samples vary run to run. One shot each, same verbatim brief, no iteration. One headless screenshot of the Codex build captured a garbled compositor frame (a stale image unrelated to the page); it did not reproduce on re-run and the file contains zero external references. Round 1's abstract blue-wave builds are retired — they missed the reference entirely.

build v2026.10.02-07.52