Backups, exports and burst shots fill a drive with copies of the same picture under different names. Point this tool at a folder or drop in a batch of photos and it groups exact copies, resized or re-saved versions and similar shots, then suggests which copy to keep. Everything runs on your device.
Processing locally on your device
Overview
Exact duplicates are the easy case. Byte-identical files have the same SHA-256 hash, which the browser calculates with its built-in Web Crypto API at hundreds of megabytes per second. Most real duplicates aren't identical, though. The same photo can exist as the camera original, a resized copy for email and a WebP saved from a website, and all three have different bytes. For those, the tool computes two perceptual hashes. pHash shrinks the image to 32×32 grey pixels, takes a discrete cosine transform and keeps 64 bits describing its coarse structure. dHash records whether each pixel in a 9×8 thumbnail is brighter than its neighbour. Images that look the same get hashes that differ in only a few of the 64 bits.
In Near-identical mode, two images match when both hashes agree within your threshold. The default of 88% allows about 8 of 64 bits to differ, which catches resizing, recompression, format changes and mild colour edits while ignoring unrelated photos. Hashes have limits, though. A tight crop, a mirrored copy or the next frame of a burst changes the structure enough to break the match. Similar (AI) mode handles those cases with DINOv2 Small, a 22-million-parameter vision transformer from Meta (Apache-2.0). It is downloaded once (24 MB quantised for the CPU, 45 MB in half precision for WebGPU) and turns each photo into a 384-number embedding. In our tests, crops, mirrored copies, blurred and colour-edited versions scored 0.94 or higher against the original, while unrelated photos stayed below 0.4.
Matches are grouped with union-find, so if A matches B and B matches C, all three land in one group. In each group the tool marks the best copy to keep, by highest resolution, sharpest image or largest file. Sharpness is measured as the variance of a Laplacian filter, which drops sharply for blurry or shaken shots. Everything else in the group is marked for removal. Click any thumbnail to change that. Nothing is deleted. You can download every file you keep as a ZIP with the folder structure intact, or export a CSV listing each group, the action, the path, dimensions, size and SHA-256, to use in your file manager or a script.
Folders are read with the File System Access API in Chrome and Edge, including subfolders, or with the standard folder picker in other browsers. Files are only read, never moved or uploaded. Hashing takes a few milliseconds per image after decoding, so thousands of photos are practical. AI mode adds roughly half a second to a second per image on the CPU, and less with WebGPU.
| Mode | Finds | Speed | Download |
|---|---|---|---|
| Exact (SHA-256) | Byte-identical files under any name | Very fast | None |
| Near-identical (pHash + dHash) | Resized, recompressed, converted, lightly edited copies | Fast | None |
| Similar (DINOv2 AI) | Crops, mirrored copies, bursts, same scene | Slower; faster with WebGPU | 24–45 MB once |
Click Scan a folder, pick a folder with the folder picker, or drop in a batch of images.
Choose Exact, Near-identical or Similar (AI) matching; AI mode downloads its model once.
Adjust the similarity threshold until the groups look right.
Pick how the best copy is chosen: resolution, sharpness or file size.
Review each group and click thumbnails to switch between Keep and Remove.
Download the files you keep as a ZIP, or export the list as CSV.
Use cases
Find the copies created when the same camera roll was backed up to several drives and cloud folders over the years, and see how much space the extra copies take.
Use Similar (AI) mode to group a burst of near-identical frames, sort by sharpness to keep the crispest one, and set the rest aside.
Spot the same product image uploaded several times at different sizes and formats in an export from a CMS or digital asset manager.
Remove near-duplicates before training a model, so the same picture doesn't appear in both the training and the test set and inflate your accuracy.
Pro tips
Answers to common questions about the duplicate finder.
It's a short fingerprint calculated from what an image looks like rather than from its bytes. Visually similar images produce fingerprints that differ in only a few of the 64 bits, so resized, recompressed or converted copies still match.
Near-identical mode only catches light crops. Similar (AI) mode compares image content with DINOv2, and in our tests a 20% crop scored 0.96 and a mirrored copy 0.98 against the original. Rotations by 90° are matched less reliably.
No. The tool only reads files. It marks copies for removal and gives you a ZIP of everything you keep plus a CSV list, so you stay in control of what is actually deleted.
The browser has to decode each image to fingerprint it. Chrome and Firefox can't decode HEIC, for example. Those files are still checked for exact (byte-identical) copies, but not for visual similarity.
Hashing works for thousands of images on a typical laptop, since each fingerprint is 16 bytes and comparisons are fast. AI mode stores 384 numbers per image and takes longer to scan, so very large libraries are best done in batches.
No. ToolEnhancer processes files on your own device inside the browser. They are never sent to, stored on or seen by our servers.
Yes. The duplicate finder is free to use with no sign-up, no watermarks and no daily limits.