本文へ移動
cccskills
無料GitHub で公開

motioneyes-visual-analysis

Pixel-based motion and UI change analysis from frame sequences or screenshots using computer vision and visual comparison. Use when `.transition` or visual effects are not observable via MotionEyes logs, when you only have screenshots/video, when you need regression diffs across builds, or when you need to summarize on-screen changes without instrumentation. Do not use when MotionEyes traces are available and you need precise timing/values; use `motioneyes-animation-debug` instead.

インストール方法を見る

含まれるファイル(4)

  • SKILL.md7.7 KB
  • references/grid-overlay-notes.md715 B
  • references/motion-analysis-techniques.md1.3 KB
  • references/report-schema.md1.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

MotionEyes Visual Analysis

Overview

Analyze UI motion by comparing frames directly. This skill produces annotated images plus a JSON summary of motion signals (translation, scale, rotation, opacity, color) and changed regions. It complements MotionEyes traces when instrumentation is unavailable or insufficient.

Use With the Other MotionEyes Skill

  • Use motioneyes-animation-debug when you can instrument the app and need precise timing or value traces.
  • Use this skill when you only have pixels or when .transition and similar effects do not surface in MotionEyes logs.

Inputs

Use one of these inputs:

  • Frames directory with sequential image files (PNG/JPG).
  • Video file captured from the simulator (preferred). Frames are extracted at --fps.
  • macOS window capture using screencapture with a window id.

Workflow

Follow this order:

  1. Capture or gather frames for the target animation.
  2. Normalize frames (same size, consistent crop).
  3. Run baseline analysis with --trim to generate frames, diffs, and keyframes.
  4. Interpret motion using grid artifacts first (grid/ + sprite/, plus diff_grid/ when needed) for coordinate-indexed reading across frames.
  5. If grid overlays obscure subtle visual details, fall back to non-grid artifacts (frames/ + diff/) for verification.
  6. Escalate from keyframe pairs to neighboring pairs and then --all-pairs only when confidence is low or anomalies are suspected.
  7. Select key frames (start/mid/end + top delta frames) for summary.
  8. Write analysis.json and summary.md.
  9. If validating the skill itself, optionally generate an HTML report with --report.
  10. Use --trim-threshold and --trim-relative tuning if the animation is subtle.

Artifact Decision Matrix

Use this matrix to choose which artifacts to rely on.

Goalframes/grid/diff/diff_grid/sprite/Pair scope
Fast first pass (unknown issue)OptionalYesYesOptionalYesKeyframe pairs
On-screen coordinate pinpointing ("where?")OptionalYesOptionalOptionalYesKeyframe pairs
Pixel-change inspection ("what changed?")YesOptionalYesOptionalOptionalKeyframe pairs
Timing/story summaryOptionalYesOptionalNoYesKeyframe pairs
Flicker / dropped-frame suspicionYesYesYesOptionalYesAll pairs
Regression verification across buildsYesYesYesOptionalOptionalAll pairs
Visual design/polish reviewYesNoOptionalNoOptionalKeyframe pairs

Claim-Evidence Contract

Every conclusion in summary.md must cite evidence explicitly.

  • Do not infer motion from diff/ alone. Pair each diff with frame_n and frame_n+1.
  • For each major claim, cite at least:
    • frame pair index (for example pair 12->13)
    • artifact types used (frames, diff, optionally grid or diff_grid)
    • confidence score (0.0-1.0)
  • Prefer coordinate-indexed references from grid/ or sprite/ when available.
  • If confidence is below 0.7, do not finalize. Escalate pair coverage first.
  • If diff indicates change but frame context is ambiguous, mark as uncertain and inspect neighboring pairs.

Pair Scope and Escalation

Use this escalation order:

  1. Start with keyframe-rendered pairs (default behavior).
  2. If uncertain, inspect local neighborhood around a suspect pair (i-1, i, i+1).
  3. If still uncertain, or for flicker/regression work, rerun with --all-pairs.

Pair selection intent:

  • Adjacent pairs: continuity and timing transitions.
  • First vs last frame: net displacement/scale/rotation.
  • Top-delta pairs: highest visible change moments.
  • All pairs: exhaustive validation and anomaly hunting.

Frame Capture

Simulator (preferred)

  • Use XcodeBuildMCP to run the app and record video.
  • Record only the animation window you care about (for example, 1.0s).
  • For precise start timing, use the capture script with motion gating so frames only begin once pixels change.

Example flow:

  1. Build and run the demo app.
  2. Trigger the animation.
  3. Capture frames with motion gating.
  4. Run analysis using --frames-dir.

Motion-gated capture (simulator):

python3 scripts/capture_sim_frames.py \
  --sim-id <SIM_ID> \
  --output-dir /path/to/frames_raw \
  --fps 15 \
  --frame-count 45 \
  --gate-threshold 4.0 \
  --gate-consecutive 1

macOS window capture

  • Use scripts/analyze_sequence.py --source macos --window-id <id> --duration <seconds> --fps <fps>.
  • The script uses screencapture on the specified window id.

