Screenshots · Playbook
Screenshot capture & visual regression — high-level pointers (local fallback)
viewvee captures what a page looks like, across devices, reliably. The detailed, current
capture & visual-regression standards — which device suite to use for which client tier, how to
clear a stubborn bot-challenge beyond --channel chrome, fail-over thresholds per site type, and
baseline-refresh cadence — live in the team wiki (set OUTLINE + OUTLINE_API_URL and the report
links them directly). This file is the minimal high-level fallback for when the wiki isn’t
configured: direction only, deliberately not step-by-step, so there’s no detailed content to drift
out of sync with the wiki.
- Leave lazy-load handling on — the default auto-scroll + animation-freeze + image-decode wait is what makes full-page shots of image-heavy sites come out complete; only disable it to debug.
- A bot-challenge capture is not a real capture — never save a
⚠ possible bot-challengescreenshot as a baseline; retry with--channel chrome --headedfirst. That retry clears simpler bot walls but not a Turnstile managed/under-attack challenge — Cloudflare re-checks the automated browser’s own fingerprint on every request, so not even a real Chrome profile’s livecf_clearancecookie gets through one. The only real path is a human clearing it once, or the site operator pausing Under Attack/Bot-Fight mode (issue #530). --dismiss-overlaysis best-effort,--hideis deterministic — for a baseline that must be reproducible (visual regression), prefer explicit--hide <selector>over relying on the best-effort overlay dismissal.- PNG for diffing, JPEG for archiving —
viewvee diffonly compares PNG captures; switch to--format jpegfor sharing or long-term storage, not for a pair you intend to diff later. - A THIN batch result usually means lazy-load didn’t finish — it auto-retries once with a longer
settle; if it’s still THIN, raise
--settlerather than trusting the short capture. - Tracking is blocked by default — a run never registers in a site’s live GA4/GTM; only pass
--allow-trackingwhen you specifically need to verify tag firing. - A WAF-skip header is for zones you control — the browser applies
-Hto every request the page makes, including third-party subresources; don’t send a secret to hosts you don’t own.
Full playbook → the team wiki’s screenshot-capture & visual-regression standards.