MOBILE APPS · CULLBOX
Cullbox: making a cull of 3,000 photos bearable
A wedding photographer comes home with 3,000 frames and the client sees 300. In between sits the most tedious job in the profession. Here is how we are solving it — and why it is harder than it looks.

A wedding photographer comes home with somewhere between 2,000 and 4,000 frames. The client will see 300. Everything in between is the job photographers call culling — the selection. And that selection is the most time-consuming, least creative and worst supported part of the profession.
Cullbox is our app that moves this step onto a phone and a tablet. It is currently in development; here we describe what we are building and why it is technically far harder than it looks.
Why culling is a hard problem
At first glance it is just looking through pictures. In reality it is three problems at once:
- Volume. 3,000 RAW files is 90 GB. You cannot simply load that and put it on screen.
- Speed. If there is half a second of lag between two frames, culling 3,000 shots means 25 minutes of waiting alone. The transition has to be instant.
- Precision. The decision “are the eyes sharp or not” needs a look at 100% zoom. A low-resolution preview does not show it.
How we solve speed
The trick is that a frame is never opened at the moment the photographer looks at it. The app works in three layers:
- The preview embedded in the RAW file. Every camera writes a JPEG preview into the file — it reads in milliseconds and is what you flick through.
- Caching forwards and backwards. While you are on frame 40, 41 and 42 are already prepared and 39 and 38 are still in memory. Flicking is therefore lag-free in both directions.
- Full decoding on demand. Only when you zoom in is the file decoded at full resolution — and only the part of the image you are actually looking at.
All of it runs on separate threads so the interface never stalls. A stutter while flicking is the one fault a photographer will not forgive.
Cullbox — photo culling for photographers
Thousands of frames reviewed in minutes: instant previews, rating with a swipe, grouping of near-identical shots and export of the selection into editing.
How we build mobile apps →Rating that does not break the rhythm
Photographers rate in two ways: with flags (keep / reject) or with stars (1–5). Cullbox supports both, with one difference — a rating is given with a swipe, not by hitting a small button.
Swipe up to keep, down to reject, sideways to skip. The hand stays in one place, the eyes stay on the picture. Across 3,000 frames that difference saves more than half an hour.
Every action can be undone, even a hundred steps back. At that speed a wrong swipe is inevitable; the danger is not the mistake, it is the irreversible mistake.
Groups of near-identical frames
A burst leaves ten almost identical shots. The photographer wants the best one of them, not each of them judged separately.
Cullbox groups frames by two measures: capture time (frames taken within the same second or two) and visual similarity — which is calculated from a downscaled copy of the image, without sending anything to a server. Within a group the app suggests the one with the sharpest focus point, and the decision stays with the photographer.
Software must not make the choice during culling. It may only make sure the photographer does not make the same choice ten times over.
What happens to the selection
A selection is only useful if it reaches editing. So Cullbox exports in three ways:
- XMP files — the standard way of storing ratings, read by both Lightroom and Capture One. The photographer opens the folder on the computer and the ratings are already there.
- A copy of the selection in a separate folder, with the rejects left out.
- A list of file names for processing in other tools.
Privacy as a design, not as a promise
Photographs from a wedding or a family shoot are among the most sensitive material anyone keeps. That is why Cullbox uploads the frames nowhere. All processing — previews, similarity, ratings — happens on the device. For its core work the app does not even need an internet connection.
It is also the technically harder route: with no server, everything has to run fast enough on a device with limited memory and battery. Which is precisely why most tools in this segment are desktop ones.
What this means if you are considering your own app
Cullbox is a good example of a project where 90% of the work is invisible: memory management, caching, threading, restoring a session after an interruption. The visible part — a screen with a picture and a swipe — is a few days of work.
If you are comparing quotes for a mobile app, this is the best question you can ask: what happens when there is ten times more data than we planned for? The answer tells you more than the entire pitch.
We have described what the whole route to release looks like using our own product that is already in the App Store: how an app gets into the App Store.