DEV Community

Cover image for I built an on-device duplicate photo finder for iPhone (and why I avoided the cloud)
heocoi
heocoi

Posted on

I built an on-device duplicate photo finder for iPhone (and why I avoided the cloud)

My camera roll had over 12,000 photos. A lot of them were near-identical shots I never cleaned up - bursts, multiple takes of the same thing, old screenshots.

I tried a few duplicate cleaners. Most only caught exact pixel duplicates. That helped maybe 1% of the problem.

So I built Snapsift.

What it does

Scans your photo library, groups photos that look similar (not just exact copies), and helps you keep one best shot from each group.

  • scans the full library in under a minute
  • groups near-duplicate photos side by side
  • picks a candidate "best shot" in each group based on sharpness
  • lets you delete the extras

Why on-device only

The obvious path was to send photos to a server, run similarity matching there, and return results. Cheaper to build, easier to iterate.

I didn't do that for two reasons.

First, privacy. Uploading someone's personal photos to a server - even temporarily - is a trust problem I didn't want to create.

Second, Apple's Vision framework is actually good enough to do this locally. The image embedding and similarity matching runs fast on modern iPhones. No server needed.

Zero outbound network calls. Photos never leave the device.

Technical notes

The core of the app is image feature extraction via Vision's VNGenerateImageFeaturePrintRequest. It generates a compact embedding for each photo, then I cluster similar embeddings together using cosine distance.

"Best shot" selection looks at estimated sharpness (Laplacian variance on a downsampled version) and basic composition heuristics. It is not perfect but it is right most of the time.

PhotoKit handles library access. The whole scan pipeline runs in a background task so the UI stays responsive.

Business model

Free to scan the full library. Free tier allows deleting up to 25 photos per month. One-time lifetime purchase available.

Current status

Would like feedback on:

  • whether the grouping accuracy holds up on large real-world libraries
  • cases where the "best pick" is clearly wrong
  • any UX friction in the review flow

App Store: https://apps.apple.com/us/app/snapsift/id6759221222
Landing page: https://snapsift.app

Top comments (0)