Python scripting to fix up redirectors in a folder?

Other than the project-wise redirector fixing, i.e.:


UE4Editor.exe <GameName or uproject> -run=ResavePackages -fixupredirects -autocheckout -projectonly -unattended

could we fix up redirectors in a specified folder through scripting as we do with the context menu in the Content Browser?

I briefly looked at the high-level API in EditorAssetLibrary, other than


consolidate_assets(*asset_to_consolidate_to*, *assets_to_consolidate*) → bool

which does some obscure things:

Consolidates an asset by replacing all references/uses of the provided AssetsToConsolidate with references to AssetToConsolidateTo. This is useful when you want all references of assets to be replaced by a single asset. The function first attempts to directly replace all relevant references located within objects that are already loaded and in memory. Next, it deletes the AssetsToConsolidate, **leaving behind object redirectors to AssetToConsolidateTo. **The AssetsToConsolidate are DELETED by this function.: Modified objects will be saved if the operation succeeds.

I couldn’t find a straightforward API that mentions Redirectors. I expect something that would look like


fix_up_redirector(folder_path)

, but there is none, which is weird, considering that’s what you do exactly in the Editor.

Just stumbled upon your question because I currently try to do something similar. I develop a plugin where a “fixup redirectors” step would be included in a workflow.

Did you ever find out how to do this from c++?

+1 That would be very beneficial!

@it is a little overkill having to that through a plugin

Let me necro this because this is the top hit from Google search.
And this should help other people with similar problem.

This is how the folder context menu Fix Up Redirectors in Folder do it.
You will need to be able to access the UnrealEngine github to view the code.
Also this is the link from UE5.0.3
https://github.com/EpicGames/UnrealEngine/blob/d9d435c9c280b99a6c679b517adedd3f4b02cfd7/Engine/Plugins/Editor/ContentBrowser/ContentBrowserAssetDataSource/Source/ContentBrowserAssetDataSource/Private/AssetFolderContextMenu.cpp#L256-L257

Here the copied snapshot from the source code.

			// Transform Objects array to ObjectRedirectors array
			TArray<UObjectRedirector*> Redirectors;
			for (auto Object : Objects)
			{
				auto Redirector = CastChecked<UObjectRedirector>(Object);
				Redirectors.Add(Redirector);
			}

			// Load the asset tools module
			FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>(TEXT("AssetTools"));
			AssetToolsModule.Get().FixupReferencers(Redirectors);

We already have FAssetData::IsRedirector() but currently Python cannot access FAssetToolsModule. So, We still need to expose it through C++.

1 Like

consolidate_assets() sounds like very similar to fix_up_redirectors (FixUpReferencers in C++)