CS|Studio
CS|STUDIO
Map Guide Tool  ·  CS2 Annotation Editor
Loading
CS|Studio
CS|Studio
No guide loaded

Theme
Map
Nodes
Mode
Guide no file
📄
Drop .txt here or click to browse
— or —
Drop a .txt file to get started
Map View — Select a map from the dropdown. Dragging a node edits its world coordinates.
Map
Layer
pos_x pos_y scale
🗺️
Select a map to get started
Choose a map from the Map dropdown above.

To add a radar background, drag the radar .png onto this canvas.
CSStudio Dev Console Backtick (`) to toggle · Tab to autocomplete · ↑↓ history
> TAB autocomplete

Save your custom radar's position, scale, and image as a named preset so you can switch back to it instantly.

Preset Name
pos_x
pos_y
scale
Radar Image — optional (1024×1024 PNG)
No image — preset will only restore coordinates & scale
Presets are stored in your browser's local storage.
Add custom icons via image URL. 32x32px recommended. Leave blank to use the built-in SVG icon.
Guide Name
Map
CS|Studio Map Guide Tool
v1.0 · CS2 KV3 Annotation Editor
Creator
🎮
Nollid
Developer · CS2 Guide Creator
About This Tool
PurposeBrowser-based editor for CS2 KV3 annotation files — load, edit, and export workshop guide overlays without leaving the browser
TechnologyVanilla HTML, CSS, and JavaScript — no frameworks, no dependencies, no tracking. All processing happens locally.
Versionv1.1
PlatformAny modern browser (Chrome, Edge, Firefox) — desktop recommended
Data References
Map ConfigsCS2 overview coordinate values (pos_x, pos_y, scale) cross-referenced with scope.gg for accuracy across all competitive maps
KV3 FormatValve CS2 annotation format — game/csgo/annotations/ — official Valve workshop file structure
SimpleRadarCommunity-made simplified radar images for improved map readability
Special Thanks
scope.ggMap overview coordinate reference data
CommunityThe CS2 workshop mapping and guide creator community
YouEvery guide creator using this tool to share lineups with the community 💙
Legal
Counter-Strike 2 is a trademark of Valve Corporation. This tool is an independent fan project and is not affiliated with, endorsed by, or sponsored by Valve Corporation. All CS2 game format specifications, map names, and related content referenced belong to their respective owners. Radar/overview images used in Map View are sourced from CS2 game files and remain the property of Valve Corporation.
Made with ♥ for the CS2 community
CS|Studio Map Guide Tool
Help & Documentation
Introduction

What is CS|Studio Map Guide Tool?

CS|Studio Map Guide Tool is a browser-based editor for CS2 KV3 annotation files — the format used by the game's workshop annotation system to display in-game guide overlays. Load raw annotation files, automatically apply formatting rules, manually edit any node, reorder your lineup list, and export a clean game-ready file.

Everything runs in the browser. No account required, no data is sent anywhere, and your files never leave your computer.

📂

Load

Drag and drop your .txt annotation file onto the panel

Process

One click auto-formats colors, throw types, and tags

Export

Download a clean, game-ready KV3 file

Getting Started

Quick Start

1

Choose your guide mode

Use the ⊟ Single Guide / ⊞ Dual Guide toggle in the header to pick between one file or split CT + T files.

2

Load your file(s)

Drag a .txt KV3 annotation file onto the drop zone, or click the zone to browse.

3

Process

Click ⚡ Process on the guide panel to automatically apply all formatting rules — colors, throw types, tag stripping, and text node merging.

4

Review and edit

Click any node row to expand its editor. Drag the handle to reorder nodes.

5

Export

Click ↓ Export on the panel to download your processed file.

Getting Started

Loading Files

🖱️

Drag and drop

Drag your annotation .txt file directly from File Explorer onto the panel's drop zone. The zone highlights blue when a file hovers over it.

📁

Click to browse

Click anywhere on the drop zone to open a file picker.

Clear a file

Once a file is loaded a ✕ Clear button appears in the panel header. Click it to unload the file so you can load a different one.

ℹ️
The tool expects standard CS2 KV3 annotation files exported by the annotation_create console commands. The file should begin with a <!-- kv3 encoding:... --> header and contain MapAnnotationNode blocks.
Core Features

Guide Modes

The mode toggle in the header switches between how many guides you're working with at once.

⊞ Dual Guide

CT and T sides share a single left panel with tabbed navigation — click the CT Side / T Side tabs to switch between them. Load a separate file for each team. Nodes can be moved between sides. Use the ⇄ Swap Sides button to exchange CT and T data if you loaded a file to the wrong side. Process and export each file independently.

⊟ Single Guide

One full-width panel labeled "Guide." Use this for a single unified annotation file not split by team. The Move to CT/T option and the Map View side selector are hidden in this mode.

💡
Switching modes doesn't discard loaded files — your data is preserved. Toggle freely at any time.
Core Features

The Node List

After loading a file, all annotation nodes appear as rows. Each row shows at a glance:

ElementDescription
Color dotThe node's assigned color reflecting its type — smoke teal, flash amber, etc.
G Type badgeShort code for the node type. See Node Types reference below.
0 IndexNode position in the file (0-based). Indices 0–29 show in green — these appear in online/competitive mode. Node 30+ only appears in Practice.
TitleThe node's display title — what players see in-game.
pos ang tpClipboard buttons for in-game console teleport commands.
Expand arrowClick anywhere on the row (except buttons) to toggle the node editor.

Online Priority Zone

CS2 annotation guides have two node limits:

ModeLimit
Practice300 nodes total
Online / CompetitiveFirst 30 nodes only

An orange dashed divider appears between node 29 and node 30. Use reordering to place your most important lineups above the divider.

28B Site Smoke (6.5s)
29Window Flash (1.2s)
▲ nodes 0–29 visible online  ·  node 30+ practice only
30Platform Molotov

View Modes & Panel Resize

📐

Card density

The toggle (▤ ▦ ▩) in the panel toolbar switches between Compact, Normal, and Expanded views. Compact hides descriptions and drag handles for a tighter list; Expanded shows more detail per node row.

Resizable panel

Drag the vertical handle between the node list and Map View to adjust the panel width (240–700px). The map canvas re-renders automatically to fill available space.

Filtering and Search

The toolbar above the list lets you filter by node type (All, Grenade, Position, Spot, Text) and search by title or description text in real time.

Core Features

Auto-Processing

Clicking ⚡ Process runs a five-pass formatter over all nodes.

Pass 1 — Grenade main nodes

Assigns color by grenade type. Extracts the throw type from the last parenthetical in the title — B Site Smoke (6.5s) (Jump Throw) becomes title B Site Smoke (6.5s) with description Jump Throw. Sets the JumpThrow flag automatically.

Pass 2 — Grenade aim targets

Inherits color from the parent grenade node. Fills empty aim descriptions with a hint from a nearby text node or the throw type.

Pass 3 — Position nodes

Assigns color by title keyword: sound/cue/listen → purple, wallbang/bang → gray, plant/planting → coral, everything else → gold. Strips group tags like (LSW). Merges nearby text node descriptions into empty position descriptions.

Pass 4 — Spot nodes

Sets all spot nodes to gray.

Pass 5 — Text node cleanup

Merges non-Tip text nodes near aim targets or positions into those nodes, then removes them. Tip and Guide By nodes are always kept.

💡
Processing is non-destructive — it works on a copy of the data. You can run it multiple times and manually override anything it changed.
Core Features

Editing Nodes

Click any node row to expand its editor. All fields are editable at any time — before or after processing.

FieldDescription
TitleThe main text displayed in-game for this node.
DescriptionSecondary text shown below the title. Throw type for grenade mains, aim hint for aim targets.
ColorPreset swatches for every standard color plus a custom hex picker.
Grenade Type grenade mainChanging this also updates the color to match the standard scheme.
Jump Throw grenade mainToggles the JumpThrow flag for lineups that require jumping while throwing.
EnabledHide a node in-game without deleting it.

Actions

Save

Save

Commits field changes and refreshes the list. An undo snapshot is taken before each save.

⊕ Dup

Duplicate

Creates a copy of the node with a new ID, inserted immediately after the original. All properties are cloned.

→ Move

Move to CT / T

Dual Guide mode only. Moves this node to the other panel. The other panel must have a file loaded.

Delete

Delete

Removes the node after a confirmation prompt. Use Ctrl+Z immediately after to undo.

Throw Type Helper

A Append throw… dropdown appears in the Title field area. Selecting a throw type appends it in parentheses to the node's title — e.g. selecting Jump Throw turns B Site Smoke into B Site Smoke (Jump Throw).

Core Features

Reordering Nodes

Grab the handle on the left of any node row and drag it up or down to a new position. All index numbers update automatically.

💡
Drag your highest-priority lineups above the orange divider into slots 0–29 so they're available in online/competitive play.
ℹ️
Grenade nodes come in groups of three: a G main, a GA aim target, and a GD destination. Keep these groups together when reordering.
Core Features

Copying Coordinates

Every node with a recorded position shows clipboard copy buttons on its row.

ButtonCopiesCS2 Command
posPositionsetpos X Y Z
angAnglessetang pitch yaw roll
tpPosition + anglessetpos X Y Z; setang pitch yaw roll

How to use in CS2

1

Open a practice server

Launch CS2 and load the map in the console: map de_dust2

2

Enable cheats

Run sv_cheats 1 — required for teleport commands.

3

Copy and paste

Click the tp button in CS|Studio, switch to CS2, open the console, paste with Ctrl+V and press Enter. You'll teleport directly to that lineup position.

// Pasted from tp button:
setpos -1245.31 892.40 64.03; setang -14.22 67.50 0.00
⚠️
Clipboard requires HTTPS. Running the file locally via file:// will cause copy buttons to silently fail. Host on GitHub Pages for clipboard to work.
Core Features

Exporting Files

Click ↓ Export on any panel to download the processed file. The output includes the full KV3 wrapper so it loads directly into CS2 without any manual editing. The filename gets _processed appended so it won't overwrite your source.

Export Validation

Before saving, The tool runs a validation check and may show a Validation Results panel:

IconMeaning
Check passed — no issue
⚠️Warning — export allowed but review recommended
Critical error — export blocked until resolved

Warnings (missing positions, approaching node limit) allow export. Critical errors (node count at hard limit) block export.

Export Summary

After a successful export a confirmation panel shows the guide name, map, node count, mode, and filename.

Where to put the file

Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\annotations\local\GuideName\GuideName.txt

Then load it in-game:

annotation_load "GuideName"
Getting Started

CS2 Annotation Basics

CS2 includes a built-in workshop annotation system that lets you overlay in-game markers, text, and guide steps on any map. These annotations are stored as .txt files in KV3 format and loaded directly by the game engine.

🎮

How it works in-game

When you load an annotation file, CS2 displays node markers in the world — floating titles, aim overlays, and position indicators visible only to you. Players follow the guide by teleporting to each node's position and practicing the lineup.

📁

Where files live

CS2 saves annotation files to:

Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\annotations\local\GuideName\GuideName.txt

Each guide gets its own subfolder matching the filename. Use annotation_load "GuideName" to load them in CS2.

The workflow

Record in CS2 → save to .txt → load in CS|Studio → process & edit → export processed file → load back in CS2 for final review.

ℹ️
Annotation files support up to 300 nodes total. Only the first 30 are visible in online/competitive matches — nodes 31–300 are practice-only.

Node types

CS2 annotations use four node types, each with subtypes:

TypeWhat it represents
grenade / mainThe throw position — where you stand and the angle you throw from
grenade / aim_targetWhere you aim your crosshair for the throw
grenade / destinationWhere the grenade lands
position / mainA movement or pre-aim spot
spot / main + aim_targetA wallbang — the shooting position and the aim point
text / mainA floating text note
Getting Started

In-Game Recording

All nodes are recorded directly inside CS2 using console commands. Here is the complete workflow from a blank map to a finished raw guide file.

1

Open a practice server

Open CS2, then in console: map de_dust2 (or any map). Wait for the map to fully load.

2

Run the setup commands

Paste this block into the console to enable annotations, cheats, and a long round timer:

sv_cheats 1; sv_allow_annotations 1; mp_roundtime_defuse 60; mp_limitteams 0; mp_autoteambalance 0; mp_freezetime 0; mp_restartgame 1

Then run noclip to fly freely, and bot_kick to remove bots.

Full practice config (recommended)

A comprehensive practice config with grenade trajectories, impact markers, infinite money, respawn, and rethrow bind. Copy and paste the entire block:

sv_cheats 1; mp_limitteams 0; mp_autoteambalance 0; mp_freezetime 0; mp_roundtime 60; mp_roundtime_defuse 60; mp_ignore_round_win_conditions 1; mp_maxmoney 60000; mp_startmoney 60000; mp_buytime 9999; mp_buy_anywhere 1; mp_respawn_on_death_ct 1; mp_respawn_on_death_t 1; sv_infinite_ammo 1; ammo_grenade_limit_total 5; sv_regeneration_force_on 1; sv_grenade_trajectory 1; sv_grenade_trajectory_prac_pipreview 1; sv_grenade_trajectory_prac_trailtime 15; sv_grenade_trajectory_time 15; sv_grenade_trajectory_time_spectator 15; sv_showimpacts 1; sv_showimpacts_time 10; bot_kick; cl_versus_intro false; mp_team_intro_time 0; mp_do_warmup_period 0; mp_warmup_end; mp_restartgame 1; say "Warmup practice config loaded"; bind "k" "sv_rethrow_last_grenade"

Tip: Save these commands in Steam Notes (Steam Overlay > Notes) so you can quickly copy and paste them into the console any time without leaving the game.

3

Record a grenade lineup

Throw the grenade first, then fly to the throw position, stand on the ground, aim at your lineup spot, and run the annotation command with the grenade type and a label:

annotation_create grenade smoke "B Site Smoke (Jump Throw)" float annotation_create grenade flash "CT Flash (Left Click)" float annotation_create grenade he "Boost HE" float annotation_create grenade molotov "B Platform Molly" float annotation_create grenade incendiary "CT Incendiary" float

The label goes in quotes. Follow naming conventions below for best results.

4

Record positions

Stand at a pre-aim spot or movement position:
annotation_create position "B Apartments Preaim"
CS2 creates the node at your feet.

5

Add text notes

Float a text annotation for extra context — provide both a title and a description:
annotation_create text "Tip" "Works from both sides of the door" float
The tool merges text nodes into nearby aim targets or positions during processing.

6

Save the file

annotation_save "my_guide_ct"
CS2 saves to annotations\local\my_guide_ct\my_guide_ct.txt. Use a descriptive filename — CS|Studio uses it as the default export name.

Grenade recording tips

🎯

Throw first, then annotate

Throw the grenade, watch where it lands, then go back to the throw position to record the annotation. This way you know exactly where to place the destination node and what aim point to use.

📐

Stand on the ground, aim precisely

Use noclip to position yourself, then turn it off before recording so your Z coordinate is ground level. Aim your crosshair at the exact lineup spot before running the command — the node captures both position and view angle simultaneously.

💡

Record a destination node

After recording the main grenade node, fly to where the grenade lands and run the same command again. CS2 automatically creates a destination node linked to the previous grenade.

Delete a wrong marker

Made a mistake? Look at the marker and run annotation_delete — CS2 deletes the node closest to your crosshair. Then re-throw and re-record.

🔄

Edit without re-recording

Open the saved .txt file and edit the text (title) or desc (description) fields directly, then run annotation_reload "my_guide_ct" in CS2 to see changes live without re-throwing anything.

💡
Use cl_draw_only_deathnotices 1 to hide the HUD while recording — easier to see the annotation overlays.
Getting Started

Naming Conventions

Auto-processing reads node names and extracts structured data from them. Follow these conventions when naming nodes in CS2 and you get near-zero manual editing after processing.

Grenade main nodes

Format: Location Name (Throw Type)

Example nameWhat happens
B Site Smoke (Jump Throw)Title = "B Site Smoke", Desc = "Jump Throw", JumpThrow flag on
CT Window Flash (Left Click Throw)Title = "CT Window Flash", Desc = "Left Click Throw"
Platform Molotov (6.5s) (Run + Jump)Title = "Platform Molotov (6.5s)", Desc = "Run + Jump Throw"

Supported throw type keywords (case-insensitive): Jump Throw, Left Click, Right Click, W + Jump, Run + Jump, Running Throw, LMB + RMB + Jump, and more. See Settings → Throw Types for the full list.

Duration / timing

Wrap timing in parentheses with an s suffix: (6.5s). The tool preserves this in the title and can reformat it using the Duration Format setting. Example: B Long Smoke (6.5s) (Jump Throw).

Position nodes

The tool assigns colors by keyword in the name:

Keyword in nameColor assigned
sound / cue / listen Purple — sound cue position
wallbang / bang Gray — wallbang spot
plant / planting Coral — plant position
anything else Gold — movement / pre-aim

Group tags

Prefix any node name with {TAG} to assign it to a named group. All nodes with the same tag are visually grouped in the node list.

{LCS}Long Corner Smoke (Jump Throw) ← grenade main {LCS}Stand here ← position node {LCS}Aim at the corner ← text node

Processing strips the {TAG} prefix from titles when "Strip {GROUP} tags on process" is enabled in Settings → Formats.

Text nodes

The tool handles text nodes automatically based on their title:

TitleBehaviour
TipAlways kept — displayed as a standalone tip in the guide
Guide ByAlways kept — credits node
anything elseThe tool merges the text node's description into the nearest aim target or position, then removes it
💡
Place text nodes physically close to the node they should annotate — the tool merges based on distance (within ~150 units).
Core Features

Map View

Map View overlays all loaded guide nodes on a top-down radar of the map. It is always visible as the right panel alongside the node list. Coordinates for all official CS2 maps are built in — no files required to get started.

📍

Node markers

Each node appears as a colored dot. Colors match the grenade / position type colors from your Settings. Grenade mains show a larger dot; aim targets and destinations show smaller ones. Hover a marker to see its title.

✏️

Edit Mode

Click Edit Mode in the Map View header to enable node dragging. When active, click and drag any marker to reposition it — world coordinates update in real time and changes are tracked in undo history. When off, clicking a node selects and highlights its group without moving anything.

🔍

Node filter bar

The pill bar below the header toggles visibility for each node category: Positions, Spots, Aim Targets, Destinations, Text, Linking Lines, and grenade types (Smoke, Flash, Molotov, HE). Click a pill to toggle it on or off.

🔗

Group highlighting

Clicking a node on the map highlights its entire group (all nodes sharing the same MasterNodeId). Non-group nodes dim to 30% opacity and linking lines connecting group members glow. Click empty space to deselect.

🗺️

SimpleRadar

Click SimpleRadar: OFF in the Map View header to switch between the default CS2 radar and cleaner SimpleRadar overlays with callout labels. Available for most competitive maps — maps without a bundled image show a notice instead.

🗂️

Floor layers

Multi-floor maps (Nuke, Vertigo, Train) show a Layer dropdown. Switch between Upper and Lower to see each floor's nodes independently.

Step 1 — Select a map

Pick the map from the Map dropdown in the header. CS|Studio immediately applies the correct pos_x, pos_y, and scale values — your guide nodes appear on screen straight away. No files needed.

ℹ️
Built-in coordinates are sourced directly from the CS2 game files and are accurate for the standard 1024×1024 overview images shipped with the game.

Step 2 — Add a radar background (optional)

Nodes render on a dark canvas without a background image. To add the actual radar PNG:

  1. Find the radar image in your CS2 install:
    …\Counter-Strike Global Offensive\game\csgo\resource\overviews\de_dust2.png
  2. Drag it directly onto the Map View canvas, or use the 📷 Radar button in the header.

The image loads and the nodes snap to their correct positions on the radar automatically.

Custom maps

For workshop maps or any map not in the built-in list, use the + Custom Preset button to enter your own pos_x, pos_y, and scale values and save them as a named preset. Custom presets appear at the bottom of the Map dropdown and can include an embedded radar image.

To find the correct coordinates for a custom map, open the map's overview .txt file (if available) or drop the map's .nav file onto the canvas to auto-calculate approximate bounds from the NavMesh.

Core Features

Format Codes

Format Codes let you snapshot your current CS|Studio settings into a short shareable string. Anyone can paste the code into CS|Studio and instantly get the same colors, typography, throw type labels, tag prefixes, icons, and formatting preferences you used.

Generating a code

  1. Click 🔑 Code in the header to open the Format Code panel.
  2. Tick the categories you want to include (Colors, Typography, Throw Types, Tag Prefixes, Icons, Formats). Unticked categories are left out of the code — recipients keep their own defaults for those.
  3. Click Generate. The code appears in the output box starting with MGT_.
  4. Copy and share it (paste into a Discord message, a text file, a guide description, etc.).

Applying a code

  1. Open the Format Code panel and paste the code into the input field.
  2. Click Apply. Settings are merged on top of your current config — only the categories present in the code are overwritten.
ℹ️
Format codes only carry settings. They contain no node data, map coordinates, or guide content — they are purely a style & preference preset.
💡
Codes are compact by design — only values that differ from the defaults are encoded, so a code that changes only smoke color is typically under 80 characters.
Core Features

Node Groups

Groups let you organise related nodes under a named header in the node list. A group is defined by a shared {TAG} prefix on node titles — no manual setup required beyond naming nodes consistently in CS2.

Creating groups

Prefix any node title with a short tag in curly braces: {LCS}, {B_SMOKE}, {SITE_A}. All nodes sharing the same tag are automatically grouped together.

{LCS}Long Corner Smoke (Jump Throw) {LCS}Stand at the door {LCS}Aim at the top of the window

Tags are case-insensitive — {lcs} and {LCS} merge into the same group.

Group header actions

ButtonWhat it does
Select allEnters selection mode with all nodes in the group pre-selected
ExtractCopies the group to a new blank guide file and downloads it — useful for splitting one large recording into per-lineup files

Strip group tags on export

Enable Strip {GROUP} tags on process in Settings → Formats to have the {TAG} prefix removed from all titles when you run Processing. The group is still tracked internally during the session; the tag just won't appear in the exported KV3 file.

💡
Groups are especially useful when one recording session covers multiple lineups. Tag each lineup with its own code in CS2 and CS|Studio will automatically separate them on load.
Core Features

Selection & Copy

Selection mode lets you pick specific nodes from either panel and act on them as a batch — copy to the other guide, copy to a new file, or delete.

Entering selection mode

Click the Select button above either the CT or T panel. The panel switches to selection mode: each node card shows a checkbox on the left.

Selecting nodes

ActionWhat it does
Click a checkboxToggle that node in/out of the selection
Select All buttonSelect every visible node in the panel
Select Group (group header)Select all nodes belonging to that group
None buttonClear the selection

Copy actions

📋

Copy to Guide 2

Copies selected nodes from Guide 1 into Guide 2 (or vice versa). Guide 2 must be loaded. The nodes are appended — nothing in the destination is overwritten.

📥

Copy to New Guide

Packages the selected nodes into a fresh .txt file with the same map name and downloads it immediately. Use this to split a recording into separate per-lineup files.

ℹ️
Selection state is not part of the undo history. Entering or leaving selection mode won't affect your undo stack.
Reference

Keyboard Shortcuts

ShortcutAction
Ctrl + ZUndo last action
Ctrl + Shift + ZRedo
Ctrl + SExport current guide
NCreate new node (when not typing in a field)
DeleteDelete the currently expanded node
` (backtick)Toggle the developer console
Double-click on mapReset Map View pan and zoom to default
ℹ️
N and Delete only fire when focus is not inside a text field, search box, or dropdown.
Reference

Auto-Save & Recovery

CS|Studio automatically saves your session to browser local storage every 10 seconds whenever nodes are loaded. The colored dot in the header indicates save state: steady means saved, pulsing means a save is pending.

💾

Session recovery

If you close the tab or the browser crashes with work in progress, CS|Studio will detect the saved session on next load and prompt you to Restore or Discard it.

Undo / Redo

Use Ctrl+Z / Ctrl+Shift+Z or the header buttons to step through up to 50 actions. The undo history tracks node edits, creation, deletion, duplication, moves, and processing runs.

⚠️
Auto-save uses browser local storage, which is domain-scoped. Clearing browser data will discard saved sessions.
Reference

Node Types

BadgeTypeDescription
GGrenade — MainThrow position. Contains coords, angles, grenade type, throw type, and JumpThrow flag.
GAGrenade — Aim TargetCrosshair aim point. References the parent grenade via MasterNodeId.
GDGrenade — DestinationWhere the grenade lands. Visual reference in the overlay.
PPositionA standing position — pre-aim, sound cue, wallbang, or plant spot.
SSpot — MainSpot marker used in wallbang groups. Always gray.
SASpot — Aim TargetAim point for a wallbang. References a master spot node.
TTextFloating text label. Kept if titled Tip or Guide By; otherwise merged during processing.
LLineA drawn line between points. Created with annotation_create line in CS2.
Reference

Color Scheme

Node TypeColorRGB
SmokeTeal[29, 158, 117]
FlashAmber[255, 195, 0]
Molotov / IncendiaryOrange-Red[220, 80, 30]
HE GrenadeRed[200, 60, 60]
Sound PositionPurple[134, 77, 183]
Wallbang / SpotGray[160, 160, 160]
Plant PositionCoral[220, 100, 80]
Pre-Aim / MovementGold[255, 175, 30]
Reference

Settings

Open via ⚙ Settings in the header. All settings persist in your browser's local storage.

Colors tab

Change the color assigned to each node type. Changes take effect on the next processing run.

Formats tab

Two sub-sections:

  • Sizes & Visibility — font sizes and fade distances written to exported KV3 files. FadeOutDist = -1 keeps a node visible at any distance.
  • Text Formatting — controls how the tool formats text during processing: throw type template, jump-throw label, aim target prefix, duration format, title/description capitalisation, and whether to strip {GROUP} tags on export.

Throw Types tab

Maps raw throw type text from node titles to the formatted label written to the Description field. Left column is what the tool looks for (case-insensitive), right column is what gets written. Add entries for any custom abbreviations used in your recordings.

Tag Prefixes tab

Legacy bracket-style tags like (LSW) or [CF] are stripped from titles during processing. Add any custom tags you use here. Note: curly-brace group tags ({TAG}) are handled separately by the Groups system.

Icons tab

Add custom icons via image URL to replace the default icon for each node type. Paste an image URL into the input field and click Load to apply it (32×32px recommended). Accepted formats: PNG, JPG, SVG, WebP. Icons are stored in local storage and included in format code exports. Click the Reset button to revert any slot to its default SVG icon.

ℹ️
Use Reset Defaults in the Settings footer to restore all factory values including icons.
Reference

Dev Console

CS|Studio has a built-in developer console for inspecting internal state and running debug commands. Toggle it with the backtick key ` (same key as CS2's console).

Key commands

CommandDescription
helpList all available commands
listNodesPrint all loaded nodes with IDs
selectNode <id>Select a node by its ID
printSelectedNodePrint full details of the selected node
spawnNode <type>Create a new node at the center of the map
deleteSelectedNodeDelete the currently selected node
duplicateNodeDuplicate the selected node
toggleGridToggle the world-unit grid overlay on the map
toggleSnapToggle snap-to-grid when dragging nodes
setMapScale <n>Manually set the map scale value
setRadarOrigin <x> <y>Manually set pos_x and pos_y
exportGuide <side>Export a guide file (ct or t)
versionShow the current version
clearLogClear the console output
swapSwap CT and T side data (dual mode)
toggleNodeIDsShow/hide node index labels on the map
toggleNodeBoundsShow/hide node bounding circles on the map
loadMap <name>Apply a built-in map preset by name
loadOverviewInstructions for loading a radar background image
loadNavInstructions for using a .nav file to auto-calculate bounds
saveGuideForce an immediate auto-save to local storage
reloadGuideTrigger session recovery check
ℹ️
The console supports Tab autocomplete and command history (↑/↓ arrows). Type help for the full list — there are over 30 commands including some hidden easter eggs.
Reference

CS2 Console Commands

Setup

CommandDescription
sv_cheats 1Enable cheat commands (required for annotations and teleport)
sv_allow_annotations 1Enable the annotation system
noclipToggle fly mode — use to position yourself precisely
bot_kickRemove all bots from the session

Creating annotations

CommandDescription
annotation_create grenade smoke "Label" floatSmoke grenade node at current position + angle
annotation_create grenade flash "Label" floatFlashbang node
annotation_create grenade he "Label" floatHE grenade node
annotation_create grenade molotov "Label" floatMolotov node
annotation_create grenade incendiary "Label" floatIncendiary node
annotation_create position "Label"Position node at your feet
annotation_create spotSpot node pair (main + aim target) for wallbangs
annotation_create text "Title" "Desc" floatFloating text note with title and description
annotation_create line float newStart drawing a line; repeat annotation_create line float to extend

Saving & loading

CommandDescription
annotation_save "FileName"Save all nodes to annotations\local\FileName\FileName.txt
annotation_load "FileName"Load an annotation file into the current session
annotation_reload "FileName"Reload a file after editing it externally — no need to re-record
annotation_deleteDelete the node closest to your crosshair
annotation_clearWipe all annotation nodes from the current session

Teleporting (use with copy buttons)

CommandDescription
setpos X Y ZTeleport to coordinates
setang pitch yaw rollSet view angles
💡
Throw the grenade first, then go back to the throw spot, aim at the lineup point, and run annotation_create grenade [type] "Label" float. This way you already know the aim point and destination before recording.
Release Notes

Changelog

v1.1
Inline aim & throw extraction — processing now detects aim hints and throw types written directly in titles (not just in parentheses), e.g. "Cat Flash (1.4s) Aim at the eye of the Goose & Left Click + Jump Throw"
Destination and aim target nodes now display proper labels instead of "(untitled)" in the guide list
Destination and aim target title/description fields are now read-only in the editor (inherited from parent node)
Fixed toolbar disappearing when switching between CT and T side tabs in dual mode
Reveal On Success checkbox now shows context-aware labels explaining how the feature works for each node type
Text selection now works on node titles and descriptions in the guide list — drag-to-reorder restricted to the ⠿ handle
Expanded default throw types to cover all key/state combinations — W/A/S/D, Shift, Crouch, Running modifiers with Left Click, Right Click, Middle Click, and Jump Throw actions
Updated jump throw keyword detection for new modifier combinations
v1.0
Official 1.0 release as CS|Studio Map Guide Tool
Full rebrand from NGT to CS|Studio — updated UI, help docs, format codes (now MGT_ prefix), and all internal references
Redesigned card density toggle — distinct SVG icons for compact/normal/expanded with smooth CSS transitions between modes
Panel-to-map selection — expanding a node card now highlights it and its group on the map view
Fixed compact mode hiding copy buttons inside the expanded node editor
Fixed undo causing the dropzone to reappear in single guide mode
Added full practice config with grenade trajectories, rethrow bind, and Steam Notes tip to the In-Game Recording docs
Beta 2.3
Session restore fix — map auto-selects and blank guide option hidden on recovery
Linking lines glow when their group is selected, non-group lines dim to 15% opacity
Map View side selector hidden in single guide mode
Map View button removed from header — map is always visible as the right panel
Mobile warning modal shown for screens narrower than 900px
SimpleRadar availability check — toggle blocked for maps without bundled images
Icon settings now use URL input with Load button instead of file upload
Resizable node panel — drag handle between panels adjusts width (240-700px)
View modes — Compact / Normal / Expanded card density toggle in panel toolbar
Swap Sides button in dual mode to exchange CT and T side data
Beta 2.2
Node filter bar in Map View — toggle visibility for positions, spots, aim targets, destinations, text, linking lines, and each grenade type
Node marker colors on map now match grenade type colors from Settings
Child nodes (aim targets, destinations) inherit parent grenade type color on map
Group highlighting — clicking a node on the map highlights its full group and dims all others
Pan gesture no longer deselects nodes on the map
Undo now syncs with Map View canvas immediately
About overlay removed — credits accessible via Credits button
Beta 2.1
Brand redesign — new aim-spot logo (circle + diagonal line + inward arrows) with CS|Studio wordmark
CS2-style animated splash screen with bracket corners, loading bar, and smooth exit transition
Full animation system — modals bounce in/out, overlays fade, panels slide, header icons glow on hover
Single ↔ Dual guide mode toggle now animates the T-panel sliding in/out from the right
Map View works without a radar image — nodes display immediately on preset select over dark background
Node drag (mvMove) and click (mvDown) now function correctly without a radar image loaded
All official map coordinates baked in — new maps: de_poseidon, de_sanctum, de_stronghold, de_warden, cs_alpine
Corrected coordinates for de_overpass, de_train (z-split), cs_italy, cs_office, de_anubis
Theme preference persists across sessions via localStorage
Beta 2.0
Completely redesigned responsive header with theme pill, icon buttons, and autosave indicator
Format Code system — share style presets (colors, typography, throw types, tag prefixes, icons) via MGT_-prefixed codes
Custom icon upload system — per-type image overrides
Icons tab added to Settings modal
Map View — node markers colored by grenade type using CFG color settings
Multi-layer map support (nuke, vertigo, train) with layer selector
20 bundled radar images — auto-load on preset select, no upload needed
Map preset code system — share custom radar + coordinate configs
Developer Console — 18 commands, autocomplete, history, grid/snap toggle
Tag prefixes now empty by default
Version 1.1
Map node visualization — upload radar image, overlay node markers
Map preset library (dust2, mirage, inferno, nuke, overpass, ancient, anubis, vertigo)
Click-to-select nodes on radar canvas, hover tooltip
Synchronized sidebar node list with map view
CSStudio Launcher module interface (window.CSStudio + initializeGuideEditor)
Version 1.0
KV3 annotation file parsing & editing
Auto-processing pipeline (colors, throw types, tags)
Search, filter, and drag-to-reorder node list
Guide export system with folder picker
Single / Dual guide modes
Customizable settings, multiple UI themes, undo / redo, auto-save
Export validation & summary, keyboard shortcuts
Release Notes

Planned Features

📍

Click-to-Place Nodes

Click anywhere on the radar in Map View to create a new annotation node at that exact world position — no manual coordinate entry needed.

📦

VPK Radar Extraction

Automatically extract radar images and calibration data from CS2 VPK files so custom maps get accurate overlays without manual setup.

🔗

CSStudio Launcher

Full embedding support — run the guide editor inside a dedicated launcher with native file-system access and one-click export to game directories.

🗜️

Guide Pack Export

Bundle a full guide set (CT + T sides + metadata + radar) into a single shareable archive that anyone can import with one click.

🎨

Node Templates

Save frequently-used node configurations as reusable templates — useful for standardizing smoke, flash, and molotov setups across multiple guides.