look · cull · loop

A darkroom for your digital library.

Eighty thousand photos, and the good ones are buried. Loupe is a self-hosted workbench for going through them — frame by frame, month by month — and deciding what to keep. Nothing is deleted by accident. Your photos never leave your machine.

Personal photo culling

A darkroom for your camera roll.

Eighty thousand photos pile up fast. Loupe lets you look at each one and keep only what matters — nothing deleted by accident.

look · cull · loop

loupe.local — Overview
look · cull · loop
TripsMapPeopleVaultCutting RoomSettingsHelp
⌂ Overview
⌂ library 81,127 reviewed 14,902 (18%) cut 9,318 kept 5,584 remaining 66,225 reclaim 112.4 GB

why it exists

It started with an iCloud bill.

I sat down one weekend to claw back some storage and realized deleting the obvious junk wouldn't move the bill at all — the problem was never cost. Twenty-odd years and tens of thousands of photos had piled up with no calm way to go through them, and nothing made it feel safe to actually let go. So I stopped trying to save money and built the darkroom I wished I had.

the problem

Every backup keeps everything. Nothing decides.

Phones shoot in bursts. Cloud sync hoards. So the screenshots, the eleven near-identical sunsets, the accidental pocket shots — they all survive forever, right next to the photographs you actually love. Loupe is the opposite of a backup: a quiet, deliberate place to look · cull · loop

overview

Your whole library, as a shelf of photobooks.

The home view lays the entire library out by year and month. Each month is a little photobook spread — two facing pages, hinged at the spine — so you can scan a decade at a glance and feel where the stories are.

The progress band across the top is always honest: how many frames are reviewed, how many cut and kept, what's left, and how much disk you'd reclaim by acting on the cuts.

A library you can hold in your hand, not a folder you dread opening.

Overview · 2023
2023 — 11,204 frames · 8 months reviewed

discovery

A film strip of forgotten moments.

Across the top of the overview, a 35 mm film strip drifts by — a slow, looping reel of random frames pulled from across the years, sprocket holes and all. Portrait shots sit pillarboxed on the film base, exactly as they would on real stock.

It's not a task list. It's an invitation: hover to pause, and any frame that catches your eye drops you straight into it. Pause, look, fall back in.

  • continuous sprocket perforations
  • hover-to-pause
  • respects reduced-motion
  • click any frame to open it
discovery

the month photobook

Open a month and it turns like a page.

Tap a month and it opens as a real spread — a hero frame or a mosaic, with a single right-hand page that turns left over the gutter. The selection is diversity-deduped: no two near-identical frames sit side by side, and it re-shuffles fresh on every visit, so the same month never looks the same twice.

Behind the scenes it's a perceptual-hash and timestamp guard picking the most distinct, in-focus frames from the pool — burst duplicates quietly stay out of the spread.

The best of a month, never the same six photos twice.

June 2023 — photobook
Stand-in photograph, left page
Stand-in photograph, right page
June 2023
long light over the water; a week away, then home.
214 frames · 62% reviewed

the week contact sheet

Inside a month, a week is a contact sheet.

Drop into a month and its weeks lay out the way you'd lay strips on a light table — each day a single frame on a film-base sheet, sprockets top and bottom. The label rides the rebate beneath the frame, never across the picture, so nothing covers the photograph you're judging.

One frame per sheet is lit amber — the safelight. It's the day to start with: the one you've already half-culled, or the busiest if you haven't begun. A notch under each frame tracks how far you've gotten. Tap any frame and you're inside that day.

A week at a glance — one frame lit to tell you where to begin.

  • one amber safelight / sheet
  • labels ride the rebate
  • a progress notch per day
  • tap a frame to open the day
Mar 2026 — week 8–14
Stand-in photograph
DAY 8· 23
Stand-in photograph
DAY 9· 31
Stand-in photograph
DAY 10· 12
Stand-in photograph
DAY 11· 58
Stand-in photograph
DAY 12· 28
Stand-in photograph
DAY 13· 30
182 frames · 1 day still open

focus mode

Every frame, with the evidence to judge it.

Open a frame and the photo fills the room — brightest thing on the screen — with a quiet signal panel beside it. EXIF and capture details up top; then library-relative scores with percentile bars: an Apple aesthetic score, a sharpness read from a blur measurement, so you can tell a keeper from a near-miss at a glance.

Below that, content labels and the people in frame. Screenshots and documents are called out with their own tell. People who matter — family, the dogs — carry an amber ring, a standing reminder not to cull them by reflex.

  • EXIF & capture
  • aesthetic score
  • blur / sharpness
  • scene labels
  • protected people
focus — 1 of 214
Stand-in photograph in focus mode
Capture
cameraiPhone 15 Prowhen2023-06-14 19:42
Signal
aesthetic0.81 · 92nd
sharpnesshigh · 78th
Content
golden hour 0.94coastline 0.88sky 0.81
People
familythe dogs
✕ cutskip✓ keep

culling & review

Keep, cut, skip — and change your mind anytime.

Three keys, that's the whole loop. Every decision is recorded, never enacted: a cut is just a mark. The stats bar's cut and kept counts are live links into full review grids, where keepers wear a green edge and cuts a dimmed red one.

Scan a whole decision at once, spot the one you got wrong, and flip it back. Protected frames are guarded — Loupe won't let a reflex cut take out someone who matters.

Reversible by design. The undo is the feature.

review — cut
Cut · 9,318 frames · tap any to restore

how it decides

Smart enough to help. Never enough to overrule you.

suggest

Labels nominate

On-device labels — screenshots, documents, burst extras — propose the obvious cuts. They only ever suggest; they never decide.

