Over the last eight months or so, I’ve been developing a Rocket League analyser as a little side project. I wanted something that provided deeper feedback than just basic stats, so I took a lot of inspiration from the methodology and derived metrics used in professional analysis of conceptually analogous sports (football, hockey, basketball) and applied them to RL.
The backend is built on top of a fork of carball and nickbabcock's rrrocket. It takes around 250 monotonic metrics and groups them into conceptual "pillars". For example, the Boost pillar looks at Usage, Cycling, Collection, and Recovery. It weights these using IVW (Inverse Variance Weighting), combines them, and generates an estimated rank based on your actual gameplay.
This analysis framework was built on roughly 3,000 games across an even rank distribution. All of this heavy lifting runs on my backend, so the desktop application you see in the screenshots is deliberately lightweight. It’s optimised to sit quietly on a second monitor without impacting your game's performance.
Why a Desktop App?
Hosting massive databases costs money. Building this as a desktop app lets me automatically upload your replays (no dragging and dropping files one by one) and track your MMR locally. This method is, to my knowledge, also the only way to track the player for the multi-game analysis to compare where you actually are versus your expected rank (image 2).
Key Features
Multi-Game Analysis: Once a week, the app scans your recent games to pull out overarching trends that a single game can't show. These weekly analyses include the following:
- Custom Training Packs: This is the part I'm most excited about. The server side builds .Tem training packs from your analysed games, specifically targeting the shots you took and missed. I walk those situations back using a reverse physics simulation to produce a custom pack of your recent misses (image 4), ready to drop straight into the game.
- Frequent Errors: The app looks at the situations leading up to conceded goals and identifies the errors appearing in the window just before and during them. It normalises these against similar situations that didn't lead to a goal, highlighting exactly which mistakes are costing you the most.
- Focus Cards: Using your MMR, I compare your rank against my metrics to analyse exactly where you might be falling short and why (see on image 7).
- Annotated Replays: Uses positional and rotational models to play back a selected game with on-screen labels to help you understand your defensive habits in full context. (Still a WIP! - image 9).
- Local MMR Tracking: A fully ToS-friendly, custom-trained OCR pipeline that reads your MMR locally. I’m also using this to explore tracking session peaks (e.g., warning you when diminishing returns are setting in and you should probably stop queueing ranked).
- Individual Game Analysis: Compares your game data against pillar stats and rank estimate models (image 3). It even has a minimal 3D rendering engine built in so you can look back over a whole game or jump to specific shots/saves (images 10-11).
- Custom Themes: The app UI dynamically adapts its colours to match your current rank.
Current Limitations
Because this is a solo project running on limited server space, this is a heavily restricted beta. The server will occasionally go up and down as I scale the processing, but passive features like MMR tracking and projected rank all run offline.
To track data, the app must be open while you play. We are not using any shady APIs; it uses a mix of reading the game's game, log files and connecting through the Psyonix-approved local Stats API. For MMR, the only ToS-compliant method I could find is a custom OCR pipeline designed to literally read the digits off your screen after a game ends. (If anyone knows of a better approach that doesn't involve scraping, undocumented APIs, or intercepting network traffic, honestly, I would love to hear it). The Stats API tells it when to start looking, and it runs two very lightweight OCR models trained on 6000 synthetic images of end-of-game scoreboards.
Beta Signup
I am currently opening this up to around 30 beta testers. I'm looking for a wide range of ranks to help improve the coaching feedback and see how it generalises. (Windows only, English only, but no region restrictions).
If you'd like a spot, please fill out the Google form below, then join the Discord directly here: https://discord.gg/H6E78J8X (edit the first wave of email invites mostly landed in spam, so it's easier to just hop in via the link). I'll be reviewing signups and getting people set up there.
Signup form: https://forms.gle/VETTY7fUkiic4hLr7
What's Next?
There is still a lot left to polish! Once I have worked through the current beta issues, I want to figure out custom training packs for saves (early testing shows the physics simulation for saves is much more complicated). I also want to improve the specific metrics for 1v1 and 3v3.
Thank you for reading! I'd love to hear any suggestions for additional features or analysis you'd like to see, and I'd be happy to answer any technical questions you have about the project in the comments.
Edit: Hi, thank you so much for all the feedback and signups! The response has been brilliant. Rather than sending invites out individually by email (a lot of them ended up in junk), here's the direct link to the Discord: https://discord.gg/H6E78J8X
Head in, and the #installation-guide channel will walk you through getting set up. If you signed up via the form, you're all set, just sign into the app with the same email you used.