HTML Analog Clock Benchmark

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.

Generate a single HTML file that displays a working analog clock showing the current time with hour, minute, and second hands.
TypeSafe Jev acted as judge — one typed yes/no question per rubric criterion over each clock's source, scored by 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.

Cloud Models
Local Models
#↕ 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.010.08.010.010 1/1 9.7 ≥$0.0806 $6.19 $10/M $50/M —
2 Claude Opus 5 (via subscription, not OpenRouter) Sep 1 10.010.08.08.010 1/1 9.4 ≥$0.0466 $3.19 $5/M $25/M —
3 deepseek/deepseek-v4.1-flash Sep 26 10.010.06.010.010 1/3 9.4 ≥$0.0004 $0.03 $0.035/M $0.29/M —
4 moonshotai/kimi-k2.7-code Jun 15 10.08.08.010.010 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.010.08.07.010 1/1 9.25 $0.0029 $0.12 $0.15/M $1/M 101.3s
6 deepseek/deepseek-v4-pro Jun 15 7.510.010.010.010 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.010.06.08.010 1/3 9.1 ≥$0.0048 $0.11 $0.238/M $0.748/M —
8 xiaomi/mimo-v2.5 Sep 26 10.08.08.08.010 1/3 9.0 ≥$0.0006 $0.05 $0.14/M $0.28/M —
9 GLM 5.1 — 10.010.010.02.010 1/1 8.8 ≥$0.0039 $0.48 $1.05/M $3.50/M —
10 deepseek/deepseek-v4-flash Jun 15 7.510.08.08.010 1/1 8.65 $0.0007 $0.03 $0.098/M $0.196/M 44.1s
11 tencent/hy4-preview Sep 26 10.08.08.05.010 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.08.010.02.010 1/1 8.4 ≥$0.0160 $1.43 $2/M $10/M —
13 Kimi K2.5 — 10.010.06.05.07 1/1 8.35 ≥$0.0073 $0.27 $0.44/M $2/M —
14 openai/gpt-5-nano Jun 15 10.06.06.08.010 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.08.08.05.07 1/3 8.25 $0.0000 $0.0 $0/M $0/M —
16 minimax/minimax-m3 Jun 15 10.08.08.05.07 1/1 8.25 $0.0024 $0.19 $0.3/M $1.2/M 23.1s
17 MiMo 2.5 Pro — 10.06.08.05.010 1/1 8.15 ≥$0.0033 $0.53 $1/M $3/M —
18 google/gemini-3.5-flash Jun 15 10.010.02.05.010 1/1 8.05 $0.0848 $1.38 $1.5/M $9/M 46.5s
19 Sonnet 4.6 — 10.06.08.04.010 1/1 8.0 ≥$0.0158 $2.02 $3/M $15/M —
20 openai/gpt-5.6-luna Sep 26 10.08.04.05.010 1/3 7.95 ≥$0.0015 $0.18 $0.2/M $1.2/M —
21 Opus 4.7 — 10.08.08.02.07 1/1 7.8 ≥$0.0318 $3.23 $5/M $25/M —
22 z-ai/glm-5.2 Jun 16 10.06.06.03.010 1/1 7.55 $0.0188 $0.74 $1.4/M $4.4/M 89.4s
23 Grok 4.2 Expert — 10.08.08.02.02 1/1 7.3 ≥$0.0171 $1.16 $2/M $6/M —
24 Kimi K2.6 — 7.58.08.05.02 1/1 7.0 ≥$0.0054 $0.61 $0.74/M $4.66/M —
25 Qwen 3.6 Plus — 7.56.08.05.02 1/1 6.6 ≥$0.0018 $0.32 $0.325/M $1.95/M —
26 ChatGPT Free — 7.58.06.02.02 1/1 6.25 ≥$0.0231 $2.07 $1.75/M $14/M —
27 google/gemini-2.5-flash Jun 14 5.06.010.02.02 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 08.06.08.010 1/3 5.7 ≥$0.0029 $0.09 $0.04/M $0.5/M —
29 Gemini 3.1 Pro — 7.56.02.05.02 1/1 5.7 ≥$0.0217 $1.73 $2/M $12/M —
30 MiniMax M2.7 — 7.54.04.05.02 1/1 5.6 ≥$0.0010 $0.23 $0.30/M $1.20/M —
Claude Fable 5.1 #1 · 9.7
Time10
Visual10
Dial8
Code10
Motion10

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.

