skills/reverse-engineer-animation/SKILL.md
Reverse-engineers a UI animation from a screen recording — extracts frames, tracks motion per frame, fits easing and spring curves, annotates choreography, and emits CSS, Motion/Framer Motion, SwiftUI, React Native, or UIKit code. Use when the user shares or uploads a screen recording or video of a UI animation, or asks to "reverse engineer this animation", "recreate this animation", "match this easing", "extract the animation curve", "figure out the spring from this video", "copy this transition from a video", "how does this animation work", or "reproduce this motion".
npx skillsauth add mblode/agent-skills reverse-engineer-animationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Measure motion that already exists in a recording, then reproduce it. This is the forensic
counterpart to the ui-animation skill (which prescribes how motion should be designed).
| File | Read when |
|------|-----------|
| references/measurement-guide.md | Deciding what to measure, eye vs script, reading metrics.json, choosing an ROI |
| references/curve-fitting.md | Reading fit_curves.py output, spring vs bezier, judging fit error, asymmetric open/close |
| references/code-output.md | Emitting code for CSS, Motion/Framer Motion, SwiftUI, React Native, or UIKit |
| references/choreography.md | Multi-element / multi-phase motion: staggers, blur-before-move, per-edge settling |
ffmpeg — frame extraction (brew install ffmpeg). Required for step 1.pip install opencv-python numpy scipy — tracking + curve fitting (steps 4).Extraction degrades gracefully: with only ffmpeg you can still extract frames and reason visually. Tracking and fitting need the Python packages.
Copy and track this checklist:
Reverse-engineer progress:
- [ ] Step 1: Extract frames + contact sheet
- [ ] Step 2: Vision pass — identify element, effects, phases
- [ ] Step 3: Decide precision (eye-only vs scripted)
- [ ] Step 4: Track motion and fit curves (if escalating)
- [ ] Step 5: Annotate choreography (delays, asymmetry)
- [ ] Step 6: Emit code for the target(s)
- [ ] Step 7: Validate against the recording
Run python3 scripts/extract_frames.py <video> <outdir> (add --fps N for very
slow clips). On a multi-second recording, trim to just the transition with
--start SECONDS --duration SECONDS — extracting the whole clip floods the contact sheet
and dilutes tracking. Open the generated contact_sheet.png first — it shows the whole
window at once.
View the contact sheet and name, in order:
references/measurement-guide.md.Run python3 scripts/track_motion.py <outdir> → metrics.json. Pass --bbox X,Y,W,H
to isolate one element when several move (one bbox per element). Then run
python3 scripts/fit_curves.py <outdir>/metrics.json → spring params, cubic-bezier, and a
fit error per property. Read references/curve-fitting.md to interpret the numbers and
pick the model. High error on both models means multi-phase motion — split the timeline
and fit each segment.
Load references/choreography.md. Build the timing-offset table (when each property starts
and settles) — those lead/lag gaps and the over-stretch carry more of the feel than any
single curve.
Substitute the fitted parameters into the templates in references/code-output.md for the
requested target. Keep movement on transform/opacity. Emit two transitions when
open and close differ. Produce the consolidated handoff motion spec (timing table +
curves + snippet) from references/code-output.md so the result can be implemented without
the video.
See Validation below.
Open and close are almost never mirror images — open tends to be slower and springier, close faster and flatter. Measure each direction separately (record or trim two clips and run the pipeline on each). Report two curves; never reuse the open curve reversed.
width, height, top, left) — reproduce
the motion on transform/opacity (defer to ui-animation rules).extract_frames.py, and compare contact sheets side-by-side with the original.transform, opacity, and filter.overshoot/zeta against what you saw — a clear bounce must
not fit as a flat ease.ui-animation — turn the extracted spec into production-grade, interruptible motion and
apply its easing defaults and anti-pattern rules.development
Produces a read-only review report of the current local diff or branch — it lists findings and does NOT edit files. Use when asked to run `/pr-reviewer` before commit, before push, or before handing changes off for PR creation or update; also use for "review my changes", "code review", "code quality review", or when you want findings listed by severity so you can decide what to fix yourself. Also use for "thermo-nuclear review", "deep code quality audit", "structural review", "harsh maintainability review", or "code judo" — these load the structural quality rubric for an unusually strict maintainability pass. Also use for "deslop this", "clean up AI code", "remove slop", or "review for AI patterns" — these load the AI slop detection catalog. For automatic fix-in-place (no manual review step needed), use the private `simplify` skill instead.
development
Autonomous PR monitor — polls every 2 minutes for merge conflicts, CI/CD failures across GitHub Actions, Buildkite, Vercel, and Fly.io, review comments, and merge readiness. Auto-detects PR from current branch, fixes what it can, notifies on state changes. No setup questions. Also runs as one-shot for specific concerns. Use when asked to babysit a PR, watch a PR, monitor CI, keep a PR green, handle merge conflicts, poll PR status, run `/pr-babysitter`, fix CI, diagnose CI failure, why is CI red, CI is broken, loop on CI, fix CI checks, resolve merge conflicts, or fix conflicts.
development
Feature-level UX audit for React/Next.js code. Catches what Lighthouse, axe, ESLint, and Storybook miss — state coverage gaps (missing loading/empty/error), form data loss on validation, broken focus management, optimistic UI without rollback, skeleton-induced layout shift, vague microcopy, and 25+ other modern frontend UX bugs. Diff-aware (audits changed files only) and produces a 3-tier ship-readiness verdict (release-blocker / fix-this-sprint / backlog) grouped by surface, with concrete fixes using modern React 19 APIs (useActionState, useFormStatus, useOptimistic, useTransition, Suspense). Use before merging a frontend PR, before shipping a feature, or when asked "is this checkout/onboarding/dashboard ready?", "review this PR for UX bugs", "audit this component", "what would break in production?", "is this ready to ship?"
development
--- name: ui-design description: Defines visual systems and design direction before code is written — colour palettes, typography scales, layout patterns, design tokens, and component styling for product dashboards (SaaS/admin/data-heavy) or marketing/brand landing pages. Includes CRO strategy, conversion benchmarks, persuasion psychology, A/B testing methodology, and social proof patterns. Use when choosing visual direction, selecting colour palettes and fonts, establishing layout patterns, sta