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.

Before you begin

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.

01

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.

Good overlap beats perfect placement.The stitcher needs shared visual detail—lines, boards, logos, and ice markings—in both camera views.
  • 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.
02

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.

Terminal
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.

Read the remote button guide
03

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.

04

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:

Terminal
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.

05

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.

Terminal
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.

Explore configuration
06

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.

Terminal
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
You now have the full path.

Capture → panorama → tracked video → team and player context.

See public leagues