Via subscription, not OpenRouterRan Sep 1Cost ≥$0.0806Judge runs 1/1
Original review (may describe an earlier score)Blind one-shot via subscription, not OpenRouter. SVG clock, fully IIFE-scoped (zero global leaks), responsive 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.
Claude Opus 5 #2 · 9.4
Time10
Visual10
Dial8
Code8
Motion10

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.

Via subscription, not OpenRouterRan Sep 1Cost ≥$0.0466Judge runs 1/1
Original review (may describe an earlier score)Blind one-shot via subscription, not OpenRouter. SVG clock: gradients applied directly to face and rim (genuine two-circle bezel, not just a background flourish), all three hands — not just the second — extend past the pivot as real counterweights, drop-shadow via both CSS filter and SVG feDropShadow, fully IIFE-scoped, min(84vw,84vh,460px) responsive sizing, rAF loop. No bugs found on manual trace of the hand-angle math at 12:00/3:00.
DeepSeek V4.1 Flash #3 · 9.4
Time10
Visual10
Dial6
Code10
Motion10

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.

deepseek/deepseek-v4.1-flashRan Sep 26Cost ≥$0.0004Judge runs 1/3
Kimi K2.7 Code #4 · 9.3
Time10
Visual8
Dial8
Code10
Motion10

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.

moonshotai/kimi-k2.7-codeRan Jun 15Latency 65.3sCost $0.0107Judge runs 1/1
Qwen 3.6 35B A3B #5 · 9.25
Time10
Visual10
Dial8
Code7
Motion10

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.

qwen/qwen3.6-35b-a3bRan Jun 14Latency 101.3sCost $0.0029Judge runs 1/1
DeepSeek V4 Pro #6 · 9.25
Time7.5
Visual10
Dial10
Code10
Motion10

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.

deepseek/deepseek-v4-proRan Jun 15Latency 282.0sCost $0.0142Judge runs 1/1
GLM 5.3 #7 · 9.1
Time10
Visual10
Dial6
Code8
Motion10

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.

z-ai/glm-5.3Ran Sep 26Cost ≥$0.0048Judge runs 1/3
Xiaomi MiMo-V2.5 #8 · 9.0
Time10
Visual8
Dial8
Code8
Motion10

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.

xiaomi/mimo-v2.5Ran Sep 26Cost ≥$0.0006Judge runs 1/3
GLM 5.1 #9 · 8.8
Time10
Visual10
Dial10
Code2
Motion10

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.

Original review (may describe an earlier score)Cloud winner. Canvas with cream radial-gradient face, serif numerals 1–12, 12 hour and 48 minute markers, triangular polygon hour/minute hands, thin red second hand with counterweight. requestAnimationFrame loop. Real-watch aesthetic.
DeepSeek V4 Flash #10 · 8.65
Time7.5
Visual10
Dial8
Code8
Motion10

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.

deepseek/deepseek-v4-flashRan Jun 15Latency 44.1sCost $0.0007Judge runs 1/1
Tencent Hy4 preview #11 · 8.55
Time10
Visual8
Dial8
Code5
Motion10

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.

tencent/hy4-previewRan Sep 26Cost ≥$0.0035Judge runs 1/3
Claude Sonnet 5 #12 · 8.4
Time10
Visual8
Dial10
Code2
Motion10

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.

Via subscription, not OpenRouterRan Sep 1Cost ≥$0.0160Judge runs 1/1
Original review (may describe an earlier score)Blind one-shot via subscription, not OpenRouter. CSS transform clock, correct continuous time math, box-shadow rings for the bezel, tail only on the second hand. Docked hard on Code: the script isn't wrapped in a function, so ~10 variables (containers, hand refs, radii) leak straight into global scope, and the clock is a hardcoded 320px — not responsive.
Kimi K2.5 #13 · 8.35
Time10
Visual10
Dial6
Code5
Motion7

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.

Original review (may describe an earlier score)Feature-rich, source-bloated. Numerals, 60 ticks, gradient hands, glowing center, embedded digital readout. Correct everything, but ticks are 60 hand-written divs.
OpenAI GPT-5 Nano #14 · 8.3
Time10
Visual6
Dial6
Code8
Motion10

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.

openai/gpt-5-nanoRan Jun 15Latency 52.5sCost $0.0031Judge runs 1/1
Nvidia Nemotron 3 Ultra (free) #15 · 8.25
Time10
Visual8
Dial8
Code5
Motion7

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.

nvidia/nemotron-3-ultra-550b-a55b:freeRan Sep 26Cost $0.0000Judge runs 1/3
MiniMax M3 #16 · 8.25
Time10
Visual8
Dial8
Code5
Motion7

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.

