Pixel Forensics

Lay maps over a photograph that show what the eye does not. Every map here is arithmetic on the pixels: where the JPEG block grid sits, which quantisation table the pixels remember, how the noise is distributed, whether a region was scaled, and how far a faint feature rises above the noise along a line you draw. The tool measures and shows its scale. It never decides what the measurement means.

  • The maps read the last step of a compression chain, not the origin of the picture. A screenshot is a PNG with a JPEG frozen inside it, a messenger image is a recompression whose own history has overwritten most of what came before, and an empty map is therefore never a proof of innocence.
  • The strongest statement the tool can make needs no interpretation at all: the quantisation table in a JPEG header either is a scaled standard table, in which case the exact quality number comes out, or it is not, in which case the file did not pass through an ordinary library at that step.
  • The same table can be estimated from the pixels alone, without decoding a single Huffman symbol. When that estimate contradicts the header, the pixels are remembering an earlier compression than the one the file admits to.
  • The line profile averages across a width you choose, so the noise falls with the square root of it, fits the background away and reports a feature as a multiple of the local noise. Whether a bump at 3.2 times the noise means anything is a question about your picture, not about this arithmetic.
  • Everything runs in your browser. The image is never uploaded, and there is no server to upload it to.