Reebok Athlete Challenge: CrossFit + oF

This year’s CrossFit Regionals just finished up and I had the pleasure to build an interactive workout challenge featuring 6 top Reebok-sponsored athletes. We set up Reebok with 4 cases holding 2 complete “stations” each which travelled around the world to 8 cities in the last 3 weekends in May.

The participant chooses an athlete and one of five ‘exercises’ to perform for 60 seconds, head-to-head against a pre-recorded video of the athlete doing the same thing. We used a GoPro Hero4 to capture the last 10 seconds of their challenge, then created a branded 15 second takeaway video of them and the elite athlete side by side with their rep count. The app relied on a brand ambassador for control, as we were capturing email addresses and needed to manually ‘judge’ each rep, as they do in the real CrossFit Games.

The system was a 2.8GHz Mac mini, GoPro Hero4 with BlackMagic UltraStudio Mini Recorder.

I could not have pulled this off in the month we had to develop without the amazing oF community, and more specifically these folks/addons:
@kylemcdonald’s ofxBlackmagic
@TimS’s ofxVideoRecorder
Paul Vollmer’s ofxCSV


the app in action:


really well done! would love to see some screenshots of what the raw gopro over ofxBlackmagic feed looks like. did you use the original lens or swap in a new one?

Cool, glad to see you using ofxVideoRecorder! I’m curious what settings you ended up using for the recording, as in resolution, fps, bitrate, format, etc. And how were the videos ended up getting to the participants, was it automated or did someone have to manually upload and send them out?

@kylemcdonald - it was a stock Hero4, 1080p @24 fps, “wide” setting. I’ll post some screenshots tomorrow!

@TimS -
video: mpeg4 @ 8000k, 24 fps, 1920x1080
audio: Hero4/BlackMagic box as input, mp3 @ 192k, though it was only used to give the recorder a signal to sync with the video, as the video was a little ‘sped up’ without it. Audio wasn’t used in the composited version that was sent to the participant.

For handling the composited videos, we created a secondary app which handled both creating the video as well as uploading it to a backend which sent out emails to the participant.

Once the main “Challenge” app detected that the FFmpeg thread had stopped, it wrote a CSV file to a watched folder with the user’s info and paths to the captured video file. We used the MacOS AVAssetWriter classes to composite the user’s video with the elite athlete’s video, bookended with some Reebok title cards. When compositing was finished, the final video (a 15 second, 720x640 mp4) was uploaded and delivered to the user - all happening behind the scenes and when internet was available.

AVAssetWriter is a fickle beast, and we decided to move that part to the ‘Uploader’ app to handle every possible exception and keep it as far away from the user’s experience as possible.

@kylemcdonald – as promised, a few exciting shots from my vantage point at work:

FWIW, i think the live output looks great and I’m very glad to have finally broken out of the webcam-for-interactive rut. Thanks again for your work!

Hi nick, Thanks for this great post. I want to develop an installation which has a 100+ inches TV and I’ll need live stream feed from a camera. I wanted to ask if you have any suggestions of add-ons or methods for a windows machine and a GoPro camera.
Thanks very much