Skip to content

Cull a shoot, end to end

Take a folder of frames from a shoot to an exported set of keepers, and see what krites is doing at each step. Allow twenty to thirty minutes, plus however long the first cull takes on your folder.

You'll need krites installed (see Getting started) and a folder of frames to work on. Nothing you do here touches your originals.

There is nothing to set up first: the first command you run writes your default config. The rest of this walkthrough leans on the wedding-default cull profile, which is built into krites, so you will not find it in that config file.

1. Register the shoot

krites works on a shoot: your originals, plus a .krites/ directory it creates beside them to hold everything it decides.

krites ingest ~/Pictures/smith-wedding
Registered shoot "smith-wedding" — 412 frames (/Users/you/Pictures/smith-wedding)

Ingest scans the folder, records each frame in the shoot's manifest and sets up .krites/. Your files are only read. From here on, pass --shoot ~/Pictures/smith-wedding, or run the commands from inside that folder.

2. Judge every frame

krites cull --shoot ~/Pictures/smith-wedding
Shoot "smith-wedding" — 412 frames
  keep 187   maybe 161   reject 64

  keep   IMG_2041.CR2
  maybe  IMG_2042.CR2  — soft focus (sharpness 132 below 150)
  reject IMG_2043.CR2  — out of focus (sharpness 31 below 50)

Cull analyses each frame and gives it a keep, maybe or reject verdict, with the reasons beside it: sharpness and motion blur, and exposure. Closed eyes and blinks join them once you turn on face and eye analysis. The first cull on a large folder takes a while, because every frame is analysed; later culls reuse that analysis and finish almost at once.

The verdicts are records in .krites/, not changes to your photos. The thresholds behind them come from the cull profile, wedding-default, and you can tune it to your taste.

Cull also groups near-duplicate bursts, so you aren't choosing between ten near-identical frames blind. List the bursts it found:

krites dedup --shoot ~/Pictures/smith-wedding

3. Review in the studio

The studio is where krites is meant to be driven:

krites studio

The studio takes no --shoot flag. Unlike the CLI commands it isn't scoped to one shoot: it opens onto a library of shoots and you choose one. If the shoot you just ingested isn't listed, add it with Browse… on the Shoots page.

It's a web UI served on localhost only, over the same files the CLI uses. Work the cull grid: confirm the keepers, rescue anything the profile was too harsh on, and reject the rest. The grid stays responsive across thousands of frames.

Each frame shows its cues at a glance. A colour-coded stripe down its left edge gives the verdict, a rating chip appears once you've starred it, and a burst marker flags frames that belong to a near-duplicate cluster. The frame you're inspecting carries a gold ring, and frames in a multi-select batch are tinted so they read apart from it.

The grid starts in justified rows: full, uncropped frames at a consistent height, in shot order, the way Lightroom lays out a filmstrip. The Rows / Grid toggle at the right of the filter bar switches to a dense, uniform grid cropped to fill, and krites remembers your choice.

Prefer the CLI, or scripting a correction? Override one frame's verdict directly:

krites verdict IMG_2043.CR2 keep --shoot ~/Pictures/smith-wedding
IMG_2043.CR2 → keep (manual override)

A manual verdict survives a re-cull, so tuning the profile later won't undo it.

4. Correct the keepers

On the keepers, krites proposes edits. Each is a record you can undo, not a change to the frame:

krites straighten IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # level the horizon
krites crop       IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # composition crop
krites develop    IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # apply a look
Shoot "smith-wedding" — straighten
  IMG_2043.CR2  +1.40° (detected -1.40°)

A frame that is already well composed gets no crop proposal, and the command says so. The only look so far is neutral, which changes nothing; see What krites does not do.

Need to erase a distraction, a stray guest or an exit sign? See Remove an object.

Resetting a frame takes it out of the export

If you made a wrong call on a frame, reset frame undoes everything on it:

krites reset frame IMG_2043.CR2 --shoot ~/Pictures/smith-wedding

That includes its verdict. The frame goes back to how it was straight after ingest, unjudged, so the next export leaves it out. Run krites cull again, or give it a verdict with krites verdict, before you export.

5. Export the keepers

krites export --shoot ~/Pictures/smith-wedding
Exported 187 keep frame(s) to /Users/you/Pictures/smith-wedding/export

Export is the only step that writes pixels. It renders the keepers with every edit baked in, into the shoot's export/ folder, applying the edits in a fixed order: object removals, then straighten, then crop, then the look. Run it as many times as you like; the same records produce the same output.

A frame with no edits, exported without resizing, is copied verbatim, original bytes and metadata intact. A RAW frame always renders, as a JPEG from the preview embedded in the RAW, so IMG_2043.CR2 exports as IMG_2043.CR2.jpg.

6. Hand the cull to Lightroom

Writing XMP sidecars is a separate command, because export renders pixels and does not write sidecars:

krites xmp write --shoot ~/Pictures/smith-wedding

That puts an .xmp beside each original, carrying its verdict as a star rating and colour label, plus the crop and straighten angle for frames you corrected. Import the originals into Lightroom and the cull comes with them.

The look doesn't travel, and nor do object removals, because Camera Raw's XMP can't express either. If a keeper needs one of those in Lightroom, import its rendered file from export/ instead of the original.

What you did

You took a shoot from import to an exported set of keepers without altering an original. Every verdict and edit was a record you could undo, and only export rendered pixels. From here: