Skip to content

Cull a shoot, end to end

A learning-oriented walkthrough: take a full day's wedding shoot from a folder of RAWs to an album-ready, exported keeper set — and understand what krites is doing at each step. Allow 20–30 minutes plus culling time.

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

If you haven't already, initialise your config once — it seeds the wedding-default cull profile the rest of this walkthrough leans on:

krites init

It's idempotent, so it's safe to run again if you're not sure.

1. Register the shoot

krites works on a shoot — your originals plus a .krites/ sidecar it creates alongside them:

krites ingest ~/Pictures/smith-wedding

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

2. Judge every frame

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

Cull analyses each frame and assigns a keep / maybe / reject verdict with reasons: sharpness and motion blur, exposure, and — with the face/eye provider enabled — closed eyes and blinks. It also groups near-duplicate bursts so you're not choosing between ten near-identical frames blind.

The verdicts are records in the sidecar, not changes to your photos. The judgement comes from a cull profile (wedding-default out of the box) — a set of thresholds you can tune to your taste.

Inspect the burst clusters 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 is not scoped to one shoot. It opens onto a library of shoots and you choose one. If the shoot you just ingested is not listed, add it with Browse… on the Shoots page.

This is a localhost-only web UI over the same shoot files. 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 sits on the warm cull canvas with its cues read at a glance: a colour-coded verdict stripe down its left edge (keep / maybe / reject), a rating chip when you've starred it, and a burst marker on frames that belong to a near-duplicate cluster. The frame you're inspecting carries a gold selection ring; a multi-select batch is tinted so it reads apart from the single current frame.

The grid defaults to justified rows — full, uncropped frames at a consistent scan height with your shot order preserved, the way Lightroom lays out a filmstrip. Use the Rows / Grid toggle at the right of the filter bar to switch to a dense, uniform (cropped-to-fill) lattice; your choice is remembered.

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

krites verdict IMG_2043.CR2 keep --shoot ~/Pictures/smith-wedding

4. Correct the keepers

On the keepers, krites proposes non-destructive edits — each a reversible record:

krites straighten IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # level horizon
krites crop       IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # composition crop
krites develop    IMG_2043.CR2 --shoot ~/Pictures/smith-wedding   # apply a look

Need to erase a distraction — a stray guest, an exit sign? See Remove an object. Made a wrong call on a frame? Undo everything on it:

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

5. Export

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

Export is the only step that writes pixels. It renders the keepers with every edit baked in — in order removals → straighten → crop → look — into the shoot's export/ directory. Run it as many times as you like; given the same records it produces the same output.

A frame with no edits and no resize is copied verbatim, original bytes and metadata intact. A RAW frame always renders, as a JPEG from its embedded preview: IMG_2043.CR2 exports as IMG_2043.CR2.jpg.

6. Hand the cull to Lightroom

Writing XMP sidecars is a separate commandexport renders pixels, it 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 developed. Point Lightroom at your originals and the cull is there.

The look does not travel, and neither do object removals — Camera-Raw XMP cannot express either. If a keeper needs one of those in Lightroom, import the rendered file from export/ instead of the original.

What you did

You took a shoot from import to an album-ready export without ever altering an original: every verdict and edit was a reversible record, and only the final export rendered pixels. From here: