DupeOut

Support

Built and maintained by one person. Email gets you a real reply, usually within a day.

Contact

Email: hechen.dream@gmail.com
TestFlight feedback: use the in-app "Send Beta Feedback" option in TestFlight — it routes attachments and device logs.

FAQ

What's the difference between Strict, Balanced, and Loose?
Strict surfaces only same-moment bursts and pixel-identical copies — high confidence, low recall. Balanced (the default) also catches near-duplicates that look like the same shot taken seconds apart. Loose adds semantically similar photos — different angles or lighting of the same subject. Switch presets from the Duplicates header; rescan happens instantly using the cached features, no re-indexing.
I deleted something by accident. Can I get it back?
Yes. Open the Trash tab. DupeOut keeps a 30-day local backup of every deletion you make through the app. Tap Restore on a row to put the photo back in your library with its Live Photo pairing intact (if it had one). After 30 days the local backup is purged automatically.
Does DupeOut work with iCloud Photos?
Yes. The engine asks PhotoKit for each asset's image data; if a photo is iCloud-only, PhotoKit downloads it on demand the same way Photos.app would. iCloud-only photos take slightly longer to scan because of the download step. Photos that fail to download (offline, account issue) are skipped and the indexing pass moves on.
How does it find duplicates without uploading my photos?
For each photo DupeOut computes a perceptual hash, a small Vision feature embedding, sharpness via Laplacian variance, and a luminance histogram — all on-device using Apple's Vision framework. Clusters are formed by comparing those tiny feature vectors; the original images never leave your iPhone. Full privacy details →
What goes in the Bad Photos tab?
Five categories: Corrupted (visible storage damage), Overexposed (blown-out near-white frames), Too Dark (pocket shots with the lens covered), Low Info (uniform/featureless captures — finger over lens, blank scans), Blurry (out-of-focus or motion-blurred). Each category gates on multiple signals — screenshots and photos with detected faces are intentionally exempted from Dark / Blurry / Low-Info to avoid false positives. Tune via Settings → Bad Photos → Sensitivity (Strict / Balanced / Aggressive).
The keeper algorithm picked a weird photo. Can I override it?
Yes. In any cluster's detail view, swipe to the photo you'd rather keep and tap the "Make Keeper" capsule in the top-leading slot. The previous keeper auto-stages for trash. The cluster list also shows a crown badge on the chosen keeper, with a distinct accent when it's a manual override versus the app's suggestion.
Why does scanning take a while the first time?
The first scan computes a feature embedding for every photo — that's the expensive step. Subsequent scans reuse the cache; only photos added or changed since the last scan get re-processed. A library of ~10,000 photos takes a few minutes the first time, ~30 seconds on rescans.
Will DupeOut work without internet?
Yes, completely. The app makes zero network calls. The only time the network is involved is when iCloud Photos transparently downloads an iCloud-only photo for scanning — and that's iOS's network, not DupeOut's.
How do I export my data?
There's nothing to export. DupeOut doesn't store your photos — it stores a small local index of feature vectors that's regenerated from your library on demand. To wipe the index, Settings → Cache → Clear cache. To free space, use the Trash tab to permanently purge already-trashed photos before the 30-day window expires.
Something is broken / I have an idea
Email hechen.dream@gmail.com. Bug reports with screenshots and the device + iOS version get fastest turnaround.

Known issues

None at this time.

Release notes

Release notes for each TestFlight build are visible in the TestFlight app. Public-release notes will live here once DupeOut ships to the App Store.