order

Score orders

An aesthetic and sharpness score ranks within a pile so you review the weakest first. A low score is never an automatic cut — a quiet candid can score low.

protect

People protect

Named people guard a frame from any bulk cut. Family, the dogs — Loupe never culls someone who matters by reflex.

the cutting room

It shows its work — and nothing's cut until you say so.

Six rules read the whole library and set aside the frames most likely to go — the soft, the duplicated, the screenshots, the stray clips. Everything's grouped by why it was flagged, and each pile names the exact rule that caught it.

Every pile is honest about where its rule over-reaches — a “watch for” note that points straight at the keepers hiding in the cut, so the saves are easy to spot. Nothing is deleted until you export and your offsite backup is confirmed.

Lead with the truth: nothing here is gone, and nothing's even been cut.

  • every pile names its rule
  • honest about over-flagging
  • nothing cut until you export
  • review behind one tap
cutting-room
the cutting room
Frames flagged for the cut. Nothing's been cut yet.
8,712 set aside~118 GB reclaimable1,904 kept so far0 exported
B4Soft & blurryYour call
2,344frames · ~41 GB

Frames that came out soft — low sharpness across the whole frame, with a texture guard so deliberately minimal shots aren't swept in.

The ruleGlobal sharpness below the 10th percentile (Laplacian < 93.6), low-texture-guarded.Watch forIntentionally soft or minimalist shots — the fp-suspect frames are surfaced first.
Review all 2,344 →
B3Burst extrasYour call
1,186frames · ~22 GB

The also-rans of a burst — every frame except the sharpest in a run of three or more near-identical shots.

The ruleNon-sharpest frames in a burst cluster of 3 or more.Watch forBursts where you'd happily keep more than one frame.
Review all 1,186 →

people

Everyone in your library, gathered by face.

Loupe finds faces on your own machine and gathers them into people — each a round portrait you can open. Names arrive seeded from your Apple Photos tags, so the people you've already named are known from the first run.

Open someone and Loupe shows their known faces, then quietly proposes more — other frames ranked by how closely they match. Confirm to gather, reject to dismiss. The people who matter wear the same amber ring as in focus mode, so a reflex cut never takes them out.

Find a face, not a folder.

  • on-device face detection
  • names seeded from Apple
  • confirm / reject by similarity
  • protected people
  • read-only — originals untouched
people
faces detected on-device · names seeded from Apple
Stand-in portrait
Family
1,204 frames
Stand-in portrait
Mara
863
Stand-in portrait
The dogs
412
Stand-in portrait
Theo
337
Stand-in portrait
Sofia
289
?
Unnamed
151
?
Unnamed
94
?
Unnamed
61

places · the map

Everywhere your library has been.

Every geotagged frame, dropped onto a warm light table instead of a street map. Places are the base layer — glowing clusters that grow with how much you shot there; trips lay over the top as a dashed path between stops, and the towns you've lived in rest under soft amber home zones.

map
home
layers
places
trips
home zones
1,204Austin
142Taos
86Big Bend
612Lisbon
318Marfa
a place you went
Marfa
318 frames · 5 visits · 2019–2024
Open the contact sheet →

and two more ways through

A journey, and a shelf of your own.

The same library, entered from a different door — because how you remember a photo is rarely by its date.

LPtrip
Lisbon
Portugal
9 days612 frames88 kept
Stand-in photograph
Stand-in photograph
Stand-in photograph
Stand-in photograph
Stand-in photograph

Trips

Loupe stitches your travel into journeys — around a hundred of them — each a travel-wrapped contact sheet you sweep with a loupe. Cull a whole trip in one sitting, the way you'd lay prints out on a table.

VAULT · PRIVATE

Vault

A third axis beyond keep and cut: a private shelf. Anything you vault is hidden everywhere — overview, trips, places — and held out of any export or delete. Some frames aren't for culling. They're just yours.

the ethos

A darkroom, not a shredder.

Culling should feel calm, not dangerous. Loupe is built on one promise: nothing leaves without your say-so, and anything can be taken back. Decisions are marks on a sheet — you do the deleting, later, deliberately, when you're sure.

reversible

Nothing deleted by accident

A cut is a decision, not an action. The originals sit untouched until you choose to act, and every call is one tap from reversed. Live Photo motion files quietly follow their stills, so a pair is never half-culled.

guarded

The people who matter, protected

Family and the dogs carry a standing guard. Loupe refuses to cull protected frames on reflex and rings them everywhere they appear, so the photos you'd most regret losing are the ones it's hardest to lose.

honest

◧ Progress you can trust

No dark patterns, no streaks, no nagging. Just an honest tally — reviewed, cut, kept, remaining, and the disk you'd reclaim — so you always know exactly where you stand and can stop whenever you like.

self-hosted & private

It runs on your machine. Your photos stay yours.

Loupe is one small program you run at home, pointed at your own library. No accounts, no uploads, no third party in the middle of your memories. The library is read-only to Loupe; only your decisions are ever written down.

private

Nothing leaves home

Your photographs are never uploaded, indexed by anyone else, or shown to a model in the cloud. The app sits behind your own access; the originals never move.

read-only

The library is never touched

Loupe reads your photos and metadata and writes only to its own decisions file. Your originals, your folder structure, and your backups stay exactly as they were.

yours

A personal tool, shared

Loupe was built for one person's library and offered to anyone who wants the same calm way through theirs. Self-host it; it's yours to run.

early access

Put your own library on the bench.

Loupe is a personal project, in private testing right now. Leave your email and I'll send the self-hosting guide the moment it's ready.

No account, no spam — just the self-hosting guide when it's ready.