minimax/minimax-m3Ran Jun 15Latency 23.1sCost $0.0024Judge runs 1/1
MiMo 2.5 Pro #17 · 8.15
Time10
Visual6
Dial8
Code5
Motion10

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.

Original review (may describe an earlier score)Off-by-eight dial. Glowing red bezel, full numerals, 60 ticks, ms-precision math, rAF loop. But box-sizing: border-box mismatch puts the tick ring and number ring on different centers than the hands.
Gemini 3.5 Flash #18 · 8.05
Time10
Visual10
Dial2
Code5
Motion10

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.

google/gemini-3.5-flashRan Jun 15Latency 46.5sCost $0.0848Judge runs 1/1
Sonnet 4.6 #19 · 8.0
Time10
Visual6
Dial8
Code4
Motion10

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.

Original review (may describe an earlier score)Cleanest correct code. Canvas, ms-precision, three hands with small tails, quarter-hour markers thicker, 48 minute markers, layered center dot. No numerals — only markers.
OpenAI GPT-5.6 Luna #20 · 7.95
Time10
Visual8
Dial4
Code5
Motion10

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.

openai/gpt-5.6-lunaRan Sep 26Cost ≥$0.0015Judge runs 1/3
Opus 4.7 #21 · 7.8
Time10
Visual8
Dial8
Code2
Motion7

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.

Original review (may describe an earlier score)Most polished CSS clock. Numbers, 60 ticks (12 major), correct pivot pattern, 50 ms refresh, ms-precision second hand. Tick transform-origin computed exactly to land at the rim.
GLM 5.2 #22 · 7.55
Time10
Visual6
Dial6
Code3
Motion10

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.

z-ai/glm-5.2Ran Jun 16Latency 89.4sCost $0.0188Judge runs 1/1
Grok 4.2 Expert #23 · 7.3
Time10
Visual8
Dial8
Code2
Motion2

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.

Original review (may describe an earlier score)Breaks out of its container. 420 px container holds a 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.
Kimi K2.6 #24 · 7.0
Time7.5
Visual8
Dial8
Code5
Motion2

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.

Original review (may describe an earlier score)Cleaner K2.5 with a regression. Same red-bezel look. Ticks refactored into a loop. Correct math, correct pivots — but 1 Hz setInterval so the second hand snaps.
Qwen 3.6 Plus #25 · 6.6
Time7.5
Visual6
Dial8
Code5
Motion2

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.

Original review (may describe an earlier score)Same border-box bug, jumpier seconds. Same hard-coded-center bug as mimo but with a 1 Hz setInterval second hand that snaps each tick.
ChatGPT Free #26 · 6.25
Time7.5
Visual8
Dial6
Code2
Motion2

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.

Original review (may describe an earlier score)Correct but jumpy. Numbers, 60 ticks, three hands, properly centered pivots. Flaw: setInterval(…, 1000) with no millisecond term — the second hand jumps a full step each tick.
Gemini 2.5 Flash #27 · 5.7
Time5
Visual6
Dial10
Code2
Motion2

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.

google/gemini-2.5-flashRan Jun 14Latency 7.7sCost $0.0045Judge runs 1/1
GLM 5.3 Flash #28 · 5.7
Time0
Visual8
Dial6
Code8
Motion10

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.

z-ai/glm-5.3-flashRan Sep 26Cost ≥$0.0029Judge runs 1/3
Gemini 3.1 Pro #29 · 5.7
Time7.5
Visual6
Dial2
Code5
Motion2

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.

Original review (may describe an earlier score)Classic JS30 look. Clean white face, twelve numerals, three hands with a tasteful overshoot-bounce on each second. Includes snap-glitch hack for minute rollover. No tick marks; 1 Hz refresh.
MiniMax M2.7 #30 · 5.6
Time7.5
Visual4
Dial4
Code5
Motion2

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.

