v0.7.3Standalone binary — no Node.js required

It learns how you develop, then develops the next shoot for you.

shoots trains a develop profile on the catalog you have already edited, and predicts a per-image starting point for photographs it has never seen — written as XMP sidecars your editor opens. Around it sits the rest of the shoot: offload, rename, metadata, focus-aware culling, star ratings.

All of it on your own machine. The model is trained on your photographs, by your computer, and neither the images nor the profile are ever uploaded anywhere.

curl -fsSL https://www.shoots-ai.com/install.sh | bash
  • Your photographs never leave your machine — no upload, no cloud
  • Free, with no subscription to run any of it
  • Nothing is ever deleted or overwritten
shoots — interactive shell
A cull run executed from the shoots interactive shell, with per-frame sharpness scores streaming into the scrollback

Real terminal capture — every screenshot on this page is generated from actual output.

Develop predictor

Four commands, and the shoot arrives half-edited

Train once on a catalog you have already developed. From then on, every new shoot gets a predicted develop vector per image, written as an .xmp sidecar next to the RAW — and once you have edited them for real, refine feeds your corrections back in so the next shoot is closer still.

Once, from a catalog you have already developed

Learn your style

Exports a training dataset from your edited photos and fits a develop profile. Under the hood: export --edited-only + train.

shoots develop init ~/Catalogs/2025

writes ~/.shoots/develop/profile/export.json

Every step accepts --dry-run, and the training data never leaves ~/.shoots. Read the predictor guide →

Local by design

AI-assisted developing, without the upload

Tools that predict your edits generally work by sending your catalog to a cloud service and renting the result back to you. That is a reasonable way to build one — it is just not this one. shoots does the same job with the inference on your own hardware, which changes what you have to hand over to get it.

Nothing is uploaded

Not the RAWs, not the previews, not the profile you trained. There is no server to send them to — the tool has no network path for your images at all.

The training is yours

The profile is fitted on your machine from your own edits, and lands as a file you own. Nobody else's taste is baked into it, and it does not change under you.

Free, and no subscription

Every command on this page is free to run, with no account and no per-image credits. Use of the source is governed by the project licence.

 A hosted serviceshoots
Where your photographs goUploaded to someone else's servers before anything is predictedNowhere. They are read from the disk they already sit on
Where the model livesA shared model, hosted, versioned and changed without youA profile file in ~/.shoots, fitted on your catalog, yours to keep
What it costs to runA subscription, or credits priced per imageNothing — no subscription, no per-image cost
What happens offlineNothing worksEverything works

A starting point, not a finished image

The predictor gives you the global look you would have dialled in yourself. No local masks, no generative edits, no pretence that the frame is done — the work it saves is the first ten minutes of every photograph.

Nothing is ever deleted

Originals stay untouched and edits go to sidecars. Rejects are moved, never removed; a failed checksum deletes the corrupt copy, never the source.

No editor required

The engine runs with no host editor installed, and hands its predictions over as files. An editor plugin is a thin front over it, never a dependency of it.

Built to be scripted

Every command speaks --json and honours --dry-run, with meaningful exit codes, so it drops straight into scripts, cron and CI.

Editor support

Lightroom and RapidRAW today, one adapter at a time after that

Develop settings are not portable between editors, and no amount of file-format work makes them so: XMP is only a container, crs: is Adobe's private vocabulary inside it, and an exposure of +0.35 means whatever the host's pipeline says it means. So each editor gets its own adapter — and the adapter is the only part that has to know. The profile, the trained model and the evaluation stay in one vocabulary behind it.

Supported today

Lightroom Classic

Camera Raw and Bridge along with it — the same crs vocabulary, the same sidecars

Supported today

RapidRAW

Shipped in 0.7.0 — a younger, faster host, with sidecars of its own

Planned

darktable

Its own module stack, in a namespace of its own

Planned

RawTherapee

Sidecar profiles rather than XMP

Planned

ON1 Photo RAW

Commercial, and asked for often enough to be on the list

Planned

Capture One

Does not use XMP for adjustments at all — the hardest of the set

The order is not fixed — what photographers actually ask for moves it. Read the direction →

Focus-aware culling

A shallow-DoF portrait is mostly bokeh

A single global sharpness number throws away your best wide-open frames. Alongside it, cull builds a focus map over a tile grid and takes the sharpest region: a frame below --threshold is still kept when that peak clears --focus-threshold. Move the sliders and watch the verdicts change.

50
62
87
69
44
75
249
624
536
81
62
137
218
150
56
37
50
75
56
31
global 78.14focus peak 623.55f/1.4

Mostly bokeh: the global score is low, but the eyes are tack sharp.

--threshold100

Global Laplacian variance below this counts as blurry

--focus-threshold250

Keep a soft frame when its sharpest region clears this

$ shoots cull ./raw --threshold 100 --focus-threshold 250
verdictscorefocusaperfile
sharp412.83891.20f/2.8./raw/IMG_0001.CR3
sharp*78.14623.55f/1.4./raw/IMG_0002.CR3
blurry31.0244.18f/2.8./raw/IMG_0003.CR3
3 analyzed @ threshold 100: 2 sharp (1 rescued), 1 blurry, 0 failed

Classic computer vision — Laplacian variance plus a tile-based focus map. No model, no inference. How the scoring works →

The surface

The 60-second tour

Every mutating command accepts --dry-run. Every command accepts --json. Nothing is ever deleted.

a full shoot, start to finish
# Install external tools and the AI model into ~/.shoots
shoots setup
# Offload a card into a dated catalog, checksum-verified
shoots import E:/DCIM/100CANON --dest D:/Shoots/2026/smith-wedding
# Stamp studio metadata onto everything
shoots exif D:/Shoots/2026/smith-wedding --set-artist "Jane Doe Photography" --set-copyright "© 2026 Jane Doe"
# Move the out-of-focus frames out of the way (keepers stay put)
shoots cull D:/Shoots/2026/smith-wedding --dest D:/Shoots/2026/smith-wedding/rejects
# Star-rate what is left, as XMP sidecars Lightroom will read
shoots rate D:/Shoots/2026/smith-wedding --profile wedding --write-xmp

Command map

  • importcard → catalog, renamed and SHA-256 verified
  • renamein-place batch rename with the same template engine
  • exifbatch read/write EXIF·IPTC·XMP via exiftool
  • cullfocus-aware blur detection; relocate or review rejects
  • rate0–5 star ratings + keywords via the ONNX CLIP model
  • embeddingsprofile-neutral CLIP export for preference learning
  • matchlearn your eye from duels → a personal rating profile

    └─ import · serve · train

  • developpersonal develop-setting predictor

    └─ init · edit · refine · export · train · predict · calibrate · diagnose

  • schedulerun develop refine daily and unattended
  • setupprovision exiftool + LibRaw + the inference model
  • doctorenvironment health check
  • updateself-update the standalone binary
  • shellthe interactive shell (default with no arguments)
Full command reference →
In the terminal

What it actually looks like

Terminal captures generated from real runs — the interactive UIs driven by keystrokes, the batch commands actually executed.

The interactive shell as it opens: wordmark, environment line, empty prompt.
The interactive shell as it opens: wordmark, environment line, empty prompt.
The project

Source-available, not open source.

shoots is licensed under the PolyForm Noncommercial 1.0.0. You are free to read, use, modify and share the source code — but only for noncommercial purposes. Any commercial use of the software, in whole or in part, is not permitted under this license.

Copyright © 2026 Stefano Pascazi. All commercial rights are reserved by the copyright holder.