Nike After Dark Tour: Race image treatment at scale.
01 - The Challenge
5,000 runners competed at Nike After Dark Tour London at ExCel London — a nighttime 10K with elite athletes, seeded waves, and a production scale that matched the ambition. Every finisher deserved a keepsake. The brief was to make that possible at speed: a branded poster for each racer, processed and delivered before the night was over. Korea.net
The problem was the photos. Taken under race conditions — motion, crowd, variable light — they arrived unpredictable in quality, angle, and legibility. Turning them into consistent, brand-accurate posters at volume required a pipeline that could make reliable decisions about unreliable images.
Actual race photos populated with test data (e.g. my name)
02 - The System
The photography team downloaded race images from the event database — each tagged with bib number and photograph number — and completed a first-pass curation to associate images with the correct racer. From that filtered set, the pipeline took over.
A computer vision algorithm read each image: OCR identified the bib number, requiring at least two digits in sequence to be legible to make a match. Pose detection located the runner's body in the frame. Face detection found and centred the subject. The image was then cropped to poster proportions — face centred, equal margins, compositionally consistent regardless of the original framing.
The cropped image was passed to the Photoshop API, which ran an action script to apply the branded treatment: grayscale conversion, branded text overlay, final poster composition. The action script was written by visual designer Myoungae Kim, who was fluent in Photoshop actions; I integrated it with the API, set up testing storage in GCP, and adapted the script to meet API requirements. Testing infrastructure and cloud functions for the broader backend were built out by the tech team, with my tech director overseeing the technical architecture.
The poster design was defined by creative director Johan Jeansson and Myoungae. I prototyped the computer vision pipeline, showed them what the algorithm could reliably produce, and we adjusted the poster dimensions and compositional rules to match what the CV output could consistently deliver.
One of the many logic flows and gates to determine how the images are to be selected and processed
03 - The Decisions
The hardest problem was bib identification. A bib number in a race photo is rarely fully visible — runners are in motion, cameras are angled, the bib is worn loosely, partially obscured by arms or other runners. Requiring all four digits to be legible would have rejected too many valid images. The decision was to require two digits in sequence — enough to make a confident match against the target bib number, without demanding a legibility standard the photography conditions couldn't reliably meet.
The cropping logic required a similar calibration. Pose detection and face detection together determined where the person was in the frame, but the algorithm had to handle cases where the detected pose was partial, the face was at an angle, or the subject was caught mid-stride in an unflattering position. The quality filter — blur, subject size in frame, pose completeness — was tuned iteratively against actual race image samples, not the pre-event samples provided by the photography team, which turned out to be from significantly better-lit conditions.
The finish line at ExCel London was indoors, dark, illuminated by red lighting, with photographers positioned close to the running lane. The resulting images were largely unusable — heavy blur, bad angles, subjects caught in partial frames. Most viable images came from open areas of the course where lighting conditions were workable. The algorithm had to be robust enough to process what was actually there, not what the sample set had suggested would be there.
04 - The Complexity
The tool was built for internal R/GA use — the client never saw the pipeline, only the posters. That meant the design collaboration happened entirely within the team: Johan and Myoungae defined the visual language, I showed them what the computer vision could reliably deliver, and the poster spec was adjusted to work within those constraints. The proportions, margins, and compositional rules weren't fixed upfront — they were negotiated between what the design required and what the algorithm could consistently produce.
The gap between the sample images and the actual race conditions was the human failure in the process. The photography team provided reference images from past events in good faith — they were representative of their archive, not of ExCel London at night under red production lighting. No amount of algorithmic tuning could fully compensate for images that were unusable at source. The pipeline performed within the constraints of what the photography delivered.
05 - The Evidence
Original race image from earlier race
Detection, Crop and Treatment
06 - My Contribution
Designed and built the computer vision pipeline: bib number OCR, pose detection, face detection, and cropping logic. Researched and prototyped multiple approaches for consistent image treatment before settling on the final method. Iterated the quality filtering — blur, subject size, pose completeness — against actual race image samples. Integrated Myoungae's Photoshop action script with the Photoshop API, set up GCP testing storage, and adapted the script to API requirements. Collaborated with Johan Jeansson and Myoungae Kim to align poster dimensions and compositional rules with what the computer vision pipeline could reliably deliver.
The broader backend — Airtable, Cloud Run functions, production infrastructure — was built by the tech team under the tech director's oversight, extending the prototype into a deployable system.