Automatically download Counter-Strike demos of Premier, competitive, and wingman matches. Downloads the demo and updates the modified date file metadata to the timestamp the match was played. Can use two strategies:
- Logs into your Steam account and scrapes the GCPD page for any new demos.
- Uses any Steam account and downloads the demos using a user's authorization code (like Leetify does).
The config is written in a config.json
file in the /config
volume.
logLevel
:trace
,debug
,info
,warn
,error
- defaults toinfo
cronSchedule
: a standard 5 digit cron expressions - defaults to0 * * * *
(hourly)runOnStartup
: whether to run the job immedately on startup - defaults totrue
This is the easiest approach for a single user downloading their own demos. Multiple users can be put in the gcpdLogins
array.
gcpdLogins[].username
: your Steam login usernamegcpdLogins[].username
: your Steam login passwordgcpdLogins[].secret
: if applicable, your Steam Guard secret, as a base64 (28 characters) or hex string. This is labeled asshared_secret
in a Steam Desktop Authenticator.maFile
{
"gcpdLogins": [
{
"username": "steamusername",
"password": "steampassword",
"secret": "yeBrc0jD9Ff0kjKOx8+hnckVojg="
}
],
"logLevel": "info",
"runOnStartup": false,
"cronSchedule": "0 * * * *"
}
This approach is best if you want to download demos for yourself and others that won't give you their login details. It requires an account to briefly "launch" CS2 and fetch match data from the Game Coordinator, so you should have a secondary bot account for this approach.
authCodeLogin.username
: your bot account's Steam login usernameauthCodeLogin.username
: your bot account's Steam login passwordauthCodeLogin.secret
: if applicable, your Steam Guard secret, as a base64 (28 characters) or hex string. This is labeled asshared_secret
in a Steam Desktop Authenticator.maFile
steamApiKey
: the Steam API Key of your bot accountauthCodes[].authCode
: the match history authentication code for a userauthCodes[].steamId64
: the SteamID64 for the user, as a stringauthCodes[].steamId64
: the oldest match share code available in the user's match history
{
"authCodes": [
{
"authCode": "ABCD-1234-WXYZ",
"steamId64": "70000000000000000",
"oldestShareCode": "CSGO-aBcdE-aBcdE-aBcdE-aBcdE-aBcdE"
}
],
"authCodeLogin": {
"username": "steamusername",
"password": "steampassword",
"secret": "yeBrc0jD9Ff0kjKOx8+hnckVojg="
},
"steamApiKey": "AAAABBBBCCCCDDDD1111222233334444",
"logLevel": "info",
"runOnStartup": false,
"cronSchedule": "0 * * * *"
}
ghcr.io/claabs/cs-demo-downloader:latest
/config
: Where the config file is stored, and where the "database" store is written/demos
: Where the decompressed demos are stored