← All projects
Experimental

Whittled

Whittle your photo library down to what matters

Status
Pre-launch
Primary Stack
Swift 6 · SwiftUI · PhotoKit

My photo library had 100K+ images and I never looked at any of them. Curation needed to feel like a game, not a chore.

Whittled schematic — a grid of faded photos with one highlighted in amber

Everyone with an iPhone has the same problem and nobody does anything about it: the library has 100K+ photos and most of them are junk — burst duplicates, accidental screenshots, blurry frames, food you forgot you photographed. The reason nobody does anything is that opening the Photos app and seeing “135,482 items” makes you close the Photos app. The interaction design has to make curation feel like a game, not a tax bill you’ve been avoiding.

Swipe right to keep, swipe left to trash. Streaks and achievements on top of it so coming back tomorrow feels like picking up a game save, not restarting a chore. Built entirely in Swift 6 with zero external dependencies — just PhotoKit, Vision, Core ML, SwiftData, and CloudKit — and the same codebase ships to iPhone, iPad, Mac, and Apple TV. The “Treasure” button is a deliberate button press, not a swipe — marking something as a favorite has to be an intentional act, not muscle memory you might do by accident during a doomscroll. Swipe down is skip — for photos that are just “meh,” not trash, not treasure; they come back later so the queue doesn’t force a verdict on every mediocre shot.

The AI is deliberately humble. It handles the obvious junk in batch — burst near-duplicates, screenshots, low-resolution noise, roughly 60-70 percent of a typical library — but it never recommends trashing a photo with a face in it, a photo from a place you don’t normally go, or anything you’ve already favorited. The assumption is that humans are better than machines at deciding what matters in their own lives, and the tool’s job is to remove friction from that decision, not make it for them. All analysis is on-device. Nothing is ever uploaded, nothing leaves the phone, and there is no server to breach because there is no server.

Swift 6SwiftUIPhotoKitVisionCore MLSwiftDataCloudKit
whittled.app ↗