Python API for the AnalyzeRL Boxcars Rocket League replay parser.
Project description
AnalyzeRL Boxcars
Labelling and analyzing Rocket League replay data
AnalyzeRL Boxcars is a Rust package mounting the detection of events and player actions onto frame-wise Rocket League replay data parsed by the powerful boxcars library.
Requirements
- Rocket League
.replayfiles - The compiled Windows or Linux x86-64 binary from the repository's Releases page when using the CLI directly
- Python 3.10 or newer when using the Python API
- Rust 1.85 or newer only when building the binary from source
Parsing Pipeline
- Collect replay objects from boxcars
- Arrange frame-by-frame match dataframe
- Mount EventModel and obtain interpretable frame-level events in a match
Installation
Download analyzerl_boxcars.exe from the assets attached to the latest repository release. Building locally is optional:
cargo build --release
Install the Python package when using the Python API:
python -m pip install analyzerl-boxcars
The Windows and Linux x86-64 wheels include the matching Rust binary, so Python API users do not need to download it separately.
The examples below use the downloaded release binary:
$analyzerl = "C:\path\to\analyzerl_boxcars.exe"
$replay = "C:\path\to\match.replay"
Python examples use the binary bundled with AnalyzeRLBoxcars:
from pathlib import Path
from analyzerl_boxcars import AnalyzeRLBoxcars
analyzer = AnalyzeRLBoxcars(
n_workers=1,
)
replay = Path(r"C:\path\to\match.replay")
Usage
Parse Without Writing Files
CLI
The CLI parses silently when --export is omitted:
& $analyzerl $replay
Python
The Python API returns the frame-wise Polars dataframe directly:
frames = analyzer.parse_replay(replay, event_tagging=False)
Export Frame Data to CSV
CLI
& $analyzerl $replay --export "C:\path\to\match.csv"
Python
analyzer.parse_replay(
replay,
event_tagging=False,
export="csv",
export_dir=Path(r"C:\path\to\exports"),
)
Export Frame Data to Parquet
CLI
& $analyzerl $replay --export "C:\path\to\match.parquet"
Python
analyzer.parse_replay(
replay,
event_tagging=False,
export="parquet",
export_dir=Path(r"C:\path\to\exports"),
)
Stream or Return Frame Data
CLI
The CLI streams Parquet bytes to stdout and writes status text to stderr:
& $analyzerl $replay --event-tagging true --export stdout
Python
The Python API uses the same stdout transport internally and returns a Polars dataframe without writing a file:
frames = analyzer.parse_replay(replay, event_tagging=True)
Mount the Event Model
CLI
& $analyzerl $replay --event-tagging true --export "C:\path\to\match.parquet"
Python
labelled_frames = analyzer.parse_replay(replay, event_tagging=True)
Apply the Event Model to Frame Data
Frame data parsed with event_tagging=False retains the replay-native signals needed to mount the same event model later. Existing event columns are overwritten.
CLI
& $analyzerl "C:\path\to\frames.parquet" --apply-event-model --export "C:\path\to\labelled.parquet"
Python
from analyzerl_boxcars import EventModel, apply_event_model
labelled_frames = apply_event_model(frames)
labelled_frames = EventModel().apply(frames)
The Python API streams Parquet between Polars and the bundled Rust binary in memory; it does not create an intermediate file.
Calculate Stats From a Replay
CLI
& $analyzerl $replay --calc-stats --export "C:\path\to\stats.csv"
Python
stats = analyzer.calculate_stats(replay)
Calculate Stats From Frame Data
Both CSV and Parquet frame exports are valid stats inputs.
CLI
& $analyzerl "C:\path\to\frames.csv" --calc-stats --export "C:\path\to\stats.csv"
& $analyzerl "C:\path\to\frames.parquet" --calc-stats --export "C:\path\to\stats.parquet"
Python
csv_stats = analyzer.calculate_stats(Path(r"C:\path\to\frames.csv"))
parquet_stats = analyzer.calculate_stats(Path(r"C:\path\to\frames.parquet"))
Export Stats
CLI
The CLI infers CSV or Parquet from the output extension:
& $analyzerl $replay --calc-stats --export "C:\path\to\stats.parquet"
Python
The Python API selects the format with export and writes through the Rust binary:
analyzer.calculate_stats(
replay,
export="parquet",
export_dir=Path(r"C:\path\to\exports"),
)
The CLI supports .csv and .parquet export paths. The special stdout target always emits Parquet bytes. Python calls with export=False return a Polars dataframe; calls with export="csv" or export="parquet" write files and return None.
Output
The parser returns a frame-wise dataframe with replay, frame, ball, team, event, and player column groups. Player columns are kept together as the final column group so wide exports remain easier to scan.
When --calc-stats is supplied, the CLI returns one row per replay_id and player_id instead of frame-level rows. Stats are calculated only from columns already present in the labelled frame-wise dataframe.
When an export path is supplied, the CLI prints:
Parsed {replay_id}
Documentation
Full documentation coming soon.
License
AnalyzeRL Boxcars is closed-source, proprietary software. Copyright (c) 2026 Project Signal. All Rights Reserved. No permission is granted to use, copy, modify, or distribute the software except under a separate written agreement expressly authorized by Project Signal. See the proprietary license for complete terms.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file analyzerl_boxcars-0.1.0-py3-none-win_amd64.whl.
File metadata
- Download URL: analyzerl_boxcars-0.1.0-py3-none-win_amd64.whl
- Upload date:
- Size: 8.1 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32b12ac80d039cddb4d7e88d5ff5032e33155d006a8a44997215bbeb00a911f0
|
|
| MD5 |
d1bca43d1a73cf874fe53e522656abaf
|
|
| BLAKE2b-256 |
28bfbb31e81dba9ccb87cd3d77c95229d2454c53de9e477d92026b9d81081740
|
File details
Details for the file analyzerl_boxcars-0.1.0-py3-none-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: analyzerl_boxcars-0.1.0-py3-none-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 9.1 MB
- Tags: Python 3, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e84919f700852e6de5284a14f02d9dbc7a05a1b24e5676c1420951d160e1068b
|
|
| MD5 |
1350c34cf3c2535fe018b53b7acbed85
|
|
| BLAKE2b-256 |
d1256e89ccd183d606432d8964750345d36d440c5a9927f23467de9100cc1727
|