Amro Thabet - Auto Asset Migrator

Copy a mesh out of one project and paste it into another, and you get a mesh with a grey material and missing textures. The usual fix is to close what you are working on, open the other project, find the asset again, and use Migrate.

Auto Asset Migrator removes that trip. Paste the file in your file manager, and the editor notices it, works out everything it refers to that is not already in this project, and offers to bring it across. The project you copied from is never opened, and nothing is loaded to work it out - the package headers are read straight off disk.

HOW IT WORKS

Copy or cut a .uasset in Explorer, Finder, or your Linux file manager. Paste it into another project's Content folder. A window opens in front of the editor with the whole dependency tree in it, grouped under the file you pasted, with the file count and total size.

Three answers:

  • Migrate Copy the whole tree into the matching folders here.

  • Delete Copied Asset Remove what you pasted. If you cut it, it goes back where it came from first.

  • Keep As Is Leave the file and copy nothing.

There are no checkboxes on the tree. Copying part of a dependency set is what produces a broken asset, so the answer covers the whole batch.

LEVELS COME ACROSS TOO

A .umap on its own is an empty world under One File Per Actor - the actors are separate packages the level never names as references. Auto Asset Migrator gathers them anyway: every package under ExternalActors and ExternalObjects, plus built lighting data, and then walks each actor for the meshes, materials and animations it uses. A small template level migrated as 136 files.

PLUGIN CONTENT, HANDLED HONESTLY

An asset can refer to content owned by a plugin - a control rig, an animation codec. Copying that content into /Game/ would not help, because the reference names the plugin's own mount point. What makes it resolve is having the plugin.

So the window lists them and offers what can actually be done about each: tick to enable one that is installed but switched off, tick to copy one across from the source project's Plugins folder, or see it named with no tick because it has to be installed by hand. A plugin that cannot be set up never stops the assets copying.

IT STAYS OUT OF THE WAY

Most files that appear in Content are not pastes from another project, and interrupting you over a source control sync would make the plugin worse than useless. Four things it deliberately ignores: anything the editor wrote itself, a copy made from this very project, files whose references all resolve here already, and files with nothing on the clipboard to explain them.

That last one is why the editor's own Migrate and a version control sync both pass in silence.

NOTHING IS LEFT HALF DONE

Every file is checked for existence, readability and engine version before the first byte is written. If a copy fails part way through, every file that run wrote is deleted and every file it replaced is restored, so the project is left exactly as it was. Files are copied beside their destination and renamed into place, so the editor never catches a half-written package and writes it off as damaged.

If something it needs is not in the source project at all, that file is shown in the tree in red with a cross, in place under whatever refers to it, so you can see which of your pasted files wanted it - and nothing is copied until you have dealt with it.

Deleting a cut paste restores it to the source project by moving rather than copying, so there is neve a moment with two copies or none. If the restore is blocked, the pasted file is kept and the problem i reported. The worst outcome is two copies; never zero.

DRAGGING WORKS TOO

Drag a .uasset from your file manager straight onto a folder in the Content Browser and it is handled like a paste: dropped where you dropped it, dependencies worked out, same window, same three answers.

Dragging between two folders outside the editor never touches the clipboard, and no desktop operating system records where a dragged file came from in a way an ordinary application is allowed to read. So when nothing explains a file, the plugin looks for it in projects you already use - ones you have migrated from before, folders you have pointed it at, and ones recently opened - and takes a byte-for-byte match as the source. Only a single unambiguous match counts; anything else asks.

And when none of that applies - a file copied while the editor was closed, say - select it in the Content Browser and choose "Migrate Missing Dependencies...", point at the project it came from, and everything after that is identical.

WHAT YOU GET

  • Automatic detection of pasted and cut assets, with the source project resolved from the clipboard

  • Drag a file from your file manager onto a Content Browser folder and it is handled the same way

  • The source project found for you when nothing explains a file, by byte-for-byte match against

  • projects you already use - which is what makes dragging between folders work

  • Full dependency resolution read from disk, without opening or loading the source project

  • Hard and soft references, redirectors, and cyclic references

  • Levels including One File Per Actor external actors and objects, and built lighting data

  • Plugin dependencies detected, with enable and copy-across offered where possible

  • A decision window showing the whole tree grouped by what you pasted, with counts and sizes

  • Anything missing from the source project marked in red, in place under whatever refers to it

  • Skip-or-overwrite policy for dependencies that already exist, with backup and rollback

  • Cut-paste restore, so declining a move puts the file back where it came from

  • Content Browser action with a folder picker for anything the clipboard cannot explain

  • Works on Unreal Engine 5.0 through 5.8

Editor only. Nothing is added to a packaged game, no content ships with it, and there is nothing to setup in your project.