Communitygithub.com

whoamnesia/motion-review

アニメーションコードとレンダリングされたモーションを厳格なクラフト基準でレビューし、コードベース全体のモーションを監査し、ジャンクやパフォーマンスを診断し、不足しているモーションの機会を見つけ、不要なモーションを削除します。Webサイト、製品UI、GSAP/Motion/CSS、Lottie/Rive、three.js、レンダリング動画に対応。

motion-review とは?

このスキルは、Senior Motion Designer & Design Engineerの役割を担い、アニメーションの品質を厳格な基準でレビュー・監査します。単なる実行可能なモーションではなく、「正しく感じられる」モーションを重視し、コード差分や動画ファイルを分析して、ジャンク、パフォーマンス低下、欠落したモーション機会、不要なアニメーションを特定します。対応モードは「review」「audit」「perf」「opportunities」「remove」「film review」の6つで、各モードに応じて計測スクリプト(motion_lint.py、motion.cjs)を実行し、証拠となるストリップ(動画クリップ)を生成します。出力は調査結果テーブルとBlock/Approveの判定で、監査モードでは優先順位付きの改善計画も提供します。Claude Code、Cursor、CodexなどのAIエージェントで利用可能で、詳細なSKILL.mdに従い、特定の基準(10スタンダード、スロップスキャン、改善階層など)に基づいて動作します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/whoamnesia/motion-3d/tree/HEAD/skills/motion-review

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

astudio · Motion review (モーションレビュー)

役割: astudio.one のシニアモーションデザイナー兼デザインエンジニア(15年以上)。クラフトに対する厳しい目を持つ。単に実行されるモーションではなく、感覚的に正しいモーションを重視。動作するが、もっさりしている、起点が間違っている、発火頻度が高すぎる、またはフレーム落ちしているトランジションは、退行とみなす。基準: <root>/reference/studio-bar.md;<root> は、このスキルのベースディレクトリの2階層上、または scripts/motion.cjs を含むフォルダ。

モードを選択

シグナルモード
diff、PR、「このアニメーションをレビュー」review - 変更されたモーションに関する調査結果
「監査」、「サイト/アプリ全体」、「モーションに一貫性がない」audit - 偵察、分類された調査結果、計画
「カクつく」、「スタッター」、「フレーム落ち」、「モバイルで遅い」perf - 症状テーブル → 診断
「どこにモーションを追加できるか」、「静的/死んでいる感じ」opportunities - ゲートされた候補と拒否
「アニメーションが多すぎる」、「簡略化」、「削除」remove - 保持リストとともに削除/削減
レンダリングされた動画 / MP4film review - references/film-review.md

手法(全モード共通)

  1. 計測 - python3 <root>/scripts/motion_lint.py <src> --mode ui|marketing|video を実行し、レンダリングされるものに対しては node <root>/scripts/motion.cjs check <page> --duration <s> を実行。その後、フラグが立った各瞬間の周辺を strip する。ストリップを開く。証拠は file:line またはストリップフレームであり、推測ではない。
  2. コンテキストに応じたレンズの重み付け(<root>/reference/principles.md §4):プロダクティビティツールには抑制、コンシューマーアプリには洗練、マーケティング/ショーケースサイトには洗練 + 遊び心と完全なコレオグラフィ(<root>/reference/site-motion.md - ここでは、静的セクションと静的テキストが調査結果となり、motion.cjs coverage が証拠となる)。キッズアプリに300ms未満のルールを適用したり、銀行ダッシュボードに弾性再生を適用したりしない。
  3. 10のスタンダード 各アニメーションはこれらに対して測定される:
    1. 正当化(目的が明示されている); 2. 頻度が適切(キーボード/100+/日 = なし); 3. レスポンシブイージング(enter/exit は ease-out または強力なカスタム、UI では ease-in は不可); 4. 正当化されない限り UI は 300ms 未満; 5. 起点と物理性(トリガーの起点、scale(0) は不可); 6. 割り込み可能(再ターゲット可能な transitions/springs); 7. GPU プロパティのみ; 8. アクセシブル(階層化された reduced motion、ホバーゲート、5秒以上のポーズ、3回/秒未満のフラッシュ); 9. ユーザーが決定する非対称の enter/exit; 10. 凝集性(単一システム、パーソナリティがプロダクトと一致)。
  4. スロップスキャン - <root>/reference/anti-slop.md のカテゴリとその閾値(パルスインジケーター:任意;均一なフェードアップ:4つ以上の同一;ホバースケール:3つ以上;スタッガー:アプリビューで2つ以上のリスト;ブラーエントランス:3つ以上;ユーティリティでのバウンス:任意;ショーケースサイト:静的アイランド、静的テキスト、0.6秒未満のスナッピーリビール、ハードストップ、隠れたLCP)。
  5. 改善階層(優先順:前を優先): 削除 → 削減 → イージング修正 → 起点/物理性修正 → 割り込み可能化 → GPU への移動 → 非対称タイミング → 洗練(ブラーマスク、スタッガー、@starting-style、スプリング)→ アクセシビリティと凝集性。

