About Duplicate Image Finder
Phones and cameras quietly accumulate near-duplicate photos: burst shots, accidental double-taps, the same screenshot saved twice from different apps. Duplicate Image Finder detects both kinds locally — exact byte-matches via SHA-256, and visually-similar files via a 64-bit difference-hash (dHash) comparable across files by Hamming distance. The two-pass approach catches recompressions, mild crops and quality changes that a simple file-hash misses, while staying fast and predictable: no AI, no cloud, no probabilistic gimmicks. Pick a strictness threshold, review groups, then export only the unique files as a ZIP.
- No uploads
- Browser-only
- Works offline
- 100% free
How it works
- 1
Drop images
Up to 500 photos per batch. Each one is hashed twice — SHA-256 for exact matches and dHash for perceptual similarity.
- 2
Pick strictness
Identical only (Hamming = 0) for byte-clones, Recommended (≤ 5) for recompressions, Loose (≤ 10) for the same scene.
- 3
Review & export
Duplicate groups are shown side-by-side. Click 'Download N unique' to export the deduplicated set as a ZIP.
Exact hashing vs. perceptual hashing: two different questions
Finding duplicates is really two questions, and they need two different tools. 'Are these the same file?' is answered by a cryptographic hash like SHA-256: feed in the bytes, get a fixed fingerprint, and identical bytes always produce identical fingerprints. Change a single bit — re-save, recompress, edit one pixel — and the hash changes completely. That's perfect for catching literal clones (you saved the same download twice) and useless for catching look-alikes, because to SHA-256 a JPEG and its 95%-quality re-export are unrelated strangers.
'Do these look the same?' is answered by a perceptual hash — here a 64-bit difference hash (dHash). It shrinks the image to a tiny grayscale grid and encodes the brightness gradient between adjacent cells, producing a fingerprint that captures the image's structure rather than its exact bytes. Two visually similar images get similar dHashes even when their files differ entirely. You compare two dHashes by Hamming distance — the count of differing bits — so 'similar enough' becomes a number you can threshold. This tool runs both hashes on every image, because each catches cases the other can't.
Reading the Hamming-distance threshold
The strictness setting is a Hamming-distance ceiling on the perceptual hash, and picking it well is the difference between a clean result and a noisy one. Lower is stricter:
| Threshold | Catches | Watch for |
|---|---|---|
| 0 (Identical only) | Byte-identical or pixel-identical clones | Misses anything recompressed or resized |
| Up to 5 (Recommended) | Recompressions, quality changes, small crops | Very few false positives — the safe default |
| Up to 10 (Loose) | Same scene with different exposure/edits | Starts grouping genuinely different shots |
| 15 or more | Broad visual similarity | Expect noise — review every group by eye |
dHash distance is a similarity score, not a verdict. Above ~10, always eyeball each group before deleting — the tool shows duplicates side by side for exactly this reason.
Why filenames lie — and what near-duplicates really are
Filenames are the worst possible signal for duplicate detection, and relying on them is how libraries fill up with redundant copies. The same photo arrives as IMG_4821.JPG from the camera, photo.jpg after a download, Screenshot 2026-06-19.png after an edit, and image (1).jpg after a messaging app strips its metadata — four names, one picture. Meanwhile two genuinely different photos can share a name the instant two cameras both emit DSC_0001.JPG. Size and timestamp are nearly as unreliable: recompression changes the size, and copying rewrites the timestamp. Only the pixels tell the truth, which is exactly why hash-based detection looks at content and ignores the name entirely.
'Near-duplicate' is the category filenames can never surface: same image, different bytes. A WhatsApp-compressed copy, a lightly cropped version, an Instagram re-save, a screenshot of the original — all look identical to you and all have different file hashes. Perceptual hashing is the only practical way to collapse those into one group. After review, export the deduplicated set and keep the highest-quality member of each group, not whichever copy happened to sort first.
What perceptual hashing will and won't catch
It's worth being honest about the edges. dHash is excellent at recompressions, quality changes, modest crops, and resizes — the everyday ways one image becomes many files. It is deliberately not a reverse-image search and not an object recogniser: a hard rotation, a heavy crop that changes the composition, a mirror flip, or a strong colour-grade can shift the hash enough to break the match, and two different photos of the same landmark are similar to your brain but structurally distinct to a 64-bit gradient hash. That's the right trade for a deduplicator — classic perceptual hashing is deterministic, runs in milliseconds per image, and is what production tools rely on, whereas an AI similarity model would add tens of megabytes of weights and worse repeatability to solve a problem hashing already solves. When you need to catch flips and large crops too, loosen the threshold and accept that you'll be reviewing more groups by hand.
Frequently asked questions about Duplicate Image Finder
What's the difference between exact and near duplicates?
Exact = the file bytes are identical (e.g. you saved the same photo twice). Near = the images look the same but the bytes differ (e.g. one was recompressed, lightly cropped, or saved at a different quality). Both can waste storage; near-duplicate detection catches more cases.
How accurate is near-duplicate detection?
We use a 64-bit difference hash (dHash). At threshold ≤ 5 it reliably catches recompressions and small crops with very few false positives. At ≤ 10 it catches more variations but starts flagging photos of the same scene with different exposures. At ≥ 15 expect noise — review every group.
Why not use AI for this?
Production-grade perceptual hashing (dHash, pHash, aHash) is decades-old, deterministic, runs in milliseconds per image, and is what tools like ImageMagick's compare use. AI-based similarity is overkill for finding duplicates and adds 10-100 MB of model weights with worse repeatability.
Will it work on hundreds of photos?
Yes — the limit is 500 per batch. Hashing runs sequentially with progress feedback and uses ~5 ms per image for the perceptual hash plus 50 ms per MB for the SHA-256.
Privacy, offline use, browser support, and pricing questions are answered on the site-wide FAQ.