animation2code benchmark
For best compatibility, please view this dashboard in a Chrome browser.
← back to Simple Spinner

model output

Claude Sonnet 4.6

Simple Spinner

A 0.78T 0.34
compare with ground truth →
1Looking at the frames, I can see a circle in the center that continuously cycles through colors. The animation appears to be a color wheel rotation effect where two overlapping circles create a spinning color blend effect.
2
3Analyzing the frames:
41. Frame 1: Cyan/light blue circle
52. Frame 2: Teal/green-cyan
63. Frame 3: Green
74. Frame 4: Green with orange/brown center (two circles overlapping)
85. Frame 5: Green outline with red center
96. Frame 6: Orange-brown circle with tiny red sliver
107. Frame 7: Orange/yellow circle
118. Frame 8: Red circle with small teal cap
129. Frame 9: Green circle with orange bottom
13
14This looks like two circles rotating around each other, cycling through hue changes - essentially a hue rotation animation on a circle, or two circles with different colors orbiting.
15
16Looking more carefully, it seems like there's one main circle that's rotating its color (hue rotation), and possibly a second smaller circle that orbits or overlaps creating the two-tone effect seen in frames 4, 5, 7, 8, 9.
17
18It appears to be a single circle with a continuously rotating hue, plus a second circle slightly offset that also rotates, creating the overlapping two-color appearance at certain phases.
19
20<!DOCTYPE html>
21<html>
22<head>
23<style>
24  body, html {
25    margin: 0;
26    padding: 0;
27    width: 100%;
28    height: 100%;
29    background: #3d6494;
30    display: flex;
31    align-items: center;
32    justify-content: center;
33    overflow: hidden;
34  }
35
36  .container {
37    position: relative;
38    width: 50px;
39    height: 50px;
40  }
41
42  .circle1 {
43    position: absolute;
44    width: 44px;
45    height: 44px;
46    border-radius: 50%;
47    top: 0;
48    left: 0;
49    animation: hueRotate1 3s linear infinite;
50  }
51
52  .circle2 {
53    position: absolute;
54    width: 44px;
55    height: 44px;
56    border-radius: 50%;
57    top: 6px;
58    left: -6px;
59    animation: hueRotate2 3s linear infinite;
60  }
61
62  @keyframes hueRotate1 {
63    0%   { background: hsl(190, 90%, 55%); }
64    100% { background: hsl(550, 90%, 55%); }
65  }
66
67  @keyframes hueRotate2 {
68    0%   { background: hsl(130, 70%, 45%); }
69    100% { background: hsl(490, 70%, 45%); }
70  }
71</style>
72</head>
73<body>
74<div class="container">
75  <div class="circle1"></div>
76  <div class="circle2"></div>
77</div>
78
79<script>
80  // Use canvas for more precise color cycling
81  const canvas = document.createElement('canvas');
82  canvas.width = 60;
83  canvas.height = 60;
84  canvas.style.position = 'fixed';
85  canvas.style.top = '50%';
86  canvas.style.left = '50%';
87  canvas.style.transform = 'translate(-50%, -50%)';
88  document.body.innerHTML = '';
89  document.body.style.background = '#3d6494';
90  document.body.appendChild(canvas);
91
92  const ctx = canvas.getContext('2d');
93  const cx = 30, cy = 30, r = 22;
94  let hue = 190;
95
96  function hslToRgb(h, s, l) {
97    h = h % 360;
98    s /= 100; l /= 100;
99    const k = n => (n + h / 30) % 12;
100    const a = s * Math.min(l, 1 - l);
101    const f = n => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
102    return [Math.round(f(0)*255), Math.round(f(8)*255), Math.round(f(4)*255)];
103  }
104
105  function draw() {
106    ctx.clearRect(0, 0, 60, 60);
107
108    // Back circle (offset slightly)
109    const [r2, g2, b2] = hslToRgb((hue + 60) % 360, 70, 45);
110    ctx.beginPath();
111    ctx.arc(cx - 4, cy + 4, r, 0, Math.PI * 2);
112    ctx.fillStyle = `rgb(${r2},${g2},${b2})`;
113    ctx.fill();
114
115    // Front circle
116    const [r1, g1, b1] = hslToRgb(hue, 90, 55);
117    ctx.beginPath();
118    ctx.arc(cx, cy, r, 0, Math.PI * 2);
119    ctx.fillStyle = `rgb(${r1},${g1},${b1})`;
120    ctx.fill();
121
122    hue = (hue + 1.2) % 360;
123    requestAnimationFrame(draw);
124  }
125
126  draw();
127</script>
128</body>
129</html>