HUD Builder
The Builder is where you compose overlays: canvas parts (main canvas, scoreboard, minimap layers, custom groups), place HTML/CSS components, and attach trigger → effect chains. Saved output is a HUD package consumed by the app’s local server and CS2 GSI.
Builder overview
Parts — The left “part” selector chooses which logical surface you edit (e.g. main canvas, nested custom canvas, scoreboard, minimap player icons). Each part has its own component list and dimensions (1920×1080 or 3840×2160 canvas presets).
Blank vs default layout — You can start from a full template (stock surfaces + factory registry) or a blank layout that hides stock surfaces from the part menu while still saving a compatible HUD shell.
GSI binding (legacy) — Components can bind data paths for live updates. The <> Triggers & effects panel is the structured way to add chains that sync with the first compatible binding row.
Saving — Saves metadata, HTML bundle, preview capture, and version/sub-URL fields to your local HUD folder.
2.1 HTML & CSS components
These are the flexible building blocks you drag onto a canvas. They are implemented as DOM/HTML layers scaled to the
design surface. Types include html-text, html-image, html-svg, and
image (depending on generation), plus composite factory types (see below).
Common properties across many components:
- Position & size — X/Y, width/height, alignment (corners / center).
- z-index — Layer order within the same canvas.
- Visibility — Toggle without deleting.
- Crop — Optional insets (left/right/top/bottom) to clip images.
- Team color side — For some assets, tint using CT or T color from HUD metadata.
- GSI binding / trigger chains — Connect live data or app data to visibility and animations.
2.1.1 Text settings (html-text)
Renders rich text on the overlay using web fonts. Typical options:
- Content — Static text or placeholder text driven by bindings.
- Font — Google Fonts family picker (fonts are loaded in the exported HUD).
- Size & color — Font size, fill color.
- Weight / style — Bold / italic.
- Alignment — Left, center, right within the box.
Use cases: titles, stat readouts, round timers, labels paired with icons.
2.1.2 Image settings (html-image / image)
Displays raster images (often PNG/WebP data URLs from the Builder). Options include:
- Source — Embedded image data or URL.
- Corner radius — Rounded corners for framed photos or icons.
- Team color tint — Where supported, multiply with CT/T palette.
- HP fill direction — For player-bar style images: reveal a percentage of the image based on player HP (left-to-right, vertical variants, etc.).
- Minimap player icon — On minimap player layers, Rotate with player aligns the asset with GSI view direction; disable for static numbers or markers.
Use cases: team logos, player photos, weapon icons, decorative frames.
2.1.3 SVG settings (html-svg)
Embeds inline SVG markup for crisp scaling. Often used for icons, simple shapes, and vector masks.
- SVG content — Raw SVG string.
- Team color — Tint with CT/T like images.
- Crop & layout — Same general rules as other HTML components.
Use cases: HUD chrome, vector icons, scalable shapes that track colors.
2.2 Factory components
Factory surfaces are pre-structured regions of the HUD — not generic HTML boxes — mapped to game concepts. You add them from the factory / part menu and often nest them under registry groups (e.g. Team Block root → vertical CT → alive/dead surfaces).
Examples of stock surfaces (design keys)
- Main canvas —
main-canvas: freeform layout. -
Scoreboard —
scoreboard: team scores, names, logos as configured by components on that surface. -
Minimap —
minimapbackground;minimap-players-ct,minimap-players-t,minimap-shooting,minimap-players-deadfor layered icons. - Player blocks — Vertical/horizontal CT/T, alive vs dead canvases for roster strips.
- Team blocks — Aggregated team layouts (vertical/horizontal CT/T).
-
Team eco / utils —
team-eco-utils-ct/team-eco-utils-t; the editor can composite both for preview. -
Map veto —
map-veto-bo1,map-veto-bo3,map-veto-bo5. -
Other main surfaces — e.g.
players-alive,round-mvp,round-wins,player-focus,active-player,player-stats.
Custom canvas groups — You can add user-named canvas groups and nested surfaces; the registry drives sub-dropdowns in the part selector. Factory chips may be dragged into custom groups when the UI allows factory instance placement.
Use cases
- Guarantee correct layering for minimap and scoreboard without manual pixel math across modes.
- Reuse the same logical structure across tournaments while swapping only main-canvas branding.
2.3 Triggers & effects
The Triggers & effects panel defines ordered chains: each row pairs a trigger (when something happens) with an effect (what the visual does). Chains are stored on the component; the first chain row may sync with legacy GSI binding fields.
Effects (all groups)
- Show item (
effect.show) — Instant visibility toggle. -
Fade animation (
effect.fade) — Directional fade; parameters include direction, start visible/invisible, duration. -
Clock animation (
effect.clock) — Wipe / clock-style reveal; clockwise or counter-clockwise, duration, start state.
Keybind trigger — Special case: trigger trigger.keybind with a slot parameter
(kb1…kb18) ties the row to HUD keybind polling from the overlay server.
2.3.1 GSI triggers
Live game Triggers in the GSI group read Counter-Strike 2 game state
delivered via Game State Integration (HTTP JSON to the app, typically from gamestate_integration_*.cfg).
They cover player stats, economy, bomb state, round phases, timers, and match-level fields.
Trigger categories (reference)
| Category | Examples (internal values) | Typical use |
|---|---|---|
| Player | gsi.player.hp, kills, deaths, assists, economy, respawn, dead, joined |
HP bars, K/D/A, money, death overlays |
| PlayerWeapon | gsi.player_weapon.weapon, ammo, bomb equipped, utility |
Weapon widgets, ammo counters, grenade UI |
| Bomb | planting, defusing, dropped, planted | Bomb timers, site callouts |
| Economy | team economy, loss bonus, grenade totals, player economy | Buy expectations, team money displays |
| Round | round winner, freezetime, round start/end | Phase transitions, stingers |
| Timer | bomb timer, round timer | Clocks, urgency effects |
| Match | team score, team name/logo, alive in team, tournament name/image, player number (minimap) | Headers, logos, minimap labels tied to match context |
Exact runtime behavior depends on HUD renderer logic for each trigger key; use chains to show/hide or animate when the bound value changes or crosses thresholds.
2.3.2 LastHUD API triggers
App data Triggers in the LastHUD API group read data maintained inside LastHUD (not from the game binary): roster profiles, map veto state from the active match, schedule, and keyboard slots.
Categories (reference)
| Category | Examples | Typical use |
|---|---|---|
| Player Data | SteamID, IGN, name, flag, team | Roster-accurate text and images vs raw GSI names |
| VETO | BO1 / BO3 / BO5 veto data from current match | Map veto screens matching tournament format |
| Matches | Current match teams & best-of, upcoming match | Schedule bugs, lower-third match info |
| Animate on Keybind | trigger.keybind + slot |
Operator-driven stingers, replay-style animations |
Overlay HTTP API (browser source)
The local HUD server (default port 8080) exposes JSON endpoints the rendered HUD polls. These align with Settings sync and Live Match configuration.
| Method & path | Purpose |
|---|---|
GET /api/active-match |
Active match payload (teams, veto, etc.) or null. |
GET /api/active-tournament |
Active tournament { name, logo? } or null. |
GET /api/registered-players |
Array of Steam IDs allowed when strict mode is relevant. |
GET /api/strict-players |
Boolean strict mode flag. |
GET /api/player-names |
Map of Steam ID → display name from the app. |
GET /api/player-pictures |
Map of Steam ID → picture URL/data for overlays. |
GET /api/camera-links |
Map of Steam ID → stream URL (e.g. for Player Focus). |
GET /api/radar-assets |
Optional custom minimap dot images (CT/T/default). |
GET /api/hud-keybinds |
18 accelerator strings (Electron format) for keybind triggers. |
GET /api/hud-keybind-last-fire |
Last fire timestamps per slot for edge detection. |
GSI endpoint — Game state is ingested separately (e.g. http://127.0.0.1:31337/api/game-state
in the app configuration), not as part of the static HUD file list above.