About
These projects came out of wanting to see what was possible when you connect live data streams to real-time 3D environments. Using the official MLB API with custom Python scripts, I built two separate broadcast graphics tools that pull live game data and drive automated visuals inside Unreal Engine.
The first project is a fully automated 3D scoreboard that displays live game data. A Python script cycles through active games, grabs the current game state from the MLB API, and pushes that data into Unreal Engine to drive the graphics.
The scoreboard shows the current inning, base runner positions, and the active pitcher and batter. Branding updates automatically to reflect whichever two teams are playing, pulling in logos and team colors. One feature I was particularly happy with is the automatic color conflict check: if the away team’s primary color is too similar to the home team’s, the system swaps it out for an alternate scheme to keep the graphics readable. Everything runs inside a full 3D environment with continuous background movement to keep things visually active.
The second project visualizes individual pitch trajectories in real time. I built this before the MLB had widely rolled out the Automated Ball-Strike (ABS) system at the major league level, and the goal was to recreate a similar analytical view entirely within Unreal Engine.
Every time a pitch is thrown, a Python script fetches the telemetry data and sends it to Unreal Engine, which calculates and animates the 3D flight path of the ball in real time. The graphic also shows exactly where the ball crossed the plate relative to the strike zone, alongside the current pitcher and batter stats.
The piece I found most interesting was the Cesium integration. Using the Cesium plugin for Unreal Engine, the system identifies the specific stadium where the live game is being played and moves the entire 3D setup to those real-world geographic coordinates, placing the actual stadium in the background of the visualization.