H. Walczak

Projects, experiments & other distractions.

cs2parser

COUNTER-STRIKE / STREAMING DEMO LAB

A match, byte by byte.

Stream a .dem or .dem.bz2 file to reveal players, events, and smoke volumes. When parsing finishes, choose a round to load its radar replay on demand. Files are processed on your device in browser workers.

▶
example.dem.bz2Bundled CS2 demo · streamed over HTTP
Ready when you are0.0s elapsed
Waiting for input size

Movement radar

Waiting for map · 0:00
Positions appear as entities are decoded

No radar configured for this map; showing an auto-scaled coordinate grid. Last 180 sampled snapshots, with 25-snapshot trails.

Match feed

live parser events
Terrorists-
Counter-Terrorists-
Tick -Deaths observed 0Round-end events 0
  1. The match will unfold here as the worker parses it.

Players, decoded live

server-reported match statistics
PlayerSideHPKDADamage
Waiting for player entities…

Anatomy of a smoke

0 SMOKES CAPTURED

Explore smoke volumes as the demo is parsed, one recorded frame at a time.

Smoke volumes will appear when you parse a demo.

Parse a modern CS2 .dem or .dem.bz2 file using the controls above.

Experimental density reconstruction. Blue: density cells · mint: seeds · coral: rejected cells · gold: detonation. Density is not opacity; bullet holes and HE visual effects are not reconstructed. The radar is a flat reference image.

Current memory · latest sampleMeasuring…
Peak sampled · since page opened-
Worker concurrency · browser reportedChecking…

Waiting for the browser to measure memory. It may wait for garbage collection.

INSIDE THE MATCH

From demo stream to match state.

Player entities drive the radar and statistics. Game events populate the match feed as the worker parses the demo. Scrub the radar history to revisit recent movement, or choose Go live to follow the parser.

Compressed demos are decoded with bzip2-codec before reaching DemoReader; raw .dem files stream directly into the parser. Explore the decompression showcase for byte distributions and throughput. Output is limited to 2 GiB per run.