{"id":50413616,"url":"https://github.com/ibrews/blueprint-auto-layout","last_synced_at":"2026-05-31T05:01:35.539Z","repository":{"id":361502608,"uuid":"1246925268","full_name":"ibrews/blueprint-auto-layout","owner":"ibrews","description":"Pin-aware auto-layout for Unreal Engine Blueprint graphs. Right-click empty graph space or press Ctrl+Shift+L. Handles branches, pure nodes, multi-event roots. UE 5.7+","archived":false,"fork":false,"pushed_at":"2026-05-30T22:53:18.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T00:19:46.933Z","etag":null,"topics":["auto-layout","blueprint","cpp","editor-plugin","ue5","unreal-engine","unrealengine"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ibrews.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-22T17:53:18.000Z","updated_at":"2026-05-30T22:53:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ibrews/blueprint-auto-layout","commit_stats":null,"previous_names":["ibrews/blueprint-auto-layout"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ibrews/blueprint-auto-layout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibrews%2Fblueprint-auto-layout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibrews%2Fblueprint-auto-layout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibrews%2Fblueprint-auto-layout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibrews%2Fblueprint-auto-layout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ibrews","download_url":"https://codeload.github.com/ibrews/blueprint-auto-layout/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ibrews%2Fblueprint-auto-layout/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33719601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-layout","blueprint","cpp","editor-plugin","ue5","unreal-engine","unrealengine"],"created_at":"2026-05-31T05:01:32.994Z","updated_at":"2026-05-31T05:01:35.533Z","avatar_url":"https://github.com/ibrews.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blueprint Auto Layout\n\nPin-aware auto-layout for Unreal Engine Blueprint graphs. Right-click on empty graph space → **Auto Layout Graph** → the algorithm rearranges your nodes into a readable left-to-right execution flow.\n\n![Before and after running Auto Layout \u0026 Group Graph](Docs/before-after.png)\n\nTwo right-click actions:\n\n- **Auto Layout Graph** — arranges the graph (default; doesn't add anything).\n- **Auto Layout \u0026 Group Graph** — arranges it *and* wraps each event/function subtree in a comment box automatically named after its root (the screenshot above).\n\nHandles:\n\n- Branches (`Branch`, `Switch`, multi-output exec nodes) — sibling paths stack vertically without overlap\n- Pure (data-only) nodes — clustered into a reserved column to the left of their consumer, chained pure nodes included\n- Multi-event graphs — each event/function root gets its own row\n- Sequence nodes — laid out as sequential, not branching\n- Reroute (knot) nodes — treated as wire bends, repositioned onto the wire they sit on instead of cluttering the flow\n- Comment boxes — resized and repositioned to keep wrapping the nodes they contain after everything moves\n- Variable-width nodes — true node sizes are used, not assumed averages\n\nBuilt as a single editor module with no runtime cost. One undo step per layout.\n\n📖 **Full documentation in the [Wiki](https://github.com/ibrews/blueprint-auto-layout/wiki)** — installation, usage, algorithm internals, configuration, troubleshooting, and roadmap.\n\n## Install\n\n1. Clone (or copy) this repo into `\u003cYourProject\u003e/Plugins/blueprint-auto-layout/`.\n2. Right-click your `.uproject` → **Generate Project Files**.\n3. Build the project.\n4. Launch the editor. The plugin loads automatically.\n\n## Usage\n\nRight-click on empty space in any Blueprint / Animation Blueprint / Macro graph → **Layout →** and pick one of:\n\n- **Auto Layout Graph** — rearranges the nodes.\n- **Auto Layout \u0026 Group Graph** — rearranges the nodes, then creates a comment box around each event/function subtree, named after that root node (e.g. an event named `On Box Destroyed` → a comment titled \"On Box Destroyed\"). Existing comments are still re-wrapped; this only *adds* the per-subtree group boxes.\n\nEither way the change is wrapped in a single transaction — one `Ctrl+Z` undoes the entire layout.\n\n## Engine support\n\nCurrently developed and verified against **Unreal Engine 5.7**.\n\nIntended future support: 5.5, 5.6, 5.8 (the plugin uses only stable `UEdGraph` and `K2Node_*` public API, so the multi-version matrix should be straightforward — that's a separate verification pass).\n\n## Things to Try\n\n1. Open a messy event graph. Right-click empty space → **Auto Layout Graph**. Watch nodes snap to a clean flow.\n2. Press **Ctrl+Z** once. The entire layout reverts — the action is a single undo step.\n3. Open a graph with multiple events (`BeginPlay`, custom events, etc). Run auto-layout. Each event becomes its own row.\n4. Add a `Branch` node mid-flow. Run auto-layout. The True/False paths stack vertically without overlap; the `Then` path takes the upper lane.\n5. Open an Animation Blueprint's AnimGraph or Event Graph. The same **Auto Layout Graph** entry appears — the menu attaches to all `UEdGraphSchema_K2`-derived schemas.\n6. Chain three Variable Get nodes feeding into a math expression. Run auto-layout. Each node in the chain positions correctly to the left of its consumer.\n7. Wrap a group of nodes in a comment box, then drag them apart into a mess. Run auto-layout — the comment resizes and repositions to keep wrapping its nodes in their new spots.\n8. Drop a reroute (knot) node into a wire. Run auto-layout — the knot lands on the wire as a bend instead of being treated as a node in the execution flow.\n9. On a graph with several events, run **Auto Layout \u0026 Group Graph**. Each event's subtree is laid out and wrapped in its own comment box, auto-named after the event — no typing required.\n\n## Algorithm overview\n\nLayout proceeds in five phases:\n\n1. **Build** the layout tree: classify nodes as exec/pure/branch/root (and tag reroute knots and comment boxes separately), measure each node's size — reading the **actual rendered size** from the open graph panel when available, falling back to a pin-based estimate — traverse exec flow from each root *tracing through reroute nodes*, collect pure-node providers for each consumer (including chained pure → pure → exec chains, also traced through knots), and record which nodes each comment box currently wraps.\n2. **Measure** subtree heights from the leaves upward (in pixels), accounting for branch spacing.\n3. **Assign** positions top-down: exec subtrees flow left-to-right; branches stack their children vertically; each consumer reserves a horizontal lane for its pure-node column so the column can't overlap the exec predecessor.\n4. **Apply** the calculated positions to the actual `UEdGraphNode`s via a single transaction.\n5. **Finish** with two cosmetic passes: drop each reroute (knot) node onto the midpoint of the wire it sits on, and resize/reposition each comment box to wrap its recorded members in their new positions.\n\nWhen **Auto Layout \u0026 Group Graph** is used, one extra step runs afterward: for each root subtree (collected from the tree built in phase 1), a new comment box is created around its members and named after the root node's title.\n\nConfiguration constants (paddings, default sizes, pure-node column limits, comment padding) live in `FBlueprintLayoutConfig` in `BlueprintAutoLayout.h`. They are not yet user-exposed.\n\n## Status\n\nv0.4.0 — public, MIT licensed. Not yet on Fab.\n\nKnown limitations:\n- **Context menu only** — no hotkey or toolbar button yet. (A `Ctrl+Shift+L` hotkey was attempted in 0.2.0 but pulled in 0.2.1; it needs a proper command-list extender, planned for a later release.)\n- No \"layout selected nodes\" — operates on the whole graph.\n- No asset-action (\"layout all graphs in this BP\") — operates on the visible graph only.\n- No settings panel — configuration constants require a source code edit.\n\n## License\n\nMIT. Copyright (c) 2026 Alex Coulombe.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibrews%2Fblueprint-auto-layout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fibrews%2Fblueprint-auto-layout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fibrews%2Fblueprint-auto-layout/lists"}