Skip to content

snorkelingcode/Blueprint2Text

Repository files navigation

Node2Text

Convert Unreal Engine Blueprint screenshots or whole-asset JSON dumps into a compact, LLM-friendly text format you can paste into any chat. Single chain (one image), multi chain (a sequence of images), and a Dump mode that connects to a running editor over Python Remote Execution and exports an entire Blueprint asset — variables, components, every graph, every node, every wire — in a slim, single-line-per-node format that's roughly 1/7th the size of UE's default JSON output.

Why this exists

Pasting a Blueprint screenshot into an LLM works for ~5 nodes. Past that, the model misreads pin types, hallucinates connections, and misses comment regions. Pasting an entire 70k-line UE JSON dump blows past everyone's rate limits. Node2Text sits in between: it gives you OCR-quality text for small graphs (image mode) and a slimmed-but-faithful representation of huge graphs (dump mode), in a format that's already organized the way an LLM wants to read it.

What's in this repo

Node2Text/
├── server.js                      # Express: /api/health, /api/convert, /api/ue/*
├── server/ueRemote.js             # UE Python Remote Execution client (UDP discover + TCP commands)
├── src/                           # React UI (App.jsx is the whole app)
├── vite.config.js                 # Dev server on :5173, proxies /api -> :8787
├── .env.example                   # Copy to .env, fill ANTHROPIC_API_KEY
├── package.json
└── ue-plugin/Node2TextDumper/     # Drop-in UE plugin (source-only)
    ├── Node2TextDumper.uplugin
    └── Source/Node2TextDumper/
        ├── Node2TextDumper.Build.cs
        ├── Node2TextDumperModule.cpp
        ├── Public/BlueprintIntrospectionBFL.h
        └── Private/BlueprintIntrospectionBFL.cpp

The web app is the front door. The UE plugin is optional — only needed if you want Dump mode (full Blueprint export). Image mode and Multi Chain mode work without it.

Features

  • Image mode — drop or paste a Blueprint screenshot, get back a structured text export plus a human-readable summary. Powered by Claude vision.
  • Multi Chain — sequence of related screenshots; one request, one combined output with cross-step connections called out.
  • Dump mode — connects to your running Unreal editor over Python Remote Execution (multicast UDP), runs a Python script that calls a packaged BFL function (UBlueprintIntrospectionBFL.DumpBlueprintJSONByPath), reads the JSON, and slims it on the server before showing it to you.
  • Slim format — pin types collapsed to strings (Object<Engine.Actor>, Map<Name, real>), node IDs shortened (n1, n2), links rendered as tuples (["n4.then", "n5.execute"]), each node on a single line. Engine-only /Script/... external refs are dropped so only your project's assets surface.
  • Copy / Send — the Output panel has a Copy button (clipboard) and a Send button (clipboard + opens claude.ai/new in a new tab so you can paste with Ctrl+V).

Prerequisites

What Version Why
Node.js 18+ Runs the Express server + Vite client
Anthropic API key any active key Image / Multi Chain modes call claude-opus-4-7
Unreal Engine (optional, Dump mode only) 5.3+ Source of Blueprint data

Setup — web app

git clone <this-repo> Node2Text
cd Node2Text
npm install
copy .env.example .env
# edit .env and paste your key after ANTHROPIC_API_KEY=
npm run dev

Two processes start under concurrently:

  • serverhttp://localhost:8787 (Express, talks to Claude + UE)
  • clienthttp://localhost:5173 (Vite, proxies /api to the server)

Open http://localhost:5173. The header pill should read "API key configured" (green dot). If not, check your .env and restart npm run dev — server-side env is read once at boot.

Setup — Unreal plugin (Dump mode only)

This is only needed if you want to use Dump mode. Image and Multi Chain modes work without any UE setup.

1. Drop the plugin into your project

Copy the ue-plugin/Node2TextDumper/ folder into your UE project's Plugins/ directory, e.g.:

MyProject/
├── MyProject.uproject
├── Source/
└── Plugins/
    └── Node2TextDumper/        <-- copy here
        ├── Node2TextDumper.uplugin
        └── Source/...

