fuji
A quieter way to cull a shoot.
A small Tauri app for the post-shoot ritual — plug in a camera, browse the card, star the keepers, send them to a library folder. Native RAF previews, CLIP-powered search, keyboard-first.
Fuji exists for the half-hour between the last frame and the first edit. The card is in your hand, the laptop is open, and the next step is supposed to be Lightroom — except Lightroom wants a catalog, a subscription, and an opinion about your folder structure. Fuji wants none of those things. It wants you to rate, compare, and move on.
It started as a Saturday tool for triaging Fujifilm RAF files without booting the whole Adobe stack. It grew a small CLIP model so you can search "kid laughing in golden light" instead of scrolling. It stays small on purpose — your library is a folder on disk, your ratings live next to your photos, and the app gets out of the way the moment you have your set.
The half-hour between the last frame and the first edit deserves its own tool — small, local, fast.
— Workbench notes
The small
stuff.
The decisions you don't see in screenshots — but feel in the using.
- 01
Native RAF previews
Fujifilm RAW files decoded in Rust without a round-trip through Lightroom or RawTherapee. Thumbnails render on rayon-pooled workers so the card looks like a card in seconds — the first row is browsable while the rest are still painting in.
- 02
Search by vibe, not by filename
A CLIP model embedded into the app via ONNX Runtime. Type "rain on the windshield" or "the dog mid-jump" and the keepers float up. Embeddings live in the library folder — computed once, queried locally, no upload, no cloud round-trip.
- 03
A keyboard for the cull
1–5 to rate, 0 to clear. Space jumps to the next unreviewed frame so you never lose your place. M marks a candidate, C opens side-by-side compare, G toggles grid and single. The mouse is welcome but the rhythm is keys.
- 04
Card in, prompt out, library stays put
A Rust PTP bridge watches for camera mounts. When a card shows up a non-blocking prompt floats over the library asking what to do — say no and the library keeps reading, say yes and the import progress drops in without ever taking the screen.
Built with
Boring tech, used carefully. The sharp edges go in the design, not the stack.
Cover · Photo on Unsplash