visual-verify
Use to verify rendered UI against its design reference.
Skill by OutThisLife
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/outthislife-visual-verify
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/visual-verify
What's inside
- Skill name
visual-verify- Description
- Use to verify rendered UI against its design reference.
- License
- MIT
- Instructions
- 69 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (5)
- SKILL.md
- screenshot-overlays.md · references/
- compare.py · scripts/
- selftest.py · scripts/
- viewer.html · templates/
SKILL.md (first lines)
# Visual Verify ## Motion pieces: judge from ordered stills, not a recording - Don't record video to judge a movie; capture 6–8 stills at fixed film-clock times (read the scene's `data-film-time`, not wall time) and tile them with ffmpeg `concat` listing files explicitly. A glob sorts `t12` before `t1_2` and the critique reads the timeline backwards. - For beat-synced effects, multiply every effect by a hit envelope (`pow(1-phase, 4)`) so frames between beats are clean; sustained shear/split/feedback reads as mush, not rhythm. Gate the whole pass with an intensity curve that is 0 at the opener and 0 at the landing. Never report a visual, layout, or theme change as done based on the diff or a passing test. Look at the running surface. ## Steps 1. Run the actual surface (dev server, app, TUI/GUI, Storybook — whatever shows this UI). Don't start one the user already has running. 2. Capture what it looks like — screenshot it, or tell the user exactly how to see it. 3. Compare against the reference: the design (Figma/mock), the sibling surface it should match, or the before state. Name the specific things you checked (color values, spacing, border, active state, contrast). For Figma/screenshot matching, follow [Screenshot overlays](references/screenshot-overlays.md) using the bundled utility or an existing harness with the same capture contract. 4. If it doesn't match, keep the debug logging and iterate. Only say "done" once it visibly matches. 5. Share the clean render and comparison evidence, with the viewport/state, measured deltas, approved deviations and unverified states. Keep visual parity, functional QA and the user's approval separate. ## Dense 3D inventory labels - Compare projected label rectangles against one another and the fixed UI dock at desktop and mobile sizes. A rendered canvas or correct structure count does not prove labels are readable. - Gate labels on projected cell width, not viewport width alone, so zoom can reveal names without overlap. Keep search and tolerant picking available when labels are hidden. - Exercise resize without reloading an already-exploded scene. Invalidate both camera fitting and mesh transforms when the packing changes; updating only destination coordinates leaves objects in the previous grid. - Measure inspector layout bounds independently of entry animations when reserving 3D camera space; transformed bounding rectangles can briefly report the wrong available viewport. - Verify switch position with computed `translate` as well as `transform`; Tailwind can use individual transform properties, so `transform: none` does not mean the thumb is unmoved. ## Postprocessing previews - Keep 3D postprocessing separate from DOM labels and controls so dither and edge detection do not damage text readability. Preserve canvas alpha so scanlines never fill the clean page background; compare a UI-element screenshot pixel-for-pixel with the effect on and off. - Apply dependent scene/material changes atomically per file during HMR. Partially updated frame loops can throw every animation frame and flood Vite's forwarded console; inspect the latest log and HTTP health rather than treating a listening port as a working preview. - Provide an effects bypass during visual iteration and compare actual rendered pixels with effects on/off at multiple pixel ratios. Preserve selection, camera, and isolation while switching. - Validate the ordered-dither matrix covers its intended threshold range exactly; plausible-looking arithmetic can silently duplicate thresholds and alter the tonal distribution. - Gate dither strength out of near-black backgrounds in a dark scene; otherwise a subtle surface effect becomes a full-screen checkerboard. - Verify cinematic pause with both a frozen timeline and identical canvas pixels. Animate decorative rings, breathing, and camera motion from the same pausable clock. - Prove WebGL artwork motion with timed framebuffer reads and a stable visible-artwork screenshot crop, not canvas presence or draw counts alone. When a still image and texture loader share a CDN URL, reproduce image-then-fetch in a fresh browser context: a no-CORS image response can poison the cache for the subsequent CORS texture fetch. Match the still's crossOrigin mode to the texture request, and verify normal and reduced-motion pixels without increasing effect strength. ## Isolated Vue component previews - Import Vue through one canonical Vite alias in both the preview entry and compiled components. Mixing an explicit `node_modules/vue/dist` import with an optimized alias can create duplicate runtimes: component resolution warns, scoped attributes disappear, and loaded CSS no longer matches. Verify actual SVG children, scoped attributes, computed padding, and console warnings before judging screenshots. - Check absolutely positioned screen-reader text inside horizontal scrollers. Without a positioned containing block it can escape overflow clipping and widen the document; compare document width before and after positioning the existing scroll region, while confirming keyboard scrolling and accessible names remain intact. - Use an installed Chrome channel when the pinned Playwright browser executable is absent; do not substitute DOM-only output for rendered verification. - In a fresh workspace whose shared packages export unbuilt `dist/`, run a source-based dev preview rather than triggering a build during the UI approval gate. Reuse the repo's source aliases; when the Vite config itself imports those packages, load it through the installed `tsx` with the relevant tsconfig and start Vite programmatically with `configFile: false`. Invoke binaries from the package that actually installs them: `pnpm exec` can otherwise fall through to an unrelated global Vite. - Wait for the screen's entrance motion before capturing it. Locator visibility and `document.fonts.ready` can both precede a GSAP fade, yielding a nearly blank image or a translucent dropdown. Inspect the final pixels; label fixture-backed component checks separately from live backend verification. - Capture an async form result at the user's unchanged scroll position before scrolling to its banner. A visible DOM node may be entirely above the viewport after insertion; a manually scrolled screenshot hides that usability failure. For fixed inner-scrolling shells, `fullPage` screenshots still show only the shell viewport, so capture both the confirmation and reachable action positions explicitly. - When switching a feed from local assets to remote media, verify the document's actual CSP and decode visible images from every card, not merely the first card (which may be text-only). A successful API response and correct pagination can coexist with broken image placeholders; permit only the precise required image origin, then recheck real image responses and pixels. - Verify reduced-motion copy with actual visibility and pixels, not only text content or `position: static`. A surviving `sr-only` utility may still apply `visibility: hidden` or `clip-path: inset(50%)`; remove its hiding treatment when the accessible copy becomes the visible fallback. For promotional typewriters, distinguish hidden-clock suspension from hover/focus dwell holds so the current sentence finishes without advancing the slide, and verify both phases independently. ## Saved-content component integration - When full-route dependencies cannot be safely established within the investigation budget, mount the unchanged production consumer subtree and reread the real saved local record on every request. Compare response data to the database, exercise reload and variant/snapshot isolation, and disclose component integration rather than full-route/E2E. Keep product captures provenance-labeled and unsupported APIs explicit errors, never fabricated responses. - Await the expanded panel's measured height and completed transition before screenshotting an accordion; `aria-expanded` can update before the expanded pixels are visible. ## Don't - Claim a theme/color change works because the token math looks right — verify the rendered value. - Delete instrumentation while the visual is still wrong. - Trust unit tests as proof a UI renders correctly.
From OutThisLife/brooklyn-skills, MIT.
More from OutThisLife/brooklyn-skills
- 0.796score
engraved-figures
OutThisLife
Create scientific figures, technical plates, research posters and diagram collections in a monochrome engraved-paper style.
SkillAFreshness: A★ 206Claude Code +9 - 0.791score
triage
OutThisLife
Use when triaging issues as a maintainer.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
runtime-debug
OutThisLife
Debug broken runtime/environments by checking logs and observability first, then code.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
draft-tweet
OutThisLife
Draft X/Twitter posts about shipped work.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
list-open-work
OutThisLife
List my open MRs/PRs in the current repo/worktree, each with its tracker ticket.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
work
OutThisLife
Kick off a task in a fresh isolated git worktree instead of the current checkout.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
ui-system
OutThisLife
Reuse existing UI primitives, CSS vars, and DESIGN.md patterns instead of inventing new buttons, colors, borders, shadows, or helpers — including when…
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
pr-update
OutThisLife
Open a PR/MR if missing, or refresh an existing one's title and description so they match the current diff.
SkillAFreshness: A★ 206Claude Code +9 - 0.787score
stacked-pr
OutThisLife
Handle dependent/stacked PRs and same-code-on-multiple-bases correctly.
SkillAFreshness: A★ 206Claude Code +9 - 0.787score
babysit
OutThisLife
Watch an open PR/MR until it's green or merged — poll checks, kick stalled CI, rerun flakes, catch late review threads.
SkillAFreshness: A★ 206Claude Code +9 - 0.787score
perf
OutThisLife
The general profile-driven perf loop for any language or runtime: baseline, profile, fix the real hot path, re-measure.
SkillAFreshness: A★ 206Claude Code +9 - 0.787score
pr-ready
OutThisLife
Clear everything blocking an existing PR/MR from merging — rebase onto the default branch, get CI green, and resolve review threads (Copilot and human).
SkillAFreshness: A★ 206Claude Code +9
Signals
- Stars
- 206
- Forks
- 6
- Open issues
- 0
- Last commit (this folder)
- Sep 25, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/OutThisLife/brooklyn-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from OutThisLife
- 0.796score
engraved-figures
OutThisLife
Create scientific figures, technical plates, research posters and diagram collections in a monochrome engraved-paper style.
SkillAFreshness: A★ 206Claude Code +9 - 0.791score
triage
OutThisLife
Use when triaging issues as a maintainer.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
runtime-debug
OutThisLife
Debug broken runtime/environments by checking logs and observability first, then code.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
list-open-work
OutThisLife
List my open MRs/PRs in the current repo/worktree, each with its tracker ticket.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
pr-update
OutThisLife
Open a PR/MR if missing, or refresh an existing one's title and description so they match the current diff.
SkillAFreshness: A★ 206Claude Code +9 - 0.790score
draft-tweet
OutThisLife
Draft X/Twitter posts about shipped work.
SkillAFreshness: A★ 206Claude Code +9
Cite this page
visual-verify skill. Agent Mart. https://agentmart.dev/skills/outthislife-visual-verify (last updated 2026-10-24)