Skip to content

UI Mapping

Pro — $19 This tool requires the Godot addon.

Static analysis can tell you what Control nodes exist in your .tscn files. But it can’t tell you what text a Label is actually showing, whether a button is currently visible, or what the progress bar value is — those are runtime states.

ui_map reads the live UI tree from the running game via the bridge connection. It captures every Control node’s current properties — text content, visibility, position, size, theme overrides, and signal connections. This gives your AI a complete picture of the UI as it appears to the player.


Maps the runtime UI element tree via the EngineDebugger bridge. Returns all Control nodes with their properties, hierarchy, and signal connections.

  • Understanding the UI structure of a running game
  • Finding a specific UI element to modify (e.g., “find the health bar label”)
  • Debugging UI issues — elements hidden, wrong text, unexpected layout
  • Getting the current state of dynamic UI (inventory slots, dialogue text, scores)
ParameterTypeDefaultDescription
rootstring"/root"Root node to start mapping from
filter_typestringnullFilter to specific Control types (e.g., "Button", "Label")
include_hiddenbooltrueInclude invisible controls
detailstring"normal"Output verbosity

Prompt: “Show me the current UI layout of the HUD.”

Tool call
{
"tool": "ui_map",
"args": {
"root": "/root/Main/UI/HUD",
"detail": "normal"
}
}
Output
{
"root": "/root/Main/UI/HUD",
"control_count": 14,
"tree": {
"name": "HUD",
"type": "CanvasLayer",
"children": [
{
"name": "TopBar",
"type": "HBoxContainer",
"rect": { "position": [0, 0], "size": [1920, 60] },
"children": [
{
"name": "HealthBar",
"type": "ProgressBar",
"rect": { "position": [20, 10], "size": [200, 40] },
"value": 75,
"max_value": 100,
"visible": true
},
{
"name": "HealthLabel",
"type": "Label",
"text": "75 / 100",
"visible": true,
"theme_overrides": { "font_color": "#ff4444" }
},
{
"name": "ScoreLabel",
"type": "Label",
"text": "Score: 1,250",
"visible": true
}
]
},
{
"name": "BottomBar",
"type": "HBoxContainer",
"rect": { "position": [0, 1020], "size": [1920, 60] },
"children": [
{
"name": "InteractPrompt",
"type": "Label",
"text": "Press E to open",
"visible": false
},
{
"name": "MiniMap",
"type": "SubViewportContainer",
"rect": { "position": [1720, 0], "size": [180, 180] },
"visible": true
}
]
}
]
},
"signals": [
{
"node": "HealthBar",
"signal": "value_changed",
"connected_to": "HUD._on_health_changed"
}
]
}
  • Use filter_type: "Button" to find only interactive elements, or "Label" to find only text elements
  • Set include_hidden: false to see only what the player currently sees
  • The detail: "full" mode includes theme overrides, custom fonts, anchor/margin values, and all Control-specific properties
  • Combine with node_ops to modify UI elements: first find the node with ui_map, then change its properties with node_ops
  1. Map the UI with ui_map to understand the current structure
  2. Identify the target — find the specific Label, Button, or Container you need
  3. Modify with node_ops — set properties on the running UI for immediate feedback
  4. Update the scene file — once you’re happy with the changes, edit the .tscn to make them permanent

  • Bridge toolsnode_ops to modify UI nodes, screenshot to capture the visual result
  • Code analysissignal_map to trace UI signal connections in the codebase
  • Installation — Setup guide including addon installation