Documentation

Guides, tutorials, and frequently asked questions

Find Duplicate Photos: What Near-Duplicate Detection Actually Does | SnapSweep

Frequently asked questions

Does SnapSweep find near-duplicate photos?
Yes. Similar-photo detection runs a perceptual-hash pass to gather candidates and then refines each candidate group with a learned visual comparison, so it catches near-duplicates rather than only byte-identical copies.
Can I shrink my videos?
A video size analyzer estimates what a re-encode would produce and only suggests HEVC compression when it is worth it. Frame rate is never reduced, and a new file only replaces the original if it is genuinely smaller.
Will it pick the best shot for me?
It proposes one. The group is scored on resolution, file size and sharpness, the top photo is pre-selected to keep, and any other photo can be promoted to best with one tap. Nothing is deleted until you commit the batch.
Is the analysis done in the cloud?
No. Everything runs on device, with no login and no cloud. Analytics are optional and anonymous.
Will it treat an edited cut of a video as a duplicate?
No, and that is deliberate. Video grouping samples frames at positions proportional to duration, so a trimmed or edited version counts as a different work rather than a duplicate to reclaim.
Is similar-photo cleanup free?
It is a Pro feature. Pro unlocks similar-photo cleanup and the video compression tools, removes ads, and is available monthly, yearly, or as a one-time purchase.

The short answer

SnapSweep finds near-duplicates — the six near-identical frames of one moment — groups them, and proposes which single shot to keep. It does that in two passes: a cheap perceptual hash gathers candidates, then a learned visual comparison discards the false alarms. It does not choose for you. The top photo in each group is pre-selected to keep, every other shot is staged for deletion, and you can promote any photo to best with a single tap before anything is committed.

Videos get their own treatment, because a duplicate video is a different problem: near-duplicate videos are matched on sampled frames and duration, and compression is only suggested when the estimate says it will genuinely pay.

This is one pass inside SnapSweep, which is on the App Store.

Why five shots of the same thing are the real problem

Duplicates are not junk, and that is why they survive every cleanup. An eight-month-old receipt screenshot is junk — you know at a glance that you want it gone. Six photos of a birthday cake are not junk; every one of them is a perfectly good photo, and only five of them are redundant. The problem is that a photo grid shows every image at the same size, so redundancy is visually invisible. You cannot spot it by scrolling, because five good photos look exactly as intentional as one good photo.

This is also why the manual fix never happens: deleting screenshots is a decision you can make in batches because screenshots look like screenshots, whereas deleting near-duplicates requires comparing each candidate against its neighbours.

iOS already ships a Duplicates album in Photos, and for the pairs it is confident about that is a reasonable answer. Its limit is structural: it merges what it is sure of, leaves the rest indefinitely, and says nothing about video at all.

How the matching actually works

Duplicate detection is a two-stage pipeline, and the order is the design.

Stage one is a perceptual hash. Each image is reduced to a 32×32 grayscale thumbnail and compressed into a 64-bit hash of its visual structure; the coarse pass treats a Hamming distance of 8 or less as a candidate. That threshold is deliberately loose — the first pass is tuned for recall, not precision, because it is allowed to be wrong and there is a second pass whose entire job is to catch its mistakes.

Stage two is a learned visual comparison. Only the photos the coarse pass flagged ever get decoded and handed to Vision, which compares learned feature embeddings within each candidate cluster. This is what separates "same photo, slightly different crop or exposure" from "two photos of the same subject in the same room," which the hash cannot tell apart. Because the fine pass only runs inside clusters the coarse pass already found, the expensive work stays confined to a small fraction of the library.

Two consequences worth knowing before you judge the results:

  • Hashes are cached across launches, so re-scanning does not re-decode images whose pixels have not changed — which matters because scans run every time you return to the app and every time the library changes underneath you.
  • Each group carries a match score — the average similarity within the group — so a tight cluster of six frames reads differently from a loose pair of photos that merely resemble each other.

How it decides which one is the best

The score is deliberately boring, which is part of why you can reason about it. Each photo is rated from 0 to 1 on three dimensions:

  • Sharpness — half the weight. Measured as Laplacian variance over the thumbnail, the one dimension that reliably separates a soft frame from a clean one.
  • Resolution — a quarter. A proxy for recoverable detail, not for quality in itself.
  • File size — a quarter. Another proxy for how much information the file actually carries.

Missing dimensions simply drop out of the calculation rather than counting as zero, so a photo whose metadata cannot be read is not silently punished for it.

Here is what that produces. When you open a group, the highest-scoring photo is pre-selected to keep and every other photo in it is staged for deletion. Any non-best photo can be promoted to best with one tap, the badge moves, and the new best is pulled out of the deletion set.

The honest limit is worth stating plainly: this score measures technical quality, not taste. It cannot see whether one frame is better framed, whether a face in one is smiling rather than mid-blink, or whether the shot behind is the one you were trying to get. That is why the override exists, and why a staged group is never deleted until you commit the batch yourself.

Duplicate videos are a different problem

Videos get a separate matcher, because the naive approach fails badly on them. SnapSweep fingerprints each one by sampling frames at positions proportional to its duration, hashing each, and recording duration, file size and creation date. Two videos group together only when the mean per-frame Hamming distance is low, no single frame is wildly off, and their durations match within two percent.

The proportional sampling produces the most important behaviour in this whole feature, and it is an exclusion rather than an inclusion: an edited, trimmed or cropped version does not group with its original. Those are different works. Deleting the cut because the uncut original exists is data loss dressed up as cleanup, so the matcher refuses to make that suggestion.

Videos are also classified by what kind of clutter they are. Screen recordings are one-off, large and rarely revisited — the safest bulk-deletion target. Slow-motion footage is large but must never be frame-rate reduced, because dropping frames destroys the one property that makes it worth keeping; its route is delete or keep, never compress. Photos has no equivalent facility at all, which is why video is the part of this page with no built-in answer to compare against.

Compression that tells you when not to bother

The compression advice is only useful if it is willing to say "don't." A tool that offers a transcode on every video teaches you to stop reading its recommendations.

Three presets exist, moving resolution and codec only: 720p H.264, 1080p HEVC, and original resolution HEVC. Video is never upscaled, and frame rate is never reduced, for the slow-motion reason above. HEVC costs roughly thirty percent fewer bits per pixel than H.264, which is where the headroom comes from.

The size estimate preserves your source video's own relative quality, scaling the source bitrate by the new codec's efficiency and the new pixel count. It deliberately does not apply an idealized "perfect bitrate for 1080p," because that model promises a thirty-eight percent saving on a clip that was already encoded efficiently — and the original-resolution preset does not re-target bitrate at all, so the delivered file is frequently larger than promised.

Three rules then turn that estimate into advice:

  • A saving has to clear both bars to be offered — at least 20 MB and at least fifteen percent. Below that the clip is labelled already optimal and left alone. Two percent is not worth waiting through a transcode for, and not worth risking a re-encode's quality loss over.
  • If the video track cannot be probed, no number is promised at all. You are still allowed to try the compression yourself; you just are not handed a figure the app cannot stand behind.
  • The replacement is guarded by a size check. A finished file only replaces the original if it is under ninety-five percent of the original's size, and an empty or unreadable output never replaces anything. Substituting an unknown file for the original is the worst available outcome, so it is structurally impossible rather than merely discouraged.

Videos already in HEVC are left alone as well — re-encoding them costs quality and saves nothing.

What SnapSweep does differently

The through-line across all of this is that SnapSweep proposes and you dispose. Nothing reaches the trash without a batch action you trigger, committed deletes go through iOS's native Recently Deleted for thirty days, and all of it runs on device with no account and no cloud. For duplicate cleanup specifically, the difference against the free alternatives is that it covers video at all, and that the best-shot badge is a suggestion you can override rather than a merge that has already happened.

The limits are equally concrete. Similar-photo cleanup and the video compression tools are Pro — in the US that is $2.99 monthly, $19.99 yearly, or $49.99 once, with local pricing set lower in many markets; the yearly plan sits deliberately below the $24.99–$44.99 mid-tier band, and one-time photo cleaners generally occupy a $30–$100 range. The app needs iOS 17 or later and photo library access on first launch. And because the coarse pass is tuned for recall, SnapSweep will occasionally show you a group that is not really duplicates — the fine pass removes most, not all.

What to do with that

The decision this leaves you with is narrow. If your problem is screenshots, start with bulk deletion, the cheaper half of the same pass. If your problem is good shots buried under their near-identical neighbours, and videos worth checking for exact repeats, this is the page you needed. Either way, run it where you would be willing to be shown something wrong — the 30-day Recently Deleted window is what makes being wrong cheap. SnapSweep is on the App Store.