Skip to content
checkaifree

Practical guide

Exact duplicate files versus decoded pixel matches

Two files can have different bytes and still decode to the same defined image. Start by grouping exact file copies, then use a separate pixel comparison when metadata, orientation or compression may differ.

18 October 2026 · Check AI Free

Group the files by exact bytes first

  1. Step 1

    Run the controlled duplicate set

    Open Find exact duplicate files and click Try duplicate and same-name samples. file-001 is same-name.png and file-002 is renamed-copy.png; these contain the same bytes. file-003 is also named same-name.png but contains the metadata variant. Names do not determine the groups.

    Find exact duplicate files locally

  2. Step 2

    Inspect every row before exporting

    Expect one group containing file-001 and file-002; file-003 stays separate. SHA-256 matches are additionally compared byte for byte against a re-read representative. Read failures remain per-file rows. Review Preview duplicate report JSON, then Download duplicate JSON; local filenames are excluded unless you explicitly include them.

  3. Step 3

    Respect batch and cancellation limits

    The batch permits 20 files, 100 MiB total and 20 MiB per file, read sequentially. Cancel preserves completed results and marks remaining rows canceled. No disk original is deleted, and this operation does not group visually similar re-encodes.

  • Download the original synthetic RGBA PNG — Project-authored 8 × 6 PNG, 338 bytes. Four colored regions, alpha controls and one Description tEXt field: Fictional metadata; pixel samples are unchanged. This canonical download differs from the separate 266-byte built-in hash sample.
  • Download the verified metadata text replacement — 330-byte output replacing original.png chunk-2 Description with “Edited locally for the SHA-256 exercise.” using tEXt. Original IDAT is retained; independent decoded samples match.

Compare the same-picture metadata pair separately

  1. Step 1

    Choose the pair with known pixel samples

    In Compare image files select Same pixels, different metadata and click Try comparison pair. Alternatively choose original.png and metadata-edit.png as First file and Second file, then Compare files. The built-in pair is 266 and 338 bytes. The canonical downloads original.png and metadata-edit.png are instead the actual 338-to-330-byte text-replacement pair. Both pairs have different hashes and matching independent decoded samples; do not use one pair’s expected file hash for the other.

    Compare original bytes and decoded RGBA

  2. Step 2

    Read the two results independently

    Original file bytes should be different; the independent Pillow reference has identical oriented sRGB RGBA for this pair. Read the actual browser result under its displayed fixed policy and preserve that policy with the report. A match is scoped to this browser decode and does not establish common authorship or generation history.

  3. Step 3

    Save a report or locate an actual difference

    Use Download comparison JSON to keep both hashes, decode statuses and policy. For One changed pixel, the reference difference is at zero-based (5, 3), with one changed red channel and maximum delta 15. A successful browser comparison provides a native-size magenta difference PNG, its change bounds and up to 20 coordinate/value pairs. Download difference PNG only after its encoding and re-read succeed.

  • Download the one-pixel difference control — Same 8 × 6 chart in a 266-byte PNG without the Description field. The red channel at zero-based (5, 3) changes from 240 to 255; independent Pillow locates exactly one changed pixel.

Keep the pixel conditions with the result

The comparer uses native-size 8-bit Canvas sRGB RGBA. Valid EXIF orientation is removed from the decoder input and applied exactly once; missing EXIF uses orientation 1, and XMP orientation is ignored. Embedded color declarations/profiles enter the browser color pipeline. Alpha is compared. RGB under alpha zero is normalized to zero because Canvas cannot retain hidden transparent RGB; partially transparent colors may be quantized.

Different display dimensions are reported without resizing or claiming a pixel match. The decode path rejects animation, multi-picture JPEG, invalid orientation and inputs exceeding 16 million pixels or 8192 pixels on a side. A failed or unsupported decode can still have a valid byte hash, while its pixel equality remains unknown. Browser acceptance is limited to Chromium; Safari and Firefox have not been checked.

  • WHATWG HTML Canvas source, revision de953a7cf052 — Primary specification snapshot checked 18 October 2026, including Canvas color spaces and ImageData. The site's native-size, 8-bit sRGB RGBA and transparent-RGB policy is stated separately.
  • CIPA Exif 2.3 corrected reference, 2012 — Fixed primary reference for the Orientation tag and encoded image organization. The tools' supported fields are narrower than the complete standard; this is not a claim that 2.3 is the current Exif edition.

Try controls that answer different questions

The pinned Chromium JPEG control also produced 12,717 changed pixels. A separate wide-profile versus LittleCMS-converted control differed at eight pixels/eight channels with maximum delta 1; color pipelines can differ. The independent counts are fixture evidence, not a perceptual similarity score or a forgery assessment. Keep the actual browser report when counts matter; independent reference counts do not substitute for a reading of the files you select. A matching hash or decoded pixel buffer does not certify provenance.

Try controls that answer different questions
Synthetic pairIndependent referenceInterpretation
Same pixels, different metadataDifferent hashes; identical RGBAContainer bytes changed; this does not locate a picture edit.
EXIF rotation / physically rotated PNGIdentical oriented 6 × 8 RGBAApply a defined orientation policy before comparing.
One changed alpha valueOne changed pixel at (6, 1); alpha delta 64Transparency is part of RGBA; it is not composited onto white.
Different native dimensions8 × 6 versus 7 × 6; not comparedDo not resize both to a thumbnail and call the originals equal.
Own sRGB profile / no profileSame reference RGBA for this narrow pairThis does not imply that removing arbitrary ICC profiles preserves color.
JPEG quality 75 re-encodingPillow finds 12,717 changed pixelsRecompression can change decoded values; counts remain decoder-dependent.

Sources and reproducible inputs

  • Download the original synthetic RGBA PNG — Project-authored 8 × 6 PNG, 338 bytes. Four colored regions, alpha controls and one Description tEXt field: Fictional metadata; pixel samples are unchanged. This canonical download differs from the separate 266-byte built-in hash sample.
  • Download the verified metadata text replacement — 330-byte output replacing original.png chunk-2 Description with “Edited locally for the SHA-256 exercise.” using tEXt. Original IDAT is retained; independent decoded samples match.
  • Download the one-pixel difference control — Same 8 × 6 chart in a 266-byte PNG without the Description field. The red channel at zero-based (5, 3) changes from 240 to 255; independent Pillow locates exactly one changed pixel.
  • NIST FIPS 180-4, August 2015 — Fixed Secure Hash Standard used for SHA-256. A content digest identifies bytes; this workflow does not add identity authentication or signature validation.
  • WHATWG HTML Canvas source, revision de953a7cf052 — Primary specification snapshot checked 18 October 2026, including Canvas color spaces and ImageData. The site's native-size, 8-bit sRGB RGBA and transparent-RGB policy is stated separately.

Continue with your file