Pre-captured frames

  • Place images in a folder named frames/.
  • Run analysis using --frames-dir.

Pairwise Diffs

  • Diff images are generated between consecutive frames (frame n vs n+1).
  • By default, only keyframe pairs are rendered. Use --all-pairs to render every pair.
  • Use --diff-grid to overlay the alphanumeric grid on diff images for faster coordinate pinpointing.
  • Use --grid-theme auto|light|dark to ensure the grid is readable on dark or light backgrounds.
  • Treat diff output as a change detector, not standalone semantic truth.

Keyframe Selection

  • Always analyze all frames for metrics.
  • Summarize using start, mid, end, and the top 2 delta frames.
  • If the sequence is very short (<=3 frames), include all frames.

Outputs

The analyzer writes to the --output directory:

  • analysis.json: machine-readable metrics.
  • summary.md: short human summary.
  • frames/: normalized frames.
  • grid/: frames with alphanumeric grid overlay.
  • diff/: absolute diff images.
  • diff_grid/: diff images with grid overlay (when --diff-grid is enabled).
  • sprite/: keyframe sprite sheet (grid-overlaid by default, raw only when --no-grid is used).

Interpretation guidance:

  • Start with grid artifacts (grid/ + sprite/) for coordinate-indexed motion interpretation.
  • Add diff_grid/ when you need pairwise change maps with coordinate labels.
  • If overlays obscure subtle visual details, fall back to non-grid frames/ + diff/.

Scripts

Primary entrypoint:

python3 scripts/analyze_sequence.py --video /path/to/capture.mp4 --fps 15 --duration 1.0 --output /path/to/report

If the capture includes idle time before/after the animation, add --trim to auto-detect the motion window.

Recommended profiles:

# Default summary + coordinate-indexed artifacts
python3 scripts/analyze_sequence.py --video /path/to/capture.mp4 --fps 15 --duration 1.0 --trim --diff-grid --output /path/to/report

# Deep investigation for flicker/regression
python3 scripts/analyze_sequence.py --video /path/to/capture.mp4 --fps 15 --duration 1.0 --trim --diff-grid --all-pairs --output /path/to/report

# Clean visual review (no overlay)
python3 scripts/analyze_sequence.py --video /path/to/capture.mp4 --fps 15 --duration 1.0 --trim --no-grid --output /path/to/report

See scripts/analyze_sequence.py --help for all flags.

Dependencies

Create a local venv and install dependencies:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Reference

Load these references when needed:

  • references/motion-analysis-techniques.md
  • references/report-schema.md
  • references/grid-overlay-notes.md

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

When the user wants to A/B test App Store product page elements to improve conversion rate. Also use when the user mentions "A/B test", "product page optimization", "test my screenshots", "test my icon", "conversion rate optimization", "CPP", or "custom product pages". For screenshot design, see screenshot-optimization. For metadata optimization, see metadata-optimization.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

Discover and configure Bluetooth and Wi-Fi accessories using AccessorySetupKit. Use when presenting a privacy-preserving accessory picker, defining discovery descriptors for BLE or Wi-Fi devices, handling accessory session events, migrating from CoreBluetooth permission-based scanning, or setting up accessories without requiring broad Bluetooth permissions.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

Implement, review, or improve Live Activities and Dynamic Island experiences in iOS apps using ActivityKit. Use when building real-time updating widgets for the Lock Screen and Dynamic Island — delivery tracking, sports scores, ride-sharing status, workout timers, media playback, or any time-sensitive information that updates in real time. Also use when working with ActivityKit, ActivityAttributes, Activity lifecycle (request/update/end), Dynamic Island layouts (compact/minimal/expanded), push-to-update Live Activities, or Lock Screen live widgets.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

Measure ad effectiveness with privacy-preserving attribution using AdAttributionKit. Use when registering ad impressions, handling attribution postbacks, updating conversion values, implementing re-engagement attribution, configuring publisher or advertiser apps, or replacing SKAdNetwork with AdAttributionKit for ad measurement.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

alarmkit

無料

Implement AlarmKit alarms and countdown timers for iOS and iPadOS with Lock Screen, Dynamic Island, and Apple Watch system UI. Covers AlarmManager scheduling, AlarmAttributes and AlarmPresentation, AlarmButton stop and snooze actions, authorization, state observation, and Live Activity integration. Use when building wake-up alarms, countdown timers, or alarm-style alerts that need Apple's system alarm experience.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

When the user wants to optimize their Google Play Store listing — title, short description, full description, keywords, ratings, or Play Store-specific features. Use when the user mentions "Google Play", "Android", "Play Store", "Play Console", "short description", "full description indexed", "Google Play ASO", or wants Google Play-specific keyword, creative, or ratings strategy. For iOS App Store optimization, see aso-audit and metadata-optimization.

日本語の概要は準備中です。原文の説明を表示しています。

JordanCoin/ios-skills-collection62026年9月10日 更新

JordanCoin のスキルをすべて見る

このスキルの問題を報告する