(If your project doesn't already have a Plugins/ folder, create it.) Then either right-click your .uproject and choose Generate Visual Studio project files, or open the project — UE will prompt you to compile the new module.

2. Enable the required engine plugins

In the editor, Edit → Plugins:

  • Python Editor Script Plugin — required (the BFL is called from Python).
  • Editor Scripting Utilities — required.

Restart the editor when prompted.

3. Enable Python Remote Execution

Edit → Project Settings → Plugins → Python, tick Enable Remote Execution. Leave the multicast group at 239.0.0.1 and port 6766. Restart the editor once more so the multicast socket binds at startup.

4. Verify the BFL is exposed

Open the editor's Python console (Window → Developer Tools → Output Log, switch input to "Python") and run:

import unreal
print(hasattr(unreal, "BlueprintIntrospectionBFL"))            # -> True
print(hasattr(unreal.BlueprintIntrospectionBFL, "dump_blueprint_json_by_path"))  # -> True

If both are True, the plugin compiled and Python sees it. If either is False, check the editor's Output Log for compile errors and confirm the plugin appears in Edit → Plugins → Editor.

5. Connect from Node2Text

  1. In the Node2Text UI, switch the source dropdown from Image to Dump.
  2. Click Connect — the server multicasts a ping; your editor replies within ~1.5 s. The detected editor shows up as a chip with project name + engine version.
  3. Type a Blueprint package path, e.g. /Game/Characters/BP_Hero.BP_Hero (always include the .AssetName suffix), or paste a Windows filesystem path (C:\...\Content\...\BP_Hero.uasset) — the server normalizes it.
  4. Click Dump. The server pipes the bundled Python script into UE, captures stdout, slims the JSON, and shows it in the Output pane. Hit Copy to put it on your clipboard, or Send to open claude.ai/new in a new tab (with the dump pre-copied so you can paste once you're there).

How the slimmer works

UE's default JSON pretty-printer is verbose: each pin type spans 7 lines, each link spans 7 lines, and /Script/Engine.* refs flood the externalReferences list. The server-side slimmer:

  • Extracts the JSON object from UE's stdout (skips surrounding log lines).
  • Drops empty strings, empty arrays, subCategory: "None", container: "single", isReference: false, isConst: false.
  • Collapses pin types to compact strings: bool, real(double), Object<Engine.Actor>, Array<Struct<FVector>>, Map<Name, real>.
  • Replaces full node GUIDs with short IDs (n1, n2, …) and rewrites all link references to use them.
  • Replaces pin GUIDs in links with pin names (which are unique within a node), so a link reads ["n4.then", "n5.execute"] instead of {"from":{"node":"GUID","pin":"GUID"},"to":{"node":"GUID","pin":"GUID"}}.
  • Strips the K2Node_ prefix from node classes (CallFunction instead of K2Node_CallFunction).
  • Filters externalReferences to /Game/... only (drops /Script/Engine.*, /Script/CoreUObject.*, etc.).
  • Re-serializes with a custom pretty-printer that puts each node, pin, link, and variable on a single line — but keeps graphs and the top-level structure indented.

A typical reduction is ~7× (e.g. 70k lines → 10k lines on a complex character BP).

Troubleshooting

Symptom Likely cause Fix
"API key missing" banner .env not present or key blank Copy .env.example to .env, fill in the key, restart npm run dev (env is read at server boot)
Connect returns no instances Remote Execution not enabled, or multicast blocked by Windows Firewall / Hyper-V virtual adapters Enable in Project Settings → Python, restart editor; allow node.exe on Private networks; ensure both processes are on the same machine (default TTL is 0)
"UE did not connect — is Python Remote Execution enabled?" Editor saw the multicast but didn't open the TCP back-channel within 5 s Toggle Remote Execution off/on in Project Settings; check Output Log for LogPython errors
AttributeError: module 'unreal' has no attribute 'BlueprintIntrospectionBFL' Plugin not compiled, or compiled but not loaded Check Edit → Plugins → Editor — Node2Text Dumper must be enabled. Rebuild via your IDE or by deleting Binaries//Intermediate/ and reopening the project
AttributeError: type object 'BlueprintIntrospectionBFL' has no attribute 'dump_blueprint_json_by_path' Likely a stale Python reflection cache after Live Coding Full editor restart picks up new UFUNCTIONs
Dump returned no output The Python template didn't print(...) to stdout Use the bundled default template, or make sure your custom script prints the JSON
SyntaxError: 'unicodeescape' codec can't decode A Windows path got injected into a Python string with raw backslashes Already handled — the server now escapes backslashes when substituting {{path}}. Update if you see this on an old build
429 rate_limit_error from Anthropic Trying to send a huge dump through the API Use Copy or Send for dumps — they bypass the API. The API is only used for image modes

Architecture sketch

Image mode:                   Dump mode:

  Browser                       Browser
    ↓ multipart upload            ↓ JSON { remoteNodeId, blueprintPath, pythonTemplate }
  Express /api/convert          Express /api/ue/dump-and-convert
    ↓ Anthropic SDK               ↓ ueRemote.runCommand()
  Claude (vision)                 ↓ multicast UDP open_connection
    ↓ text                        ↓ TCP back-channel command
  Browser displays              Unreal Editor (Python)
                                  ↓ unreal.BlueprintIntrospectionBFL.dump_blueprint_json_by_path()
                                  ↓ writes Saved/BlueprintDumps/<Name>.json
                                  ↓ reads file, prints to stdout
                                Express captures stdout → slimDump() → response
                                  ↓
                                Browser displays

License

MIT. See LICENSE.

Credits

The UE plugin's UBlueprintIntrospectionBFL was extracted from a larger editor-tooling module into a standalone, editor-only plugin for this release.

About

Convert Unreal Engine Blueprints into LLM-ready text. Upload images or connect via Python remote execution and dump the entire blueprint.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages