Screenshot
nexu-io/open-design
Capture desktop, app windows, or pixel regions across OS platforms.
Compare screenshots against the intended design, distinguishing approved references from historical baselines.
$ npx skills add dzhng/skills --skill compare-screenshots -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dzhng/skills compare-screenshots --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/visual/compare-screenshots .claude/skills/compare-screenshots && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .claude/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshotsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dzhng/skills --skill compare-screenshots -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dzhng/skills compare-screenshots --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/visual/compare-screenshots .agents/skills/compare-screenshots && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .agents/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dzhng/skills --skill compare-screenshots -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dzhng/skills compare-screenshots --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/visual/compare-screenshots .cursor/skills/compare-screenshots && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .cursor/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dzhng/skills.git --path skills/visual/compare-screenshots--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dzhng/skills --skill compare-screenshots -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dzhng/skills compare-screenshots --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/visual/compare-screenshots .gemini/skills/compare-screenshots && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .gemini/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dzhng/skills compare-screenshotsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dzhng/skills --skill compare-screenshots -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/visual/compare-screenshots .github/skills/compare-screenshots && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .github/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dzhng/skills --skill compare-screenshots -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dzhng/skills compare-screenshots --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/visual/compare-screenshots .opencode/skills/compare-screenshots && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "compare-screenshots" agent skill from https://github.com/dzhng/skills/tree/main/skills/visual/compare-screenshots into .opencode/skills/compare-screenshots/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compare-screenshots", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
compare-screenshotsCompare screenshots against the intended design, distinguishing approved references from historical baselines.
Compare Screenshots is an agent skill from dzhng/skills. Compare screenshots against the intended design, distinguishing approved references from historical baselines. Use for iterative implementation matching, before/after visual review, objective image telemetry, or checking a lone capture for flat, empty, or badly framed content.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and reference files (for example `references/reference-landmarks.md` and `references/subagent-visual-review.md`).
The repository describes itself as: Reusable AI agent skills for software factories: explore ideas, write specs, implement, review, and run autonomous research. Works with Claude Code, Codex, and other… The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d513228. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (JavaScript), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Compare Screenshots loads about 2.6k tokens when it runs, and up to ~4.1k if it reads all its reference files. Until then it costs about 74 tokens; SKILL.md has 1,449 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from dzhng/skills at commit d513228, republished under its MIT licence (© dzhng). 1,449 words, ~2,631 tokens.
.claude/skills/compare-screenshots/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Judge images against the intended result. A user-approved design is the target; a historical baseline is only an earlier attempt and may be wrong. Metrics locate differences, never decide correctness. Use design-with-images for the full exploration-to-implementation loop.
references/subagent-visual-review.md.Pick metrics that answer the question. For full visual comparisons, report:
mae: mean absolute grayscale difference, 0..255, lower is closer.rmse: grayscale root mean square error, lower is closer.diffRatio16, diffRatio32, diffRatio64: fraction of pixels over each
grayscale delta threshold.pixelmatchRatio: mismatch ratio from pixelmatch over grayscale images.edgeEnergyCurrent and edgeEnergyCandidate: average Sobel edge strength.edgeEnergyRatio: candidate/current. Far below 1 usually means missing
geometry, props, labels, or terrain; far above 1 usually means noisy or
incorrect detail.edgeDiffRatio32: fraction of pixels whose Sobel edge differs materially.avgLuminanceCurrent, avgLuminanceCandidate, avgLuminanceDelta: average
brightness and delta. Use when a render is visibly too dark/light even if a
broader distance score improves.For UI/document/layout reviews, also use crop bounds, text/foreground mask coverage, contrast checks, edge clipping, element positions, and before/after dimensions when those beat global pixel distance.
Every metric above measures one image against another, so none of them can answer "is this capture worth anything" when there is nothing to compare it to — and the pair score is symmetric, so an enormous distance never says which side is the empty frame. A few absolute numbers do, computed on a coarse grid from a single PNG:
colorEntropyBits under ~3.0, or dominantColorShare over ~0.6: one colour
owns the frame. A sparse scene, an unlit one, or a subject that never drew.edgeDensity under ~0.04: almost no form anywhere. Empty framing, a
primitive-dominant scene, or the subject sitting outside the crop.luminanceContrast under ~60: fog, darkness, or haze compressing the whole
frame into one band.transparentShare above 0 on a capture that should be opaque: the capture
itself is wrong. A transparent pixel keeps whatever RGB it was left with, so
an invisible frame can look rich until it is composited — the scene metrics
composite before measuring, and name the invisible share rather than letting
you infer it. The pair metrics above still read stored RGB, so this field is
where transparency gets told either way.These are thresholds for suspicion, not gates. A deliberately minimal design, a night scene, an empty-state screen, and a whiteboard all trip them honestly. Use them to decide where to look, then say what the frame is actually doing — never adjust a capture to raise a number, which is the same failure as cropping away a difference.
When a single fixed-pair number is useful, this default works for structural changes:
distance = 0.35 * diffRatio32 + 0.25 * pixelmatchRatio + 0.25 * edgeDiffRatio32 + 0.15 * min(1, abs(log2(edgeEnergyRatio)))
It measures distance from the other image, nothing more. Because the baseline can be wrong, a distance of 0 is not success and a large distance is not failure — a richer scene, clearer models, stronger labels, real depth, or better lighting all legitimately raise it. Use the score to find where the images move; decide who is right in step 5. Name the field for what it measures (distance, not "parity") so no one reads it as a verdict.
Report the full-frame score and, when UI dominates the shot, a labeled world-crop score. Use the world-crop score to locate renderer movement and keep the full-frame score so UI/camera mistakes stay visible.
Keep comparison scripts inside the skill or a temporary workspace, not in product code, unless the product genuinely needs screenshot comparison at runtime.
scripts/visual-parity-diff.mjs is a reusable local helper. Run it with
REFERENCE_DIR=<png-folder>, CANDIDATE_DIR=<png-folder>, and optional
OUT_DIR=<artifact-folder>. REPORT_ORDER=a,b,c pins ordering;
CROPS_JSON=<file> adds labeled crops (keyed by image id, each crop in pixels
or { "unit": "ratio" } normalized bounds). Pair reports carry a
sceneMetrics block per side.REFERENCE_DIR to run the same helper on a folder with no counterpart:
it writes scene-metrics.json with the single-image numbers above and no
diff artifacts. Use it on a lone screenshot, on a full capture set before
anyone reviews it, or to find which side of a large distance is the empty
one.scripts/visual-parity-diff.eval.mjs is the helper's own eval: it generates
fixtures whose correct answer is known by construction — empty, transparent,
primitive-dominant, authored, degenerate — and asserts the classification,
the invariances, and the CLI contract. Run it with the same REPO_ROOT after
changing the script. Never satisfy a failing check by loosening a threshold
until you have shown the fixture, not the code, is what's wrong.references/subagent-visual-review.md: neutral subagent prompt/config for an
independent judgment when history could bias you.© dzhng, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts, references) in skills/visual/compare-screenshots of dzhng/skills.
Open the folder on GitHubat commit d513228
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders. This page covers the copy in dzhng/skills, which our catalogue first saw on October 7, 2026.
Compare Screenshots next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Compare Screenshots this skilldzhng/skills | 1k | — | ~2.6k | Automated safety check: Pass | MIT | |
| Screenshotnexu-io/open-design | 100k | — | ~291 | Automated safety check: Pass | Apache-2.0 | |
| Tabler Screenshot Makertabler/tabler | 42k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Screenshots Marketingnexu-io/open-design | 100k | — | ~301 | Automated safety check: Pass | Apache-2.0 | |
| Operator Approval Loopaffaan-m/ECC | 276k | — | ~3.3k | Automated safety check: Pass | MIT | |
| PR Screenshotsgithub/awesome-copilot | 40k | — | ~1.2k | Automated safety check: Pass | MIT |
nexu-io/open-design
Capture desktop, app windows, or pixel regions across OS platforms.
tabler/tabler
Makes reproducible screenshots of Tabler components and screens for release notes, the website and social posts, using the repository's screenshots app.
nexu-io/open-design
Generate marketing screenshots with Playwright. An agent skill from nexu-io/open-design.
affaan-m/ECC
Operator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate.
github/awesome-copilot
Embed before/after screenshots and annotated images in pull request descriptions.
github/awesome-copilot
Capture screenshots of web apps during development using Playwright and PIL.
dzhng/skills
Use Claude Code as an independent claude -p subagent when the user explicitly asks for Claude, wants a second-agent opinion from Claude, or asks to delegate a well-scoped task to Claude.
dzhng/skills
Refactor cleanly instead of layering sediment. An agent skill from dzhng/skills.
dzhng/skills
Create or revise agent skills. An agent skill from dzhng/skills.
dzhng/skills
Use the local Codex CLI as an independent second agent. An agent skill from dzhng/skills.
dzhng/skills
Audit or rewrite AGENTS.md so it holds only lasting principles.
dzhng/skills
Audit the choices an implementing agent made, not its diff — a pure decision audit that traces the session's history into a choices ledger, changes no code, and never blocks an unsupervised run.
Compare screenshots against the intended design, distinguishing approved references from historical baselines. Compare Screenshots is an agent skill from dzhng/skills. Compare screenshots against the intended design, distinguishing approved references from historical baselines.
Compare Screenshots fits situations like: iterative implementation matching; before/after visual review; objective image telemetry; checking a lone capture for flat.
Run `npx skills add dzhng/skills --skill compare-screenshots -a claude-code`. Or copy the skill folder (skills/visual/compare-screenshots in dzhng/skills) into .claude/skills/compare-screenshots in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dzhng/skills --skill compare-screenshots -a codex`. Or copy the skill folder (skills/visual/compare-screenshots in dzhng/skills) into .agents/skills/compare-screenshots in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dzhng/skills --skill compare-screenshots -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/compare-screenshots, .gemini/skills/compare-screenshots, .github/skills/compare-screenshots and .opencode/skills/compare-screenshots in your project.
Going by SKILL.md and its folder, Compare Screenshots needs JavaScript for the scripts in its folder. Our summary lists: Node.js.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Compare Screenshots is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Compare Screenshots: Screenshot (nexu-io/open-design, 100k stars), Tabler Screenshot Maker (tabler/tabler, 42k stars), Screenshots Marketing (nexu-io/open-design, 100k stars) and Operator Approval Loop (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dzhng (a GitHub user) maintains it in dzhng/skills, which has 1,020 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 5, 2026.
Source: dzhng/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.