DupSnap is a macOS app that scans your Photos library for duplicate and similar photos and helps you remove them safely. Choose between exact-match scanning using SHA-256 hashing and similar-image scanning powered by a perceptual hash (pHash) algorithm. Detected pairs open side-by-side with full metadata so you can compare and decide with confidence.
DupSnap generates a SHA-256 hash from each photo's original data and groups photos with identical hashes. If two files are byte-for-byte the same, they will be found — no matter what name or folder they are stored under.
A perceptual hash (pHash) algorithm detects photos that look alike even when file format, compression, or minor edits differ. The Hamming distance threshold is adjustable from 1 (strict) to 20 (loose) with a slider so you control how similar is similar enough.
Detected pairs open in a detail view showing both photos at full size alongside file name, size, resolution, date taken, hash, and asset ID. Any field that differs between the two is highlighted in red so you can instantly see which photo is higher quality or more recent.
Analysis results are stored locally with SwiftData, so only newly added photos are processed on subsequent scans. Photos deleted from the library are automatically removed from the database. You can clear the cache and force a full rescan from Settings at any time.
HashingService fetches the original image data for each PHAsset and computes a SHA-256 hash. All hashes in the local database are grouped by value and any group with more than one entry is returned as a set of duplicate pairs. Hashing runs on Task.detached at up to six concurrent operations so the UI stays responsive throughout.
ImageComparator applies a CoreImage filter chain — Gaussian blur followed by grayscale conversion — to produce a 17×16 pixel representation of each photo. Each pixel row is encoded into a bit string and stored as four UInt64 values. At scan time the fast Hamming distance between bit arrays is compared against the user-set threshold, and pairs below the threshold are returned as similar matches.
DetailView loads both photos at full resolution and displays them side by side. MetadataRow shows file name, size, resolution, date taken, the first eight characters of the hash, and the asset ID for each photo. Fields that differ are highlighted in red. After deleting one photo the app automatically rescans and removes the pair from the list.
Each photo's localIdentifier, exactHash, resizedHash, and pHash are persisted locally with SwiftData. When a scan starts, DupSnap compares the current library against the database, queues only new assets for hashing, and removes records for photos that no longer exist in the library. The Settings screen provides a Clear Analysis Data option to wipe the cache and trigger a full rescan.
Click Exact Match Scan to find byte-perfect duplicates, or Similar Image Scan to find near-matches. DupSnap will request photo library access on the first run. The initial scan processes every photo in your library — progress is shown as a percentage and you can cancel at any time.
Each detected pair appears in the list with thumbnail previews and the Hamming distance between them. Click any row to open the detail view where both photos are displayed at full size alongside their metadata. Red highlights show exactly where the two photos differ.
In the detail view, click Delete this Photo under the image you want to remove. The photo is deleted from your Photos library and the app rescans automatically to refresh the list.
"I had thousands of duplicate photos built up over years and DupSnap cleared them out in one session. The exact match scan is rock solid — no chance of accidentally deleting something you want to keep. Being able to compare both photos side-by-side with full metadata before deleting gives real peace of mind."
"The similar image scan is incredibly useful for burst shots. It catches near-duplicate photos that standard duplicate finders miss entirely. The threshold slider is a great touch — I use a stricter setting for precise comparisons and a looser one when I want to catch more variations. Repeat scans are noticeably fast thanks to the caching."
"Clean, simple interface and it does exactly what it says. The red highlights on differing metadata fields make it immediately obvious which photo is larger or more recent. I especially like that you can cancel a scan partway through. Essential tool for anyone with a large Mac Photos library."
Find answers to common questions below.