.claude/skills/debug-video/SKILL.md
Video-based visual debugging — extract key frames from screen recordings and analyze UI bugs over time. Detects animation glitches, race conditions, gesture issues, scroll jank, keyboard overlap, and navigation transitions that screenshots cannot capture.
npx skillsauth add JubaKitiashvili/everything-react-native-expo debug-videoInstall 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.
You are executing the /debug-video command. Extract key frames from a video recording and use the visual-debugger agent for temporal UI analysis.
/debug-video <video-file> — analyze a screen recording
/debug-video <video-file> --max-frames 15 — limit extracted frames (default: 20)
/debug-video <video-file> --description "button disappears after tap" — with context
All video formats supported: .mp4, .mov, .webm, .avi, .mkv, .gif
Run the frame extractor:
node scripts/extract-video-frames.js "<video-path>" --max-frames 20
This outputs JSON with frame paths. If ffmpeg is not found, show the user install instructions from the error output.
Duration guidance:
60 seconds: warn user to trim to the relevant section
Read EVERY extracted frame image file using the Read tool. The frames are ordered chronologically — frame_001 is earliest, frame_N is latest.
Analyze the frames as a timeline, not individual screenshots. Look for:
| Category | What to Look For | | ------------------------- | ---------------------------------------------------------------- | | Animation bugs | Element position/size changes unexpectedly between frames | | Race conditions | Loading → content → loading again, or flash of wrong content | | Gesture issues | Drag/swipe stuck mid-motion, element not following finger | | Scroll jank | Content jumping, blank areas during scroll, inconsistent spacing | | Keyboard overlap | Input hidden behind keyboard after tap sequence | | Navigation glitches | Flash of wrong screen, transition tearing, double-render | | Layout shifts | Content moving/resizing after data loads | | State bugs | UI showing stale data, toggle not reflecting state | | Disappearing elements | Element visible in frame N, gone in frame N+1 | | Z-index issues | Element appearing behind/above where it shouldn't |
Present findings with frame references:
Frame 3→4: Button "Submit" shifts 20px down after keyboard appears
Frame 6→7: Loading spinner reappears after content was already visible (race condition)
Frame 9: Bottom tab bar overlaps with input field
For each temporal issue found:
Same as /debug-visual:
## Video Debug Report
### Video Info
- File: [path]
- Duration: [X seconds]
- Frames analyzed: [N key frames]
### Timeline Analysis
| Frames | Issue | Category | Severity |
| ------ | ---------------------------------------------- | ---------------- | -------- |
| 3→4 | Submit button shifts down on keyboard open | Layout | Major |
| 6→7 | Loading spinner reappears after content loaded | Race condition | Critical |
| 9 | Tab bar overlaps input field | Keyboard overlap | Major |
### Issue Details
**Issue 1 (Frame 3→4): Button shifts on keyboard open**
- Component: `LoginScreen.tsx`
- Root cause: Missing `KeyboardAvoidingView` wrapper
- Fix: Wrap form in `<KeyboardAvoidingView behavior="padding">`
**Issue 2 (Frame 6→7): Loading spinner race condition**
- Component: `FeedScreen.tsx`
- Root cause: `useEffect` fetches data but component unmounts/remounts during tab switch
- Fix: Add cleanup to useEffect, check mounted state before setState
### Recommended Fixes
1. [Priority order with code changes]
### Which issues should I fix? (reply with numbers)
development
Guided version migration for React Native and Expo SDK upgrades
development
Test-driven development workflow for React Native — Jest, React Native Testing Library, and Detox
development
Mobile security audit for React Native applications
development
Step-by-step performance diagnosis and optimization for React Native apps