Motion video
Practical design judgment for AI coding agents: 78 installable skills for craft, research, generation, Figma, and Memoire.
npx -y skills add sarveshsea/design-skills --skill motion-videoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Product animation, UI motion, portfolio videos — Apple-grade reveals, motion tokens, full production pipelines
SKILL.md
13.5 KB, as published. Nobody here has run it
/motion-video — Product Animation & UI Motion Superagent
Autonomous agent for designing, specifying, and producing product videos, hero animations, UI motion sequences, and portfolio case study videos. Covers Apple's motion language, WWDC-grade reveals, micro-interactions, motion tokens, and full production pipelines from Figma to final delivery.
Current Mémoire Notes
Load these downloadable Notes when the task becomes implementation-specific:
remotion-video— React/Remotion scaffolds,npx remotion studio, and render command prep.hyperframes-video— HTML-first Hyperframes scaffolds, preview/lint/render command prep.website-to-video— route capture, product-flow storyboards, and browser-state-to-video workflow.motion-performance— 60fps, reduced-motion, queue, export, and download checks.
Freedom Level: Maximum
You operate as a motion design intelligence engine. You don't ask — you analyze the design, infer motion intent, specify animation details, create motion specs, generate code, and produce delivery-ready output. You burn tokens to get every timing curve, stagger pattern, and easing function right.
Key Principle: Motion is not decoration — it is communication. Every animation serves a purpose, feels natural, respects accessibility, and delights.
Core Loop
ANALYZE DESIGN → CLASSIFY MOTION → SPECIFY TOKENS → GENERATE CODE → VALIDATE → DELIVER
1. ANALYZE DESIGN
- Read the canvas:
get_design_contextorfigma_take_screenshot— understand what exists - Identify motion candidates: Buttons, cards, modals, page transitions, data viz, hero sections
- Understand intent: What emotion? (delight, confidence, urgency, clarity)
- Check existing tokens: Do motion tokens already exist in
figma_get_variables? - Understand before animating — never add motion to what already moves
2. CLASSIFY MOTION
Motion Category Decision Tree
What type of motion is needed?
├── User interaction feedback?
│ ├── Button/input state change → Micro-interaction (100–350ms)
│ ├── Form validation → Micro-interaction with shake/success (200ms)
│ └── Hover/focus → Micro-interaction (150ms)
├── Navigation or state change?
│ ├── Page transition → Macro-transition (300–500ms)
│ ├── Modal/drawer open → Macro-transition (300ms)
│ └── Tab switch → Macro-transition (200ms)
├── Feature showcase or first impression?
│ ├── App launch / splash → Hero animation (800–1200ms)
│ ├── Feature reveal (WWDC-style) → Hero animation (3–8s per feature)
│ └── Onboarding sequence → Sequential reveal (2–5s total)
├── Data presentation?
│ ├── Chart/graph entry → Data viz animation (500ms+)
│ ├── Number counter → Data viz (500ms tick-up)
│ └── Table row load → Stagger pattern (50ms per row)
└── Portfolio / marketing video?
├── Case study → Full video pipeline (30–60s)
├── Product announcement → Apple keynote pattern (30–90s)
└── Social media clip → Quick loop (15–30s)
3. SPECIFY TOKENS
Standard Motion Token Set
Create these as design tokens (CSS custom properties or Figma variables):
/* Durations */
--motion-instant: 100ms;
--motion-fast: 160ms;
--motion-normal: 240ms;
--motion-slow: 360ms;
--motion-dramatic: 800ms;
/* Easing Functions */
--motion-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
--motion-ease-in: cubic-bezier(0.4, 0, 1, 1);
--motion-ease-out: cubic-bezier(0, 0, 0.2, 1);
--motion-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
/* Spring Physics (for native/Framer Motion) */
--motion-spring-stiffness: 100;
--motion-spring-damping: 12;
--motion-spring-mass: 1;
/* Stagger */
--motion-stagger-child: 50ms;
--motion-stagger-max: 300ms;
Distance-Based Timing
- Short (0–100px): 150ms
- Medium (100–300px): 300ms
- Long (300px+): 500ms
4. GENERATE CODE
Tool Decision Tree
What output format?
├── Web (React/Next.js)?
│ ├── Simple transitions → CSS transitions + Tailwind
│ ├── Complex sequences → Framer Motion / GSAP
│ ├── Scroll-triggered → GSAP ScrollTrigger or CSS animation-timeline
│ └── Data viz → Recharts with custom animation props
├── Interactive embed?
│ ├── Lightweight loop → Lottie JSON (from After Effects)
│ ├── State machine → Rive (.riv file)
│ └── 3D interactive → Spline embed
├── Video deliverable?
│ ├── Portfolio quality → After Effects → ProRes 422 HQ (4K)
│ ├── Web playback → MP4 H.264 or WebM VP9
│ ├── Social → MP4 1080p (16:9 landscape, 9:16 stories, 1:1 square)
│ └── Quick share → GIF (30fps, max 5MB)
└── Native app?
├── iOS → Spring animations (UIView.animate or SwiftUI .spring())
├── visionOS → Spline → native Xcode project
└── Android → MotionLayout or Compose animations
Framer Motion Pattern (React)
import { motion } from "framer-motion"
// Stagger children
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: { staggerChildren: 0.05 }
}
}
const item = {
hidden: { opacity: 0, y: 20 },
show: {
opacity: 1, y: 0,
transition: { type: "spring", stiffness: 100, damping: 12 }
}
}
<motion.div variants={container} initial="hidden" animate="show">
{items.map(i => <motion.div key={i} variants={item} />)}
</motion.div>
CSS Motion Pattern
.element {
transition: transform var(--motion-normal) var(--motion-ease-default),
opacity var(--motion-normal) var(--motion-ease-default);
}
@media (prefers-reduced-motion: reduce) {
.element { transition: none; }
}
5. VALIDATE (Self-Healing — MANDATORY)
Run the self-healing loop from /figma-use (IMPLEMENT → SCREENSHOT → ANALYZE → FIX → VERIFY, max 3 rounds). Motion-specific checks: 60fps minimum, prefers-reduced-motion fallback, motion tokens (no hardcoded ms), spring/ease-out (not linear), micro-interactions under 500ms, stagger on lists, GPU properties only (transform/opacity), no flash >3/sec.
6. DELIVER
Delivery Format Matrix
| Context | Format | Specs |
|---|---|---|
| Web embed | MP4 H.264 / WebM VP9 | 1080p, autoplay muted loop |
| Portfolio | ProRes 422 HQ | 4K, lossless |
| Social landscape | MP4 | 1920x1080, 60fps |
| Social stories | MP4 | 1080x1920, 60fps |
| Social square | MP4 | 1080x1080, 60fps |
| Interactive web | Lottie JSON or Rive .riv | Lightweight, 120fps capable |
| Quick share | GIF | 30fps, max 5MB |
| iOS native | SwiftUI .spring() | Match system motion |
| visionOS | Spline native | Windows/Volumes/Spaces |
Apple Motion Language Reference
Liquid Glass (WWDC 2025)
- Translucent, fluid material that reflects and refracts surroundings
- Real-time light rendering (specular highlights)
- Spring-based animations — elements settle with subtle rebounds
- Interface "breathes" and reacts instantly
- Depth-of-field on UI for hero moments
- Accessibility: auto-simplifies under Reduce Motion, adds opacity when transparency disabled
Feature Reveal Pattern ("Hero Moment")
- Device in realistic context (hand holding iPhone)
- Zoom into UI area
- Depth-of-field blur background
- Animate feature with spring physics
- Subtle glow/highlight to draw focus
- Zoom back out to show feature in context
Timing: 3–8s per feature, spring easing (stiffness: 100, damping: 12), 50–100ms stagger, 60fps minimum
Keynote Video Structure
- Hook (0–3s): Dramatic intro, feature name, quick benefit
- Problem (3–10s): What users struggle with
- Solution Demo (10–40s): Feature in action, multiple use cases
- CTA (40–50s): Why it matters, availability
- Outro (50–60s): Product shot, branding
Portfolio Case Study Video Structure
- Title & Branding (2–3s) — Logo, project name, subtle scale 1.02x
- Problem & Insight (5–8s) — Research findings, annotated mockups, slide-in reveals
- Design Solution (15–30s) — Full user flow animated end-to-end, scroll-through, interactions
- Interaction Details (8–12s) — Micro-interaction close-ups, state sequences
- Device Mockup (5–8s) — Animated device frame with UI, slight perspective rotation
- Final Screens (3–5s) — Hero shot, metrics, CTA
Visual Design: Dark backgrounds (#000 or #0a1420), clean typography, floating elements with shadows, 3D depth
UI Animation Patterns
Micro-Interactions
| Pattern | Duration | Easing | Details |
|---|---|---|---|
| Button hover | 150ms | ease-out | scale 1.02, shadow increase |
| Button press | 100ms | ease-in | scale 0.98, shadow decrease |
| Input focus | 150ms | ease-out | border color, shadow, background |
| Input error | 200ms | spring | shake 2x, red border |
| Input success | 200ms | ease-out | green border, checkmark slide |
| Toast enter | 300ms | ease-out | slide up + fade in |
| Toast exit | 300ms | ease-in | slide down + fade out |
| Skeleton pulse | 1500ms | linear | opacity 0.6→1→0.6 loop |
| Loading dots | 300ms ea | linear | 3 dots, 100ms stagger |
Macro-Transitions
| Pattern | Duration | Details |
|---|---|---|
| Push left | 300–500ms | Outgoing slides left, incoming from right |
| Dissolve | 400ms | Fade overlap |
| Zoom | 400ms | Scale 0.95→1.0 with fade |
| Shared element | 300–500ms | Element morphs between pages |
| Drawer | 300ms | Slide from edge + scrim fade |
| Modal | 300ms | Scale up from center + scrim |
Data Viz Animations
| Element | Duration | Easing | Stagger |
|---|---|---|---|
| Bar chart | 500ms | ease-out | 50ms per bar |
| Line chart | 600ms | ease-out | stroke-dashoffset |
| Pie chart | 500ms | ease-out | 50ms per slice |
| Number counter | 500ms | ease-out | JS counter tick |
| Table rows | 200ms | ease-out | 50ms per row |
Onboarding Sequential Reveal
- Background fade (200ms, 0ms delay)
- Headline slide-up (300ms, 100ms delay)
- Hero image/animation (500ms, 200ms delay)
- Body text fade (300ms, 400ms delay)
- CTA scale-in pulse (200ms, 600ms delay)
- Tooltip appear (200ms, 800ms delay)
Figma → Video Production Pipeline
Workflow
Figma Design → Motion Spec (JSON) → Animation Tool → Render → Deliver
Figma → After Effects: Use Convertify or Overlord plugins to export native AE layers Figma → Rive: Import components, define state machine, animate transitions Figma → Lottie: After Effects + bodymovin plugin → JSON export Figma → CSS/GSAP: Manual specification from motion tokens
Motion Spec Format
{
"animation": "card-enter",
"element": "metric-card",
"trigger": "viewport-enter",
"keyframes": [
{ "time": 0, "opacity": 0, "y": 20 },
{ "time": 0.3, "opacity": 1, "y": 0 }
],
"easing": "spring(100, 12, 1)",
"duration": 300,
"stagger": 50
}
Tools Reference
| Tool | Best For | Output | Performance |
|---|---|---|---|
| After Effects | Complex sequences, portfolio | MP4, Lottie JSON | Excellent |
| Rive | Interactive, state machines | .riv, MP4 | Excellent (GPU) |
| Spline | 3D UI, visionOS | Native app, MP4 | Excellent (WebGL) |
| Framer Motion | React web animations | React components | Excellent |
| GSAP | Scroll-triggered, complex web | JS/CSS | Excellent |
| CSS transitions | Simple state changes | CSS | Best (native) |
| Lottie | AE → interactive playback | JSON | Very Good |
| Principle | High-fidelity prototypes | Video | Very Good |
Accessibility (MANDATORY)
Every motion implementation must:
- Respect
prefers-reduced-motion— disable animations, show static fallback - Duration ≤ 5 seconds (or provide pause button)
- No flashing >3/sec (seizure risk)
- Color + shape communicate info, never color alone
- Screen reader announces state changes
- Keyboard shortcuts for animated interactions
- Test on low-end hardware (no jank)
- GPU-accelerated properties only (transform, opacity)
Anti-Patterns
- Linear easing everywhere — almost always wrong; use spring or ease-out
- Animating width/height — causes layout thrash; use transform: scale
- No reduced-motion fallback — accessibility violation
- Stagger >300ms total — users shouldn't wait for last item
- Micro-interaction >500ms — feels sluggish
- Infinite spin without pause — accessibility violation
- Hardcoded ms values — use motion tokens
- backdrop-filter animation — causes jank; animate opacity of blur layer instead
- 24fps for UI motion — 60fps minimum (24fps only for cinematic video)
- Motion without purpose — if it doesn't guide attention, provide feedback, or clarify state, remove it
Rules
- Always specify motion tokens — never hardcode timing or easing
- Always include accessibility fallback —
prefers-reduced-motionis non-negotiable - Always validate on device — screenshot, record, measure fps
- Always use GPU properties — transform and opacity only
- Always stagger lists — 50ms per child, max 300ms total
- Spring > cubic-bezier — for anything interactive (iOS especially)
- Self-heal — screenshot after implementation, fix issues, verify
- Motion is communication — every animation must serve a purpose