One-shot prompt: build an analog clock as a single HTML file. Scored on time accuracy, visuals, dial completeness, code quality, and smoothness.
The task is simple but revealing: give a frontier LLM a one-shot prompt to build an analog clock in a single HTML file and see what it produces. The prompt makes no special concessions for any model — it expects the model to infer everything about clock geometry from the request alone.
The rubric scores five dimensions: Time Accuracy (×3 weighting) — do hands point to the correct positions using correct math? Visuals (×2) — does it look like a real clock? Markers & Numbers (×1.5) — dial completeness and placement. Code Quality (×1.5) — clean architecture, no leaky globals. Smoothness (×1) — smooth sweep vs. snapping tick.
rejudge_index.py on 2026-09-26. A render check then opens each clock in headless Chromium with the time frozen and measures where the hands actually point; when that is conclusive it decides whether the clock shows the right time, overriding the judge (source-reading missed three clocks whose hands were rotated). Each card's Earned/Lost summary is generated from its Jev audit (audits.json), so it always matches the score; the original hand review, where one exists, sits under “Original review” and may describe an earlier score. See docs/rejudge-2026-09-26.md for the per-dimension before and after.MIT License — Copyright 2026 Yuri Moreno. Released for educational and personal use. Built by Yuri Moreno.
| # Rank by overall score | Model Model name and provider | Ran Date this model was last benchmarked. | Time Correct hand angles for the current time. 10 = perfect math with ms precision. 0 = broken formulas. | Visual Overall aesthetic: bezel, face gradient, hand differentiation, shadows, numerals, center cap. | Markers Hour and minute tick completeness and placement. 10 = all ticks correctly placed, numerals present. | Code Architecture and correctness: single coordinate frame, proper pivot origins, clean abstractions. | Smooth Second hand movement. 10 = smooth sweep via requestAnimationFrame with ms precision. 0 = 1 Hz setInterval. | Runs Judge evaluation runs completed. Scores are aggregated across all runs for reliability. | Overall Weighted average: Time×3, Visual×2, Markers×1.5, Code×1.5, Smooth×1 | Act. Cost Actual dollar cost to generate this clock (prompt + completion tokens × pricing). | Cost/Score Total token cost (in+out) per point of overall score. Lower = better value. | Input OpenRouter input pricing in USD per million tokens | Output OpenRouter output pricing in USD per million tokens | Latency Server-to-server generation time in seconds — how long the API took to return the full response. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Claude Fable 5.1 (via subscription, not OpenRouter) | Sep 1 | 10.0 | 10.0 | 8.0 | 10.0 | 10 | 1/1 | 9.7 | ≥$0.0806 | $6.19 | $10/M | $50/M | — |
| 2 | Claude Opus 5 (via subscription, not OpenRouter) | Sep 1 | 10.0 | 10.0 | 8.0 | 8.0 | 10 | 1/1 | 9.4 | ≥$0.0466 | $3.19 | $5/M | $25/M | — |
| 3 | deepseek/deepseek-v4.1-flash | Sep 26 | 10.0 | 10.0 | 6.0 | 10.0 | 10 | 1/3 | 9.4 | ≥$0.0004 | $0.03 | $0.035/M | $0.29/M | — |
| 4 | moonshotai/kimi-k2.7-code | Jun 15 | 10.0 | 8.0 | 8.0 | 10.0 | 10 | 1/1 | 9.3 | $0.0107 | $0.46 | $0.75/M | $3.5/M | 65.3s |
| 5 | qwen/qwen3.6-35b-a3b | Jun 14 | 10.0 | 10.0 | 8.0 | 7.0 | 10 | 1/1 | 9.25 | $0.0029 | $0.12 | $0.15/M | $1/M | 101.3s |
| 6 | deepseek/deepseek-v4-pro | Jun 15 | 7.5 | 10.0 | 10.0 | 10.0 | 10 | 1/1 | 9.25 | $0.0142 | $0.13 | $0.435/M | $0.87/M | 282.0s |
| 7 | z-ai/glm-5.3 | Sep 26 | 10.0 | 10.0 | 6.0 | 8.0 | 10 | 1/3 | 9.1 | ≥$0.0048 | $0.11 | $0.238/M | $0.748/M | — |
| 8 | xiaomi/mimo-v2.5 | Sep 26 | 10.0 | 8.0 | 8.0 | 8.0 | 10 | 1/3 | 9.0 | ≥$0.0006 | $0.05 | $0.14/M | $0.28/M | — |
| 9 | GLM 5.1 | — | 10.0 | 10.0 | 10.0 | 2.0 | 10 | 1/1 | 8.8 | ≥$0.0039 | $0.48 | $1.05/M | $3.50/M | — |
| 10 | deepseek/deepseek-v4-flash | Jun 15 | 7.5 | 10.0 | 8.0 | 8.0 | 10 | 1/1 | 8.65 | $0.0007 | $0.03 | $0.098/M | $0.196/M | 44.1s |
| 11 | tencent/hy4-preview | Sep 26 | 10.0 | 8.0 | 8.0 | 5.0 | 10 | 1/3 | 8.55 | ≥$0.0035 | $0.39 | $0.834/M | $2.501/M | — |
| 12 | Claude Sonnet 5 (via subscription, not OpenRouter) | Sep 1 | 10.0 | 8.0 | 10.0 | 2.0 | 10 | 1/1 | 8.4 | ≥$0.0160 | $1.43 | $2/M | $10/M | — |
| 13 | Kimi K2.5 | — | 10.0 | 10.0 | 6.0 | 5.0 | 7 | 1/1 | 8.35 | ≥$0.0073 | $0.27 | $0.44/M | $2/M | — |
| 14 | openai/gpt-5-nano | Jun 15 | 10.0 | 6.0 | 6.0 | 8.0 | 10 | 1/1 | 8.3 | $0.0031 | $0.05 | $0.05/M | $0.4/M | 52.5s |
| 15 | nvidia/nemotron-3-ultra-550b-a55b:free | Sep 26 | 10.0 | 8.0 | 8.0 | 5.0 | 7 | 1/3 | 8.25 | $0.0000 | $0.0 | $0/M | $0/M | — |
| 16 | minimax/minimax-m3 | Jun 15 | 10.0 | 8.0 | 8.0 | 5.0 | 7 | 1/1 | 8.25 | $0.0024 | $0.19 | $0.3/M | $1.2/M | 23.1s |
| 17 | MiMo 2.5 Pro | — | 10.0 | 6.0 | 8.0 | 5.0 | 10 | 1/1 | 8.15 | ≥$0.0033 | $0.53 | $1/M | $3/M | — |
| 18 | google/gemini-3.5-flash | Jun 15 | 10.0 | 10.0 | 2.0 | 5.0 | 10 | 1/1 | 8.05 | $0.0848 | $1.38 | $1.5/M | $9/M | 46.5s |
| 19 | Sonnet 4.6 | — | 10.0 | 6.0 | 8.0 | 4.0 | 10 | 1/1 | 8.0 | ≥$0.0158 | $2.02 | $3/M | $15/M | — |
| 20 | openai/gpt-5.6-luna | Sep 26 | 10.0 | 8.0 | 4.0 | 5.0 | 10 | 1/3 | 7.95 | ≥$0.0015 | $0.18 | $0.2/M | $1.2/M | — |
| 21 | Opus 4.7 | — | 10.0 | 8.0 | 8.0 | 2.0 | 7 | 1/1 | 7.8 | ≥$0.0318 | $3.23 | $5/M | $25/M | — |
| 22 | z-ai/glm-5.2 | Jun 16 | 10.0 | 6.0 | 6.0 | 3.0 | 10 | 1/1 | 7.55 | $0.0188 | $0.74 | $1.4/M | $4.4/M | 89.4s |
| 23 | Grok 4.2 Expert | — | 10.0 | 8.0 | 8.0 | 2.0 | 2 | 1/1 | 7.3 | ≥$0.0171 | $1.16 | $2/M | $6/M | — |
| 24 | Kimi K2.6 | — | 7.5 | 8.0 | 8.0 | 5.0 | 2 | 1/1 | 7.0 | ≥$0.0054 | $0.61 | $0.74/M | $4.66/M | — |
| 25 | Qwen 3.6 Plus | — | 7.5 | 6.0 | 8.0 | 5.0 | 2 | 1/1 | 6.6 | ≥$0.0018 | $0.32 | $0.325/M | $1.95/M | — |
| 26 | ChatGPT Free | — | 7.5 | 8.0 | 6.0 | 2.0 | 2 | 1/1 | 6.25 | ≥$0.0231 | $2.07 | $1.75/M | $14/M | — |
| 27 | google/gemini-2.5-flash | Jun 14 | 5.0 | 6.0 | 10.0 | 2.0 | 2 | 1/1 | 5.7 | $0.0045 | $0.46 | $0.3/M | $2.5/M | 7.7s |
| 28 | z-ai/glm-5.3-flash | Sep 26 | 0 | 8.0 | 6.0 | 8.0 | 10 | 1/3 | 5.7 | ≥$0.0029 | $0.09 | $0.04/M | $0.5/M | — |
| 29 | Gemini 3.1 Pro | — | 7.5 | 6.0 | 2.0 | 5.0 | 2 | 1/1 | 5.7 | ≥$0.0217 | $1.73 | $2/M | $12/M | — |
| 30 | MiniMax M2.7 | — | 7.5 | 4.0 | 4.0 | 5.0 | 2 | 1/1 | 5.6 | ≥$0.0010 | $0.23 | $0.30/M | $1.20/M | — |
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks, numerals and loop-generated markers; clean code (scoped, responsive, helpers, no dependencies); a smooth rAF sweep that is right from the first frame. Lost 0.3: Minute ticks overlap hour ticks (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, settled by a third vote, 4 read from code.
min(80vmin,420px) sizing, dedicated setRotation()/pad() helpers, correct continuous time math. Docked only on Visual: the rim is a 4px stroke on the same face circle rather than a genuinely separate bezel layer.Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks, numerals and loop-generated markers; no global leaks, responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 0.6: Minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
min(84vw,84vh,460px) responsive sizing, rAF loop. No bugs found on manual trace of the hand-angle math at 12:00/3:00.Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks and loop-generated markers; clean code (scoped, responsive, helpers, no dependencies); a smooth rAF sweep that is right from the first frame. Lost 0.6: No numerals (−0.3), minute ticks overlap hour ticks (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; clean code (scoped, responsive, helpers, no dependencies); a smooth rAF sweep that is right from the first frame. Lost 0.7: No hand tails (−0.4), minute ticks overlap hour ticks (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, hour ticks and minute ticks, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks, numerals and loop-generated markers; responsive sizing, helper functions and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 0.75: Leaks globals (−0.45), minute ticks overlap hour ticks (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, settled by a third vote, 4 read from code.
Earned: Continuous hour hand, continuous minute hand and millisecond-precise second hand; full visual finish (shadows, gradients, bezel, center cap, hand tails); a complete, loop-generated dial with numerals; clean code (scoped, responsive, helpers, no dependencies); a smooth rAF sweep that is right from the first frame. Lost 0.75: Hands show the wrong time when rendered (−0.75). 6 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 8 read from code.
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks and loop-generated markers; no global leaks, responsive sizing and helper functions; a smooth rAF sweep that is right from the first frame. Lost 0.9: No numerals (−0.3), minute ticks overlap hour ticks (−0.3), external dependencies (−0.3). 5 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 9 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; minute ticks, numerals, loop-generated markers and minute ticks that skip the hours; no global leaks, responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1: No hand tails (−0.4), missing hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hour ticks, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); a complete, loop-generated dial with numerals; no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.2: Leaks globals (−0.45), fixed size (−0.45), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Continuous hour hand, continuous minute hand and millisecond-precise second hand; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks, numerals and loop-generated markers; no global leaks, responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.35: Hands show the wrong time when rendered (−0.75), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 6 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 8 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.45: Leaks globals (−0.45), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; a complete, loop-generated dial with numerals; no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.6: Leaks globals (−0.45), fixed size (−0.45), no hand tails (−0.4), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
320px — not responsive.Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks and numerals; no global leaks and no dependencies; the right time on the first frame; fast-interval motion. Lost 1.65: Fixed size (−0.45), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3), fast setInterval instead of rAF (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; shadows, gradients and a center cap; all 12 hour ticks, minute ticks and loop-generated markers; no global leaks, responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.7: No bezel (−0.4), no hand tails (−0.4), no numerals (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 5 checked by two judges (code and screenshot); they split on bezel, settled by a third vote, 5 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; responsive sizing and helper functions; the right time on the first frame; fast-interval motion. Lost 1.75: Leaks globals (−0.45), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), external dependencies (−0.3), fast setInterval instead of rAF (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on numerals, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; minute ticks, numerals, loop-generated markers and minute ticks that skip the hours; responsive sizing and no dependencies; the right time on the first frame; fast-interval motion. Lost 1.75: Leaks globals (−0.45), no hand tails (−0.4), missing hour ticks (−0.3), no helper functions (−0.3), fast setInterval instead of rAF (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hour ticks, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; shadows, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; no global leaks and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.85: Fixed size (−0.45), no gradients (−0.4), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
box-sizing: border-box mismatch puts the tick ring and number ring on different centers than the hands.Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); numerals; responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.95: Leaks globals (−0.45), missing hour ticks (−0.3), no minute ticks (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Correct, continuous time math; a bezel, a center cap and hand tails; all 12 hour ticks, minute ticks, loop-generated markers and minute ticks that skip the hours; helper functions and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 2: Leaks globals (−0.45), fixed size (−0.45), no shadows (−0.4), no gradients (−0.4), no numerals (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Correct, continuous time math; shadows, a bezel, a center cap and hand tails; all 12 hour ticks and minute ticks; responsive sizing and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 2.05: Leaks globals (−0.45), no gradients (−0.4), no numerals (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; no dependencies; the right time on the first frame; fast-interval motion. Lost 2.2: Leaks globals (−0.45), fixed size (−0.45), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3), fast setInterval instead of rAF (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
transform-origin computed exactly to land at the rim.Earned: Correct, continuous time math; shadows, gradients and a center cap; all 12 hour ticks, minute ticks and loop-generated markers; responsive sizing; a smooth rAF sweep that is right from the first frame. Lost 2.45: Leaks globals (−0.45), no bezel (−0.4), no hand tails (−0.4), no numerals (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3), external dependencies (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on bezel, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; helper functions; the right time on the first frame. Lost 2.7: Second hand ticks once a second (−0.8), leaks globals (−0.45), fixed size (−0.45), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), external dependencies (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
width: 100% clock with 48 px border and no box-sizing: border-box — bezel spills past the layout frame. Hand pivots 2–6 px below center; second hand pulses opacity.Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; no global leaks and no dependencies; the right time on the first frame. Lost 3: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), fixed size (−0.45), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
setInterval so the second hand snaps.Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, a bezel and a center cap; all 12 hour ticks, minute ticks, numerals and loop-generated markers; no global leaks and no dependencies; the right time on the first frame. Lost 3.4: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), fixed size (−0.45), no gradients (−0.4), no hand tails (−0.4), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
setInterval second hand that snaps each tick.Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, gradients, a bezel and a center cap; all 12 hour ticks, minute ticks and numerals; no dependencies; the right time on the first frame. Lost 3.75: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), leaks globals (−0.45), fixed size (−0.45), no hand tails (−0.4), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
setInterval(…, 1000) with no millisecond term — the second hand jumps a full step each tick.Earned: Continuous hour hand and continuous minute hand; shadows, a bezel and a center cap; a complete, loop-generated dial with numerals; no dependencies; the right time on the first frame. Lost 4.3: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), hands show the wrong time when rendered (−0.75), leaks globals (−0.45), fixed size (−0.45), no gradients (−0.4), no hand tails (−0.4), no helper functions (−0.3). 6 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 8 read from code.
Earned: Shadows, a bezel, a center cap and hand tails; all 12 hour ticks, minute ticks and loop-generated markers; no global leaks, responsive sizing and helper functions; a smooth rAF sweep that is right from the first frame. Lost 4.3: Hour hand jumps between hours (−0.75), minute hand jumps each minute (−0.75), second hand ignores milliseconds (−0.75), hands show the wrong time when rendered (−0.75), no gradients (−0.4), no numerals (−0.3), minute ticks overlap hour ticks (−0.3), external dependencies (−0.3). 6 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails and numerals, settled by a third vote, 8 read from code.
Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, a bezel and a center cap; numerals; responsive sizing and no dependencies; the right time on the first frame. Lost 4.3: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), leaks globals (−0.45), no gradients (−0.4), no hand tails (−0.4), missing hour ticks (−0.3), no minute ticks (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Continuous hour hand, continuous minute hand and 12 at the top; a bezel and a center cap; all 12 hour ticks and loop-generated markers; no global leaks and no dependencies; the right time on the first frame. Lost 4.4: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), fixed size (−0.45), no shadows (−0.4), no gradients (−0.4), no hand tails (−0.4), no minute ticks (−0.3), no numerals (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 5 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 9 read from code.
margin-left: -halfWidth in CSS and translateX(-50%) in JS both apply — compounding the pivot offset. No minute markers or numerals; 1 Hz refresh.| # Rank by overall score | Model Model name, size, and provider | Ran Date this model was last benchmarked. | Time Correct hand angles for the current time. 10 = perfect math with ms precision. 0 = broken formulas. | Visual Overall aesthetic: bezel, face gradient, hand differentiation, shadows, numerals, center cap. | Markers Hour and minute tick completeness and placement. 10 = all ticks correctly placed, numerals present. | Code Architecture and correctness: single coordinate frame, proper pivot origins, clean abstractions. | Smooth Second hand movement. 10 = smooth sweep via requestAnimationFrame with ms precision. 0 = 1 Hz setInterval. | Runs Judge evaluation runs completed. Scores are aggregated across all runs for reliability. | Overall Weighted average: Time×3, Visual×2, Markers×1.5, Code×1.5, Smooth×1 | Latency Server-to-server generation time in seconds — how long the API took to return the full response. | Machine Where the clock was generated, and with what server, build and quantization. |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Claude Sonnet 5 (rubric-aware, see note) | — | 10.0 | 10.0 | 10.0 | 10.0 | 10 | 1/1 | 10.0 | — | — Written in a Claude Code session, not by a local model |
| 2 | Qwen3.8 Flash Next | Sep 26 | 10.0 | 10.0 | 8.0 | 4.0 | 10 | 1/1 | 8.8 | 17s | GX10 vLLM 0.30, bilikaz/qwen38-flash-next-recipe, hibrid48 NVFP4 |
| 3 | Gemma 4 E4B | — | 7.5 | 6.0 | 0 | 8.0 | 7 | 1/1 | 6.35 | — | Mac Mini M2 Pro LM Studio, GGUF Q4_K_M |
| 4 | GLM 4.6V Flash | — | 5.0 | 4.0 | 8.0 | 2.0 | 10 | 1/1 | 5.8 | — | Mac Mini M2 Pro LM Studio, MLX 4-bit |
| 5 | Qwen3.5 9B | — | 10.0 | 6.0 | 0 | 2.0 | 2 | 1/1 | 5.7 | — | Mac Mini M2 Pro LM Studio, GGUF Q4_K_M |
| 6 | Gemma 4 E4B Uncensored | — | 7.5 | 6.0 | 2.0 | 2.0 | 2 | 1/1 | 5.25 | — | Mac Mini M2 Pro LM Studio, GGUF Q4_K_M |
| 7 | Qwen2.5 Coder 14B | — | 7.5 | 0 | 8.0 | 2.0 | 2 | 1/1 | 4.95 | — | Mac Mini M2 Pro LM Studio, MLX 4-bit |
| 8 | LFM 2.5 1.2B | — | 2.5 | 2.0 | 0 | 5.0 | 2 | 1/1 | 2.1 | — | Mac Mini M2 Pro LM Studio, MLX 8-bit |
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); a complete, loop-generated dial with numerals; clean code (scoped, responsive, helpers, no dependencies); a smooth rAF sweep that is right from the first frame. Lost nothing on the rubric. 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on center cap, settled by a third vote, 4 read from code.
Earned: Correct, continuous time math; full visual finish (shadows, gradients, bezel, center cap, hand tails); all 12 hour ticks, minute ticks, numerals and loop-generated markers; helper functions and no dependencies; a smooth rAF sweep that is right from the first frame. Lost 1.2: Leaks globals (−0.45), fixed size (−0.45), minute ticks overlap hour ticks (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 4 read from code.
Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, a bezel and a center cap; no global leaks, responsive sizing and no dependencies; the right time on the first frame; fast-interval motion. Lost 3.65: Second hand ignores milliseconds (−0.75), no gradients (−0.4), no hand tails (−0.4), missing hour ticks (−0.3), no minute ticks (−0.3), no numerals (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3), fast setInterval instead of rAF (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hand tails, settled by a third vote, 4 read from code.
Earned: Continuous hour hand and continuous minute hand; a bezel and a center cap; all 12 hour ticks, minute ticks, loop-generated markers and minute ticks that skip the hours; no dependencies; a smooth rAF sweep that is right from the first frame. Lost 4.2: Second hand ignores milliseconds (−0.75), hands show the wrong time when rendered (−0.75), leaks globals (−0.45), fixed size (−0.45), no shadows (−0.4), no gradients (−0.4), no hand tails (−0.4), no numerals (−0.3), no helper functions (−0.3). 6 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 8 read from code.
Earned: Correct, continuous time math; shadows, a bezel and a center cap; no dependencies; the right time on the first frame. Lost 4.3: Second hand ticks once a second (−0.8), leaks globals (−0.45), fixed size (−0.45), no gradients (−0.4), no hand tails (−0.4), missing hour ticks (−0.3), no minute ticks (−0.3), no numerals (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 5 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 9 read from code.
transform reset wipes the horizontal centering of the hands.Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; shadows, a bezel and a center cap; all 12 hour ticks; no dependencies; the right time on the first frame. Lost 4.75: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), leaks globals (−0.45), fixed size (−0.45), no gradients (−0.4), no hand tails (−0.4), no minute ticks (−0.3), no numerals (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on hour ticks, settled by a third vote, 4 read from code.
rotate() never pushes them outward to the rim.Earned: Continuous hour hand, continuous minute hand and hands verified at the right time when rendered; all 12 hour ticks, minute ticks, loop-generated markers and minute ticks that skip the hours; no dependencies; the right time on the first frame. Lost 5.05: Second hand ticks once a second (−0.8), second hand ignores milliseconds (−0.75), leaks globals (−0.45), fixed size (−0.45), no shadows (−0.4), no gradients (−0.4), no bezel (−0.4), no center cap (−0.4), no hand tails (−0.4), no numerals (−0.3), no helper functions (−0.3). 10 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot); they split on bezel, settled by a third vote, 4 read from code.
Earned: Continuous hour hand; shadows; no global leaks and no dependencies. Lost 7.9: Wrong or blank first frame (−1), second hand ticks once a second (−0.8), minute hand jumps each minute (−0.75), second hand ignores milliseconds (−0.75), 12 is not at the top (−0.75), fixed size (−0.45), no gradients (−0.4), no bezel (−0.4), no center cap (−0.4), no hand tails (−0.4), missing hour ticks (−0.3), no minute ticks (−0.3), no numerals (−0.3), hand-placed markers (−0.3), minute ticks overlap hour ticks (−0.3), no helper functions (−0.3). 4 of 20 answers measured in a browser, 6 checked by two judges (code and screenshot), 10 read from code.
width from the time value, so hand "length" grows over the day while height stays 0 — nothing visible inside the circle.