Install any skill in seconds. Free to start, no credit card required.
Get Started Free →GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo). Use when writing GSAP animations in HyperFrames compositions.
.claude/skills/cowork-os-gsap/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 169% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 50% | 0% |
vars. Most common.vars to current state (entrances).Always use camelCase property names (e.g. backgroundColor, rotationX).
"power1.out" (default), "power3.inOut", "back.out(1.7)", "elastic.out(1, 0.3)", "none".0.1 or object: { amount: 0.3, from: "center" }, { each: 0.1, from: "random" }.false (default), true, or "auto".-1 for infinite. yoyo — alternates direction with repeat.true for from()/fromTo(). Set false on later tweens targeting the same property+element to avoid overwrite.Prefer GSAP's transform aliases over raw transform string:
| GSAP property | Equivalent | | --------------------------- | ------------------- | | x, y, z | translateX/Y/Z (px) | | xPercent, yPercent | translateX/Y in % | | scale, scaleX, scaleY | scale | | rotation | rotate (deg) | | rotationX, rotationY | 3D rotate | | skewX, skewY | skew | | transformOrigin | transform-origin |
opacity. At 0: also sets visibility: hidden."--hue": 180.transformOrigin."360_cw", "-170_short", "90_ccw"."all" or comma-separated; removes inline styles on complete."+=20", "-=10", "*=2".javascriptgsap.to(".item", { x: (i, target, targets) => i * 50, stagger: 0.1, });
Built-in eases: power1–power4, back, bounce, circ, elastic, expo, sine. Each has .in, .out, .inOut.
javascriptgsap.defaults({ duration: 0.6, ease: "power2.out" });
javascriptconst tween = gsap.to(".box", { x: 100 }); tween.pause(); tween.play(); tween.reverse(); tween.kill(); tween.progress(0.5); tween.time(0.2);
Runs setup only when a media query matches; auto-reverts when it stops matching.
javascriptlet mm = gsap.matchMedia(); mm.add( { isDesktop: "(min-width: 800px)", reduceMotion: "(prefers-reduced-motion: reduce)", }, (context) => { const { isDesktop, reduceMotion } = context.conditions; gsap.to(".box", { rotation: isDesktop ? 360 : 180, duration: reduceMotion ? 0 : 2, }); }, );
javascriptconst tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2.out" } }); tl.to(".a", { x: 100 }).to(".b", { y: 50 }).to(".c", { opacity: 0 });
Third argument controls placement:
1 — at 1s"+=0.5" — after end; "-=0.2" — before end"intro", "intro+=0.3""<" — same start as previous; ">" — after previous ends; "<0.2" — 0.2s after previous startsjavascripttl.to(".a", { x: 100 }, 0); tl.to(".b", { y: 50 }, "<"); // same start as .a tl.to(".c", { opacity: 0 }, "<0.2"); // 0.2s after .b starts
javascripttl.addLabel("intro", 0); tl.to(".a", { x: 100 }, "intro"); tl.addLabel("outro", "+=0.5"); tl.play("outro"); tl.tweenFromTo("intro", "outro");
.play() to start.javascriptconst master = gsap.timeline(); const child = gsap.timeline(); child.to(".a", { x: 100 }).to(".b", { y: 50 }); master.add(child, 0);
tl.play(), tl.pause(), tl.reverse(), tl.restart(), tl.time(2), tl.progress(0.5), tl.kill().
Animating x, y, scale, rotation, opacity stays on the compositor. Avoid width, height, top, left when transforms achieve the same effect.
csswill-change: transform;
Only on elements that actually animate.
javascriptlet xTo = gsap.quickTo("#id", "x", { duration: 0.4, ease: "power3" }), yTo = gsap.quickTo("#id", "y", { duration: 0.4, ease: "power3" }); container.addEventListener("mousemove", (e) => { xTo(e.pageX); yTo(e.pageY); });
Use stagger instead of separate tweens with manual delays.
Pause or kill off-screen animations.
addLabel() for readable sequencing.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 12,818 | 8,949 | -30% | 1 | 1 | 0% | 2,377 | 3,377 | +42% | 0 | 0 | — |
case-20 | pass→pass | 6,657 | 5,032 | -24% | 1 | 1 | 0% | 1,392 | 2,885 | +107% | 0 | 0 | — |
case-01 | fail→pass | 10,130 | 7,330 | -28% | 1 | 1 | 0% | 1,974 | 3,256 | +65% | 0 | 0 | — |
case-03 | pass→pass | 12,703 | 8,170 | -36% | 1 | 1 | 0% | 2,391 | 3,473 | +45% | 0 | 0 | — |
case-04 | fail→pass | 16,234 | 5,759 | -65% | 1 | 1 | 0% | 3,300 | 2,991 | -9% | 0 | 0 | — |
case-05 | pass→pass | 8,834 | 5,403 | -39% | 1 | 1 | 0% | 1,493 | 2,817 | +89% | 0 | 0 | — |
case-06 | fail→pass | 6,331 | 4,306 | -32% | 1 | 1 | 0% | 1,011 | 2,720 | +169% | 0 | 0 | — |
case-07 | pass→pass | 14,391 | 3,492 | -76% | 1 | 1 | 0% | 2,608 | 2,514 | -4% | 0 | 0 | — |
case-08 | pass→pass | 11,946 | 9,289 | -22% | 1 | 1 | 0% | 2,162 | 3,632 | +68% | 0 | 0 | — |
case-09 | pass→pass | 7,537 | 8,036 | +7% | 1 | 1 | 0% | 1,442 | 3,489 | +142% | 0 | 0 | — |
case-10 | fail→pass | 9,959 | 5,115 | -49% | 1 | 1 | 0% | 1,856 | 2,779 | +50% | 0 | 0 | — |
case-11 | fail→pass | 6,616 | 4,149 | -37% | 1 | 1 | 0% | 1,066 | 2,612 | +145% | 0 | 0 | — |
case-12 | pass→pass | 9,617 | 5,946 | -38% | 1 | 1 | 0% | 1,586 | 2,941 | +85% | 0 | 0 | — |
case-13 | fail→pass | 10,177 | 3,642 | -64% | 1 | 1 | 0% | 1,931 | 2,516 | +30% | 0 | 0 | — |
case-14 | pass→pass | 7,271 | 6,084 | -16% | 1 | 1 | 0% | 1,406 | 3,167 | +125% | 0 | 0 | — |
case-15 | fail→pass | 10,834 | 6,140 | -43% | 1 | 1 | 0% | 2,081 | 3,029 | +46% | 0 | 0 | — |
case-16 | pass→pass | 8,697 | 4,938 | -43% | 1 | 1 | 0% | 1,651 | 2,744 | +66% | 0 | 0 | — |
case-17 | fail→pass | 8,521 | 8,399 | -1% | 1 | 1 | 0% | 1,616 | 3,431 | +112% | 0 | 0 | — |
case-18 | pass→pass | 8,450 | 2,892 | -66% | 1 | 1 | 0% | 1,444 | 2,465 | +71% | 0 | 0 | — |
case-19 | pass→pass | 3,111 | 3,274 | +5% | 1 | 1 | 0% | 541 | 2,411 | +346% | 0 | 0 | — |
case-21 | pass→pass | 7,336 | 6,601 | -10% | 1 | 1 | 0% | 1,364 | 3,219 | +136% | 0 | 0 | — |
case-22 | pass→pass | 6,253 | 6,284 | +0% | 1 | 1 | 0% | 1,172 | 3,049 | +160% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +41 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.