用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/applicate2628/Orchestrarium --skill analyzing-video-bugs命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | analyzing-video-bugs |
| description | Video bug analysis: inspect UI recordings frame by frame. |
This skill processes an existing video file showing a UI bug, animation glitch, layout jump, or visual artifact, and turns it into a small set of frames an agent can actually read. It applies to any video bug regardless of origin — whether the user recorded the repro themselves and shared a path, or the agent captured the recording via the screen-capture workflow in $windows-gui-manual-testing. The skill begins after a video file exists on disk; it does not own video capture.
The Read tool reads images (PNG/JPG/GIF) and PDFs, but not video files. To analyze a video bug you must first extract frames with ffmpeg, then Read the resulting images.
Hard crop gate: before reading, judging, or reporting any cropped frame as full-window evidence, verify the crop against an uncropped full-desktop/full-frame image. It must include the complete target window; for normal overlapped windows the top-right close button must be visible. If the crop is clipped or the close-button anchor is missing, discard those frames and re-extract from the full capture or a corrected rectangle.
$windows-gui-manual-testing — parent visual-verification workflow; owns environment/theme context, evidence-type choice (screenshot vs short video vs frame sequence), screen capture when no recording exists, and structural-vs-cosmetic classification of UI issues.$bug-hunting — general diagnostic-logging methodology for runtime bugs whose cause is not obvious from inspection alone; Rule 4 there points back here for visual evidence.# Both should print a path. If either is empty, fall back to:
# winget install Gyan.FFmpeg --accept-source-agreements --accept-package-agreements
where.exe ffmpeg
where.exe ffprobe
On Windows the winget install puts ffmpeg under C:\Users\<user>\AppData\Local\Microsoft\WinGet\Links\ffmpeg.exe — this path may not be in the current shell's PATH even when winget reports "installed". Always check where.exe ffmpeg and fall back to the full path when needed.
Use a scratch folder inside the repo (.scratch/video-frames/) so the output never accidentally gets committed — the repo's /.scratch/ rule in .gitignore already covers this. Do not put frames in the system temp folder — Read needs absolute paths and the workflow gets much easier when frames live next to the repo.
ffprobe -v error -show_entries format=duration,size:stream=width,height,r_frame_rate \
-of default=noprint_wrappers=1 "<video-path>"
Decide a coarse sampling rate based on duration:
60 s → 0.5 fps or sample only flagged ranges
ffmpeg -v error -i "<video>" -vf "fps=2,scale=1158:-1" -q:v 4 frame_%02d.jpg
scale=1158:-1 shrinks 1080p+ video so each frame is ~50–70 KB JPEG. 1158 px wide is enough to read UI text in most apps; go wider only if you cannot tell what a button says.-q:v 4 is a good middle for JPEG (lower = better quality).%02d zero-pads filenames so they sort correctly in Glob output.GetWindowRect if available, but verify it against one full-desktop frame before reading cropped frames; virtual-screen coordinates and DPI can make the first crop wrong. If the crop lacks any window edge or the close-button anchor, discard it and re-extract.Read all coarse frames in parallel (one Read tool call per frame, batched in a single message). Identify the stable states (which frames look identical) and where the transitions are.
For many frames, build contact sheets before opening individual images:
ffmpeg -v error -framerate 4 -i "frame_%02d.jpg" \
-vf "scale=550:-1,tile=4x9:margin=8:padding=4:color=white" \
-frames:v 1 sheet.jpg
On Windows ffmpeg builds, -pattern_type glob may be unsupported; prefer numbered patterns such as frame_%02d.jpg.
Coarse sampling almost always straddles the moment of change. Use ffmpeg's scene detector to get precise timestamps:
ffmpeg -i "<video>" -vf "select='gt(scene,0.03)',showinfo" -an -f null - > scene.log 2>&1
grep -E "pts_time" scene.log
scene is the normalized frame-difference score: 0.03 catches most UI transitions, 0.1 is more selective. The pts_time values are your transition timestamps. Sometimes transitions come in pairs ~100–200 ms apart — the second timestamp is usually the "after" state and the first is mid-transition. This is the signal worth investigating.
For low-contrast layout shifts, try thresholds in the 0.015 to 0.03 range and cross-check against coarse frames. Scene detection is a locator, not a verdict.
Re-extract at higher rate over a narrow window:
ffmpeg -v error -ss <start> -t <duration> -i "<video>" \
-vf "fps=15,scale=1158:-1" -q:v 3 dense_%02d.jpg
Then read dense frames around each suspicious timestamp.
For one-frame bugs, use the source frame rate (often 60 fps) and sample several repeated transitions, not just the first clean one:
ffmpeg -v error -ss <start> -t 0.55 -i "<video>" \
-vf "crop=<w>:<h>:<x>:<y>,fps=60,scale=1200:-1" -q:v 3 dense_%03d.jpg
ffmpeg -v error -framerate 60 -i "dense_%03d.jpg" \
-vf "scale=400:-1,tile=6x6:margin=8:padding=4:color=white" \
-frames:v 1 dense_sheet.jpg
Only use the crop=<w>:<h>:<x>:<y> dense-sampling form after the hard crop gate passed. If it has not passed, dense-sample the full frame first.
If the bug is intermittent or reported "between frames", inspect dense sheets from at least 3-5 transitions and cover both directions of the UI state change when both directions exist.
When two adjacent extracted frames have identical file sizes (bytes), they are usually the same source frame decoded twice — useful for confirming a stable state vs a real transition:
ls -la dense_*.jpg | awk '{print $5, $9}'
If dense_05.jpg and dense_06.jpg are both 54231 bytes and dense_07.jpg is 57864 bytes, the change happened between frame 6 and 7.
Coarse JPEGs can blur subtle UI details (cursor highlight, selected-state shading, 1 px borders). For the final root-cause check, pull individual frames at native resolution as PNG:
ffmpeg -v error -ss <ts> -i "<video>" -frames:v 1 probe_<ts>.png
These are large (700 KB+) but lossless, and the Read tool handles them fine.
git add .scratch/video-frames/ — that folder must stay local.$windows-gui-manual-testing step 3 (Obtain and analyze video evidence) to record one, then return here for analysis.If the bug is described verbally without any video or screenshot, decide which path applies:
$windows-gui-manual-testing directly (single screenshot is usually enough).$bug-hunting and start with diagnostic logging.coarse extraction: low-fps frame dump used to find candidate transition windows.dense sampling: high-fps frame dump over a narrow window around a known transition.native-resolution PNG: lossless single-frame snapshot used when subtle pixel-level detail matters.pts_time: presentation timestamp from ffmpeg's showinfo output; the time at which a frame is meant to be displayed.scene-change pair: two pts_time values close together; first usually marks the start of a transition, second the commit.