To add a radar background, drag the radar .png onto this canvas.
Save your custom radar's position, scale, and image as a named preset so you can switch back to it instantly.
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.
Drag and drop your .txt annotation file onto the panel
One click auto-formats colors, throw types, and tags
Download a clean, game-ready KV3 file
Use the ⊟ Single Guide / ⊞ Dual Guide toggle in the header to pick between one file or split CT + T files.
Drag a .txt KV3 annotation file onto the drop zone, or click the zone to browse.
Click ⚡ Process on the guide panel to automatically apply all formatting rules — colors, throw types, tag stripping, and text node merging.
Click any node row to expand its editor. Drag the ⠿ handle to reorder nodes.
Click ↓ Export on the panel to download your processed file.
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 anywhere on the drop zone to open a file picker.
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 mode toggle in the header switches between how many guides you're working with at once.
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.
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.
After loading a file, all annotation nodes appear as rows. Each row shows at a glance:
| Element | Description |
|---|---|
| Color dot | The node's assigned color reflecting its type — smoke teal, flash amber, etc. |
| G Type badge | Short code for the node type. See Node Types reference below. |
| 0 Index | Node position in the file (0-based). Indices 0–29 show in green — these appear in online/competitive mode. Node 30+ only appears in Practice. |
| Title | The node's display title — what players see in-game. |
| pos ang tp | Clipboard buttons for in-game console teleport commands. |
| ▶ Expand arrow | Click anywhere on the row (except buttons) to toggle the node editor. |
CS2 annotation guides have two node limits:
| Mode | Limit |
|---|---|
| Practice | 300 nodes total |
| Online / Competitive | First 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.
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.
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.
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.
Clicking ⚡ Process runs a five-pass formatter over all 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.
Inherits color from the parent grenade node. Fills empty aim descriptions with a hint from a nearby text node or the throw type.
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.
Sets all spot nodes to gray.
Merges non-Tip text nodes near aim targets or positions into those nodes, then removes them. Tip and Guide By nodes are always kept.
Click any node row to expand its editor. All fields are editable at any time — before or after processing.
| Field | Description |
|---|---|
| Title | The main text displayed in-game for this node. |
| Description | Secondary text shown below the title. Throw type for grenade mains, aim hint for aim targets. |
| Color | Preset swatches for every standard color plus a custom hex picker. |
| Grenade Type grenade main | Changing this also updates the color to match the standard scheme. |
| Jump Throw grenade main | Toggles the JumpThrow flag for lineups that require jumping while throwing. |
| Enabled | Hide a node in-game without deleting it. |
Commits field changes and refreshes the list. An undo snapshot is taken before each save.
Creates a copy of the node with a new ID, inserted immediately after the original. All properties are cloned.
Dual Guide mode only. Moves this node to the other panel. The other panel must have a file loaded.
Removes the node after a confirmation prompt. Use Ctrl+Z immediately after to undo.
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).
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.
Every node with a recorded position shows clipboard copy buttons on its row.
| Button | Copies | CS2 Command |
|---|---|---|
| pos | Position | setpos X Y Z |
| ang | Angles | setang pitch yaw roll |
| tp | Position + angles | setpos X Y Z; setang pitch yaw roll |
Launch CS2 and load the map in the console: map de_dust2
Run sv_cheats 1 — required for teleport commands.
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.
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.
Before saving, The tool runs a validation check and may show a Validation Results panel:
| Icon | Meaning |
|---|---|
| ✅ | 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.
After a successful export a confirmation panel shows the guide name, map, node count, mode, and filename.
Then load it in-game:
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.
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.
CS2 saves annotation files to:
Each guide gets its own subfolder matching the filename. Use annotation_load "GuideName" to load them in CS2.
Record in CS2 → save to .txt → load in CS|Studio → process & edit → export processed file → load back in CS2 for final review.
CS2 annotations use four node types, each with subtypes:
| Type | What it represents |
|---|---|
| grenade / main | The throw position — where you stand and the angle you throw from |
| grenade / aim_target | Where you aim your crosshair for the throw |
| grenade / destination | Where the grenade lands |
| position / main | A movement or pre-aim spot |
| spot / main + aim_target | A wallbang — the shooting position and the aim point |
| text / main | A floating text note |
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.
Open CS2, then in console: map de_dust2 (or any map). Wait for the map to fully load.
Paste this block into the console to enable annotations, cheats, and a long round timer:
Then run noclip to fly freely, and bot_kick to remove bots.
A comprehensive practice config with grenade trajectories, impact markers, infinite money, respawn, and rethrow bind. Copy and paste the entire block:
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.
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:
The label goes in quotes. Follow naming conventions below for best results.
Stand at a pre-aim spot or movement position:
annotation_create position "B Apartments Preaim"
CS2 creates the node at your feet.
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.
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.
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.
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.
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.
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.
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.
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.
Format: Location Name (Throw Type)
| Example name | What 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.
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).
The tool assigns colors by keyword in the name:
| Keyword in name | Color assigned |
|---|---|
| sound / cue / listen | Purple — sound cue position |
| wallbang / bang | Gray — wallbang spot |
| plant / planting | Coral — plant position |
| anything else | Gold — movement / pre-aim |
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.
Processing strips the {TAG} prefix from titles when "Strip {GROUP} tags on process" is enabled in Settings → Formats.
The tool handles text nodes automatically based on their title:
| Title | Behaviour |
|---|---|
| Tip | Always kept — displayed as a standalone tip in the guide |
| Guide By | Always kept — credits node |
| anything else | The tool merges the text node's description into the nearest aim target or position, then removes it |
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.
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.
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.
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.
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.
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.
Multi-floor maps (Nuke, Vertigo, Train) show a Layer dropdown. Switch between Upper and Lower to see each floor's nodes independently.
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.
Nodes render on a dark canvas without a background image. To add the actual radar PNG:
The image loads and the nodes snap to their correct positions on the radar automatically.
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.
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.
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.
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.
Tags are case-insensitive — {lcs} and {LCS} merge into the same group.
| Button | What it does |
|---|---|
| Select all | Enters selection mode with all nodes in the group pre-selected |
| Extract | Copies the group to a new blank guide file and downloads it — useful for splitting one large recording into per-lineup files |
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.
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.
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.
| Action | What it does |
|---|---|
| Click a checkbox | Toggle that node in/out of the selection |
| Select All button | Select every visible node in the panel |
| Select Group (group header) | Select all nodes belonging to that group |
| None button | Clear the selection |
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.
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.
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo last action |
| Ctrl + Shift + Z | Redo |
| Ctrl + S | Export current guide |
| N | Create new node (when not typing in a field) |
| Delete | Delete the currently expanded node |
| ` (backtick) | Toggle the developer console |
| Double-click on map | Reset Map View pan and zoom to default |
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.
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.
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.
| Badge | Type | Description |
|---|---|---|
| G | Grenade — Main | Throw position. Contains coords, angles, grenade type, throw type, and JumpThrow flag. |
| GA | Grenade — Aim Target | Crosshair aim point. References the parent grenade via MasterNodeId. |
| GD | Grenade — Destination | Where the grenade lands. Visual reference in the overlay. |
| P | Position | A standing position — pre-aim, sound cue, wallbang, or plant spot. |
| S | Spot — Main | Spot marker used in wallbang groups. Always gray. |
| SA | Spot — Aim Target | Aim point for a wallbang. References a master spot node. |
| T | Text | Floating text label. Kept if titled Tip or Guide By; otherwise merged during processing. |
| L | Line | A drawn line between points. Created with annotation_create line in CS2. |
| Node Type | Color | RGB |
|---|---|---|
| Smoke | Teal | [29, 158, 117] |
| Flash | Amber | [255, 195, 0] |
| Molotov / Incendiary | Orange-Red | [220, 80, 30] |
| HE Grenade | Red | [200, 60, 60] |
| Sound Position | Purple | [134, 77, 183] |
| Wallbang / Spot | Gray | [160, 160, 160] |
| Plant Position | Coral | [220, 100, 80] |
| Pre-Aim / Movement | Gold | [255, 175, 30] |
Open via ⚙ Settings in the header. All settings persist in your browser's local storage.
Change the color assigned to each node type. Changes take effect on the next processing run.
Two sub-sections:
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.
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.
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.
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).
| Command | Description |
|---|---|
| help | List all available commands |
| listNodes | Print all loaded nodes with IDs |
| selectNode <id> | Select a node by its ID |
| printSelectedNode | Print full details of the selected node |
| spawnNode <type> | Create a new node at the center of the map |
| deleteSelectedNode | Delete the currently selected node |
| duplicateNode | Duplicate the selected node |
| toggleGrid | Toggle the world-unit grid overlay on the map |
| toggleSnap | Toggle 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) |
| version | Show the current version |
| clearLog | Clear the console output |
| swap | Swap CT and T side data (dual mode) |
| toggleNodeIDs | Show/hide node index labels on the map |
| toggleNodeBounds | Show/hide node bounding circles on the map |
| loadMap <name> | Apply a built-in map preset by name |
| loadOverview | Instructions for loading a radar background image |
| loadNav | Instructions for using a .nav file to auto-calculate bounds |
| saveGuide | Force an immediate auto-save to local storage |
| reloadGuide | Trigger session recovery check |
| Command | Description |
|---|---|
| sv_cheats 1 | Enable cheat commands (required for annotations and teleport) |
| sv_allow_annotations 1 | Enable the annotation system |
| noclip | Toggle fly mode — use to position yourself precisely |
| bot_kick | Remove all bots from the session |
| Command | Description |
|---|---|
| annotation_create grenade smoke "Label" float | Smoke grenade node at current position + angle |
| annotation_create grenade flash "Label" float | Flashbang node |
| annotation_create grenade he "Label" float | HE grenade node |
| annotation_create grenade molotov "Label" float | Molotov node |
| annotation_create grenade incendiary "Label" float | Incendiary node |
| annotation_create position "Label" | Position node at your feet |
| annotation_create spot | Spot node pair (main + aim target) for wallbangs |
| annotation_create text "Title" "Desc" float | Floating text note with title and description |
| annotation_create line float new | Start drawing a line; repeat annotation_create line float to extend |
| Command | Description |
|---|---|
| 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_delete | Delete the node closest to your crosshair |
| annotation_clear | Wipe all annotation nodes from the current session |
| Command | Description |
|---|---|
| setpos X Y Z | Teleport to coordinates |
| setang pitch yaw roll | Set view angles |
Click anywhere on the radar in Map View to create a new annotation node at that exact world position — no manual coordinate entry needed.
Automatically extract radar images and calibration data from CS2 VPK files so custom maps get accurate overlays without manual setup.
Full embedding support — run the guide editor inside a dedicated launcher with native file-system access and one-click export to game directories.
Bundle a full guide set (CT + T sides + metadata + radar) into a single shareable archive that anyone can import with one click.
Save frequently-used node configurations as reusable templates — useful for standardizing smoke, flash, and molotov setups across multiple guides.