A downloadable tool

Get this tool and 182 more for $1,637.57 USD
View bundle
Buy Now
On Sale!
30% Off
$14.99 $10.49 USD or more

Your levels are full of the same thing, forty-seven times.

The same lamp post, base and two bollards. The same crate stack. The same shop-front dressing, hand-placed across six maps by four people over eight months. Change the lamp and you change it forty-seven times, by hand, and you miss three.

Unreal already has the right answer: the Level Instance. One source map holding the arrangement once, referenced by cheap actors everywhere it appears. Edit the source, every instance updates.

So why has nobody converted their project? Because you cannot do it in bulk.

The engine bug this product exists around

Epic's own conversion function sets one flag unconditionally, which routes the whole thing through SaveLevelAs instead of the silent save that takes a filename — and that ends in a modal Save-As dialog, inside a retry loop. One dialog per cluster. The package name you passed in is ignored. Epic filed it as UE-309562 and it is still open in 5.8, which is why every "just script it" answer on the forums stops there.

What this does instead

It finds the repeats. Not just repeated meshes, but repeated arrangements: the same objects, in the same relative positions, at the same relative angles.

It proves they are the same arrangement. Every cluster is expressed relative to an anchor chosen so the result cannot depend on where the cluster sits or which way it faces. A cluster rotated ninety degrees and dropped in another map produces a byte-identical signature to the original. That invariant is what makes this work at all, and an automation test that ships with the source asserts it.

It does not trust its own hash. Matching signatures are a candidate, never a verdict. Members are confirmed against real position, rotation and scale tolerances, and a group whose contents merely quantise alike is split rather than merged. Rotations are compared as the angle between quaternions, never as Euler components, because two identical rotations can differ in every Euler number.

Then it converts. It creates the source map, replaces every occurrence with a single Level Instance, and saves. No dialogs.

It refuses, and that is the feature

A wrong conversion deletes hand-placed art with the originals already gone. So it would rather leave a cluster alone than convert one it cannot prove is identical. Every refusal is reported with the actor and the reason:

  • an actor attached to something outside its own cluster, in either direction
  • a cluster whose anchor is non-uniformly scaled — there is no rigid frame, and a Level Instance placed with a non-uniform scale shears its contents
  • a symmetric ring where too many members tie for the anchor, because an arbitrary choice would make the same ring hash differently in two maps
  • a cluster over the size cap — refused, never truncated, because half an arrangement is not the arrangement

And two arrangements that differ only by a material override are different arrangements. They never merge. Merging them would fold one occurrence's materials onto all forty-seven.

Nothing is written without -Apply

-Scan reports. -Forge shows you exactly what it would do and still writes nothing. -Forge -Apply makes the change — and writes a JSON journal to disk before the first package is saved, so -Revert=<journal> puts every actor back where it was, with its mesh, its materials and its transform.

Runs headless, for CI

UnrealEditor-Cmd.exe MyProject.uproject -run=LevelInstanceForge -Scan -Paths=/Game/Maps
UnrealEditor-Cmd.exe MyProject.uproject -run=LevelInstanceForge -Forge -Apply

Or from the editor console: LevelInstanceForge.Run -Scan.

Exit codes are documented and stable, so a build agent can gate on them: 0 ok, 1 bad arguments, 2 the scan could not read the project, 3 forge incomplete, 4 revert incomplete.

Exit 2 is never "your project is clean." A clean project exits 0 with an empty sheet. Code 2 means the scan itself did not happen — and the tool refuses to report an empty scan as a clean bill of health, because those two look identical from the outside.

Compatibility

Built and verified against Unreal Engine 5.8, on Windows. That is the only engine this was gated on, so it is the only version claimed.

  • Works on ordinary levels and on World Partition maps — partitioned maps store each actor in its own package, and those are gathered through the asset registry's external-actor folders.
  • No third-party dependencies. Every module it links is an Epic engine module: Core, CoreUObject, Engine, AssetRegistry, UnrealEd, Json.
  • Editor-only module. Nothing ships into your packaged game.
  • Full C++ source included, readable and unminified.

What you get

  • Full source for the plugin, commercial licence
  • A designed HTML report of every repeated arrangement, ranked by how many actors it would remove
  • A JSON undo journal and a working -Revert
  • Automation tests covering the decision rule, runnable from your own project

Documentation

Full documentation, argument reference and a worked three-step example

AI disclosure

Code: yes · Graphics: yes · Sounds: no · Text and dialog: no.

Purchase

Get this tool and 182 more for $1,637.57 USD
View bundle
Buy Now
On Sale!
30% Off
$14.99 $10.49 USD or more

In order to download this tool you must purchase it at or above the minimum price of $10.49 USD. You will get access to the following files:

Level Instance Forge 1.0.0 - full C++ source (UE 5.8) 70 kB
Version 1

Development log

Leave a comment

Log in with itch.io to leave a comment.