Using the Awpy CLI

Awpy also comes with the capability of parsing demos through the command line interface. After installing Awpy, you can run the following:

[1]:
!awpy parse spirit-vs-natus-vincere-m2-dust2.dem

import zipfile


def list_zip_contents(zip_path: str) -> list[str]:
    with zipfile.ZipFile(zip_path, "r") as zip_ref:
        contents = zip_ref.namelist()
        return contents


zip_path = "spirit-vs-natus-vincere-m2-dust2.zip"
contents = list_zip_contents(zip_path)
for file_name in contents:
    print(file_name)
2025-02-17 11:28:57.866 | DEBUG    | awpy.demo:parse:214 - Starting to parse spirit-vs-natus-vincere-m2-dust2.dem
2025-02-17 11:29:01.834 | SUCCESS  | awpy.demo:parse:258 - Finished parsing spirit-vs-natus-vincere-m2-dust2.dem, took 3.97 seconds
2025-02-17 11:29:01.834 | DEBUG    | awpy.demo:compress:573 - Starting to compress parsed spirit-vs-natus-vincere-m2-dust2.dem
2025-02-17 11:29:02.013 | SUCCESS  | awpy.demo:compress:605 - Compressed demo data saved to /home/xeno/awpy/docs/examples/spirit-vs-natus-vincere-m2-dust2.zip, took 0.18 seconds
kills.parquet
damages.parquet
footsteps.parquet
shots.parquet
grenades.parquet
infernos.parquet
smokes.parquet
bomb.parquet
ticks.parquet
rounds.parquet
header.json

This will write a zipped file of the parsed demo data (as .parquet files). Keep in mind, Awpy doesn’t currently write all events, just the main ones that are exposed as properties on the Demo class after parsing.

Passing options via the command-line

You can explore the Awpy cli options by running awpy parse --help. Below, we show an example of how to use the most important flags.

[2]:
!awpy parse spirit-vs-natus-vincere-m2-dust2.dem --player-props X,Y,Z,health --verbose
2025-02-17 11:29:08.982 | DEBUG    | awpy.demo:parse:214 - Starting to parse spirit-vs-natus-vincere-m2-dust2.dem
2025-02-17 11:29:13.061 | SUCCESS  | awpy.demo:parse:258 - Finished parsing spirit-vs-natus-vincere-m2-dust2.dem, took 4.08 seconds
2025-02-17 11:29:13.061 | DEBUG    | awpy.demo:compress:573 - Starting to compress parsed spirit-vs-natus-vincere-m2-dust2.dem
2025-02-17 11:29:13.506 | SUCCESS  | awpy.demo:compress:605 - Compressed demo data saved to /home/xeno/awpy/docs/examples/spirit-vs-natus-vincere-m2-dust2.zip, took 0.44 seconds