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)