The Burst Photo Problem
Modern smartphone cameras encourage taking 5–6 rapid frames of every moment. Over years, Apple Photos accumulates thousands of duplicate shots that consume tens of gigabytes of iCloud storage.
Existing "cleaner" tools use scare tactics, fake progress bars, and destructive black-box automation that risks permanently losing irreplaceable memories.
Whittle is built on trust:
- The model advises, never deletes.
- Every candidate frame is displayed with a factual, comparative reason ("Subject eyes closed in frame 2; frame 3 has optimal focus and open smile").
- Every deletion passes a manual keyboard keystroke plus the native macOS PhotoKit system confirmation prompt.
The 5 Design Principles
Controls live directly on or next to the photos. No chat windows, sidebars, or superfluous chrome competing with image clarity.
Vision models generate structured explanations. Nothing is ever automatically marked for deletion.
All in-flight scans show clear progress and can be cancelled immediately without state corruption.
Freed megabytes and cleared duplicate counts update live after every confirmed action.
Build & Installation
Build natively on macOS using the included build script:
# Clone the repository
git clone https://github.com/surendranb/whittle.git
cd whittle
# Build the native app bundle
./build.sh
# Run test suite
./test.sh
Launch Whittle.app, grant PhotoKit permissions, and select a photo album to begin triage.
Architecture & Safety
Whittle pairs a native SwiftUI frontend with an embedded asynchronous worker (whittle-worker):
┌─────────────────────────────────────────────────────────────┐
│ Whittle.app │
│ ┌───────────────────────┐ ┌───────────────────────┐ │
│ │ SwiftUI Interface │ ◄───► │ PhotoKit Manager │ │
│ └───────────┬───────────┘ └───────────┬───────────┘ │
└──────────────┼───────────────────────────────┼──────────────┘
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ Local Ollama Vision │ │ Apple Photos DB │
│ (llama3.2-vision) │ │ (System Confirm) │
└──────────────────────┘ └──────────────────────┘
- Local Inference: Supports any local OpenAI-compatible vision endpoint (Ollama
llama3.2-vision, LM Studio, or custom models). - Zero Cloud Leakage: Photos never leave your local machine.
Keyboard-First Triage
Review hundreds of photos effortlessly without touching the mouse:
| Key | Action |
|---|---|
| → / ← | Move between burst groups |
| 1–6 | Toggle keep/trash selection on candidate frame |
| Space | Full-screen zoom comparison |
| Enter | Confirm and commit batch deletion via PhotoKit |
| Esc | Cancel current batch |