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 · t = 3 s — centurion medallion on gold

Codex · t = 3 s — medallion close-up, Ken Burns drift

Muse Spark · t = 10 s — arrival scene, diagonal flip mid-wave

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
- Visual match to the brief: Muse Spark. All four scenes read exactly as briefed — the helmet-in-profile medallion with red crest, the traveler with rolling luggage beside a spear-carrying guard at the arched doorway (palms, striped columns, teal ground band all present), the night scene with golden airplane, reclining traveler and a big "THE SEAT" in mosaic capitals, and the platinum end card with blue logo box, gold chip and centurion medallion. Codex has every required element too, but in a bolder, more abstract hand — its traveler is a charmingly crude striped-tunic figure, and its compositions are simpler.
- Performance: Codex, narrowly. Both run near 60 fps in headless software rendering on a 2-core VM; sampled windows came out 41–60 for Muse Spark and 52.5–60 for Codex. Neither locks 60 in software rendering, but Codex's samples were steadier. On real GPU hardware both would almost certainly lock 60.
- Animation craft: a split. Both do the diagonal tile-flip scene transition (Muse Spark with a bright leading edge on the wave, Codex with per-tile flip shading), continuous per-tile shimmer phased by position, and a slow Ken Burns drift over a zoomed window. Both keep tesserae chunky and grout lines visible — this time they actually look like mosaics.
- Code: Codex is leaner (15.9 KB vs 18.9 KB), both single self-contained files, zero external assets, zero console errors, zero emojis, spec-ad disclaimer present in both.
- Bottom line: round 2 is a draw with different strengths. Muse Spark wins what it looks like; Codex wins how steadily it runs. And both are unrecognizable from round 1 — watching the video fixed everything.
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.