Every race photographer has had the same daydream: a tool that opens a folder of 5,000 shots, recognises every runner, and tags each photo with a name. Sell them, sort them, send them — done.
The technology exists. We chose not to build it. Here's why.
The legal floor is higher than most people realise
Under the EU's GDPR, a face template — the numeric vector a recognition model extracts from a photo — is biometric data. That puts it in the same category as fingerprints and DNA samples. Processing it for the purpose of uniquely identifying a person requires either explicit consent from every individual in every frame, or a narrow set of legal exceptions that public-event photography does not fall under.
The UK's Information Commissioner has been clear on this. So has the CNIL in France. So has the Garante in Italy. The pattern repeats across jurisdictions that copied the GDPR template — Brazil's LGPD, California's CCPA/CPRA, Illinois' BIPA.
For a small studio handling a regional half-marathon, the practical question isn't "will I be fined?" — it's "can I afford to find out?"
Bibs are different. A bib number is an identifier the runner consented to wear — explicitly, by signing up. It is designed to be readable, public, and disposable. Reading a bib is closer to reading a license plate than scanning a face.
Faces aren't built for this
Race bibs solve a problem race photography keeps running into: high-contrast, high-legibility identification under terrible conditions. Bibs are built to be read at distance, at angle, in low light, while moving. The font is bold, the contrast is high, and the design is regulated by the organiser.
Faces, by contrast, are the worst possible recognition target a race photographer hands an algorithm:
- Half the field is in sunglasses or a cap.
- Heads turn, tilt, and drop at unpredictable angles.
- Motion blur affects facial features more than it affects flat printed numerals.
- A runner's face at km 38 looks meaningfully different from the same runner at km 2.
A model can compensate for some of this. None of it compensates for the fact that the photographer didn't compose the frame to capture a face. They composed it to capture a runner.
Bibs travel. Face data doesn't.
This is the part most "just use AI" arguments skip.
A bib number is a string of digits. It writes cleanly into an image file's standard metadata fields — IPTC keywords, XMP subject tags — fields that every photo management tool built since the early 2000s already understands. Lightroom, Capture One, SmugMug, Pic-Time, PhotoShelter, your own gallery: tag a photo with 1247 and every one of them finds it.
A face recognition result is something else entirely. Every model — FaceNet, Apple Vision, AWS Rekognition, ArcFace, whatever ships next — produces a different numeric vector to represent the same face. They are not interoperable. A FaceNet embedding is gibberish to Apple Vision; an AWS template is gibberish to a self-hosted model. There is no portable, standardised way to attach "this is John" to a JPEG that any tool can later read back.
Even if there were, the moment a face vector is in the file, you've shipped biometric data on every photo. Every download, every email attachment, every backup carries it onward — into systems whose compliance posture you don't control.
In practice, face recognition locks a photographer into one vendor's database, indefinitely. Bib numbers are portable forever.
The cost-benefit math
Face recognition isn't free. It needs:
- An enrolment set — a reference photo of every runner you intend to identify. Most organisers don't have one, don't have permission to assemble one, and don't want to operate the storage.
- Heavier compute — face embedding models are larger and slower than the bib-region OCR a runner photo actually requires.
- Ongoing infrastructure — match databases, update flows, deletion handling, audit trails. All of it required by law in any jurisdiction worth selling into.
For all that cost, the photographer ends up with an output they can't port out of the system, can't embed in the photo, and can't let runners take with them. Bib reading needs nothing but the photo, runs in the photographer's own folder, and writes its result into a field every downstream tool already speaks.
What this means for our product
Three concrete consequences:
- You don't need anyone's consent to use TagMyRun. The data we read — bib numbers — was placed in the frame by the runner, by signing up. We never extract a face template, never train on faces, never store one.
- There is no opt-out database to manage. Photographers sometimes ask how a runner can request removal. The answer is: there is nothing about them to remove.
- The output is portable. Bibs travel cleanly across platforms — SmugMug, Pic-Time, PhotoShelter, your own gallery. Face data, even if you generated it legally, generally can't.
The trade-off we accepted
Bib reading can't tag a finisher whose bib fell off at km 30. Face recognition could, in theory. We think that's the right trade: an imperfect tool you can deploy worldwide, today, beats a more complete one that puts the photographer one complaint away from a regulatory letter.
If you disagree, we'd genuinely like to hear why — the contact form reaches us directly.