Apature
A keyboard-first contact sheet for photojournalists.

Why I made this
Honestly, I made this to see what I could do. I love Photo Mechanic and I use it on deadline, but I was curious what I could build myself, so I rebuilt the loop I actually use every week: card in, cull, caption, export, send. Along the way I added a few things it doesn't have, like hashed verification of every copy, day chips before you ingest, and delivery with a sent ledger, and I kept the things it gets right, like the keys and the variables.
Where I want this to go is onboarding. Getting into photojournalism shouldn't mean a cold start with software that assumes you already know the workflow. I plan for Apature to teach the loop as you use it, the same loop you would run in Photo Mechanic, so that someone picking it up for the first time can learn the job and the tool together. I don't like gatekeeping. I'd like the people already in the industry to see this as an effort to bring more people in, and to show that it isn't that hard. Sometimes it's the software and the experience, not the person.
Who knows where it goes from here. This is the first version, I'm still learning Rust, and it shows in places. Don't go crazy about it; tell me what breaks and what you'd want next.
What was hard
- Never touching an original. Ratings, captions, rotation and crops all live in an XMP sidecar next to the file, written the way Photo Mechanic and Lightroom read it, so a card ingested by Apature still opens anywhere.
- Trusting a copy. Every file is hashed with SHA-256 at every destination before the card is marked done, and a ledger remembers each card so it is never copied twice.
- Metadata that survives the desk. A JPEG leaves with EXIF, XMP and IPTC-IIM all in agreement, including the fields old newsroom systems still read.
- Feeling like a Mac app from an immediate-mode UI. Native menus, a menu bar extra, the system trash sheet, separate windows for Ingest, Settings and Preview, Reduce Motion and text scaling, all on top of egui.
- Delivery that does not lose a photo. FTP, FTPS, SFTP and plain folders share one path: upload to a temporary name, rename on success, retry with a reconnect, and record every send per photo.
A quick look

Ingest: day chips, a live example of every name the template produces, and verified copies.

Captions: the assignment pad, code replacements and the variables Photo Mechanic users already know.

Crop and rotate are stored in the sidecar. The original is never modified.

Export presets per outlet, then deliver to a folder, FTP, FTPS or SFTP.
What it does
- Ingest from a card or any folder: day chips before you copy, a live example of every name, SHA-256 verification at every destination, a ledger so a card is never copied twice, a backup destination, eject when verified, and Live Ingest for a watched folder.
- Cull on the sheet: ratings, colour classes, tags, filters, sort, tabs, burst stacks, compare up to four frames, a loupe, 1:1 with one shared magnification, a view-only exposure boost, rotate and crop stored in the sidecar.
- Caption with an assignment pad, code replacements, Photo Mechanic's variables, keywords, GPS, recent values and save-to-selection.
- Export JPEG or JPEG XL with presets per outlet, EXIF, XMP and IPTC-IIM kept, then deliver to a folder, FTP, FTPS or SFTP with passwords in the Keychain, retry, and a per-photo sent ledger.
- Two appearances, six accent colours, Reduce Motion, text scaling, higher contrast, focus rings, and a menu bar extra with live status.
- Receive over Wi-Fi: an FTP server inside the app so a phone or a camera can send frames straight into Live Ingest. No WT-7 needed.
- A welcome that teaches the loop one step at a time, tips the first time each screen opens, and an import from Photo Mechanic for your templates and code replacements.
- Runs on macOS, Linux and Windows from the same Rust core.
- Updates checked against GitHub Releases, once a day or on demand.
- No accounts, no analytics, and originals that are never modified.
Releases
Credits
Anything that came from someone else, or that inspired me, is credited here and in the app.
- Photo Mechanic by Camera Bits: the loop, the keys and the variables this is built around.
- egui by Emil Ernerfeldt and contributors (MIT or Apache-2.0): the user interface.
- My own photojournalism assignments, shot on a Nikon Z 6 II: the test material for every release.