Find your best photos. Without the cloud.
A local-first desktop and web tool that scores every photo in your library on sharpness, lighting, faces, and composition, clusters the near-duplicates, and helps you curate the perfect fifty in minutes. Nothing leaves your machine. No account, no subscription, MIT-licensed.
Cloud photo apps are built to store everything. They are not built to help you find the few shots that matter. Best Photo Picker scores your whole library locally, so the best ones rise to the top without anything being uploaded.
You have fifteen thousand photos of your kid. You want the best fifty for the grandparents, the photo book, or the year-end card.
Apple Photos and Google Photos are great at storing all fifteen thousand and surfacing the occasional "memory," but they bury your genuinely best shots in an endless feed. Lightroom and digiKam are built for professional photographers, not for triaging a family library. And every one of the cloud options assumes you are fine uploading your entire collection of family faces to someone else's data center.
The hard part is not storing the photos. The hard part is finding the actual best fifty out of thousands of near-identical burst shots, blinks, and blurry frames, without handing your library to a third party.
Best Photo Picker exists for exactly that case: thousands of photos of a specific subject, and you want the real keepers, on your own machine.
Point it at a folder. It analyzes every photo, scores it, and lets you tune what "best" means in real time.
Each photo gets a score combining sharpness, exposure, face detection and framing, and composition. The weights are sliders. Want faces to matter more than rule-of-thirds? Drag, and the whole library re-ranks live.
Burst shots and near-identical frames are clustered automatically by perceptual hashing (dHash plus aHash), with CLIP semantic similarity catching the same shot cropped or edited differently. You pick the keeper; the rest stay out of your selection.
Detected faces are clustered into people automatically. Name a cluster "Leo," and you can bias the picks toward that person. "Pick the fifty best photos of Leo" is one slider away.
Selection uses per-day caps and monthly coverage, so your final pick spans the whole year instead of clumping into the one well-lit afternoon you shot a hundred frames in.
Picks, Faces, Pets, Duplicates, Calendar, Favorites, and more are generated automatically, alongside any manual albums you build. The library stays navigable even at tens of thousands of photos.
Deletes are reversible for thirty days via a Recently Deleted album. Curating aggressively never means losing a photo by accident.
Every decision in Best Photo Picker traces back to one constraint: your photos never leave your machine. That ruled out the easy cloud path and shaped the rest of the engineering.
All analysis, scoring, and selection run on your computer. There is no telemetry and no account. The handful of network calls the app can make (one-time model downloads, OpenStreetMap tiles only when you open the Map view, an optional update check, optional local-network sharing) are each individually disclosed and switch-off-able. Nothing about your library is ever sent anywhere.
Face detection uses a layered stack (YuNet, SCRFD, BlazeFace, MediaPipe, dlib) so it degrades gracefully across hardware. Near-duplicate detection pairs fast perceptual hashing (dHash plus aHash) with CLIP semantic similarity for the harder cases. Pet detection uses YOLOv11n. Everything runs on CPU by default, with optional hardware acceleration (Apple Neural Engine, CUDA, DirectML) via a single environment variable.
The core is a local Flask server with a vanilla-JS single-page UI. For people who would rather have a dock icon than a terminal, a Tauri v2 desktop app wraps that same UI in a signed, notarized native macOS window. Power users still get a full CLI for batch and headless workflows.
bpp demo generates a synthetic library and boots the full UI locally, so anyone can evaluate the product end to end before pointing it at their own photos. It quits cleanly when you close the tab and never touches your files.
The code is MIT, but ML model weights carry their own, often non-permissive, upstream licenses. Rather than bundle weights or silently auto-download them, the app ships zero weights, fetches each one only on explicit per-model consent, verifies it against a pinned SHA-256, and gates research-only and non-commercial models behind a use-context acknowledgment. The reasoning is captured in an architecture decision record.
Built with AI-assisted development under tight product direction: scope, priorities, and every architectural decision are owned and approved deliberately, not handed off. The load-bearing choices are captured in a set of architecture decision records covering the subprocess runner, cancellation contract, plugin protocol, error hierarchy, and the model-license posture above. The result is a real product with its reasoning on the record, not a prototype.
If you live in the Apple or Google ecosystem and your collection fits comfortably in their feeds, those tools work great. Use them.
Best Photo Picker is for the case they are bad at: you have thousands of photos of one specific subject (your kid, your dog, last summer's trip) and you want to find the actual best fifty.
The whole library gets ranked for curation. Cloud apps optimize for keeping everything and surfacing the occasional algorithmic "memory," not for handing you your top fifty on demand.
Bias the selection toward a named person so the final pick favors the faces you actually want. No mainstream consumer app does this.
Free and open source under MIT. Nothing to sign up for, nothing to upload, nothing to pay.
Local-first photo curation that finds your best shots without uploading anything.