A native macOS app for culling photos. Scans folders, detects duplicates via perceptual hashing, scores photo quality, and lets you quickly keep/reject/delete — built for photographers who shoot in bursts or bracketed sets.
- Duplicate Detection — Perceptual hashing (pHash) groups visually similar photos with adjustable similarity threshold
- Quality Scoring — Blur/sharpness, exposure, face detection, eye blink, smile, face sharpness, noise penalty
- Auto-Marking — Best photo in each duplicate group auto-marked as Keep, others as Reject
- RAW Support — NEF, CR2, CR3, ARW, DNG, ORF, RW2, RAF (plus JPG, PNG, HEIC, WebP, etc.)
- Fast Scanning — Two-phase: thumbnails appear immediately, quality analysis runs in background
- Batch Selection — Cmd+Click (toggle), Shift+Click (range) in grid and comparison views
- Keyboard Shortcuts — Arrow keys to navigate, K/X to keep/reject, Delete to trash
- File Operations — Move to Trash, move to folder, export JSON for both kept and rejected sets
- Three Views — Duplicate Groups, Unique Photos, All Photos with sort by name/date/quality/size
- macOS 15 (Sequoia) or later
- Apple Silicon or Intel Mac
- Go to Releases
- Download the latest
PhotoCuller-x.x.x-macOS.dmg - Open the DMG and drag PhotoCuller to
/Applications - On first launch: right-click the app → Open (required once since the app is not notarized)
- Launch PhotoCuller
- Select a folder containing your photos
- The app scans for duplicates and scores quality in the background
- Use the Duplicate Groups tab to review similar photos side by side
- Click any photo to open the comparison view
- Mark photos as Keep (K) or Reject (X), then use file operations to move/trash
| Key | Action |
|---|---|
| ← → | Navigate photos within group |
| ↑ ↓ | Navigate between duplicate groups |
| K | Keep current photo |
| X | Reject current photo |
| Delete | Move to Trash |
| Escape | Close comparison view |
| Gesture | Action |
|---|---|
| Two-finger scroll up/down | Zoom in/out (0.5×–5×), centered on cursor |
| Click-drag | Pan when zoomed in |
Requires Swift 6.0+ and macOS 15 SDK.
# Debug build (for development)
bash build_app.sh
# Release build (creates DMG)
bash build_release.sh 1.0.0Swift 6, SwiftUI, Core Image, ImageIO — zero external dependencies.
Personal use. All rights reserved.