skills/screenshot-local/SKILL.md
Capture screenshots of local dev servers with shot-scraper. Use when asked to "screenshot my app", "take a screenshot of localhost", "generate screenshots for docs", "batch screenshot my pages", or "set up shot-scraper".
npx skillsauth add antjanus/skillbox screenshot-localInstall 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.
Capture screenshots of local dev servers and HTML files with shot-scraper (installed via pipx). Core principle: screenshots should be reproducible from a command or committed YAML config, not manual captures. For terminal/CLI recordings use record-tui (VHS) instead.
brew install pipx # or: apt install pipx / pip install pipx
pipx install shot-scraper
shot-scraper install # installs Chromium; add -b firefox / -b webkit for others
shot-scraper --version # verify
If the command isn't found after install, run pipx ensurepath and reopen the shell.
shot-scraper http://localhost:3000 -o homepage.png # localhost page
shot-scraper index.html -o preview.png # local HTML file
shot-scraper http://localhost:3000 -w 1200 -h 800 -o home.png # fixed viewport
shot-scraper http://localhost:3000 --retina -o [email protected] # 2x for high-DPI
shot-scraper http://localhost:3000 -s ".hero" -p 20 -o hero.png # element + padding
shot-scraper http://localhost:3000 --wait-for "document.querySelector('.loaded')" -o page.png
shot-scraper http://localhost:3000 -j "document.querySelector('.cookie-banner')?.remove()" -o clean.png
shot-scraper pdf http://localhost:3000 -o page.pdf # PDF export
shot-scraper http://localhost:3000 -i # interactive debug
| Flag | Purpose |
|------|---------|
| -o | Output filename |
| -w / -h | Viewport width / height (omit -h for full page) |
| -s / --selector-all | Capture one / all matching elements |
| -p | Padding around selector (px) |
| --retina | 2x device pixel ratio |
| --quality N | Save as JPEG at quality N |
| --wait N / --wait-for "expr" | Wait ms / until JS returns true |
| -j "js" | Run JS before capture (dismiss modals, set state) |
| --omit-background | Transparent background (PNG) |
| -b | Browser: chromium / firefox / webkit |
Full flag list: reference/COMMAND-REFERENCE.md.
Commit a shots.yml and run shot-scraper multi shots.yml:
- url: http://localhost:3000
output: screenshots/homepage.png
width: 1280
height: 800
- url: http://localhost:3000/dashboard
output: screenshots/dashboard.png
width: 1280
height: 900
wait: 2000
javascript: |
document.querySelector('.loading-spinner')?.remove()
- url: http://localhost:3000
output: screenshots/mobile-home.png
width: 375
height: 812
Supported keys: url, output, width, height, quality, wait, wait_for, selector, selectors, selector_all, padding, javascript, js_selector, retina, omit_background. Copy-paste configs per project type: reference/TEMPLATES.md.
| Use case | Width | Height | Format | |----------|-------|--------|--------| | README hero | 1280 | 800 | PNG | | Docs screenshot | 1200 | auto | PNG | | Social/OG image | 1200 | 630 | PNG | | Mobile / Tablet | 375 / 768 | 812 / 1024 | PNG | | Full page | 1280 | (omit) | PNG |
When asked to set up screenshots for a project: read its routes (router config, page files, nav), identify key UI states (loading, empty, populated, error) and the dev-server port, then write a shots.yml covering the key screens. Validate with shot-scraper multi shots.yml and iterate on timing/selectors.
✅ Good — explicit dimensions, SPA waits, organized output, JS cleanup:
- url: http://localhost:3000/dashboard
output: screenshots/dashboard.png
width: 1280
height: 900
wait: 2000
javascript: |
document.querySelector('.toast-notification')?.remove()
❌ Bad — no output (messy auto-names), no width (inconsistent across machines), no wait on an SPA route (captures the loading spinner), output dumped at project root.
--wait 3000 or --wait-for "document.querySelector('.content')".npm run dev &), verify with curl -I http://localhost:3000, or use the YAML server key to auto-start.--retina doubles pixels (1280w → 2560px); set -h for a fixed viewport, omit it for full page.-i or --devtools.Automate regeneration with GitHub Actions so docs stay current; the YAML server key auto-starts a dev server during capture. See reference/CI-INTEGRATION.md.
Pairs with record-tui (terminal recordings) and track-session (iteration tracking). External: shot-scraper · docs · GH Actions template · pipx.
development
EXPERIMENTAL. Mine recent Claude Code transcripts for friction events, cluster them by active skill, propose patches for skills with 3+ friction events, validate each patch via headless replay, scrub the report through /publish-check, and present an EVOLUTION_REPORT.md for human review on a branch (never auto-merge). Use when asked to "evolve my skills", "audit skills against recent friction", "propose skill improvements from transcripts", "run the skill evolution pipeline", or as part of a weekly skill-quality cadence.
testing
Manual QA tracking — things tests can't verify. Use when asked to "create a QA list", "set up QA for this project", "what should I QA", "track manual QA", "audit the QA list", or "start manual QA".
development
Multi-source web research with cited synthesis in chat. Use when asked to "research X", "deep research on Y", "deep dive on Z", "investigate this topic", "compare X and Y", "pros and cons of X", or "survey the landscape of Y".
development
Use this skill whenever the user wants a multi-agent review of local changes — triggers include "review my code", "review these changes", "do a code review", or "check my changes before I commit". Writes REVIEW.md. Do NOT use for an open PR by number (use /review) or a security-specific pass (use /security-review).