pixel-animate
Skill0 starsChanged 23 days agoMITView on GitHub
pixel's animation discipline. Use for any motion / scroll / transition work. Encodes the lowest-layer ladder (O6/O-F5), the Lenis+GSAP one-rAF recipe (autoRaf:false, S5), LazyMotion+m to avoid the 34KB bare-motion import (O5), frequency-gated sub-300ms ease-out (O-F2/O-F3), and interruptibility (O-F4).
- Installs packages
In this repository59 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- agent-runtimeSkill
- frontend-designSkill
- architectSkill
- deep-thinkSkill
- design-systemsSkill
- ecosystem-referenceSkill
- fractal-delegationSkill
- harness-reviewSkill
- heartbeatSkill
- integrate-resourcesSkill
- llm-council-critiqueSkill
- loop-createSkill
- mcp-setupSkill
- memory-compressionSkill
- memorySkill
- model-routingSkill
- oss-project-scaffoldSkill
- playwright-cliSkill
- repo-scoutSkill
- self-improveSkill
- skill-creatorSkill
- skill-routingSkill
- sprintSkill
- test-visualSkill
- troubleshootSkill
- ux-auditSkill
- Accessibility AuditorSkill
- artifacts-builderSkill
- brand-guidelinesSkill
- canvas-designSkill
- frontend-patternsSkill
- design-mirrorSkill
- design-system-starterSkill
- design-to-codeSkill
- feature-design-assistantSkill
- figma-implement-designSkill
- frontend-designSkill
- frontend-dev-guidelinesSkill
- mobile-designSkill
- motion-canvasSkill
- pixel-agent-uiSkill
- pixel-anti-slopSkill
- pixel-brain-pageSkill
- pixel-migrate-next16Skill
- pixel-rsc-boundarySkill
- pixel-ship-gateSkill
- premium-web-designSkill
- senior-frontendSkill
- shadcnSkill
- tailwind-design-systemSkill
- tailwind-patternsSkill
- theme-factorySkill
- ui-design-systemSkill
- ui-ux-pro-maxSkill
- ux-researcher-designerSkill
- web-design-guidelinesSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
The bundle stance (O5): ALWAYS LazyMotion + m (~4.6KB).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
pixel-animate — lowest-layer ladder + the one-rAF recipe (O5/O6/O-F2..F5/S5)
Stance: the slop tells in motion are animating the WRONG actions, two-rAF jitter, and a 34KB bare-
motionimport. Great motion is the boring core being bulletproof BEFORE any flourish (O-F4). Reach for the LOWEST layer that does the job.
trigger
- ANY motion / scroll / transition / hover / micro-interaction
- a scroll-pin / scrub / snap / parallax (the Lenis+GSAP territory)
- a page transition
- choosing easing vs spring
- a
framer-motion/@floating-ui/aos/GSAP dep about to be added
The stances this encodes (named)
The ladder — ALWAYS the lowest layer that works (O6, sharpened by O-F5):
CSS native → Lenis → GSAP → Motion → Rive → Three. NEVER GSAP for a fade or Motion for a scroll-pin.
- simple page transition → React 19.2
<ViewTransition>(native, zero JS) - state/layout →
LazyMotion+m - scroll pin/scrub/snap → GSAP + Lenis (
autoRaf: false) - branded interactive moment → Rive · 3D only when the brand demands it
- O-F5: in 2026 native CSS reaches higher —
:has()93%+, container queries 95%+, scroll-driven animations 85%, View Transitions 83%,sibling-index()stagger. The 2025 reflexnpm i framer-motion/floating-ui/aosis now the SLOP default; each has a native replacement for the common case. (Gate Anchor Positioning + View Transitions behind a Safari fallback;:has/container queries are safe unguarded.)
The bundle stance (O5): ALWAYS LazyMotion + m (~4.6KB); NEVER bare motion (~34KB, can't tree-shake) unless you need everything. useAnimate mini = 2.3KB for the smallest case.
The one-rAF recipe (S5 / §4.2) — the single most common stale-tutorial bug:
@studio-freight/react-lenis+@studio-freight/hamoare RETIRED (April 2026) → uselenis+lenis/react.- Two rAF loops → jitter.
new Lenis({ autoRaf: false })is MANDATORY when integrating GSAP, then drive Lenis from ONE loop viagsap.ticker.add((t) => lenis.raf(t * 1000))and setgsap.ticker.lagSmoothing(0). - GSAP ScrollTrigger touches the DOM →
'use client'+useGSAP()(from@gsap/react) +gsap.registerPlugin(ScrollTrigger)+ cleanup (§4.4).
The timing/easing stance (O15 sharpened by O-F2/O-F3/O-F4):
- O-F2 — frequency-gate motion: NEVER animate keyboard-initiated / repeated actions ("animate the novel, never the hundreds-of-times-a-day action" — Emil Kowalski + Rauno Freiberg, the highest-confidence rule in the set). An animation on a repeated action makes it feel slow.
- O-F3 —
ease-out, sub-300ms for entrances/feedback; reach for SPRINGS only when motion is attached to continuous input (drag/flick/gesture); NEVERlinear/ease-inon UI, NEVER spring everything. The danger is a sluggish 350ms button splitting the difference. (page/hero transitions = 200–500ms; direct-manipulation feedback ≤300ms.) - O-F4 — animations must be interruptible; the boring core (scroll, text input, navigation) is bulletproof BEFORE any hero flourish.
- transform + opacity ONLY (GPU-composited); randomize delays (fixed identical intervals feel robotic — the Stripe-CEO rule); respect
prefers-reduced-motionby minimizing non-essential motion, not killing all of it; 60fps.
steps
- Pick the layer from the ladder — start at CSS/native, climb only if it can't express the motion.
- If Motion:
LazyMotion+m, loaddomAnimation/domMaxon demand. Never baremotion. - If Lenis+GSAP:
lenis/lenis/react,autoRaf: false, singlegsap.tickerloop,'use client'+useGSAP+ cleanup. - Gate the action: is this a frequent/keyboard action? If yes → no animation. Novel action →
ease-out≤300ms; continuous input → spring. - Verify visually — screenshot + assert 60fps, no jitter,
prefers-reduced-motionhonored.
output
- The layer chosen + why it's the lowest that works.
- For Lenis+GSAP: the
autoRaf: false+ single-ticker recipe in place. - The timing decision (ease-out ≤300ms vs spring) + the frequency-gate verdict.
verify
source has autoRaf: false + a single gsap.ticker.add driving lenis.raf AND no @studio-freight/ import AND no bare import { motion } where LazyMotion+m would do.
sources
brain/OPINIONS.md O5, O6, O15, O-F2, O-F3, O-F4, O-F5 · brain/KNOWN-PITFALLS.md §4.1–§4.5, §12.2 · BATTLE-TESTED S5.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

