This is a CLI tool that I use when I play Counter-Strike: Global Offensive. It has multiple features that help me record POV demos when I'm playing competitive matches. For information on what drove me to make this, see the background section which I've mercifully moved to the bottom of the README because there's a lot to explain.
Here are the features provided by this set of tools. They can all be configured through a config.ini
that you will
create in the installation process.
This is what this toolbox was originally for. If you want to record your own POV demos and go back to them later, you
need to have some sort of naming scheme to be able to find a specific demo again. I follow the naming
scheme "[game mode]-[map name]-[mm-dd-yyyy]" for my demos and this tool helps automate the process by querying the game
for the game mode and map name. Options for this utility can be configured in the demo_naming_helper
of
your config.ini
file.
If you want to use this tool but use a different naming scheme, make a feature request, and I'll see what I can do to support your style of naming demos.
This allows you to record your own voice in POV demos without having to hear yourself during the recording process.
Typically, if you want your voice to be audible in your POV demos, you have to turn on voice_loopback
which will make
you hear yourself twice. The solution is to turn on voice_loopback
but turn down the volume of your voice to 0 with
the voice_player_volume
command. DemoRecordingHelper automates this process and can be configured in
the demo_recording_helper
section of your config.ini
file.
DemoPlaybackHelper is was previously responsible for unmuting the player who was muted by DemoRecordingHelper (if any). As of version 1.1.0, it is no longer necessary to keep CS:GO Demo Helper running while playing a demo. However, demos recorded with versions of this tool prior to 1.1.0 will still need CS:GO Demo Helper running to unmute your voice.
All you need to install is Node.js! You can either...
You'll also need to install Git if you intend to install CS:GO Demo Helper using the 2nd installation option below.
This tool should work on any OS that CS:GO runs on. Installation is just three steps, but you will need to have a teensy bit of rudimentary knowledge on how to get around the command-line on your OS.
node -v
and npm -v
. Most installs of Node.js come with npm. Installing npm is not covered by this guide. If your install of
Node.js is missing it, see here.npm i -g csgo-demo-helper
npm update -g
but you'll only need to do that
when there is a new release. MAKE A BACKUP OF config.ini
BEFORE YOU UPDATE AS IT WILL BE WIPED OUT ON EACH
UPDATE!!!git clone https://github.com/IncPlusPlus/csgo-demo-helper.git
.csgo-demo-helper
in your
command prompt. If you cloned the repository with Git, you can double-click start.bat
in the "csgo-demo-helper"
folder.After you run the tool once, you should see output like the following: (PUT SCREENSHOT HERE)
Now we need to quickly configure a few quick things.
netconport
launch option to whatever you have set in your config.ini
for the netcon_port
option. Your
launch options should be set to "-netconport 2121" (without the quotes) if you intend to use port 2121 for this tool
to communicate with the game.csgo_demos_folder
in config.ini
to the directory that sits NEXT TO the CS:GO executable (csgo.exe) on
Windows. The usual location on a Windows computer was already set in the template that config.ini
was created from.
If you know you installed your game to a different location or drive, set the correct location there. In case you
weren't sure where to find it, below are the normal default locations for your demos folder depending on your
operating system. Be sure to replace "YOUR_USERNAME" with your actual username.
C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo
/home/YOUR_USERNAME/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo
/Users/YOUR_USERNAME/Library/Application Support/Steam/SteamApps/common/Counter-Strike Global Offensive/csgo
steam_web_api_key
in your config.ini
by creating and getting a Steam Web API KeysteamID64
in your config.ini
by looking up your steam ID with SteamID.io and copying
the value called "steamID64". There should be a little red icon to the right which lets you copy it.where csgo-demos-helper
or which csgo-demos-helper
to find the scripts mentioned below).
csgo-demo-helper
start.bat
. If you're on
Linux, I'm sure you can figure it out.dh help
and press enter. There should be enough information printed in there to
get you started.This section is just drivel about the woes of someone who wants to use demos as well as how and why I've created this monstrosity. It's more detailed than necessary, but you should read this before asking questions like "Why not do X to solve Y instead of the solution used in this repo?" unless I've had a truly stupid oversight.
On occasion, I make YouTube videos out of the f u n n y m o m e n t s
and cool frags that have happened in the games I've played. I tend to record the event using ShadowPlay after the fact. However, if I want to get higher-quality footage or slow something down, I'll record footage of the demo itself.
After playing a competitive game on official Valve Matchmaking servers, players can download a "demo" of the match ( These will be called GOTV demos from here on). GOTV demos allow the player to watch the entire game recreated in the engine as recorded by the server. GOTV demos also allow players to spectate anybody's perspective or take any perspective not bound to a player ("freecam").
There are two problems that come with Valve's GOTV demos:
POV demos are demos recorded by the player themselves with the command record [DEMO_NAME]
in the in-game console.
These solve both the problems listed in the GOTV Demos section aren't free of trouble.
voice_loopback
to 1, your voice will be included in the demo. The drawback to this is that you hear what you say which is
irritating for two reasons.
I originally made this tool just to solve problem 3 with POV demos by making a program that would automate the "[game mode]-[map name]-[mm-dd-yyyy]" demo naming scheme I had been manually following for years.
I had sort of accepted that I'd just always hear double when recording a POV demo. After doing some research, I discovered that I could also create a solution to problem 2. I would still have to use voice_loopback 1
to record my own voice but using the command voice_player_volume
, I could adjust the volume of everybody who would be audible to me when playing a game including myself. This would be a bit of a chore to do before every match, so I implemented an automated solution to this.
The one last issue to solve was actually created by voice_player_volume
solution itself. The Cvar demo_recordcommands
is set to 1 by default. This means that the command to mute myself will be run again when playing the demo back. The voice data for myself will be in the demo, I will just have to unmute myself every time. To remedy this, DemoRecordingHelper echoes a special message into the console after muting the player that DemoPlaybackHelper will pick up on when playing the demo back and know who to unmute. In hindsight, I probably could do the mute operation before starting the recording. This would skirt around the edge case that a user has demo_recordcommands
set to 0. Maybe I'll do that in the future. At least there's a solution at the moment.