Wevers Photo · Field Tools
Batch-rewrite and standardize a whole take’s captions into clean wire-service style — IPTC, XMP & EXIF written back into every file.
CaptionFlow is a macOS app that takes a folder of JPEGs and standardizes every caption in one pass. For each photo it reads the existing caption, rewrites loose game prose into clean wire-service style, assembles a consistent CITY, STATE — MONTH D: prefix with the venue and a normalized date tail, and writes a complete IPTC / XMP / EXIF field set back into the file — credit and copyright included.
It’s the editing-desk step between shooting and sending: instead of hand-fixing captions one by one, you point CaptionFlow at the take and it conforms them all to the same house style.
Sports and event photographers and editors who deliver to a wire or client with a required caption format, and who don’t want to retype the same location/date/credit boilerplate on every frame. If you already caption in the field, CaptionFlow is the clean-up and conform pass before delivery.
Open the .dmg and drag CaptionFlow into Applications. It ships signed with a Developer ID and notarized by Apple, so it opens cleanly. If an older macOS hesitates, right-click → Open → Open once.
On first launch CaptionFlow asks for your 25-character key. It activates online once, then verifies a signed license offline at every launch after that — so it keeps working without a connection.
Under the hood, each photo runs the same pipeline: read the existing caption → rewrite player references → read location/date/author → assemble the standardized caption → resolve the headline and event ID → write the full field set with a two-pass lossless write, then read it back to verify.
It converts a loose, AP-style game caption into a clean, consistent wire-service caption — normalizing player name/number phrasing, tidying wording, and wrapping it in a standardized location/date/venue frame with your credit and copyright. For example:
Before
Denver Broncos quarterback Bo Nix (10) throws a pass during an
NFL football game against the Cincinnati Bengals on December 1,
2024, in Denver, Colorado.
After
DENVER, COLORADO - DECEMBER 1: Bo Nix #10 of the Denver Broncos
throws a pass during the game against the Cincinnati Bengals at
Empower Field at Mile High on December 1, 2024 in Denver, Colorado.
…plus a standardized credit / copyright block. It also handles college-prospect captions, converting them to the same wire-service style automatically.
Load an Event-IDs CSV and CaptionFlow resolves the matchup, venue, event ID (MEID), city/state and date for each photo by ranking the CSV rows against that photo’s caption, date and location — so the right game details land on the right frames without you sorting them by hand. The CSV is optional; without it, CaptionFlow works from each photo’s own metadata.
IPTC:Writer-Editor and XMP-photoshop:CaptionWriter on every image.- NFL <year>) to set the headline, or let CaptionFlow auto-detect it from the caption.The app is organized into Home / Settings / Metadata / QA tabs, with the live log on its own pane.
Every run appends to a session-accumulating Excel report with a built-in validation linter that flags the things worth a second look — multi-word positions, jersey-number errors, missing fields, and similar. So you can batch fast and still catch the handful of captions that need a human.
CaptionFlow writes in place in the folder you select, using a two-pass lossless write (the JPEG pixels aren’t recompressed) and then reads the caption back to verify it landed. As with any batch metadata tool, keep a backup of irreplaceable originals before a large run.
Make sure the right Event-IDs CSV is loaded, or set a Manual MEID for the batch. CaptionFlow ranks CSV rows by caption, date and location — if a photo’s existing caption is sparse, the manual override is the surest path.
CaptionFlow rewrites from the photo’s existing caption — if a frame had no caption to start from, there’s nothing to restyle. Caption it in the field (or with the prefix details) and re-run.
Email andrew.wevers@gmail.com — include your macOS version and what you were processing.