Everything is measured rather than judged: sharpness, focus and exposure come out as numbers, which is exactly why the culling tools can be trusted with a threshold and why they only move the images that fall below it. Know what it is not — it has no view on aesthetics or intent, so a deliberately soft, dark frame will score badly and be culled unless you set the threshold with that in mind.
A local photo quality analyser. Computer vision models run on your own machine over folders of images and return numeric scores per metric, so culling and burst selection become calls rather than an evening in a photo editor.
- A single image audited for technical quality — sharpness, exposure, noise and more — with an overall score, a verdict and a per-metric breakdown
- Whole folders analysed with high concurrency, paginated at 100 images a call, with an offset in the response when there are more
- The best frames in a burst ranked by technical quality, with the metrics behind each one, which is the job of picking a hero shot
- Culling that only moves the failures: images below the threshold, 0.4 by default, go to a culled_photos subfolder and everything above it stays where it is
- A stricter binary pass with a default of 0.6 that separates keepers from a rejects folder
- Subject detection that checks the subject is sharp rather than scoring the frame as a whole, and can be switched off
- Object labels from a YOLO model for quick content indexing — person, dog, car and the rest
- Colour palettes as hex codes from K-Means clustering, five per image by default, for one image or across a folder in batches of 20
- RAW alongside JPEG, PNG and TIFF: .ARW, .CR2, .NEF, .DNG and .CR3 are read directly
Nothing to sign up for and nothing uploaded — the models run locally, which is also what makes speed a function of your hardware. Python 3.10 or newer; it starts as uvx photographi-mcp, and uvx --refresh photographi-mcp pulls a newer build. It needs read access to the photo folders and write access wherever culled files land. On Apple silicon the vendor measures the YOLO model loading in about 0.38s once, then roughly 0.19s per image in fast mode, which downsamples large frames, against about 1.50s per image with fast_mode=False at full resolution. Anonymous aggregate telemetry is on by default and carries no filenames, paths or EXIF; PHOTOGRAPHI_TELEMETRY_DISABLED=1 or the --disable-telemetry flag turns it off. MIT.
One command — uvx photographi-mcp
