Showcase · Photography tool · Go / Svelte

krites

Krites is ancient Greek for 'the judge', and judging photographs is the whole job.

v0.10.2, released Pre-1.0

DocsRepository

The problem it exists for

A full wedding day comes back as three or four thousand frames, and every one of them has to be judged before any editing can start. By hand, that can take a photographer weeks. krites was built for one photographer in particular, my wife, who had four thousand frames and a weekend to get through them (I built my wife a judge).

And a wedding’s photos are sensitive, so the whole thing runs on her own laptop: no subscription, it works with no signal, and nothing leaves the machine unless she switches a cloud option on for herself.

How it works

A first pass, with reasons

Point it at a folder and it marks every frame keep, maybe or reject, each with a reason in plain words. Blur, exposure and near-duplicate bursts are judged with plain arithmetic (There’s no AI in my photo culler), and eyes and expressions with small models that run locally.

Review in a studio on your own machine

The review happens in a browser studio that only ever runs on your laptop. The originals are never written to: every decision is kept as a record beside the shoot, only an export writes new images, and sidecar files carry the cull straight into Lightroom (ten lines of XML).

Decisions and what they cost

  • Licence over benchmark. The most accurate expression models were trained on a dataset whose terms forbid commercial use of anything derived from it, so krites uses MediaPipe’s face models instead, converted to run locally (spec 0029). What it cost: about a fifth of faces got no expression reading at first, tuned down to 15%, which is acceptable because a face with no reading never causes a wrong reject.
  • A better detector. YuNet replaced the old face detector as the default rather than outright (spec 0033). On a real wedding it found 718 faces against 636, 13% more, with no change in rejects. What it cost: switching detector means re-culling the shoot.
  • Opt-in removal. Removal runs locally with LaMa, or MI-GAN as an alternative, turning down diffusion models and anything whose own licence forbids commercial use (spec 0008). What it cost: both models were trained on a dataset with non-commercial terms, so removal stays switched off until the user explicitly accepts that.
  • No learning yet. Learning the photographer’s own taste was parked until there’s real use to learn from (spec 0036), because with no human corrections yet, picking a learning goal would be a guess dressed as a design. What it cost: it doesn’t learn yet, and most frames still land on “maybe”.

Proof in use

  • It was built after a real fourteen-hour wedding of more than four thousand frames, and its detector change was proved by re-culling a real shoot.
  • Blink detection from the shape of the eye catches 12 of 14 real blinks, against 4 of 14 for the trained model it was compared with.
  • 19 releases since June 2026, and its models and runtime come through Secure artefact delivery, signed and checked like everything else.

Use it when, and when not to

Use it if you shoot events, come home with thousands of frames, and want a first pass you can understand and overrule, without your clients’ photos going anywhere.

It isn’t a catalogue or a RAW developer (a RAW frame exports as a JPEG), it works on one shoot at a time, there’s no Windows build, and the Mac download is Apple Silicon only. It doesn’t score aesthetics or learn from you yet, ingest skips subfolders and some newer RAW formats, and the optional AI review sends the full image to a third party. The limitations page has the rest.

Where it’s going

Learning from real corrections once there are enough of them, finishing the expression pipeline’s tuning, and replacing the removal models with ones whose training data is clean, which is still an open research question.

The story in posts

All 11 posts →

Last reviewed .