01 / The Problem

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.

02 / UX Philosophy

The 5 Design Principles

1. The Photo is the Interface

Controls live directly on or next to the photos. No chat windows, sidebars, or superfluous chrome competing with image clarity.

2. Human Decides, Machine Explains

Vision models generate structured explanations. Nothing is ever automatically marked for deletion.

3. Never a Dead Control

All in-flight scans show clear progress and can be cancelled immediately without state corruption.

4. Show the Outcome

Freed megabytes and cleared duplicate counts update live after every confirmed action.


03 / Setup

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.


04 / Architecture & Safety

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.

05 / Ergonomics

Keyboard-First Triage

Review hundreds of photos effortlessly without touching the mouse:

Key Action
/ Move between burst groups
16 Toggle keep/trash selection on candidate frame
Space Full-screen zoom comparison
Enter Confirm and commit batch deletion via PhotoKit
Esc Cancel current batch