animation2code benchmark
For best compatibility, please view this dashboard in a Chrome browser.
← back to Animated Concepts #3

model output

Claude Sonnet 4.6

Animated Concepts #3

A 0.85T 0.23
compare with ground truth →
1Looking at the frames, I can see two salmon/coral colored dots near the center of a dark background. They appear to:
21. Start very small/invisible
32. Grow to full size (about 8px diameter)
43. Orbit around each other or move in a circular pattern
54. Fade out and repeat
6
7The dots appear to be rotating around a central point, with one dot slightly offset from the other (like two bodies in orbital motion). They pulse in size/opacity.
8
9<!DOCTYPE html>
10<html lang="en">
11<head>
12<meta charset="UTF-8">
13<meta name="viewport" content="width=device-width, initial-scale=1.0">
14<title>Orbiting Dots</title>
15<style>
16  * { margin: 0; padding: 0; box-sizing: border-box; }
17  
18  body {
19    background-color: #2a2a2a;
20    width: 100vw;
21    height: 100vh;
22    overflow: hidden;
23    display: flex;
24    align-items: center;
25    justify-content: center;
26  }
27
28  .container {
29    position: relative;
30    width: 0;
31    height: 0;
32  }
33
34  .dot {
35    position: absolute;
36    width: 10px;
37    height: 10px;
38    border-radius: 50%;
39    background-color: #f07f72;
40    transform: translate(-50%, -50%);
41  }
42
43  .dot1 {
44    animation: orbit1 2s ease-in-out infinite;
45  }
46
47  .dot2 {
48    animation: orbit2 2s ease-in-out infinite;
49  }
50
51  @keyframes orbit1 {
52    0% {
53      transform: translate(-50%, -50%) translate(0px, 0px) scale(0.1);
54      opacity: 0;
55    }
56    10% {
57      opacity: 1;
58    }
59    25% {
60      transform: translate(-50%, -50%) translate(-15px, -30px) scale(1);
61      opacity: 1;
62    }
63    50% {
64      transform: translate(-50%, -50%) translate(15px, -20px) scale(1);
65      opacity: 1;
66    }
67    75% {
68      transform: translate(-50%, -50%) translate(-10px, -30px) scale(1);
69      opacity: 1;
70    }
71    85% {
72      opacity: 1;
73    }
74    100% {
75      transform: translate(-50%, -50%) translate(0px, 0px) scale(0.1);
76      opacity: 0;
77    }
78  }
79
80  @keyframes orbit2 {
81    0% {
82      transform: translate(-50%, -50%) translate(0px, 0px) scale(0.1);
83      opacity: 0;
84    }
85    10% {
86      opacity: 1;
87    }
88    25% {
89      transform: translate(-50%, -50%) translate(5px, 15px) scale(1);
90      opacity: 1;
91    }
92    50% {
93      transform: translate(-50%, -50%) translate(25px, 10px) scale(1);
94      opacity: 1;
95    }
96    75% {
97      transform: translate(-50%, -50%) translate(15px, 10px) scale(1);
98      opacity: 1;
99    }
100    85% {
101      opacity: 1;
102    }
103    100% {
104      transform: translate(-50%, -50%) translate(0px, 0px) scale(0.1);
105      opacity: 0;
106    }
107  }
108</style>
109</head>
110<body>
111<div class="container">
112  <div class="dot dot1"></div>
113  <div class="dot dot2"></div>
114</div>
115
116<script>
117  // Two-body orbital simulation
118  const dot1 = document.querySelector('.dot1');
119  const dot2 = document.querySelector('.dot2');
120  
121  const cx = 0, cy = 0;
122  const radius = 22;
123  let angle = 0;
124  let opacity = 0;
125  let growing = true;
126  let phase = 0; // 0=grow, 1=orbit, 2=shrink
127  let phaseTime = 0;
128  
129  const GROW_DURATION = 400;
130  const ORBIT_DURATION = 1600;
131  const SHRINK_DURATION = 400;
132  const TOTAL = GROW_DURATION + ORBIT_DURATION + SHRINK_DURATION;
133  
134  let startTime = null;
135  
136  function animate(timestamp) {
137    if (!startTime) startTime = timestamp;
138    let elapsed = (timestamp - startTime) % TOTAL;
139    
140    let scale, alpha;
141    
142    if (elapsed < GROW_DURATION) {
143      scale = elapsed / GROW_DURATION;
144      alpha = elapsed / GROW_DURATION;
145    } else if (elapsed < GROW_DURATION + ORBIT_DURATION) {
146      scale = 1;
147      alpha = 1;
148    } else {
149      let t = (elapsed - GROW_DURATION - ORBIT_DURATION) / SHRINK_DURATION;
150      scale = 1 - t;
151      alpha = 1 - t;
152    }
153    
154    let orbitProgress = elapsed / TOTAL;
155    let a1 = orbitProgress * Math.PI * 2;
156    let a2 = a1 + Math.PI;
157    
158    const r = 20;
159    const x1 = Math.cos(a1) * r;
160    const y1 = Math.sin(a1) * r * 0.5;
161    const x2 = Math.cos(a2) * r;
162    const y2 = Math.sin(a2) * r * 0.5;
163    
164    dot1.style.transform = `translate(calc(-50% + ${x1}px), calc(-50% + ${y1}px)) scale(${scale})`;
165    dot1.style.opacity = alpha;
166    dot2.style.transform = `translate(calc(-50% + ${x2}px), calc(-50% + ${y2}px)) scale(${scale})`;
167    dot2.style.opacity = alpha;
168    
169    requestAnimationFrame(animate);
170  }
171  
172  // Remove CSS animations and use JS instead
173  dot1.style.animation = 'none';
174  dot2.style.animation = 'none';
175  
176  requestAnimationFrame(animate);
177</script>
178</body>
179</html>