Duplicate Image Finder
Drop a whole folder of photos and find duplicates even at different sizes or formats: perceptual hashing (pHash via DCT, with aHash and dHash alternatives), Hamming distance and an adjustable threshold. All the analysis runs in your browser.
Drop images here or click to choose
Files are processed one by one in your browser and never uploaded.
Changing the algorithm clears the list to recompute.
Lower = stricter. 10-16 usually works well with pHash.
Built by
Miguel Ángel Colorado Marin (MACM)
Built by
Miguel Ángel Colorado Marin (MACM)
Full-Stack Developer · Guadalajara, España
I develop web apps, digital tools and full projects — from design to deployment.
Between downloads, screenshots and backups, repeated photos pile up, eating disk space and cluttering folders. This tool matches images by content, not bytes: each photo is reduced to 32×32 grayscale and turned into a 64-bit fingerprint (pHash: low-frequency coefficients of the orthonormal DCT-II thresholded by their median). Images closer than the Hamming threshold group as duplicates, with transitive grouping that catches whole series of the same shot. Resizing, recompressing or light cropping barely moves the fingerprint: the DCT drops fine detail and keeps structure. The test bank verifies the DCT against analytic values (delta, linearity, constant DC) and the hash properties: identical = 0, inverted ≈ 62, noise vs flat large.
Features
- ✓Three perceptual hashes: pHash (DCT 8×8), aHash (mean 8×8) and dHash (gradient 9×8)
- ✓Drop a whole folder at once with drag and drop
- ✓Adjustable similarity threshold from 0 to 32 bits with transitive grouping
- ✓Export duplicate groups as JSON with file names
- ✓100% local processing, image by image, no folder size limit
How to find duplicate photos?
- 1
Drop the folder or photos
Drop a whole folder or pick several files; they're processed one by one in your browser.
- 2
Pick algorithm and threshold
pHash with a 10-16 threshold is the sweet spot; lower it if you only want exact copies.
- 3
Review the groups
Each group shows the thumbnails and the distance that linked them; everything else lands in «no duplicates».
- 4
Export and clean up
Download the JSON with the groups and delete the copies you don't want to keep.
Frequently asked questions
How does it detect duplicates that aren't identical?
By perceptual hashing: each image is reduced to 32×32 grayscale and its orthonormal DCT-II is computed; the 64 low-frequency coefficients form a 64-bit fingerprint. Two similar photos share most bits (their Hamming distance is small) even if the files differ in size, format or compression. The threshold controls how many differing bits are tolerated.
What threshold should I use?
With pHash, re-encoded exact copies usually sit at 0-5; the same photo resized at 5-10; lightly edited at 10-16; different photos normally exceed 20-24. Start at 10 and increase if you're missing duplicates, decrease if unrelated images group together. aHash distances naturally run higher.
Are my photos uploaded to any server?
No. Each file is decoded, downscaled and hashed inside your browser with the Canvas API; only a local object URL is kept for the thumbnail. The hash cannot reconstruct the image — it only measures similarity — and the exported JSON contains file names and groups, never image data.
Related tools
Embed Duplicate Image Finder on your site
Add Duplicate Image Finder to any web page with a simple iframe. Free, with attribution to miguelacm.es.
<iframe
src="https://miguelacm.es/embed/duplicate-image-finder"
width="100%"
height="700"
frameborder="0"
title="Duplicate Image Finder — miguelacm.es"
></iframe>View embed in new tab →