ToolPipo Lab: image target size compression test
Sources and original graphics: ToolPipo, CC0-1.0. No third-party photographs or system fonts.
Bundled fflate 0.8.3: MIT, see FFLATE-LICENSE.txt.

1KB=1024 bytes; 1MB=1048576 bytes. A: 12 conditions; B:9; C:3; unchanged:1.
results.json records actual downloads from the unchanged Tool UI, and 3 runs each for A 500KB JPEG/WebP/PNG.
Canvas output may differ across Chromium versions, platforms and other browsers.
Pixel deltas use max RGBA channel difference, threshold0, against a reference resized to OUTPUT dimensions. They are not perceptual scores or full-resolution comparisons.
C JPEG is flattened against #ffffff. PNG/WebP keep transparency.

Regenerate exact source pixels/PNG bytes with Node24:
  node generate-fixtures.cjs ./regenerated
Compare regenerated sources.json SHA-256 with sources.json.

Full measurement reproduction from the repository (pnpm install; install Playwright Chromium if needed):
  node scripts/generate-image-compression-article-fixtures.js
  node scripts/measure-image-compression-article.js
  node scripts/package-image-compression-article.js
  node scripts/render-image-compression-article.js
Do not expect byte-identical JPEG/WebP across different browsers. See environment in results.json.

Outputs are the actual downloaded files. crops/*.png are lossless decoded crops of the same source-relative region. Their native dimensions and source mapping are in crops.json. PNG resize means fewer pixels; zero encoding delta does not restore lost resolution.
Unchanged control contains the source Comment metadata unchanged. Re-encoded PNG/JPEG/WebP does not retain that source Comment.