Original review (may describe an earlier score)Compound centering bug. 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.010.010.010.010 1/1 10.0 — —
Written in a Claude Code session, not by a local model
2 Qwen3.8 Flash Next Sep 26 10.010.08.04.010 1/1 8.8 17s GX10
vLLM 0.30, bilikaz/qwen38-flash-next-recipe, hibrid48 NVFP4
3 Gemma 4 E4B — 7.56.008.07 1/1 6.35 — Mac Mini M2 Pro
LM Studio, GGUF Q4_K_M
4 GLM 4.6V Flash — 5.04.08.02.010 1/1 5.8 — Mac Mini M2 Pro
LM Studio, MLX 4-bit
5 Qwen3.5 9B — 10.06.002.02 1/1 5.7 — Mac Mini M2 Pro
LM Studio, GGUF Q4_K_M
6 Gemma 4 E4B Uncensored — 7.56.02.02.02 1/1 5.25 — Mac Mini M2 Pro
LM Studio, GGUF Q4_K_M
7 Qwen2.5 Coder 14B — 7.508.02.02 1/1 4.95 — Mac Mini M2 Pro
LM Studio, MLX 4-bit
8 LFM 2.5 1.2B — 2.52.005.02 1/1 2.1 — Mac Mini M2 Pro
LM Studio, MLX 8-bit
Claude Sonnet 5 #1 · 10.0
Time10
Visual10
Dial10
Code10
Motion10

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.

— · Written in a Claude Code session, not by a local modelJudge runs 1/1
Original review (may describe an earlier score)Not an apples-to-apples entry. Generated directly by Claude Sonnet 5 in a Claude Code session with full knowledge of the exact judge rubric (unlike every other entry, which is a blind one-shot model call) — so the perfect score reflects rubric-awareness, not a fair head-to-head win. Kept as a reference/upper-bound: correct continuous hour/minute/ms-precision math, gradient bezel + face + shadows, hand tails, center cap, 12 hour + 48 minute ticks via loop, zero globals, rAF loop with accurate first frame.
Qwen3.8 Flash Next #2 · 8.8
Time10
Visual10
Dial8
Code4
Motion10

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.

GX10 · vLLM 0.30, bilikaz/qwen38-flash-next-recipe, hibrid48 NVFP4Ran Sep 26Latency 17sJudge runs 1/1
Original review (may describe an earlier score)Best blind entry. A clean canvas clock built in 17s: 12 numerals and 60 ticks drawn in loops, millisecond-precise second hand on a rAF loop, correct time from the first frame, confirmed by the render check. Loses points on code: a fixed 400px canvas that doesn't scale, a handful of globals, and minute ticks drawn over the hour marks.
Gemma 4 E4B #3 · 6.35
Time7.5
Visual6
Dial0
Code8
Motion7

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.

Mac Mini M2 Pro · LM Studio, GGUF Q4_K_MJudge runs 1/1
Original review (may describe an earlier score)Off-center pivot. Cleanest code, smooth 50ms loop, correct rotation formulas — but hand geometry puts the pivot ~20px above center, so hands orbit instead of rotate. No markers.
GLM 4.6V Flash #4 · 5.8
Time5
Visual4
Dial8
Code2
Motion10

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.

Mac Mini M2 Pro · LM Studio, MLX 4-bitJudge runs 1/1
Original review (may describe an earlier score)Dial rotated 90°. Most complete face among the runners-up — hour and minute ticks, three hands, rAF loop. But no -π/2 offset, so 12 sits at the 3 o'clock position.
Qwen3.5 9B #5 · 5.7
Time10
Visual6
Dial0
Code2
Motion2

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.

Mac Mini M2 Pro · LM Studio, GGUF Q4_K_MJudge runs 1/1
Original review (may describe an earlier score)Pretty, mathematically wrong. Best-looking dial, but the hour-hand formula collapses the hour position, and a JS transform reset wipes the horizontal centering of the hands.
Gemma 4 E4B Uncensored #6 · 5.25
Time7.5
Visual6
Dial2
Code2
Motion2

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.

Mac Mini M2 Pro · LM Studio, GGUF Q4_K_MJudge runs 1/1
Original review (may describe an earlier score)Correct hands, broken markers. Hands pivot at true center, time math is right. Hour markers are all stacked at 12 because CSS rotate() never pushes them outward to the rim.
Qwen2.5 Coder 14B #7 · 4.95
Time7.5
Visual0
Dial8
Code2
Motion2

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.

Mac Mini M2 Pro · LM Studio, MLX 4-bitJudge runs 1/1
Original review (may describe an earlier score)Best timekeeping of the older models. First clock that gets everything about timekeeping right — hands and ticks rotate around true center, all 12 hour ticks plus 48 minute ticks, correct hour/minute/second math. Plain style, no center dot, second hand ticks (no sweep).
LFM 2.5 1.2B #8 · 2.1
Time2.5
Visual2
Dial0
Code5
Motion2

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.

Mac Mini M2 Pro · LM Studio, MLX 8-bitJudge runs 1/1
Original review (may describe an earlier score)Non-functional. Hands have no defined size; JS sets width from the time value, so hand "length" grows over the day while height stays 0 — nothing visible inside the circle.