Built by photographer for photographers who come home from a trip with a few thousand frames and want the keepers fast.
RAW support (v6.0): RAW files are handled via
rawpy(LibRaw). For speed, the full-size JPEG preview embedded in every RAW is used for thumbnails, analysis and on-screen display β EXIF (date, lens, GPS, orientation) comes along with it. Files with no usable preview fall back to a half-size demosaic. Exports always copy the original RAW file, untouched. Ifrawpyisn't installed, the app simply ignores RAW files and works as before.![]()
π Photo Curator is free and open source. If it saved you an evening of culling, please consider buying me a Ko-Fi β it directly funds new features.
- Why Photo Curator
- What's new in v6.0
- Features
- Install & Run
- Workflow
- How it works
- Privacy & Safety
- Platform notes
- License
A long shoot leaves you with thousands of near-identical frames, blurred misfires, and a handful of genuine keepers buried in the middle. Going through them by hand is slow and easy to get wrong. Photo Curator does the first ruthless pass for you β in seconds per hundred photos β and leaves every decision reversible. Nothing is deleted or moved until you say so, and your files never leave your computer.
- RAW files, first-class. Canon CR2/CR3, Nikon NEF, Sony ARW, Adobe DNG, Fuji RAF, Olympus ORF, Panasonic RW2, Pentax PEF and more are culled, deduped and ranked alongside JPEGs (via
rawpy/LibRaw β see the note above for how it stays fast). - RAW / JPG filter chips in Cull. Shooting RAW+JPG? Filter the grid to RAW only or JPG only; RAW frames carry a purple RAW tag.
- Originals untouched. Exports always copy the original RAW file, never a converted preview. If
rawpyisn't installed, a sidebar banner tells you RAW support is off.
- One-click app launcher. A proper
Photo Curator.appfor macOS β double-click the camera icon and your browser opens automatically once the engine is ready. No Terminal window, no commands. Quit it from the Dock and the engine stops cleanly. - Fully offline bundle for Apple Silicon. A self-contained package (all image libraries included) that runs on an M-series Mac with no pip, no terminal, and no internet at run time.
- Moved off port 5000. The app now serves on port 5014 (
http://127.0.0.1:5014). macOS reserves port 5000 for its AirPlay Receiver, which answers every request withHTTP 403β that conflict is now gone. Override with thePHOTOCURATOR_PORTenvironment variable if you ever need to.
-
1 Β· Cull β flags out-of-focus shots using a contrast-normalized sharpness measure, so genuinely soft frames are caught while low-contrast-but-sharp shots (haze, night, big skies) are kept. Sorts into Sharp / Soft (recoverable) / Blurry, with a one-click Sharp β Blurry override on every photo. Blurry shots move to
Blurred/only when you press Move blurry β review first, move second. -
2 Β· Dedup β global perceptual-hash clustering collapses burst sequences to a single frame. EXIF capture-time tightens burst detection, ORB feature-matching prevents distinct scenes from being wrongly merged, and the sharpest frame of each group is kept and labelled "Best of N". Frames with no near-duplicate are labelled "Original". Matching is vectorized and signatures are cached, so big cards stay fast.
-
3 Β· Rank β scores each photo on composition, lighting, focus, color, and contrast, then shows your TOP N with a per-photo hexagonal radar chart and a TOP-N average "metric profile". Ranking shows live per-photo progress with percentage, elapsed time, and ETA. If you skip Dedup, ranking folds the clustering in automatically so a one-click run still gives a burst-free result.
-
π± Phone Background selector β a single tap marks any top shot as a phone wallpaper. Export Phone BG writes a
PhoneBG/folder withOriginal/(full-res copies) andWallpaper_19.5x9/(each photo center-cropped to 1290Γ2796, 19.5:9 β pixel-perfect on iPhone and covering nearly all Android). -
β‘ God Mode β one button runs the whole pipeline automatically: Cull β Dedup β Rank, landing on your ranked TOP N without moving any files, so you still review and move rejects yourself.
-
Built for big libraries β live preview with pagination, per-stage progress with ETA, EXIF-orientation-correct thumbnails, light/dark theme, a lightbox with arrow-key review, and optional auto-move of rejects into
Blurred/,Duplicates/, andTOP_N/subfolders.
Double-click Photo Curator.app. Your browser opens at http://127.0.0.1:5014 once it's ready.
The first time, macOS may say the app is from an unidentified developer β right-click (Control-click) the app β Open β Open. After that, a normal double-click works. To quit, right-click the Dock icon β Quit.
Requires Python 3.9+.
pip install -r requirements.txt
python photo_curator.pyThen open http://127.0.0.1:5014 in your browser. Pick a folder (or paste a path), choose a step, and press Start.
A typical pass on a full card is Cull β Dedup β Rank in order β each step feeds its survivors to the next, so ranking only scores the photos worth scoring. In a hurry? Press β‘ God Mode to run all three automatically. Either way, no files are deleted or moved until you explicitly choose to β every stage is review-first.
| Step | Metric | Notes |
|---|---|---|
| Cull | var(Laplacian) / var(image) on a 1024px copy |
Resolution-independent; normalizes out contrast so haze β blur. Threshold is adjustable. |
| Dedup | 192-bit perceptual hash (avg + dual difference hash) + ORB confirm | Global clustering; EXIF-timed bursts get a relaxed bar; keeps the sharpest frame. |
| Rank | Weighted focus / lighting / contrast / color / composition | Per-photo radar + TOP-N average profile. |
Thumbnails are cached under your system temp dir, so the first pass over a folder is the only slow one.
Photo Curator is private by default β not as a policy, but by architecture.
- Runs 100% on your machine. All analysis (sharpness, duplicate detection, ranking) happens locally in Python. Your photos never leave your computer.
- No uploads, ever. There is no cloud, no server, no storage bucket. The only network socket the app opens is a local web server bound to
127.0.0.1(localhost) so your browser can talk to it β it is not reachable from your network or the internet. - No accounts, no sign-in. Nothing to register, no email required.
- No telemetry or analytics. The app collects nothing, phones home to nothing, and has no third-party trackers. You can verify this β the source is open.
- Nothing is deleted or moved without your say-so. Every stage is review-first. Rejects are only relocated into
Blurred/,Duplicates/, orTOP_N/subfolders when you explicitly press the button β and the originals stay on disk. - Works fully offline. Once installed, it needs no internet connection to run.
Because it's open source, you don't have to take our word for any of this β read the code.
Tested on macOS (Apple Silicon and Intel). The native folder picker uses osascript and SD-card detection scans /Volumes; on Windows/Linux those conveniences are skipped, but you can still paste a folder path into the field and everything else works. The app serves on port 5014 to avoid the macOS AirPlay Receiver on port 5000.
Photo Curator is released under the MIT License β free to use, modify, and distribute, including commercially. It is provided as-is, with no warranty.
π If it saved you time, the best way to say thanks is a Ko-Fi β every coffee genuinely helps fund the next feature. Thank you! π
