If you installed RaceTagger in May and it has been quietly doing its job since, you are on 1.1.6. That was the release build for nearly four months. As of today it is 1.1.12, which means the next time you update you step over six versions at once.
Most of what landed in between did not come from a roadmap. It came from photographers working actual race weekends and telling us where the workflow broke at two in the morning with a client waiting. So this is grouped by what it changes on delivery night, not by version number.
Delivery folders stopped fighting you
This is the biggest change of the six, and it happened in three passes.
The old custom-folder setup gave each participant three dropdown slots. Three. If a driver needed a sponsor folder, a team folder and a numbered archive folder, you were already full. Custom folders are now an unbounded list, edited inline as chips with an + Add folder button. Autocomplete suggests folder names already used elsewhere in the preset, case- and punctuation-insensitive, so Sponsor BMW and BMW-sponsor stop drifting into two separate destinations halfway through an event. Any chip can also pin an absolute path on disk, which is how you deliver straight to an external drive or a sponsor's own folder without a second copy step.
Alongside it there is a per-participant toggle: also export to the default folder. It is on by default. Checked, that driver's photos go to both the custom folders and the numbered pattern folder. Unchecked, they go only to the custom folders. It sits per participant rather than per preset because real delivery setups are not uniform — some drivers want a sponsor folder and a numbered archive, others only want the sponsor folder, and forcing one rule on the whole grid meant someone always got the wrong thing.
The Export & IPTC modal now follows those same folder assignments, so the folder structure you get from an analysis run and the one you get from a manual export are finally the same structure. Folders also became a shared pool at the preset level instead of a value re-typed on every participant.
Then 1.1.12 closed the loop on the bug that made all of the above untrustworthy. Renaming a folder, or changing its destination path, was not being saved. The edit lived only in the open window: it never reached the database, it never marked the preset as changed, and the next preset refresh silently put the old values back. Adding a folder did save the shared pool on its own, so the two halves drifted — the pool held the new path while each participant's own copy still held the old one. Folder organization reads the per-participant copies. Which is why a photographer covering a new round found that weekend's photos written into the previous event's folder.
That edit is now a single operation that rewrites the pool entry and every participant row referencing the folder in one pass, on a serialized queue so a refresh can never read half-written data. If the save fails, the preset is flagged as having unsaved changes and the close guard warns you, instead of failing quietly. Per-device path overrides survive.
If you have ever renamed a folder between two events and wondered why the photos went somewhere unexpected, that was this. It is fixed.
Captions that handle more than one driver
A sportscar has one number and three drivers. A podium has three subjects. A cycling team photo has as many as fit in the frame. The old caption templates rendered all of that as parallel lists — every number, then every team, then every name — and by the third item nothing lined up with anything.
Every IPTC template field now supports a [[ ]] block: Caption, Headline, Title, Event and Base Keywords. Whatever you wrap in the double brackets is repeated once per matched driver and joined with commas. A caption template written as:
DTM 2026 [[#{number}; {team}: {name}]]
renders that inner block once for a single-driver frame and twice, in order, for a two-driver frame — each number stapled to its own team and its own name. There is an Insert per-car block button in the Caption Template editor that wraps your current selection, and the live preview now shows a one-driver and a two-driver example side by side so you can see the block expand before you commit an event to it.
Presets without [[ ]] render exactly as before. Nothing you already built changed.
Corrections that survive the rest of the batch
When you fix a detection by hand, that correction now holds across the rest of the pipeline. It goes to a local outbox so it is not lost if the connection drops, and folder organization respects the corrected value rather than the original guess.
The keyword handling behind it was rebuilt too, and this one is worth knowing about if you shoot grids and group shots. Correcting one plate in a frame used to overwrite the keywords for that frame — taking the number, team and driver of every other car in the shot with it. A correction now rebuilds keywords from every current detection in the image, in a single write pass. Overwrite mode also genuinely overwrites now; the previous approach quietly accumulated stale keywords instead of replacing them. Single-digit numbers, #1 through #9, are no longer dropped. Location, weather and scene tags survive a correction if you had them embedded.
The review gallery got out of the way
Small things, but they compound over a few hundred frames.
You can add a detection from the keyboard now, without reaching for the mouse. Deleting a detection no longer opens a confirmation dialog — it just deletes, with an Undo in the toast, which is the right trade when you are doing it dozens of times in a row. Pressing Enter while correcting from the Drivers field saves and advances instead of doing nothing. And the wall of hint text was replaced by a shortcuts helper you can open when you need it.
Entry lists that read what is actually on the page
PDF entry lists are now read visually rather than scraped as a text layer, which is what it takes to get names and numbers off a PDF that was laid out for print. Two related fixes went in with it: drivers listed as Lastname, Firstname were being split into two separate people, and CSV presets gained a _Driver_Names column so names containing commas survive an export-and-reimport round trip intact.
Series sponsors you can tell it to ignore
Every car in a championship carries the same series sponsor. That shared decal is exactly the kind of thing that pulls a match toward the wrong team.
Each preset now carries its own list of series sponsors to ignore, and the Useful Data modal has a Championship / series sponsors section for managing it. The flow is deliberate: RaceTagger flags what it found, you confirm what is a series sponsor rather than a team one, and only then does it get written. In 1.1.12, a sponsor you marked as ignored stays ignored — it was not persisting correctly before.
Reliability, including one failure worth naming
On macOS, running the app straight from the mounted DMG could produce a batch with zero recognized numbers. The mount path contains a space, and the command that runs ExifTool was being assembled as a single shell string with the path unquoted. The shell split it at the space, ExifTool never ran, no capture timestamps were extracted, and matching had nothing to work from. Both call sites now pass a real argument array with no shell involved.
We are naming that one because if it hit you, it did not look like a bug — it looked like the software simply not working, on a whole event.
Also in this bracket: the ONNX detection model retries if its download fails instead of leaving you with a half-initialized install, crashes are now reported automatically so we find out without waiting for an email, and the Gemini model is pinned to its stable alias, which ended a run of intermittent 500 errors mid-batch.
Metadata that validating tools accept
Several IPTC fields were structurally wrong in ways that only show up when something strict reads them. CreatorContactInfo is now written in full, ProvinceState sits on the correct namespace, and ModelReleaseStatus uses the canonical PLUS URI instead of a plain string.
Separately, gallery deliveries now populate the tag data that the public gallery's filters actually read. Only number, name and team were being written before, so filtering a gallery by make, model, category, livery or sponsor did not work at all — those filters were reading fields that were empty. Galleries you already published need a separate backfill; the fix applies going forward.
Delivery, the participant list and signing in
Clients are a filterable table now rather than a list you scroll, and you can assign a gallery's client from inside the gallery. HD uploads now show real per-execution status — how many originals are uploaded out of the total, plus anything failed or still going — instead of a single unconditional retry button. A gallery can also be set to upload HD automatically.
The participant list lets you choose which columns to show and adds a Car column. The vehicle model also appears in the ambiguous-match picker — useful when two entries share a number and the car is the thing that tells them apart — and it now persists correctly when you save or duplicate a preset.
Sign-in gained a Keep me signed in option that stores your credentials in the operating system's own vault, DPAPI on Windows and Keychain on macOS, with the session encrypted at rest. The privacy and terms notice also stopped reappearing at every single login.
What is not finished
Single-driver tagging from a recognized face is in testing and enabled per account. It is not part of this release for everyone, and we would rather say that than let it read as shipped. When it is ready for general use, it will get its own write-up with real numbers behind it.
Updating
The app checks for updates on its own; restarting is usually enough. If you are coming from 1.1.6, your presets carry across automatically — the first time an old preset loads under the new build, its three legacy folder slots are migrated in place into the new folder list, so nothing you configured in 1.1.x is stranded.
The through-line across all six versions is unglamorous: the tagging was mostly working, and the time you were still losing sat in the steps around it — routing files to the right folder, writing a caption that made sense with three drivers in frame, and having a correction hold. That is where the work went.
RaceTagger 1.1.12 is live. Download it if you have not already — existing installs update automatically, and new accounts start with free credits to test it on your next event.
