shoots — documentation

DocsOverview

shoots — documentation

Your own develop style, learned locally and predicted on the next shoot.

shoots fits a develop profile on the catalog you have already edited and predicts a per-image starting point for new work, as XMP sidecars your editor reads — with the training and the inference on your own machine, and nothing uploaded. Around that sits the rest of the shoot: offload, metadata, focus-aware culling, star ratings.

It is an orchestration layer, not an editor and not a DAM. It sits before or after Lightroom / Capture One / your culling tool of choice and automates the tedious parts around them.


Start here

Page What it covers
Direction Design goals, what is being worked on, and what shoots will not become
Getting started Install, setup, doctor, your first import
Core concepts Non-destructive rules, exit codes, JSON output, file discovery
Command reference Every command, every flag, with examples
Interactive shell The fullscreen shoots shell, / palette, @ mentions

Guides

Page What it covers
Filename templates The {date}_{camera}_{seq:4}.{ext} token language
Rating profiles Built-in profiles, how stars are decided, learned profiles
Preference learning embeddingsmatch duels → your own profile
Develop predictor The local "Lightroom AI": learn your edit style, predict XMP
Pipelines Declarative YAML pipelines: shoots pipeline <config.yaml>
Scripting & automation JSON, exit codes, cron, CI, watch folders
Recipes Complete end-to-end workflows for real shoots

Reference

Page What it covers
Configuration ~/.shoots layout, every environment variable
Migration notes What each release asks of you — printed by shoots release-notes
Troubleshooting Common failures and their fixes
Development Monorepo layout, build, release process

The 60-second tour

# 1. Install external tools (exiftool, LibRaw, the CLIP model) into ~/.shoots
shoots setup

# 2. Offload a card into a dated catalog, checksum-verified
shoots import E:/DCIM/100CANON --dest D:/Shoots/2026/smith-wedding

# 3. Stamp studio metadata onto everything
shoots exif D:/Shoots/2026/smith-wedding \
  --set-artist "Jane Doe Photography" \
  --set-copyright "© 2026 Jane Doe" \
  --set-keywords wedding,smith

# 4. 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

# 5. Star-rate what is left, as XMP sidecars Lightroom will read
shoots rate D:/Shoots/2026/smith-wedding --profile wedding --write-xmp

Every mutating command accepts --dry-run and --json — bar the three low-level develop steps, see Core concepts. Nothing is ever deleted.


Command map

shoots
├── import       card → catalog, renamed and SHA-256 verified
├── rename       in-place batch rename with the same template engine
├── exif         batch read/write EXIF·IPTC·XMP via exiftool
├── cull         focus-aware blur detection; relocate or review rejects
├── rate         0–5 star ratings + keywords via the ONNX CLIP model
├── triage       the marks cull and rate recorded, before they reach a sidecar
│   ├── list        what is pending
│   ├── apply       write the pending marks into sidecars
│   └── clean       drop marks, or just the orphaned ones
├── embeddings   profile-neutral CLIP export for preference learning
├── match        learn your eye from duels → a personal rating profile
│   ├── import      an embeddings bundle → the duel database
│   ├── serve       the duel UI at 127.0.0.1:4576
│   └── train       Bradley-Terry + ridge → ~/.shoots/profiles/<name>.json
├── develop      personal develop-setting predictor
│   ├── init        edited catalog → a fitted profile (export + train)
│   ├── edit        a new shoot → XMP sidecars (export + predict)
│   ├── refine      after you developed it: feedback + learn + calibrate
│   ├── status      what this machine holds
│   ├── clean       drop the per-shoot working files
│   └── …           export · train · predict · feedback · learn · calibrate ·
│                   diagnose · refresh-targets — the steps the three above wrap
├── pipeline     run a YAML pipeline: shoots commands in order, sharing variables
├── schedule     run `develop refine` unattended via cron / Task Scheduler
├── setup        provision exiftool + LibRaw + the inference model
├── doctor       environment health check
├── update       self-update the standalone binary
├── release-notes  the migration steps this release needs, checked against ~/.shoots
└── shell        the interactive shell (default with no arguments)

License

Source-available, not open source — PolyForm Noncommercial 1.0.0. Free to read, use, modify and share for noncommercial purposes only. For a commercial license, contact stefanopascazi@gmail.com.

Edit this page on GitHub