Duplicate Photo Finder — Free, Private, Browser-Based
Drop in a batch of photos and find the duplicates — including resized, re-saved, and re-compressed copies that byte-comparison tools miss. Each image gets a perceptual dHash fingerprint, near-identical fingerprints are grouped, and you choose what to keep. Everything runs locally; your photos never leave your device.
Private by design. Photos are hashed, compared, and zipped entirely in your browser — nothing is uploaded to a server.
How to find duplicate photos on your computer
- Drop your photos in. Drag a batch of images (or click to browse) — 100+ photos are fine. JPG, PNG, WebP, and GIF all work. Hashing runs in chunks with a progress bar so the page stays responsive.
- Pick a match sensitivity. Exact catches identical images; Near (recommended) also catches resized and re-compressed copies; Loose adds crops and lightly edited versions.
- Review each duplicate group. Matching photos appear side by side with their dimensions and file size. The largest file in each group is pre-checked as the keeper — adjust the checkboxes as you like.
- Download the deduplicated set. Click "Download kept as ZIP" to get one archive with your checked keepers plus all unique photos — unchecked duplicates are left out.
Use Cases
Frequently Asked Questions
Are my photos uploaded to a server?
No. Hashing, comparison, and ZIP packaging all run in your browser. Your photos never leave your device.
How does it detect duplicates that aren’t byte-identical?
Each image is downscaled to a tiny grayscale grid and converted to a 64-bit perceptual "dHash" fingerprint. A resized or re-compressed copy of the same photo produces a nearly identical fingerprint, so the two are grouped even though the files differ.
What’s the difference between Exact, Near, and Loose?
They set how many fingerprint bits may differ: Exact (0 bits) means visually identical, Near (6) catches resizes and re-saves, Loose (10) also catches small crops and edits — at a slightly higher risk of false matches on very similar scenes.
How many photos can it handle?
Hundreds. Images are processed in small chunks with a progress bar, so even large batches don’t freeze the page. Memory is the practical limit — thousands of very large photos may strain older devices.
Which photo does it keep by default?
The largest file in each duplicate group — usually the original, highest-quality version. You can override any checkbox before downloading.
Will it match two different photos of the same scene?
Usually not at Exact or Near — burst shots taken moments apart typically differ by more than 6 bits. At Loose sensitivity, very similar compositions can occasionally group together, which is why every group is shown for review.
How perceptual hashing finds "the same photo" in different files
Two files of the same photo are almost never byte-identical — messaging apps re-compress, exports resize, editors re-save. Byte checksums (MD5/SHA) therefore miss most real-world duplicates. Perceptual hashes fingerprint what the image looks like instead: this tool uses dHash, which encodes the direction of brightness change across a 9×8 grayscale thumbnail into 64 bits.
| Sensitivity | Max differing bits | What it catches | False-match risk |
|---|---|---|---|
| Exact | 0 of 64 | Identical images, format conversions of the same pixels | Effectively zero |
| Near | 6 of 64 | Resized copies, re-compressed JPEGs, chat-app re-saves | Very low |
| Loose | 10 of 64 | Small crops, light color edits, watermarked variants | Low — review groups before deleting |
- dHash is robust to scaling and compression because both preserve large-scale brightness gradients — but it is not rotation-invariant, so a rotated copy of a photo will not match its original.
- Grouping uses transitive matching: if A matches B and B matches C, all three land in one group even if A and C are slightly further apart. That mirrors how duplicate chains actually form (original → export → re-share).