Practical guides
From cameras to clips.
One step at a time.
You do not need the entire stack on day one. Follow the full path, or jump to the project that matches your setup.
The current software is tuned and tested for hockey. Panoramic capture and the processing foundation can be adapted to soccer or football, but sport-specific tracking and statistics require configuration or development.
10–20 minutes at the rink
Plan a stable, overlapping view
Place two cameras high enough to clear the glass and spectators. Aim one toward each half of the playing surface, with a generous overlap around center ice. Lock both cameras to the same resolution, frame rate, and color settings.
- Use sturdy mounts and external power for long tournament days.
- Start both recordings before warmup so calibration has clear frames.
- Keep camera positions fixed for the entire game.
Optional hardware
Build the remote and printable hardware
GoProHockeyMON pairs firmware for an ESP32-S3 1.8-inch AMOLED remote with a catalog of printable cases, cooling parts, mounts, and rink-side transport hardware.
git clone https://github.com/cjolivier01/GoProHockeyMON.git
cd GoProHockeyMON
make build
make upload-monitor
Put the GoPro in Bluetooth pairing mode. On the remote, choose Pair New. Once paired, the remote remembers the camera, can preview a snapshot, and can start recording from the side button.
3D-printable capture kit
Choose the hardware that fits your setup.
The organized catalog includes the multi-camera HockeyMON enclosure, a rugged MISSION 1 field case, fan cases and silencers, GoPro adapters, covers, and fit-check models.
make -C models3d
make -C models3d hockeymon-camera-case
After the game
Organize the camera files
Copy each camera’s MP4 chapters into a game folder. Both HockeyMON and HockeyMONStream understand this layout, including common GoPro and Insta360 chapter naming patterns.
▾ Videos/
▾ sharks-v-falcons/
▾ cam1/ left-side camera
▰ GX010001.mp4
▾ cam2/ right-side camera
▰ GX010002.mp4
◆ config.yaml optional game overrides
By default, the tools look under $HOME/Videos/<game-id>. Set HM_GAME_DIR if your game library lives elsewhere.
Fast production path
Stitch and process with HockeyMONStream
HockeyMONStream is the high-performance C++ application. It requires NVIDIA DeepStream, CUDA, TensorRT, and the dependencies documented with the release. Installed commands and package paths retain the hstream name for compatibility.
From a source checkout, run the game end to end:
git clone https://github.com/cjolivier01/HockeyMONStream.git
cd HockeyMONStream
./perf
./run.sh --game-id=sharks-v-falcons -t=5
The final archive is published to the game folder as sharks-v-falcons-tracking_output-with-audio.mp4.
Flexible Python path
Track a panorama with HockeyMON
Use HockeyMON when you want the Python pipeline, model experimentation, or a simpler command against video that has already been stitched.
hmtrack \
--input-video stitched_panorama.mp4 \
--output tracking.mp4
For a configured game directory, hmtrack --game-id sharks-v-falcons runs the full stitch-and-track workflow. Configuration files can be layered with repeated --config arguments.
Team and season view
Bring schedules, stats, and clips together
HockeyMONWeb combines public league data with team-managed imports. Run it locally with SQLite for evaluation, or follow its deployment tools for a persistent MariaDB-backed installation.
git clone https://github.com/cjolivier01/HockeyMONWeb.git
cd HockeyMONWeb
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-dev.txt
cd tools/webapp && python3 manage.py runserver
Capture → panorama → tracked video → team and player context.