Before anything else: the console
None of this works without the developer console enabled. It is a checkbox in the game settings, and once it is on the default key opens a text box where these commands are typed. Everything below is typed there, not bound to a key, unless you decide to bind it yourself.
Two conventions in the tables below. Entries marked as a command do something when you run them and hold no value. Entries in the settings table hold a value you can read and change, and the value shown is the game's shipped default.
Playback and seeking commands
These are the ones you will actually use while reviewing a match. The description column is the game's own help text.
| Command | What the game says it does |
|---|---|
playdemo | Play a recorded demo file (.dem) |
demoui | Show/hide demo playback ui |
demo_pause | Pauses demo playback |
demo_resume | Resumes demo playback |
demo_togglepause | Toggles demo playback |
demo_goto | Skips to location in demo |
demo_gototick | Skips to a tick in demo |
demo_marktick | Marks the current demo playback tick for later use |
demo_gotomark | Skips the current demo playback to the marked tick |
demo_pauseatservertick | Pauses when the render time reaches the specified tick |
demo_step_tick | Play for N ticks (default 1) and then pause |
demo_timescale | Sets demo replay speed |
demo_info | Print information about currently playing demo |
demolist | Print demo sequence list |
stopdemos | Stop looping demos (current demo will complete) |
The three that repay learning properly are demo_gototick, the mark pair, and demo_timescale.
Seeking by tick is how you review a match without dragging a scrub bar past the moment forty times. Ticks are the demo's own unit of time, so a tick number is an exact, repeatable address for a moment — write it down and you can return to it next week.
The mark pair is the same idea with less arithmetic: run demo_marktick at the moment you care about, then demo_gotomark to come back to it. Useful when you are stepping around one fight repeatedly.
Timescale is the difference between watching a duel and understanding it. A value below 1 is slower than real time, above 1 is faster. For the last half-second before a death, demo_step_tick is better still — it advances a fixed number of ticks and stops, so you can walk into the moment one step at a time.
Recording commands
| Command | What the game says it does |
|---|---|
record | Record a demo |
stop | Finish recording demo |
_record | Record a demo incrementally |
Run record with a filename while you are in a match, and stop when you are done. Two things about this are worth knowing before you rely on it.
First, a client-side recording only holds what your client received. It is your point of view of the match, not the server's complete record, which is a different thing from the GOTV recordings that matchmaking and third-party platforms hand out. Second, it starts when you type it — there is no way to record a round that has already happened. For matches you did not think to record, the download route is the only route, and where CS2 demo files come from covers it.
Playback settings and their defaults
These hold values rather than doing something. The default column is the value the game ships with.
| Setting | Default | What the game says it does |
|---|---|---|
demo_ui_mode | 2 | UI mode for demo playback. 0 = disabled, 1 = minimal, 2 = full |
demo_pause_at_end | true | Pause demo playback when the end of the file is reached, otherwise quit to main menu |
demo_quitafterplayback | false | Quits game after demo playback |
demo_recordcommands | true | Record commands typed at console into .dem files |
demo_highlight_seconds_before | 6 | How many seconds before the actual highlight event to show when viewing highlights |
demo_highlight_seconds_after | 2 | How many seconds after the actual highlight event to show when viewing highlights |
demo_highlight_fade_duration | 0.25 | Duration of the fade in and of the fade out transitions (fade in + fade out is 2x this value) |
demo_skip_to_shot_seconds_before | 2 | How many seconds before the shot to skip to when skipping to a specific shot ID |
The highlight trio is the interesting one, because it quantifies something people argue about. The game's own highlight view gives you six seconds of lead-up and two seconds of follow-through. That six-second window is a reasonable default for reviewing a death by hand too — if you are jumping to the tick you died on, you are already too late to see the decision that killed you.
Camera and spectator commands
Demo playback reuses the spectator system, so the camera commands are the spec_ set rather than demo_.
| Command | What the game says it does |
|---|---|
spec_mode | Set spectator mode |
spec_player | Spectate a player by name or slot |
spec_next | Spectate next player |
spec_prev | Spectate previous player |
spec_goto | Move the spectator camera to a specific location, given as x y z pitch yaw |
spec_show_xray | If set to 1, you can see player outlines and name IDs through walls |
spec_autodirector | Auto-director chooses best view modes while spectating |
spec_goto is the one worth remembering. It takes a position and a view angle, which makes a camera placement writable down and repeatable — the same property that makes tick numbers useful, applied to where you are standing rather than when.
Where are CS2 demos stored?
Demos the game writes go into your Counter-Strike 2 installation, normally under the csgo folder inside the game directory, unless you gave record a path of your own. Demos you download from a third-party service land wherever your browser saves downloads, and they do not need to be moved into the game folder unless you intend to play them with playdemo.
That last clause is the practical part. The folder only matters because playdemo resolves filenames relative to the game. If you are watching demos in a browser instead, the file can stay in your downloads folder and never move at all.
Third-party desktop demo managers exist and largely automate this filing — moving downloads into place, keeping names tidy, and launching playback. They are a separate category of tool from a demo viewer, and this is not one; it is mentioned here only because "where did my demo go" and "what manages my demos" are the same question for most people.
Where does this list come from?
Every command name, help string and default above was transcribed from a dump of the game's own registered command list, produced with CS2's cvarlist console command. That means the descriptions are Valve's wording rather than a summary of observed behaviour, and the defaults are the values the engine registers rather than whatever happens to be in a config file.
Two honest caveats. Counter-Strike updates add, rename and remove commands, so a reference like this is accurate as of its date and no longer — you can regenerate it at any time by running cvarlist yourself and reading the log. And settings that are stored in your config can report your value rather than the shipped default in such a dump; the eight settings published above were checked to be ones the engine does not persist, so the defaults shown are the engine's own.
That check-the-provenance habit is the same one behind the CS2 Mechanics Reference, which publishes measured CS2 constants with the derivation and confidence tier attached to each one — for instance how the jump-throw latch actually works or what sv_airaccelerate does with the wish-speed cap. If you are the kind of person who came here for a command list, that reference is likely to be the more interesting page.
The alternative: no console at all
Every command above exists because the in-game player is a console-driven tool. A browser demo viewer replaces the whole list with a timeline: you scrub, you click an event in the round list, you switch camera with a button. There is no console, no tick arithmetic and no game launch, and the demo does not need to be anywhere in particular on disk.
The two are genuinely for different jobs, and the split is not subtle. The in-game client is the reference for exact fidelity and it is the only place these commands work. A browser viewer wins on speed of access and on the cameras — free camera, x-ray, overhead radar and a review panel — and it can do the one thing the console cannot: hand you the situation as something playable rather than something to watch. The four-category comparison covers the trade properly, and the browser control reference is the equivalent of this page for the viewer.
FAQ
How do I open the CS2 demo playback UI?
Type demoui in the console while a demo is playing. The game describes it as show or hide demo playback ui, and it is the panel with the scrub bar and the speed control. The related setting demo_ui_mode chooses which panel appears, where 0 is disabled, 1 is minimal and 2 is full.
How do I jump to a specific tick in a CS2 demo?
Use demo_gototick followed by the tick number, which the game describes as skips to a tick in demo. To come back to the same place later, run demo_marktick at the moment you care about and then demo_gotomark to return to it.
How do I record a demo in CS2?
Run record followed by a filename while you are in a match, and run stop when you are finished. The game describes those two as record a demo and finish recording demo. Recording is a client side capture, so it only holds what your own client received.
How do I slow down or speed up CS2 demo playback?
demo_timescale sets demo replay speed, where a value below 1 is slower than real time and a value above 1 is faster. For frame by frame inspection, demo_step_tick plays for a number of ticks and then pauses, defaulting to a single tick.
Where does CS2 save demos that you record?
Into your Counter-Strike 2 installation, normally under the csgo folder inside the game directory, unless you gave the record command a path of your own. Demos downloaded from a third party service instead land wherever your browser saves downloads.