csgo-hud
This is a custom spectator HUD for Counter-Strike: Global Offensive.
Installing
No pre-built binaries or installers (yet), so you’ll have to do everything yourself.
- Clone the repository.
- Install dependencies:
yarn install
. - Copy
gamestate_integration_drweissbrot_hud.cfg
into your CS:GOcfg
directory, normallyC:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\cfg
. - Install the font Quantico on your system.
- Optional: Copy
spec.cfg
into that same directory – or copy the cvars you want to use into your own config. - Run it:
cd
into the directory you cloned this project into, and runyarn start
. This way, changes you make will be applied immediately. - Start CS:GO, and join a match as Spectator, open a GOTV stream, or start playing back a demo. If you can’t see the HUD, check the troubleshooting tips below. Also check the Usage notes below for some more guidance.
To create an executable, run yarn package
. To create an installer, run yarn build
. You’ll find the executable in the out
directory, in the subdirectory for your architecture.
Usage
This app uses two separate windows, one is used to configure the HUD, the other is the HUD itself. When you’re not spectating a game, it will show small black hook thingies in the corners of your display. Make sure these are where you want the HUD to show up.
Set up the options in the config window to your liking – some of these are a bit weird to understand, so see below for explanations. Note that your changes are not applied immediately, you need to click Save
on the top right (or Ctrl+S
) to apply them. Settings are kept across restarts though, except where noted otherwise.
You can also configure some details for your event or series on the Series
tab, and set the matches of the current series on the Matches
tab.
If you want a bigger minimap than the one on the HUD itself while spectating (you may or may not find this useful for observing), switch to the Minimap
tab before you start recording/streaming, and put the config window on a second display so you can still see it with the game running.
For recording, I use a Display Capture in OBS, with Capture Cursor
disabled.
Configuration
Always make sure to save your changes (Save
on the top right, or press Ctrl+S
).
You can switch through the tabs by using Alt+1
through Alt+4
while the config window is in focus.
Preferences tab
Sort observer slots
If enabled, the players on the left and right side will be sorted alphabetically. I always find it irritating that players’ observer slot (the little numbers, 0 through 9) can change across matches in a series – this prevents that from happening.
Note: If you use this, but don’t also enable Enable AutoHotKey observer slot remapping
, the numbers will only change in the HUD itself. The minimap in the config window will still show the actual numbers you have to press.
Enable AutoHotKey observer slot remapping
When used in conjunction with Sort observer slots
enabled, this will start AutoHotKey and remap your number keys to the sorted player slots. E.g., if a player has slot 4 in-game, but is alphabeticaly at 2, this will remap your 2 key, so that when you press 2, the player will be selected.
AutoHotKey will not always be closed properly, so if you need to close it, check the system tray (right side of your taskbar), right-click AutoHotKey, and quit it there.
This requires that you have AutoHotKey installed and available under C:\Program Files\AutoHotKey\AutoHotKey.exe
.
Note: This will always be set to off when you start this app; if you want to use it, you need to enable it manually every time.
Enable Pre and Post Match Animations
I’ve built a couple simple intro and outro animations for my specific use case, which include the specific “tournament” name we use, so you’ll likely not want to use these. If you think you do want to use them, enable them here – and choose the background video and music files below. These animations will also only work if you set multiple matches on the Matches
tab. These animations should be able to be edited as they are just .styl
files, I havent figured out how to do that yet though.
Start Post Match Outro and Post Series Outro automatically on match end
If you have enabled Pre and Post Match Animations, this will start the outro animation automatically as soon as the match ends.
Pre/Post Match Animations Background Video
If you have enabled Pre and Post Match Animations, select a video file here. It will be used as a background for these animations.
Pre Match Intro Music
If you have enabled Pre and Post Match Animations, select an audio file here. It will be used as music for the intro.
Post Match Outro Music
If you have enabled Pre and Post Match Animations, select an audio file here. It will be used as music for the outro.
Tactical Timeout Music
Select any number of audio files. Whenever a tactical timeout starts, one will be picked at random and start playing immediately. Select no files to disable this. If you want to play a file from this pool manually, hit F7
any time when the HUD is active; stop playback with Shift+F7
.
Series tab
Name of Team that should be on the left
Set the name of the team that should always be on the left side. If you leave this empty, the CT side will always be on the left.
Series/Event Info
This will be displayed above the team names and scores on the top. I use it to show the name and date of events, and a website URL. Either provide one or three lines; two won’t work. Leave empty to disable.
Series Number
This is only used for my Pre/Post Match animations. If you’re actually using those, this will be displayed in the logo part. If you’re not using the animations, just leave it empty.
Matches tab
If you’re casting a series, as in multiple matches with the same teams in row, set it up here to enable some HUD elements that show all matches in the series.
Add as many matches as you need. Set the map name for each using the in-game name, e.g. de_overpass
or ‘cs_italy’. Select if the left or right team (or neither) has picked the map. If the map has already been played, set the score; if you’re about to spectate a match, check Currently Playing
for that match.
Shortcuts/Hotkeys
F5
– Start playing the Pre Match Intro (only if enabled)Shift+F5
– Stop playing the Pre Match IntroF6
– Start playing the Post Match Outro (only if enabled)Shift+F6
– Stop playing the Post Match OutroF7
– Start playing Tactical Timeout music (only if enabled)Shift+F7
– Stop playing Tactical Timeout musicF8
– Recalculate ADR values (may be useful if you’re recording a demo and skipped back to an earlier point in the demo; usually shouldn’t be needed though)
If the config window is focused, you can use shortcuts to switch through the tabs:
Alt+1
– Preferences tabAlt+2
– Series tabAlt+3
– Matches tabAlt+4
– Minimap tab
Caveats and some Troubleshooting
Fullscreen Windowed
I’ve only ever tested this using the “Fullscreen Windowed” (aka “Borderless Fullscreen”) option in the video settings, as that is how I usually play the game, but it’s likely also the only way to get this HUD to show up.
If you are using Fullscreen Windowed, but still can’t see the HUD, try this: Focus the CS:GO game, then press Alt+Tab and select the HUD (not the config window) from that list. Alt+Tab back to CS:GO, and press the Windows key twice. Double-pressing Windows+D may also help.
Choppy Animations
If the HUD animations aren’t running smoothly, the best course of action is probably to limit the FPS of the game itself, e.g. by setting the fps_max
command in the CS:GO console to a lower value. You’ll need to play around with this a bit to find a value that works for your hardware and your settings.
Reducing GPU load in general can help too, e.g. closing or disabling hardware accelleration in Chrome, Discord, Steam, and any other apps that use your GPU.
If that doesn’t help, you could try switching to CPU rendering – this may only make it worse though. If you want to try it, you can do this with the –disable-gpu
parameter, e.g. run npx electron-forge start – –disable-gpu
in the project directory.
The bomb plant and defuse animations are buggy right now, looking to replace them with newer ones so you’ll have to live with them just removing bars instead of interpolating them out for a while.