·
Last changedVersion:
This version passed the hardening gate. Hardening applied 7 targeted changes and preserved all other text. Classified findings before hardening: 2. Classified findings closed: 0. Classified findings remaining: 2. Unclassified scanner findings remaining: 0. Review findings closed: 5. Review findings remaining: 12.
2
2
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
SKILL.md | Malicious Code & Command Execution | — | Low | Open | |
SKILL.md | Supply Chain & Install-Time Trust | Install-time download and execute | Low | Open |
2 findings
Capture screenshots of web apps and graphical UIs during development to document visual changes.
Use this skill when you need to:
wait_until="networkidle" + wait_for_timeout(4000) ensures async charts loadfull_page=True captures the entire scrollable contentDo NOT try to get perfect crops via Playwright's clip parameter. It's unreliable with full-page captures.
For "selected" state without hover effect, move the mouse away after clicking:
Crop different sections from a single full-page screenshot:
Always capture before state BEFORE making any changes — if you forget, you have to revert code to get a before shot
Before/after pairs must use the same viewport width and crop — otherwise the comparison is useless
For interactive states: capture before AND after for each state — don't assume the "normal" before covers all cases
Use device_scale_factor=1 in Playwright to force 1x pixels so screenshots match what users see at 100% zoom
Charts need extra wait time — Plotly, D3, etc. render asynchronously; 4s minimum after networkidle
Narrow viewport reveals rendering bugs — some border/alignment issues only appear at specific widths
For desktop apps (VS, WPF, WinForms, console apps, terminals) where Playwright can't reach.
Find a window by title via Win32 API, capture its region with mss. Tested at ~33ms per capture.
Prerequisites: pip install mss pillow
Limitation: Window must be visible (not behind other windows or minimized).
Node.js Playwright only — Python Playwright has no electron API. Captures via CDP (Chrome DevTools Protocol), not from the screen.
Critical: --user-data-dir=<temp> is required or VS Code hands off to the existing instance and the launched process exits immediately.
| Scenario | Tool | Notes |
|---|---|---|
Web app (localhost) | Playwright | Proven, full DOM access |
Electron app (VS Code) | Playwright Electron (Node.js) | Works via CDP |
Desktop app, visible window | mss + ctypes (find by title) | ~33ms per capture |
Desktop app, behind windows | Windows Graphics Capture API | Complex setup, Win10 1903+ |
Get started with chainctlchainctl skill install public/github/ui-screenshots:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.chainreg.biz/public/github.com/github/skills/ui-screenshots:latest
MIT
HARDENING.md
LICENSE
SKILL.md