Find & Delete Duplicate Photos Free: No Upload

Scan a folder for exact copies and near-identical shots entirely in your browser. Your photos never leave your device.

What Counts as a Duplicate Here

Not every photo that looks similar gets grouped, and not every group gets treated the same way once it is. Stated plainly, once: everything below happens by reading files through your browser's own file access and hashing them on your device. Nothing is uploaded, and you can disconnect your internet after the page loads and keep scanning.

Identical Copies

Byte-for-byte the same file: a copy-pasted photo, a re-downloaded export, a duplicate left over from a backup. Even renamed or moved, its full-file hash matches exactly.

Same Photo, Different File

Re-saved, resized, or lightly edited, the bytes differ but the picture reads the same under gradient and frequency comparison. This is where most real-world duplicates live: a re-exported JPEG, a compressed resend, a thumbnail saved separately from the original.

Burst Shots

A label, not a separate detector: when a group above also shares one camera and shot times within 3 seconds of each other, it's flagged as a burst and treated more cautiously. Nothing in it is pre-marked for removal, since one frame might have someone's eyes open and the next might not.

The Two-Pass Hashing Ladder, and Where It Stops

The scan runs two passes, cheapest first. Pass one groups photos by file size, then hashes same-size files: a fast sample hash first (the first and last 64 KB plus the file size), then a full streamed SHA-256 over the whole file, in 4 MB chunks, for anything whose sample matches. Anything that comes out identical is an exact copy. This pass alone usually surfaces most of a messy folder's duplicates in seconds, because most photo clutter really is literal copies.

Pass two decodes every photo once into a 512-pixel thumbnail and derives two independent 64-bit hashes from it: a gradient hash comparing brightness across a 9×8 grid, and a frequency hash (a DCT over a 32×32 grid, thresholded against the median of its own top-left coefficients). Two photos only count as a near-duplicate when they agree on both: the gradient hash within 6 bits of 64, and the frequency hash within 10 bits of 64. Requiring both catches what each hash misses alone (gradient hashing struggles on smooth skies and walls, frequency hashing struggles on near-flat images), and both are skipped entirely on solid-color or blank frames, so a folder of white screenshots doesn't cluster into one giant false group. Files under 10 KB or smaller than 64×64 pixels skip this pass too (they're almost always icons or tracking pixels), though they're still checked for exact copies.

Here's the honest limit: this is hash comparison, not a learned sense of "looks similar." A cropped photo, a heavily filtered repost, or two burst frames that are genuinely different from each other (someone blinked, someone moved) will land outside these thresholds and won't be linked. These two passes are also what the review screen's "Exact only" and "Close matches" filters actually reflect. There's no looser third tier running today that would catch a crop or a heavy edit.

How It Works

1

Pick a Folder (or Photos)

On Chrome, Edge, Brave, or Opera you grant the page read-write access to a real folder, which is what lets it move files back out for you later. Firefox, Safari, and phones don't expose a folder API to websites, so you get a flat multi-file picker instead. Scanning works the same either way, but cleanup becomes a checklist you follow yourself.

2

Two Passes, Live Results

Exact copies typically show up within the first several seconds, before the slower look-alike pass has even finished. A running counter shows what's found so far, and you can start reviewing while decoding continues underneath. Cancel at any point and keep whatever's already been found.

3

Review, With a Keeper Already Picked

Every group arrives with a suggested keeper (scored on sharpness, exposure, resolution, and file size) and a badge explaining which of those actually decided it, like "Sharpest · Largest." Change the pick, dismiss a whole group, or invert the selection with one click.

4

Clean Up Without a One-Way Door

The default action moves everything not kept into a review folder inside your own folder. Nothing is deleted until you go delete that folder yourself. Permanent deletion is there if you want it, gated behind typing "DELETE" once per session.

Formats, Browsers, and What Cleanup Actually Does

RAW and HEIC

Browsers can't decode RAW formats (.cr2 .cr3 .nef .arw .dng .orf .rw2 .raf) or, outside Safari, HEIC/HEIF directly. When native decoding fails, the app pulls the JPEG preview image the camera or phone already embedded in the file and compares that instead, visually faithful, and the exact-copy pass still works on the original bytes regardless. A file with no usable preview is still checked for exact copies; it just won't be compared for look-alikes. Each file gets 25 seconds to read before it's marked unreadable rather than stalling the whole scan, which matters for an iCloud-optimized photo that hasn't finished downloading yet.

Moving vs. Deleting

Moving copies a file, verifies the byte count matches, then removes the original, and a name collision in the target folder gets " (2)" appended rather than overwriting anything. iPhone Live Photo sidecars (.mov .aae .xmp) tag along automatically when their matching HEIC's duplicates get moved, so you don't end up with orphaned video clips. Chrome, Edge, Brave, and Opera can move or delete directly on disk; Firefox and Safari can't write back to a folder they were never given write access to, so you get a downloadable text checklist of exactly what to remove instead, grouped by keeper.

Frequently Asked Questions

Are my photos uploaded anywhere? +
No. Every comparison happens on your device, inside your browser. Your photos never leave your machine. You can disconnect your internet after the page loads and the app keeps working.
What's the difference between exact copies and similar photos? +
Identical copies are byte-for-byte the same file, even if renamed. "Same photo, different file" means it was re-saved, resized, or lightly edited. "Very similar" and "Burst shots" catch photos that look alike but aren't pixel-identical, like several frames from the same moment.
Will this delete my photos? +
Not by default. The default action moves duplicates into a _Duplicates_Review_ folder inside your scanned folder, so nothing is lost. Permanent deletion is available only as an explicit, confirmed opt-in.
How does the best-shot suggestion work? +
Within each group, the app scores every photo on sharpness, exposure, resolution, and file size, then pre-selects the best one to keep. You can always change the pick.
Does this work with RAW and HEIC photos? +
Yes. The app reads the preview image already embedded inside RAW and HEIC files by your camera or phone. Exact-copy detection always works regardless of format.
Which browsers are supported? +
Scanning works everywhere. Moving or deleting files directly requires a Chromium-based browser (Chrome, Edge, Brave, Opera). Firefox and Safari get a guided cleanup checklist instead.