animation2code benchmark
For best compatibility, please view this dashboard in a Chrome browser.
← back to flat loading animate

model output

Claude Sonnet 4.6

flat loading animate

A 0.93T 0.31
compare with ground truth →
1Looking at the animation, I can see:
2
31. A "+" (plus/cross) shape made of colored dots that rotates to form an "×" (X) shape and back
42. Four arms of dots, each with a different color:
5   - Top: dark teal/slate (#2d5f6b or similar)
6   - Left: teal/green (#1aaa8a)
7   - Right: red/coral (#f05a5a)
8   - Bottom: orange/yellow (#f5a623)
93. Each arm has 3 dots of increasing size (small near center, large at tip)
104. The whole thing rotates 45° continuously
11
12The animation cycles: plus shape → rotate 45° → X shape → rotate back → plus shape
13
14<!DOCTYPE html>
15<html lang="en">
16<head>
17<meta charset="UTF-8">
18<meta name="viewport" content="width=device-width, initial-scale=1.0">
19<title>Plus X Animation</title>
20<style>
21  * { margin: 0; padding: 0; box-sizing: border-box; }
22  body {
23    background: #fff;
24    display: flex;
25    justify-content: center;
26    align-items: center;
27    min-height: 100vh;
28  }
29
30  .spinner {
31    position: relative;
32    width: 120px;
33    height: 120px;
34    animation: rotate 2s ease-in-out infinite;
35  }
36
37  @keyframes rotate {
38    0%   { transform: rotate(0deg); }
39    40%  { transform: rotate(45deg); }
40    60%  { transform: rotate(45deg); }
41    100% { transform: rotate(90deg); }
42  }
43
44  .arm {
45    position: absolute;
46    top: 50%;
47    left: 50%;
48    display: flex;
49    align-items: center;
50    transform-origin: left center;
51  }
52
53  /* Each arm: 3 dots, sizes small→medium→large going outward */
54  .dot {
55    border-radius: 50%;
56    position: absolute;
57  }
58
59  /* TOP arm - dark teal */
60  .arm-top {
61    transform: rotate(-90deg) translateY(-50%);
62    top: 50%;
63    left: 50%;
64  }
65
66  /* BOTTOM arm - orange */
67  .arm-bottom {
68    transform: rotate(90deg) translateY(-50%);
69    top: 50%;
70    left: 50%;
71  }
72
73  /* LEFT arm - green teal */
74  .arm-left {
75    transform: rotate(180deg) translateY(-50%);
76    top: 50%;
77    left: 50%;
78  }
79
80  /* RIGHT arm - red/coral */
81  .arm-right {
82    transform: rotate(0deg) translateY(-50%);
83    top: 50%;
84    left: 50%;
85  }
86</style>
87</head>
88<body>
89<canvas id="c" width="120" height="120" style="display:none"></canvas>
90<div class="spinner" id="spinner"></div>
91
92<script>
93  const spinner = document.getElementById('spinner');
94
95  // Colors for each arm: top, right, bottom, left
96  const arms = [
97    { color: '#2d5f6b', angle: -90 },  // top - dark teal
98    { color: '#f05555', angle: 0 },    // right - red
99    { color: '#f5a623', angle: 90 },   // bottom - orange
100    { color: '#1aaa8a', angle: 180 },  // left - green teal
101  ];
102
103  // Dot sizes (px) from center outward: small, medium, large
104  const dotSizes = [8, 11, 16];
105  // Dot positions from center (px)
106  const dotPositions = [14, 28, 46];
107
108  arms.forEach(arm => {
109    const armEl = document.createElement('div');
110    armEl.style.cssText = `
111      position: absolute;
112      top: 50%;
113      left: 50%;
114      transform-origin: 0 0;
115      transform: rotate(${arm.angle}deg);
116    `;
117
118    dotSizes.forEach((size, i) => {
119      const dot = document.createElement('div');
120      dot.style.cssText = `
121        position: absolute;
122        width: ${size}px;
123        height: ${size}px;
124        border-radius: 50%;
125        background: ${arm.color};
126        left: ${dotPositions[i]}px;
127        top: ${-size/2}px;
128      `;
129      armEl.appendChild(dot);
130    });
131
132    spinner.appendChild(armEl);
133  });
134</script>
135</body>
136</html>