About verify-pixels
A testing skill for checking whether graphics changes preserve rendered pixels. It provides guidance on deterministic frame capture, choosing exact comparison or side-by-side review, and reporting measured differences.
Key features
- 01Choose an exact or visual comparison gate
- 02Make frame capture deterministic
- 03Capture WebGL and WebGPU output
- 04Check baseline repeatability
- 05Report pixel differences
Use cases
- 01Testing rendering changes
- 02Comparing old and new builds
- 03Checking animated scenes at set poses
- 04Finding noise in a capture harness
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ playcanvas/ skills --skill verify-pixelsAfter installing, type/verify-pixelsin Claude Code to confirm it loaded.
Details
From the project READMEProve pixels unchanged
Choose the gate
- Byte-exact: the change keeps the same decoded data and the same shading math, so every pixel must match.
- Side-by-side review: the change alters sampled values, random order, precision, or where math runs. Report it as "not byte-gateable" and show old and new at each pose; do not invent thresholds.
Make frames deterministic
- Load every asset and match camera, canvas size, lighting, and animation time between builds. Seed incidental randomness.
- Drive animated shaders from one app-owned time value, not
Date.now()orperformance.now(). app.timeScale = 0makesdtzero, butupdatestill runs; anything counting frames or reading wall-clock time still advances.- Set
app.autoRender = false, thenapp.renderNextFrame = truebefore each frame to capture.
Capture and compare
- WebGL:
await (device as WebglGraphicsDevice).readPixelsAsync(x, y, w, h, pixels). WebGPU: render into aRenderTargetand read itscolorBufferwithTexture#read(). Avoid colour conversion and lossy encoding. - Capture the unmodified build twice first. The captures must match exactly, or the harness itself is noisy.
- Cover every touched surface in at least two poses, plus a mid-animation phase where relevant.
- Report the count, for example "0 of 65536 pixels differ", or the count and where the differences are. "Looks the same" is not a result.
Keep harness code out of the shipped bundle; attach it through inspect-runtime.
Comments
Markdown supported