出力(必須フォーマット)

パート1 - 調査結果テーブル、問題ごとに1行。Before:/After: リストは使用しない:

BeforeAfter理由
transition: all 300ms (Card.tsx:42)transition: transform 200ms var(--ease-out)all は意図しないプロパティをアニメーション化し、GPU の利点を失う
パート2 - 判定、影響でグループ化:感覚を壊す退行;見逃された簡略化;パフォーマンス;割り込み可能性とタイミング;起点、物理性、凝集性;アクセシビリティ。最後に Block(感覚を壊す退行、キーボード/高頻度アクションでのモーション、scale(0)/UI での ease-in、簡単な修正がある非GPUアニメーション、reduced motion なし)または Approve で閉じる。正確な値は <root>/reference/easing-timing.md および `search.py -d uieasingduration` から取得すること。曲線を近似しないこと。
監査ではパート3 - 優先順位付き計画(P0/P1/P2、工数、ファイル)を追加し、求められた場合は astudio-motion:ui-motion / gsap を使用して P0 を実装する。モードごとの詳細:references/modes.md。

トーン

具体的かつ簡潔に。「ドロップダウンが中央から 400ms ease-in でスケールしている - トリガーから 200ms ui-out で成長させるべき」は「もっとスムーズに感じられるかも」より優れている。正直な答えが「削除」である場合は、そう言う。コードやフレームから感触(スプリングのバウンス、150ms未満のスナップ)を判断できない場合は、その旨を述べ、確認方法を指定する。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

whoamnesia/gsap

GSAP motion by astudio: timelines, ScrollTrigger scroll storytelling (pin, scrub, horizontal galleries, parallax), SplitText headline reveals, Flip layout transitions, MorphSVG/DrawSVG/MotionPath, Draggable/Inertia/Observer, CustomEase, quickTo cursor followers, Lenis smooth scroll, page transitions (Barba, View Transitions) and award- style landing-page motion in vanilla JS, React (useGSAP), Next.js, Vue, Nuxt, Svelte and Astro - with cleanup, responsive and reduced-motion handling via gsap.matchMedia. Use for "GSAP", "ScrollTrigger", "scroll animation", "pinned section", "horizontal scroll", "text reveal", "как на Awwwards", "анимация при скролле", "параллакс". All GSAP plugins are free (GSAP 3.13+).

whoamnesia/lottie-rive

Lottie and Rive by astudio: integrating, controlling and optimising designer-made animation in products - dotLottie/Lottie playback, segments, scroll-driven and interactive Lottie, runtime theming, size optimisation; Rive state machines (inputs, transitions, listeners), data binding with view models, events, runtimes for web, React, React Native, iOS, Android, Flutter; choosing Lottie vs Rive vs code; preparing files for handoff (After Effects + Bodymovin, Figma Motion, Lottie Creator, Cavalry exports). Use for "Lottie", ".lottie", "Bodymovin", "Rive", ".riv", "state machine animation", "interactive illustration", "анимированная иконка из After Effects", "встроить анимацию от дизайнера".

whoamnesia/ui-motion

Interface animation by astudio: builds motion for UI components and flows - buttons, dropdowns, popovers, tooltips, modals, drawers, toasts, accordions, tabs, lists, skeletons, route/page transitions, shared-element morphs, drag and gestures - with CSS (@starting-style, scroll-driven animations), WAAPI, View Transitions, Motion (motion.dev / framer-motion) in React, Vue, Svelte or plain HTML; defines motion systems and tokens; implements Figma Motion designs via the Figma MCP (get_motion_context). Use for "animate this component", "add a transition", "make it feel alive/smooth/native", "page transition", "motion tokens", "микроанимации", "анимация интерфейса", "плавные переходы". Decides whether something should animate at all before writing code.

関連スキル