gem
v0.13.0

Match Reports

gem can generate self-contained HTML reports from real .dem replay files.

The report shows facts from the replay. It leaves interpretation, such as whether a Roshan "converted" or a farming pattern was safe, to you.

The Farming tab shows the camp-by-camp route of each team's cores. For each team and lane role (safe lane → carry, mid → mid, off lane → offlaner), the core is the player with the most last hits at 10:00. Each camp visit lists its duration, the hero's neutral kills inside the camp zone, and the gold and XP the hero earned during the visit. The route builder is documented in Experimental Features → Farming Patterns.

The Roshan tab lists each Roshan kill: who killed it, what it dropped, who picked up the Aegis, and when and how the Aegis ended. While the Aegis was held it also lists the fights that overlapped the hold and the enemy towers and barracks the holder's team destroyed (denies excluded). A consumed Aegis that the replay infers from the holder's death is marked *.

The Fights tab includes one positioning map per fight with pre-engagement, engagement-start, first-death, and fight-end controls. Marker visibility, position freshness, missing samples, and the current conservative engagement-start fallback are documented in Experimental Features → Fight Positioning. A fight card is badged "after Smoke #N" when it was that smoke's first fight, and "during Aegis #N" when it overlapped an Aegis hold.

The Smoke Operations view in the Vision tab lists each smoke's time, team and members, when it broke (the first member to lose it early, and how many in-game seconds after activation), and its first fight: the first fight whose first death came within 60 in-game seconds (pauses excluded). See Experimental Features → Smoke Analysis.

The report embeds the map image at up to 4096 px wide. A wider image is downscaled when the report is written; the file on disk is not changed.

Hosted samples

Sample reports are not bundled into this VitePress site. They are large, self-contained HTML artifacts and should be hosted separately from the docs.

To generate your own report:

python examples/match_report.py path/to/replay.dem --output ./my_match_report.html

Hero and item icons are Valve's artwork, so gem does not ship them. The script downloads the icons the match needs into the report asset cache before rendering (--offline skips this). From Python, call gem.reports.fetch_match_icons(match) before write_html_report; any icon still missing is shown as a name, and the report logs a warning listing them.