Files
integration/Docs/Blueprint Text Export.md

2.5 KiB

Blueprint Text Export

Blueprints are stored as binary .uasset files that Claude Code cannot read directly. To work around this, a text exporter automatically converts blueprint graphs to readable text files whenever a blueprint is saved in the Unreal editor.

How It Works

The game module (FlxIntegrationModuleImpl in Source/Integration/Integration.cpp) hooks into UPackage::PackageSavedWithContextEvent. When a blueprint is saved, it iterates each UEdGraph in the blueprint and runs FlxBlueprintExporter on it. The output is written to Saved/BlueprintExports/<BlueprintName>/<GraphName>.txt.

The exporter class (Source/Integration/BlueprintExporter.h/.cpp) processes one graph at a time. The constructor runs all passes and the result is available via GetOutput().

Output Format

The graph file is written to Saved/BlueprintExports/<BlueprintName>/<GraphName>.txt. A details file with node-name-to-GUID mappings is written to Saved/BlueprintExports/<BlueprintName>/DETAILS/<GraphName>.txt.

Every line in the graph file starts with a keyword, making it easy to parse. The format is:

node Event_Tick
    return Output_Delegate, Delta_Seconds
    goto Set_Tick_Delta_Seconds

node Set_Tick_Delta_Seconds
    input Real Tick_Delta_Seconds = Event_Tick.Delta_Seconds
    return Output_Get
    goto CallFunctionByName

Line Keywords

  • node Name — starts a new node block.
  • input Type Name = Source — an input data pin. Source is a Node.Pin reference, a literal value, <self>, or <default>.
  • return Pin1, Pin2 — output data pins.
  • goto Target — exec flow (single output).
  • goto-if PinName Target — exec flow (multiple outputs, e.g. branch true/false).
  • // comment text — comment node.

Special Handling

  • String defaults are shown in quotes.
  • Variable get nodes are inlined (the variable name appears directly at the point of use rather than as a separate node).
  • Knot (reroute) nodes are followed through transparently.

Node Ordering

Nodes are sorted by a traversal algorithm: find starter nodes (exec output but no exec input), sort them by Y position, then traverse each. The traversal visits a node's inputs first (so data sources appear before their consumers), then emits the node itself, then follows exec outputs. This produces a readable top-down flow. Any unvisited nodes are appended at the end.

Node Naming

Names are derived from ENodeTitleType::ListView titles, sanitized to alphanumeric plus underscores. Duplicates get _2, _3, etc.