Skip to content

Asset

74 tools. Back to the index.

add_asset_to_collection

Additive.

Adds an asset to an existing collection and reads back its object count. must match the share type the collection was created with.

Parameter Type Required Description
collection_name string yes Name of the (existing) collection.
asset_path string yes /Game path / object path of the asset to add.
share_type string no ECollectionShareType: "Local", "Private", or "Shared" (optional, default "Local")

Returns: { collection_name: string, share_type: string, asset_path: string, added: bool, verified: bool, object_count: number }

add_static_mesh_socket

Additive.

Add a new socket to a UStaticMesh asset (package or object path) with an optional relative location, rotation, scale and tag, then save the mesh; no undo transaction. A socket_name the mesh already has is an error, and so is a location, rotation or scale that is not three numbers; both are checked before the mesh is touched. A failed save is an error, yet the socket stays on the mesh in memory. Edit an existing socket with set_static_mesh_socket_transform or rename_static_mesh_socket; list them with get_static_mesh_sockets; skeletal meshes use add_skeletal_mesh_socket.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
socket_name string yes Name for the new socket.
location array no Socket relative location as [x, y, z] (optional)
rotation array no Socket relative rotation as [pitch, yaw, roll] (optional)
scale array no Socket relative scale as [x, y, z] (optional; defaults to 1,1,1)
tag string no Free-form socket tag string (optional)

Returns: { socket_name, socket_count, location_x, location_y, location_z, scale_x, scale_y, scale_z, tag }

bulk_rename_assets

Destructive.

Rename/move multiple assets in one IAssetTools::RenameAssets batch, with per-item disk verification instead of the batch bool. Guards: refuses while PIE is active; refuses paths under readonly_roots (default: the project's Read Only Content Roots setting) on BOTH the source and the destination; pre-detects the native-CDO reference case that makes the engine's FMessageDialog auto-cancel the whole batch (would_block_on_modal) and does NOT call RenameAssets in that case. Also reports referencer packages left DIRTY -- PerformAssetRename discards its FailedPackages list unless UE source control is connected, so a referencer (typically OFPA) can be left unwritten while RenameAssets still returns true.

Parameter Type Required Description
assets array yes List of rename descriptors: { old_path (required), new_name (optional, default = current name), new_folder (optional, default = current folder) }.
dry_run boolean no Optional bool (default false). Plan + run every guard and the CDO scan, but never call RenameAssets.
readonly_roots array no Optional array of long paths that must not be renamed FROM or INTO (default: the project's Read Only Content Roots setting). Pass [] to disable the guard.
allow_cdo_referenced boolean no Optional bool (default false). When false, a native-CDO reference to any asset in the batch refuses the batch instead of letting it silently no-op.

Returns: { dry_run: bool, readonly_roots: [string], readonly_roots_explicit: bool, planned_count: int, renamed_count: int, failed_count: int, skipped_count: int, batch_api_result: bool|null, would_block_on_modal: bool, cdo_references: [object], soft_scan_is_approximate: bool, referencer_packages_dirty: [object], results: [object] }

clear_and_fill_render_target

Destructive, idempotent.

Fill an entire render target with a solid color via the canvas. drawn is false, and the call fails, when the canvas draws nothing (no white texture or a zero size).

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target, e.g. /Game/MyGame/RT_Example
color string no Optional [r, g, b, a] fill color, defaults to opaque white

Returns: { render_target_path: string, drawn: bool, canvas_width: number, canvas_height: number, fill_color: [number] }

clear_render_target

Destructive, idempotent.

Clear a render target to a solid color via ClearRenderTarget2D. Render-target contents live on the GPU only, so nothing is saved or undoable. cleared is false, and the call fails, when the engine skips the clear: a render target without a resource, which is every render target in a process that cannot render (-nullrhi, a commandlet).

Parameter Type Required Description
render_target_path string yes Asset path of the render target
color string no Optional [r, g, b, a] clear color, defaults to opaque black

Returns: { render_target_path: string, cleared: bool, clear_color: [number] }

compare_asset_versions

Read-only.

Apply the binary ref-scan of scan_uasset_refs to the SAME asset (rel_path) across N external Content roots, reporting ref-count / size / mtime (and optional pattern-match count) per root so you can tell an incomplete (stub) copy from the complete one at a glance.

Parameter Type Required Description
rel_path string yes Asset path relative to each root's Content dir, e.g. 'Characters/Mannequin/ABP_Manny.uasset' (a missing extension defaults to .uasset).
roots array yes List of external Content-root directories to compare across.
pattern string no Optional regex (ECMAScript) forwarded to the scan; when set, roots rank by pattern-match count instead of ref-path count.

Returns: { rel_path: string, pattern: string, roots: [{root, full_path, exists, size_bytes, modified, ref_path_unique, ref_path_occurrences, match_unique, match_occurrences}], most_complete_root: string, likely_stub_root: string, message: string }

create_collection

Additive, idempotent.

Creates a static Content Browser collection (idempotent). Uses the UE 5.7 project ICollectionContainer. If the collection already exists a stable payload is returned (already_existed=True). "Private", or "Shared".

Parameter Type Required Description
collection_name string yes Name of the collection.
share_type string no ECollectionShareType: "Local", "Private", or "Shared" (optional, default "Local")

Returns: { collection_name: string, share_type: string, created: bool, already_existed: bool, exists: bool }

create_editable_static_mesh

Additive, idempotent.

Copy a UStaticMesh (default /Engine/BasicShapes/Cube) into a new asset at package_path/static_mesh_name with StaticDuplicateObject, creating the folder if needed, and save it, so an engine or other read-only mesh can be edited as a copy; the source is not modified and there is no undo. Idempotent: a static mesh already at that path is returned untouched with created=false, whatever its source. A source that does not load, a name taken by another asset class or a failed save is an error. duplicate_asset copies any asset type inside its own folder.

Parameter Type Required Description
package_path string yes Target folder path (e.g. "/Game/MyMeshes").
static_mesh_name string yes Name for the new mesh asset.
source_mesh string no Source mesh to duplicate (defaults to engine Cube)

Returns: { asset_path, static_mesh_name, source_mesh, created }

create_render_target_2d

Additive.

Create a UTextureRenderTarget2D asset at package_path/name with the given size and format, black clear color, and save it. An existing one there is returned as is: width, height and format are then ignored (already_exists:true). Returns asset_path, width, height, format and pixel_format.

Parameter Type Required Description
name string yes Name of the render target asset to create
package_path string no Target content path, defaults to /Game/RenderTargets
width number no Render target width in pixels, default 256
height number no Render target height in pixels, default 256
format string no Render target format, default RTF_RGBA8: RTF_R8, RTF_RG8, RTF_RGBA8, RTF_RGBA8_SRGB, RTF_R16f, RTF_RG16f, RTF_RGBA16f (HDR), RTF_R32f, RTF_RG32f, RTF_RGBA32f or RTF_RGB10A2, RTF_ prefix optional; an unknown value falls back to RTF_RGBA8 with format_warning

Returns: { render_target_name: string, asset_path: string, created: bool, already_exists: bool, saved: bool, width: int, height: int, format: string, pixel_format: string, format_warning: string, save_error: string }

create_render_target_2d_array

Destructive.

Creates a persisted UTextureRenderTarget2DArray. Wraps UTextureRenderTarget2DArray::Init(SizeX, SizeY, Slices, Format) and saves the asset to disk. Re-running deletes and rebuilds the asset deterministically. format accepts one of "B8G8R8A8"/"BGRA8" (default), "FloatRGBA"/"RGBA16F", "RGBA32F", "R16F".

Parameter Type Required Description
name string yes Name of the render-target-array asset to create
package_path string no Content folder; defaults to /Game/Textures
size number no Optional square edge in pixels; clamped 1..8192
slices number no Optional slice count; clamped 1..512
format string no Optional EPixelFormat name; defaults to BGRA8

Returns: { render_target_name: string, asset_path: string, size_x: int, size_y: int, slices: int, format: string, created: bool, saved: bool, save_error?: string }

create_render_target_cube

Destructive.

Creates a persisted UTextureRenderTargetCube (6-face cube render target). Wraps UTextureRenderTargetCube::Init(SizeX, Format) when a format is given, or InitAutoFormat(SizeX) otherwise, and saves the asset to disk. Re-running deletes and rebuilds the asset deterministically. format accepts one of "B8G8R8A8"/"BGRA8", "FloatRGBA"/"RGBA16F", "RGBA32F". When omitted the format is auto-derived (InitAutoFormat).

Parameter Type Required Description
name string yes Name of the cube render-target asset to create
package_path string no Content folder; defaults to /Game/Textures
size number no Optional cube edge in pixels; clamped 1..8192
format string no Optional EPixelFormat name; defaults to auto-derived

Returns: { render_target_name: string, asset_path: string, size_x: int, format: string, created: bool, saved: bool, save_error?: string }

create_static_texture_from_render_target

Destructive.

Bakes a UTexture2D from an existing UTextureRenderTarget2D (editor only). Wraps UKismetRenderingLibrary::RenderTargetCreateStaticTexture2DEditorOnly and saves the resulting static texture to disk. Re-running deletes and rebuilds the asset deterministically. render_target_path accepts either short "/Game/MyGame/RT_Example" or fully-qualified "...RT_Example.RT_Example" asset paths.

Parameter Type Required Description
render_target_path string yes Asset path of the source render target (e.g. "/Game/MyGame/RT_Example" or fully-qualified "...RT_Example.RT_Example")
name string yes Name of the static texture asset to create
package_path string no Content folder; defaults to /Game/Textures

Returns: { texture_name: string, asset_path: string, render_target_path: string, created: bool, saved: bool, width: int, height: int, format: string, save_error?: string }

create_texture_2d_array

Destructive.

Creates a persisted UTexture2DArray from slices (no external file import). If source_texture_paths is given, those UTexture2D assets are loaded into the array's SourceTextures; otherwise slice_count small solid-color slices of size x size are generated. The array Source is then built via UTexture2DArray::UpdateSourceFromSourceTextures(true) and the asset is saved. source_texture_paths is an optional array of UTexture2D asset paths used as the array's slices. Each must have a valid editor source. If omitted, slices are generated. size is the per-slice pixel size (clamped 1..2048).

Parameter Type Required Description
name string yes Name of the texture-array asset to create
package_path string no Content folder; defaults to /Game/Textures
slice_count number no Optional number of generated slices when source_texture_paths is omitted; clamped 1..64; defaults to 2
size number no Optional per-slice pixel size; clamped 1..2048; defaults to 64
source_texture_paths array no Optional array of UTexture2D asset paths used as slices

Returns: { texture_array_name: string, asset_path: string, width: int, height: int, num_slices: int, format: string, created: bool, saved: bool, save_error?: string }

create_texture_2d_from_data

Destructive.

Creates a persisted UTexture2D filled with a solid color (no external file). Allocates the editor source (FTextureSource::Init, BGRA8), fills every pixel with fill_color, calls UpdateResource, registers the asset and saves it to disk. Re-running deletes and rebuilds the asset deterministically. fill_color is an [R, G, B, A] array of 0-255 byte values (default = opaque white).

Parameter Type Required Description
name string yes Name of the texture asset to create
package_path string no Content folder; defaults to /Game/Textures
width number no Optional pixel width; clamped 1..8192; defaults to 64
height number no Optional pixel height; clamped 1..8192; defaults to 64
fill_color array no Optional [R, G, B, A] (0-255 each); defaults to opaque white

Returns: { texture_name: string, asset_path: string, created: bool, saved: bool, width: int, height: int, format: string, has_source: bool, fill_color: [int, int, int, int], save_error?: string }

delete_collection

Destructive, idempotent.

Destroys a Content Browser collection (idempotent; inverse of create_collection). Uses the UE 5.7 project ICollectionContainer::DestroyCollection. If the collection is already absent a stable payload is returned (already_absent=True). "Private", or "Shared".

Parameter Type Required Description
collection_name string yes Name of the collection to destroy.
share_type string no ECollectionShareType: "Local", "Private", or "Shared" (optional, default "Local")

Returns: { collection_name: string, share_type: string, destroyed: bool, already_absent: bool, exists: bool }

diff_content_trees

Read-only.

Compare two Content folders (project vs external, fork vs source) WITHOUT loading the editor: reports assets added/removed/changed keyed by relative path, using file size and (optionally) a whole-file MD5 content hash. Verifies a Migrate or audits a fork on disk. Each tree may be a disk directory OR a /Game|/Engine mount path.

Parameter Type Required Description
tree_a string yes First Content folder: absolute disk dir or /Game|/Engine mount path.
tree_b string yes Second Content folder: absolute disk dir or /Game|/Engine mount path.
hash boolean no Optional bool (default true). When true, same-size files are compared by MD5 to detect content changes; when false, only size is compared.

Returns: { tree_a: string, tree_b: string, dir_a: string, dir_b: string, only_in_a: [string], only_in_b: [string], changed: [{rel, size_a, size_b, hash_a, hash_b, reason}], identical_count: int, only_in_a_count: int, only_in_b_count: int, changed_count: int, message: string }

draw_line_to_render_target

Destructive.

Draw a line into a render target via the canvas. drawn is false, and the call fails, when start and end are the same point (the canvas skips a zero-length line).

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target
start string yes Line start position [x, y] in screen-space pixels
end string yes Line end position [x, y] in screen-space pixels
color string no Optional [r, g, b, a] line color, defaults to opaque white
thickness number no Optional line thickness in pixels, default 1

Returns: { render_target_path: string, drawn: bool, thickness: number, start: [number], end: [number] }

draw_material_to_render_target

Destructive.

Render a material full-screen quad into a render target. drawn is false, and the call fails, when the engine skips the draw: a process that cannot render (-nullrhi, a commandlet) or a render target without a resource.

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target
material_path string yes Asset path of the UMaterialInterface to draw

Returns: { render_target_path: string, material_path: string, drawn: bool }

draw_material_to_render_target_region

Destructive.

Draw a material as a rectangle onto a UTextureRenderTarget2D asset in one canvas pass in the editor world: position and size in render-target pixels from the top-left (size defaults to the whole target), full 0-1 UVs. It composites over the existing pixels by the material's blend mode: nothing is cleared, saved or undoable, and render-target contents live on the GPU only, so keep them with create_static_texture_from_render_target or export_render_target. A missing render target or material is an error; drawn is false, and the call fails, when a width or height that is not positive draws nothing. For a full-target pass use draw_material_to_render_target; for a texture, draw_texture_to_render_target.

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target
material_path string yes Asset path of the UMaterialInterface to draw
position string no Optional [x, y] destination position, default [0,0]
size string no Optional [w, h] destination size, defaults to render target dimensions

Returns: { render_target_path: string, material_path: string, drawn: bool, position: [number], size: [number] }

draw_text_to_render_target

Destructive.

Draw a string onto a UTextureRenderTarget2D asset in one canvas pass in the editor world, in the engine's medium font (no font choice), tinted by color and scaled by scale, with position the text's top-left in render-target pixels. The text blends over the existing pixels: nothing is cleared, saved or undoable, and render-target contents live on the GPU only, so keep them with create_static_texture_from_render_target or export_render_target. A missing render target is an error; drawn is false, and the call fails, when nothing was drawn (an empty text, or no engine font: font_resolved says whether one was found). Related: draw_texture_to_render_target, draw_line_to_render_target, clear_and_fill_render_target.

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target
text string yes Text to draw
position string no Optional [x, y] text position, default [0,0]
color string no Optional [r, g, b, a] text color, defaults to opaque white
scale number no Optional uniform number or [x, y] scale, default 1

Returns: { render_target_path: string, text: string, drawn: bool, font_resolved: bool, position: [number] }

draw_texture_to_render_target

Destructive.

Draw a texture as a rectangle onto a UTextureRenderTarget2D asset in one canvas pass in the editor world: position and size in render-target pixels from the top-left (size defaults to the whole target), full 0-1 UVs, tinted by color. It alpha-blends over the existing pixels: nothing is cleared, saved or undoable, and render-target contents live on the GPU only, so keep them with create_static_texture_from_render_target or export_render_target. A missing render target or texture is an error; drawn is false, and the call fails, when a width or height that is not positive draws nothing. For a material use draw_material_to_render_target_region.

Parameter Type Required Description
render_target_path string yes Asset path of the destination render target
texture_path string yes Asset path of the UTexture to draw, e.g. /Engine/EngineResources/WhiteSquareTexture
position string no Optional [x, y] destination position, default [0,0]
size string no Optional [w, h] destination size, defaults to render target dimensions
color string no Optional [r, g, b, a] tint color, defaults to opaque white

Returns: { render_target_path: string, texture_path: string, drawn: bool, position: [number], size: [number] }

evaluate_curve_at_time

Read-only.

Evaluate a curve asset at a given time. Loads a UCurveFloat / UCurveVector / UCurveLinearColor and evaluates it at the requested time. For multi-channel curves (Vector=3, LinearColor=4) the optional channel selects which component the scalar 'value' field reports; the full component array is always returned in 'values'.

Parameter Type Required Description
curve_path string yes Object path or package path of the curve asset.
time number yes The time (X) to evaluate at.
channel number no Optional channel index for multi-channel curves (Vector/LinearColor) to populate 'value'.

Returns: { curve_path: string, curve_class: string, time: float, curve_type: string, num_channels: int, channel: int, value: float, values: [float], vector: {x,y,z}, color: {r,g,b,a} }

export_render_target

Destructive.

Export a render target to an image file on disk: PNG, except an RGBA16f or RGBA32f render target, which writes HDR when filename ends in .hdr and EXR otherwise. exported is measured on disk: the file must exist, hold bytes and have been written by this call. It is false, and the call fails saying why, for a render target without a resource (every render target in a process that cannot render: -nullrhi, a commandlet), an invalid path, a file that cannot be opened for writing, or an image that cannot be read back; an empty file left by a failed export is removed when the call created it.

Parameter Type Required Description
render_target_path string yes Asset path of the render target to export
output_directory string yes Absolute directory path to write into, created if missing
filename string yes Output file name including extension, e.g. RT_Example.png

Returns: { render_target_path: string, output_directory: string, filename: string, file_path: string, exported: bool, file_exists: bool, file_size_bytes: number }

generate_asset_thumbnail

Additive.

Render and cache an asset's thumbnail (or report the existing cached one). When the editor can render (FApp::CanEverRender() and the RHI is initialized), this generates a fresh thumbnail via ThumbnailTools and caches it into the package's thumbnail map. When rendering is unavailable, or the object type has no thumbnail renderer, it honestly reports the existing cached thumbnail state.

Parameter Type Required Description
asset_path string yes Object path or package path of the asset.

Returns: { asset_path: string, object_path: string, asset_class: string, rendered: bool, has_thumbnail: bool, width: int, height: int, compressed_bytes: int, message: string }

get_asset_by_name

Read-only.

Retrieve ONE asset by exact name and return its identity (name, class, object path, package, is_loaded, file size) plus, with load_full_data, type-specific detail: a Blueprint's parent class / compile status / generated class, a StaticMesh's section-vertex-LOD counts, whether a material is an instance. WARNING: When the name is ambiguous it still resolves to the FIRST match and merely lists the rest in ambiguous_matches -- check that field, or use resolve_asset_by_name, which refuses to pick for you. The fallback name scan only covers /Game, so an /Engine or plugin-mount asset must be addressed by its full package name. Use get_assets_by_names for a batch, get_asset_metadata for registry tags, and search_assets_by_pattern when you only know part of the name.

Parameter Type Required Description
asset_name string yes EXACT asset name, or a full package name (which is tried first and is the only form that reaches outside /Game)
load_full_data boolean no When true (DEFAULT), LOADS the asset to add type-specific details (Blueprint parent class, mesh sections, ...). Pass false to stay metadata-only and avoid a synchronous load.

Returns: { name: string, class: string, path: string, package: string, is_loaded: bool, file_size_bytes?: int, file_size_kb?: number, parent_class?: string, is_compiled?: bool, is_valid?: bool, generated_class?: string, num_sections?: int, num_vertices?: int, num_lods?: int, is_material_instance?: bool, ambiguous_matches?: [string] }

get_asset_dependencies_recursive

Read-only.

Recursively walk an asset's package dependencies via the Asset Registry. Breadth-first, deduplicated, capped at max_depth (default 3). Each returned dependency records the depth at which it was first reached (1 == direct).

Parameter Type Required Description
asset_path string yes Object path or package path of the root asset.
max_depth number no Maximum dependency depth to traverse (1..32, default 3).
dependency_type string no Optional "hard"|"soft"|"all" (case-insensitive, default "all"). Filters every depth level of the walk via the AssetRegistry hard/soft FDependencyQuery split; "all" leaves the walk unfiltered.

Returns: { asset_path: string, package_name: string, max_depth: int, dependency_type: string, dependencies: [{path, depth}], count: int }

get_asset_disk_size

Read-only.

Get the on-disk file size of an asset's package (.uasset/.umap). Resolves the package filename via FPackageName::LongPackageNameToFilename and stats it with IFileManager::FileSize.

Parameter Type Required Description
asset_path string yes Object path or package path of the asset (e.g. '/Game/MyGame/M_Example').

Returns: { asset_path: string, package_name: string, file_path: string, extension: string, size_bytes: number, size_kb: number, size_mb: number, exists_on_disk: bool, message: string }

get_asset_file_size

Read-only.

Read the ON-DISK size of an asset's .uasset in bytes, KB and MB, plus the absolute file path it resolved to -- the measurement for a disk-budget question ("what is costing the 491 MB in this import?"). WARNING: Size is NOT a proxy for content or integrity: a DataTable that GREW by 5 KB had lost 46 of its 48 references. To measure content use get_data_table_info, read_data_table_row_complex or get_asset_dependencies; for in-memory cost use get_asset_memory_usage. Resolution matches get_asset_by_name (full package name first, then a /Game-only exact-name scan, first hit wins with the rest in ambiguous_matches).

Parameter Type Required Description
asset_name string yes EXACT asset name, or a full package name (which is tried first and is the only form that reaches outside /Game)

Returns: { asset_name: string, asset_path: string, file_path: string, file_size_bytes: int, file_size_kb: number, file_size_mb: number, file_exists: bool, asset_class: string, ambiguous_matches?: [string] }

get_asset_import_data

Read-only.

Read an asset's UAssetImportData: source filename(s) and import timestamp. Returns has_import_data, source_file (first resolved filename), the full source_files list (relative + resolved filename + import_time), and source_file_count.

Parameter Type Required Description
asset_path string yes Object path of the asset, e.g. /Game/Imported/MyTex.MyTex.

Returns: { asset_path: string, asset_class: string, has_import_data: bool, source_file: string, source_files: [{relative_filename, resolved_filename, import_time}], source_file_count: int, import_time: string }

get_asset_last_modified

Read-only.

Read the .uasset file's last-modified timestamp (formatted string + Unix epoch) and how old it is in days and hours -- "was this asset actually written to disk when I saved it?", the disk-side oracle for a save whose return value claimed success. WARNING: It is a FILE timestamp: an asset edited in memory but not saved reports its old date, and Unreal does not distinguish creation from modification (the tool reads the same stamp for both). Use list_assets_modified_since to sweep a whole folder by date, and list_dirty_packages for unsaved-in-memory changes. Resolution matches get_asset_by_name (full package name first, then a /Game-only exact-name scan, first hit wins with the rest in ambiguous_matches).

Parameter Type Required Description
asset_name string yes EXACT asset name, or a full package name (which is tried first and is the only form that reaches outside /Game)

Returns: { asset_name: string, asset_path: string, file_path: string, last_modified: string, last_modified_timestamp: int, file_exists: bool, asset_class: string, age_days: number, age_hours: number, ambiguous_matches?: [string] }

get_asset_metadata

Read-only.

Read an asset's Asset Registry TAGS (the indexed key/value pairs an asset publishes -- parent class, mesh stats, fork-lineage tags, ...) together with its name, class, object path and package. WARNING: its asset_name is NOT a name: the tool literally prefixes "/Game/" to whatever you pass, so it must be a path RELATIVE TO /Game ("MyGame/Systems/Foo/BP_Foo.BP_Foo"), never a bare asset name and never an absolute "/Game/..." path -- and it LOADS the asset to resolve it. Use get_assets_metadata_batch for many paths at once, get_asset_by_name for identity from a bare name, and get_assets_by_tag to search BY a tag value instead of reading the tags of one asset.

Parameter Type Required Description
asset_name string yes Path RELATIVE to /Game, with no leading slash (e.g. "MyGame/Systems/Foo/BP_Foo.BP_Foo"); the tool prepends "/Game/" itself, so a bare name or an absolute path both fail to resolve

Returns: { name: string, class: string, path: string, package: string, asset_class_path?: string, package_path?: string, tags?: [{ name, value }] }

get_asset_metadata_tags

Read-only.

Reads all editor metadata tags (UMetaData) of an asset. Wraps UEditorAssetLibrary::GetMetadataTagValues and returns each tag as a {key, value} pair. (Distinct from get_asset_metadata, which reads asset registry data instead of the asset's stored metadata tags.)

Parameter Type Required Description
asset_path string yes /Game path to the asset.

Returns: { asset_path: string, tags: [{ key: string, value: string }], tag_count: number }

get_asset_thumbnail

Read-only.

Report whether an asset is of a type that CAN carry a thumbnail, alongside its resolved object path, class and loaded state. WARNING: has_thumbnail is a CLASS test, not a lookup of stored thumbnail bytes: it is true for any StaticMesh, Material, Texture, Blueprint, SkeletalMesh or Level and false for everything else, whether or not a thumbnail was ever rendered -- and it returns no image data at all. To actually see something rendered, use generate_asset_thumbnail or capture_viewport. Resolution matches get_asset_by_name (full package name first, then a /Game-only exact-name scan, first hit wins with the rest in ambiguous_matches).

Parameter Type Required Description
asset_name string yes EXACT asset name, or a full package name (which is tried first and is the only form that reaches outside /Game)

Returns: { asset_name: string, asset_path: string, has_thumbnail: bool, asset_class: string, asset_loaded: bool, asset_class_name?: string, ambiguous_matches?: [string] }

get_assets_by_names

Read-only.

Batch variant of get_asset_by_name: resolve N asset names in ONE round-trip instead of N calls, returning per entry a found flag plus that asset's identity (class, object path, package, is_loaded) or the error that stopped it. Delegates to get_asset_by_name literally, so it inherits both its /Game-only fallback scan and its ambiguous_matches transparency -- an ambiguous name still resolves to the first hit, so check that field per entry. Use get_assets_metadata_batch when you want registry TAGS rather than identity.

Parameter Type Required Description
asset_names array yes Array of exact asset names (or full package names) to resolve (required)
load_full_data boolean no When true, adds the type-specific details of get_asset_by_name per asset. Defaults to FALSE here -- the opposite of the single-asset tool -- so a batch call cannot accidentally force N synchronous loads.

Returns: { requested_count: int, resolved: [{ asset_name, found: bool, name?, class?, path?, package?, is_loaded?, ambiguous_matches?, ... (same fields as get_asset_by_name when found) }] }

get_assets_by_tag

Read-only.

Search assets BY an Asset Registry tag (FARFilter::TagsAndValues), server-side and metadata-only -- it never force-loads anything. This is the only tool here that queries by tag rather than by name, path or type: "every asset carrying the fork-origin tag (mcp.forkOrigin by default)", "every Blueprint whose ParentClass tag is X". It is also the general-class search that get_assets_by_type cannot do, since class_filter resolves ANY class (with subclasses) instead of five hardcoded ones. Search by class alone by pairing class_filter with a tag every asset of that class publishes; use get_asset_metadata to read the tags OF one asset rather than search by them.

Parameter Type Required Description
tag_name string yes Asset Registry tag name to filter on, e.g. "ParentClass" or "mcp.forkOrigin" (required). Read the available tag names off a sample asset with get_asset_metadata.
tag_value string no When given, only assets whose tag equals this value EXACTLY match; when omitted, matches any asset that HAS the tag with any value
folder_path string no Root package path to search under; defaults to "/Game", so /Engine, /Water and plugin mounts need their root passed explicitly
recursive boolean no When true (DEFAULT), recurse into subfolders
class_filter string no Optional class short name or /Script path (e.g. "Blueprint", "/Script/Engine.DataTable") to additionally constrain the match; subclasses match too (bRecursiveClasses)
max_results number no Cap on number of returned assets (1..50000); defaults to 1000. total_found is the uncapped count.

Returns: { tag_name: string, tag_value: string, folder_path: string, recursive: bool, class_filter: string, assets: [{ name, path, class, package }], count: int, total_found: int, max_results: int, results_truncated: bool }

get_assets_by_type

Read-only.

List every asset of a CLASS under a content path, with name, object path, class, package and is_loaded, plus total_found and results_truncated. Takes any resolvable class -- "DataTable", "NiagaraSystem", "LandscapeGrassType", a "/Script/Module.Class" path -- matched WITH its subclasses, plus five shortcuts kept for convenience: "Blueprint", "StaticMesh", "Texture" (Texture2D exactly), "Sound" (SoundWave exactly) and "Material", which is the one that earns its keep by grouping Material + MaterialInstanceConstant + MaterialInstanceDynamic. Searches /Game by default and any mount via package_path (/Engine, /Water, plugin content). Sister tools: get_assets_in_folder to enumerate a directory whatever the class, search_assets_by_pattern to search by NAME, get_assets_by_tag to search by an Asset Registry tag.

Parameter Type Required Description
asset_type string yes A class name ("DataTable"), a "/Script/Module.Class" path, or one of the shortcuts Blueprint | StaticMesh | Material | Texture | Sound. A name that resolves to no class is an error, not an empty result. WARNING: The shortcuts match those classes EXACTLY (Texture finds Texture2D but not TextureCube); any other name matches the class AND its subclasses.
package_path string no Content root to search, recursively. Defaults to "/Game"; pass "/Engine", "/Water", a plugin mount or a subfolder to look elsewhere.
max_results number no Cap on number of returned assets (1..50000); defaults to 1000. total_found is the uncapped count.

Returns: { assets: [{ name, path, class, package, is_loaded }], count: int, total_found: int, asset_type: string, package_path: string, max_results: int, results_truncated: bool }

get_assets_in_folder

Read-only.

Enumerate every asset under a content FOLDER (recursively by default), each with name, object path, class, package and is_loaded, plus total_found so you can tell a truncated listing from a complete one. The "what is actually in this directory?" inventory -- metadata only, it never loads an asset. Reaches any mounted content root, not just /Game. Pick this over search_assets_by_pattern when you know WHERE to look rather than what the name contains, over get_assets_by_type when you want everything regardless of class, and over resolve_asset_by_name when you do not have an exact name at all.

Parameter Type Required Description
folder_path string yes Folder to list. A bare/relative name is prefixed with /Game/; a path already starting with "/" (e.g. /Water/Materials, /Engine/..., /<PluginName>/...) is used verbatim, so every mounted content root is reachable.
max_results number no Cap on number of returned assets (1..50000); defaults to 1000. Compare count against total_found (which is NOT capped) to see how much was left out.
recursive boolean no When true (DEFAULT), include subfolders; false lists only the assets sitting directly in this folder

Returns: { assets: [{ name, path, class, package, is_loaded }], count: int, total_found: int, folder_path: string, recursive: bool, max_results: int, results_truncated: bool }

get_assets_metadata_batch

Read-only.

Batch variant of get_asset_metadata: read the Asset Registry tags of N assets in ONE round-trip instead of N calls, returning per entry a found flag plus the same fields get_asset_metadata emits (or an error string). It runs get_asset_metadata for each entry, so it inherits its path semantics exactly -- including the trap that each entry is prefixed with "/Game/", so entries must be paths RELATIVE to /Game, never bare names and never absolute "/Game/..." paths. Use get_assets_by_names for identity/type info from bare NAMES instead of tags.

Parameter Type Required Description
asset_paths array yes Array of paths RELATIVE to /Game with no leading slash (e.g. "MyGame/Systems/Foo/BP_Foo.BP_Foo"); each is passed to get_asset_metadata, which prepends "/Game/" itself (required)
max_results number no Safety cap on how many array entries get processed (1..5000); defaults to 500. Entries past the cap are dropped and results_truncated goes true.

Returns: { requested_count: int, processed_count: int, results_truncated: bool, results: [{ asset_path, found: bool, name?, class?, path?, package?, asset_class_path?, package_path?, tags?, error? }] }

get_collection_assets

Read-only.

List the object paths of the assets directly in one Content Browser collection (child collections are not included), without changing anything. The collection is looked up by collection_name within share_type, default Local; an unrecognized share_type also falls back to Local, and a name not found under that share type is an error. get_collections lists every collection with its share_type. Returns assets and asset_count; change membership with add_asset_to_collection or remove_asset_from_collection.

Parameter Type Required Description
collection_name string yes Name of the (existing) collection.
share_type string no ECollectionShareType: "Local", "Private", or "Shared" (optional, default "Local")

Returns: { collection_name: string, share_type: string, assets: [string], asset_count: number }

get_collections

Read-only.

List every Content Browser collection of the project container, of every share type, without changing anything: name and share_type of each (the share_type that get_collection_assets and the other collection tools need), plus collection_count. Errors when the collection manager is unavailable.

No parameters.

Returns: { collections: [{ name: string, share_type: string }], collection_count: number }

get_reference_path

Read-only.

Find the shortest reference CHAIN through the AssetRegistry dependency graph: with from, the shortest from -> ... -> target (walking dependencies); without from, the shortest chain from a root (a package nothing references) DOWN to target (walking referencers) -- i.e. 'what keeps target alive / why is it undeletable'. get_asset_referencers gives the direct edges; this gives the PATH.

Parameter Type Required Description
target string yes The asset whose reference chain to trace (object path or /Game package path).
from string no Optional starting hub/root asset; when set, traces from -> target via dependencies instead of the referencer-root chain.
max_depth number no Max chain depth to search (optional, default 16; clamped 1..64).
dependency_type string no Optional "hard"|"soft"|"all" (case-insensitive, default "all"). Filters BOTH BFS directions (the from->target dependency walk and the referencer-root walk) and the always-computed direct_referencers list via the AssetRegistry hard/soft FDependencyQuery split; "all" leaves them unfiltered.

Returns: { target: string, target_package: string, from: string, dependency_type: string, found: bool, reached_root: bool, chain: [string], chain_length: int, direct_referencers: [string], direct_referencer_count: int, message: string }

get_render_target_2d_array_info

Read-only.

Read metadata for a UTextureRenderTarget2DArray asset (size, slice count, format). Metadata-only, no pixel readback.

Parameter Type Required Description
render_target_path string yes Asset path of the render target, e.g. /Game/RenderTargets/RTA_Example

Returns: { render_target_name: string, asset_path: string, width: int, height: int, slices: int, pixel_format: string, is_hdr: bool, is_srgb: bool }

get_render_target_cube_info

Read-only.

Read metadata for a UTextureRenderTargetCube asset (face size, mip count, format). Metadata-only, no pixel readback.

Parameter Type Required Description
render_target_path string yes Asset path of the render target, e.g. /Game/RenderTargets/RTC_Example

Returns: { render_target_name: string, asset_path: string, size: int, num_mips: int, pixel_format: string, is_hdr: bool, is_srgb: bool, auto_generate_mips: bool }

get_render_target_info

Read-only.

Read the metadata of a UTextureRenderTarget2D asset without reading pixels or changing it: width, height, format (RTF_*), pixel_format and is_srgb. For 2D-array or cube render targets use get_render_target_2d_array_info or get_render_target_cube_info; export_render_target writes the image to disk.

Parameter Type Required Description
render_target_path string yes Asset path of the render target, e.g. /Game/RenderTargets/RT_Example

Returns: { render_target_name: string, asset_path: string, width: int, height: int, format: string, pixel_format: string, is_srgb: bool }

get_static_mesh_info

Read-only.

Get detailed info about a static mesh: LODs, verts, materials (with slots), sockets, nanite, collision, bounds.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.

Returns: { static_mesh_path, num_lods, num_verts_lod0, num_materials, num_sockets, materials: [{slot_index, slot_name, material_path}], collision_complexity, nanite_enabled, bounds_origin_x, bounds_origin_y, bounds_origin_z, bounds_extent_x, bounds_extent_y, bounds_extent_z, sphere_radius }

get_static_mesh_lightmap

Read-only.

Read lightmap resolution and lightmap UV coordinate index of a static mesh.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.

Returns: { static_mesh_path, lightmap_resolution, lightmap_coordinate_index }

get_static_mesh_sections

Read-only.

Get section-level info for all LODs of a static mesh (shadow, collision, ray tracing flags).

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.

Returns: { lod_index, section_index, cast_shadow, collision_enabled, visible_in_ray_tracing, static_mesh_path, sections, total_sections }

get_static_mesh_sockets

Read-only.

List all sockets of a static mesh with transform and tag.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.

Returns: { static_mesh_path, socket_count, sockets: [{name, location:{x,y,z}, rotation:{pitch,yaw,roll}, scale:{x,y,z}, tag}] }

get_texture_array_info

Read-only.

Reads metadata for a UTexture2DArray asset. texture_array_path accepts short "/Game/MyGame/T_Array" or fully-qualified "...T_Array.T_Array" asset paths.

Parameter Type Required Description
texture_array_path string yes Asset path of the texture array (e.g. "/Game/MyGame/T_Array" or fully-qualified "...T_Array.T_Array")

Returns: { texture_array_name: string, asset_path: string, width: int, height: int, num_slices: int, format: string, has_source: bool, source_texture_count: int }

get_texture_info

Read-only.

Reads metadata for a UTexture2D asset. texture_path accepts short or fully-qualified "/Game/MyGame/T_Example.T_Example" asset paths.

Parameter Type Required Description
texture_path string yes Asset path of the texture (e.g. "/Game/MyGame/T_Example" or fully-qualified "/Game/MyGame/T_Example.T_Example")

Returns: { texture_name: string, asset_path: string, width: int, height: int, format: string, srgb: bool, compression: string, lod_group: string, has_source: bool, num_mips: int, mip_gen_settings: string }

import_sound_file

Destructive.

Import an external WAV file into a USoundWave asset. Uses the legacy USoundFactory (AudioEditor module) path, no Interchange. The new sound wave is saved to disk and verified by loading it back; the response reports the resulting asset_path, duration (seconds) and num_channels.

Parameter Type Required Description
file_path string yes Absolute path to the source .wav on disk.
package_path string yes Destination content folder, e.g. /Game/Imported.
asset_name string no Optional destination asset name (default = source file stem).
replace_existing boolean no bool, replace an asset at the destination path (default true).

Returns: { file_path: string, package_path: string, asset_path: string, asset_name: string, duration: float, num_channels: int, imported: bool }

import_texture_file

Destructive.

Import an external image file (PNG/JPG/TGA/...) into a UTexture2D asset. Uses the legacy UTextureFactory path (no Interchange). The new texture is saved to disk and verified by loading it back; the response reports the resulting asset_path, width and height.

Parameter Type Required Description
file_path string yes Absolute path to the source image on disk.
package_path string yes Destination content folder, e.g. /Game/Imported.
asset_name string no Optional destination asset name (default = source file stem).
replace_existing boolean no bool, replace an asset at the destination path (default true).

Returns: { file_path: string, package_path: string, asset_path: string, asset_name: string, width: int, height: int, imported: bool }

ingest_external_uassets

Destructive.

Copy .uasset/.uexp/.ubulk/.umap from an EXTERNAL Content tree into THIS project, preserving each file's path relative to its Content root, then register the new packages with IAssetRegistry::ScanPathsSynchronous(bForceRescan) and sweep object redirectors under the destination. Fills the gap that migrate_assets only EXPORTS and import_asset is FBX/PNG-only. HEAVY: touches project Content on disk + mutates the registry -- run with confirmation.

Parameter Type Required Description
source_dir string yes External source directory (its Content ancestor defines the preserved relative path; if none, source_dir itself is the root).
dest_root string no Destination content mount path (optional, default '/Game'); e.g. '/Game/MyGame/Imported'.
paths array no Optional list of relative sub-paths (relative to the Content root) to restrict the copy to; empty/absent = whole tree.
overwrite boolean no Optional bool (default false). When false, destination files that already exist are skipped.
fixup_redirectors boolean no Optional bool (default true). Resolve + leave-fixed object redirectors under dest_root after the copy.

Returns: { source_dir: string, content_root: string, dest_root: string, dest_dir: string, files_copied: int, files_skipped: int, files_failed: int, scanned_paths: [string], redirectors_fixed: int, copied: [{src, dest, package_path}], message: string }

list_assets_modified_since

Read-only.

List package files (.uasset/.umap) under a content path whose ON-DISK mtime is newer than a timestamp -- the find -newermt recipe for isolating an UE Migrate set or a session's changes, but returning /Game package names. Enumerates the filesystem (so it catches just-migrated assets the registry may not have indexed yet).

Parameter Type Required Description
timestamp string yes Cutoff time; ISO-8601 (e.g. '2024-07-15T00:00:00Z') or an FDateTime-parseable string. Assets with mtime strictly greater are returned.
path string no Content path to scan (optional, default '/Game'), e.g. '/Game/MyGame'.
limit number no Max entries to return, newest first (optional, default 500; clamped 1..5000).

Returns: { path: string, dir: string, since: string, count: int, truncated: bool, total_matched: int, assets: [{package_name, file_path, modified, size_bytes}], message: string }

reimport_asset

Destructive.

Reimport an asset from its recorded source file via FReimportManager (legacy). Works on any asset that carries UAssetImportData (e.g. a texture or sound that was imported from a file on disk). Runs fully automated (no dialogs). Returns can_reimport, reimported, and the recorded source_files.

Parameter Type Required Description
asset_path string yes Object path of the asset, e.g. /Game/Imported/MyTex.MyTex.

Returns: { asset_path: string, can_reimport: bool, reimported: bool, source_files: [string] }

remove_asset_from_collection

Destructive, idempotent.

Removes an asset from a collection and reads back its object count (idempotent; inverse of add_asset_to_collection). If the asset is already absent from the collection a stable payload is returned (already_absent=True). must match the share type the collection was created with.

Parameter Type Required Description
collection_name string yes Name of the (existing) collection.
asset_path string yes /Game path / object path of the asset to remove.
share_type string no ECollectionShareType: "Local", "Private", or "Shared" (optional, default "Local")

Returns: { collection_name: string, share_type: string, asset_path: string, removed: bool, already_absent: bool, verified: bool, object_count: number }

remove_render_target_2d

Destructive, idempotent.

Delete a render target asset, but only after loading it and verifying it really is a UTextureRenderTarget2D -- the typed counterpart of create_render_target_2d, and what makes it safer than the generic delete_asset, which deletes whatever sits at that path. Wrong type or missing path returns deleted:false with a note explaining which, never an exception, so it is idempotent and safe to re-run. Sisters by type: remove_render_target_2d_array, remove_render_target_cube, remove_texture_2d_array, remove_static_texture_from_render_target.

Parameter Type Required Description
asset_path string no Full object/package path of the render target (e.g. /Game/MyGame/RT/RT_Foo.RT_Foo); a bare name is not resolved here

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_render_target_2d_array

Destructive, idempotent.

Delete a 2D-ARRAY render target, but only after loading it and verifying it really is a UTextureRenderTarget2DArray -- the typed counterpart of create_render_target_2d_array, and safer than the generic delete_asset, which deletes whatever sits at that path. Wrong type or missing path returns deleted:false with an explanatory note rather than raising, so it is idempotent. Use remove_render_target_2d for a plain 2D render target and remove_texture_2d_array for a static UTexture2DArray.

Parameter Type Required Description
asset_path string no Full object/package path of the 2D-array render target; a bare name is not resolved here

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_render_target_cube

Destructive, idempotent.

Delete a CUBE render target, but only after loading it and verifying it really is a UTextureRenderTargetCube -- the typed counterpart of create_render_target_cube, and safer than the generic delete_asset, which deletes whatever sits at that path. Wrong type or missing path returns deleted:false with an explanatory note rather than raising, so it is idempotent. Use remove_render_target_2d / remove_render_target_2d_array for the flat variants.

Parameter Type Required Description
asset_path string no Full object/package path of the cube render target; a bare name is not resolved here

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_static_mesh_socket

Destructive, idempotent.

Remove a socket from a static mesh by name (idempotent).

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
socket_name string yes Name of the socket to remove.

Returns: { static_mesh_path, socket_name, removed, socket_count }

remove_static_texture_from_render_target

Destructive, idempotent.

Delete the static UTexture2D that create_static_texture_from_render_target baked out of a render target (it lives beside the render target as a sibling asset), verifying the target really is a UTexture2D first -- so it refuses to delete the RENDER TARGET itself, which is remove_render_target_2d's job. Safer than the generic delete_asset, which deletes whatever sits at that path; wrong type or missing path returns deleted:false with an explanatory note rather than raising, so it is idempotent.

Parameter Type Required Description
asset_path string no Full object/package path of the baked static texture; a bare name is not resolved here

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_texture_2d_array

Destructive, idempotent.

Delete a static TEXTURE array, but only after loading it and verifying it really is a UTexture2DArray -- the typed counterpart of create_texture_2d_array, and safer than the generic delete_asset, which deletes whatever sits at that path. Wrong type or missing path returns deleted:false with an explanatory note rather than raising, so it is idempotent. Do not confuse it with remove_render_target_2d_array, which deletes the RENDER TARGET array, not this static texture.

Parameter Type Required Description
asset_path string no Full object/package path of the 2D-array texture; a bare name is not resolved here

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

rename_static_mesh_socket

Destructive, idempotent.

Rename an existing static mesh socket (guards against name collisions; idempotent).

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
socket_name string yes Current name of the socket to rename.
new_name string yes New name for the socket.

Returns: { static_mesh_path, old_name, new_name, renamed, socket_count, saved }

resolve_asset_by_name

Read-only.

Resolve an exact asset name (or path) to EVERY matching asset and report match_count + unambiguous, instead of silently picking the first one the way get_asset_by_name, get_blueprint_parent, get_graph_nodes and the rest of the by-name tools do. Run this FIRST whenever you are about to address an asset by bare name: a project can have hundreds of duplicate names (the same name in a vendored pack and in the game's own folders, plus dated backup copies), and unambiguous:false is the only warning you will get before another tool hands you a stale backup's contents as if they were the real asset. From there, pass the full path everywhere. match_count:0 with success:true is a valid, informative answer -- it means "no asset with this exact name", which is a real measurement of non-existence (unlike search_assets_by_pattern's count:0, which can just mean the pattern had a wildcard in it).

Parameter Type Required Description
asset_name string yes EXACT bare asset name or full package/asset path. This is an equality test, not a substring one -- use search_assets_by_pattern when you only know part of the name.
class_filter string no Optional class short name or /Script path (e.g. "Blueprint", "DataTable") to constrain the match; matches subclasses too
search_root string no Root package path for the fallback scan used when asset_name is not an exact package-name hit; defaults to "/Game", so an asset under /Engine or a plugin mount needs its root passed here explicitly

Returns: { asset_name: string, search_root: string, class_filter: string, match_count: int, unambiguous: bool, matches: [{ path, package, class }] }

scan_uasset_refs

Read-only.

Lightweight BINARY scan of a .uasset/.umap on disk (NO editor load): tokenizes the raw package bytes and reports the referenced-asset-path tokens (/Game//Engine//Script) plus, optionally, tokens matching a regex pattern. A quick way to compare copies of one asset: an incomplete (stub) copy shows far fewer reference tokens than the complete one. Accepts a disk path OR a /Game|/Engine mount path.

Parameter Type Required Description
package_file string yes Absolute .uasset/.umap path on disk, or a /Game|/Engine mount path.
pattern string no Optional regex (ECMAScript); tokens containing a match are counted in the 'matches' fields.

Returns: { package_file: string, resolved_path: string, exists: bool, file_size_bytes: number, modified: string, pattern: string, ref_path_unique: int, ref_path_occurrences: number, ref_paths: [{token, count}], match_unique: int, match_occurrences: number, matches: [{token, count}] }

search_assets_by_pattern

Read-only.

Find assets by NAME, scanning every mounted content root (/Game, /Engine, /Water, plugin mounts, ...) and returning name, object path, class and package per hit. The broad "does anything called <token> exist, and where?" search. It has TWO match modes and picks one automatically, reporting which in match_mode: a pattern WITHOUT */? is a case-insensitive SUBSTRING test (FString::Contains) -- pass the bare token, this is the common case; a pattern WITH * or ? is a real glob (FString::MatchesWildcard). WARNING: The glob is ANCHORED AT BOTH ENDS -- it matches the WHOLE name, not a substring -- so Grass* means "starts with Grass" and *Grass* is what reproduces substring behaviour. It only ever looks at the asset NAME, so it cannot find an asset by its folder or by a class it belongs to: use resolve_asset_by_name to check ONE exact name and get every homonym, get_assets_in_folder to enumerate a directory, get_assets_by_type for the 5 built-in type filters, and get_assets_by_tag for an Asset Registry tag.

Parameter Type Required Description
search_pattern string yes Matched against the asset NAME. Contains no */? -> case-insensitive substring (FString::Contains). Contains * or ? -> glob (FString::MatchesWildcard), ANCHORED at both ends: * matches any run including empty, ? matches 0 or 1 character (UE semantics, not exactly 1). Not a regex.
max_results number no Cap on number of matched assets (1..50000); defaults to 1000. WARNING: Hitting the cap ABORTS the enumeration, so total_scanned then counts only the assets visited before the early-out, not the whole registry.
case_sensitive boolean no When true, match is case-sensitive; defaults to false
wait_for_scan boolean no When true (default), force-completes the AssetRegistry scan before enumerating so a still-loading registry cannot report total_scanned:0. Set false to skip the (possibly blocking) wait.

Returns: { assets: [{ name, path, class, package, is_loaded }], count: int, total_scanned: int, scan_was_pending: bool, search_pattern: string, match_mode: "substring"|"wildcard", case_sensitive: bool, max_results: int, results_truncated: bool }

set_asset_metadata_tag

Destructive, idempotent.

Sets (or overwrites) a string metadata tag on an asset and saves it. The asset is loaded, UEditorAssetLibrary::SetMetadataTag is applied, the owning package is saved, and the value is read back to verify.

Parameter Type Required Description
asset_path string yes /Game path to the asset (e.g. "/Game/MyGame/M_Example").
key string yes Metadata tag name (FName), e.g. "Author".
value string yes String value to associate with the tag.

Returns: { asset_path: string, key: string, value: string, read_back: string, tag_set: bool, verified: bool, saved: bool }

set_static_mesh_collision_complexity

Destructive, idempotent.

Set the collision complexity (BodySetup CollisionTraceFlag) of a UStaticMesh asset, creating its BodySetup when missing, then save it; a failed save is an error. An unrecognized complexity silently becomes default, so check collision_complexity, which is read back.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
complexity string yes One of "default", "simple_and_complex", "simple_as_complex", "complex_as_simple", case-insensitive; any other value is stored as default.

Returns: { static_mesh_path, collision_complexity, saved }

set_static_mesh_lightmap

Destructive, idempotent.

Set lightmap resolution and/or lightmap UV coordinate index on a static mesh (no rebuild).

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
lightmap_resolution number no Absolute lightmap texture resolution (optional).
lightmap_coordinate_index number no Absolute lightmap UV channel index (optional).

Returns: { static_mesh_path, lightmap_resolution, lightmap_coordinate_index, applied_count, saved, save_error? }

set_static_mesh_material_slot

Destructive, idempotent.

Assign a material to an existing material slot of a static mesh.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
material_path string yes Content path to the UMaterialInterface to assign.
material_index number no Zero-based index of an existing material slot.

Returns: { static_mesh_path, material_index, material_path, saved }

set_static_mesh_nanite

Destructive, idempotent.

Set the Nanite settings of a UStaticMesh asset through the StaticMeshEditor subsystem, which rebuilds the mesh, then save it; a failed save is an error. Both fields are always written: omitting enabled disables Nanite and omitting keep_percent_triangles resets it to 1.0. Returns nanite_enabled read back.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
enabled boolean no true enables Nanite, false disables it; default false, so leaving it out disables Nanite.
keep_percent_triangles number no Fraction of the source triangles Nanite keeps, 1.0 keeps them all (default 1.0, written even when omitted).

Returns: { static_mesh_path, nanite_enabled, saved }

set_static_mesh_socket_transform

Destructive, idempotent.

Update the relative transform of an existing static mesh socket (only the provided fields). A location, rotation or scale that is not three numbers is an error.

Parameter Type Required Description
static_mesh_path string yes Content path to the UStaticMesh asset.
socket_name string yes Name of the socket to update.
location array no Socket relative location as [x, y, z] (optional).
rotation array no Socket relative rotation as [pitch, yaw, roll] (optional).
scale array no Socket relative scale as [x, y, z] (optional).

Returns: { static_mesh_path, socket_name, updated, location:{x,y,z}, rotation:{pitch,yaw,roll}, scale:{x,y,z}, saved }

set_texture_sampler_settings

Destructive, idempotent.

Sets sampler/LOD settings on an existing UTexture2D and saves it. Applies the requested fields, then PostEditChange + UpdateResource + save (no shader recompile), reading the resulting values back. Enum params accept the name with or without prefix: address_x/address_y in {Wrap,Clamp,Mirror}; filter in {Nearest,Bilinear,Trilinear,Default}; mip_gen_settings in {FromTextureGroup,SimpleAverage,NoMipmaps,LeaveExistingMips,Sharpen0..10,Blur1..5,Unfiltered,Angular}.

Parameter Type Required Description
texture_path string yes Asset path of the texture to modify
address_x string no Optional TextureAddress enum string (Wrap/Clamp/Mirror)
address_y string no Optional TextureAddress enum string (Wrap/Clamp/Mirror)
filter string no Optional TextureFilter enum string (Nearest/Bilinear/Trilinear/Default)
mip_gen_settings string no Optional TextureMipGenSettings enum string
lod_bias number no Optional int LOD bias
max_texture_size number no Optional int max texture size (0 = no limit)
flip_green boolean no Optional bool, flips the green channel

Returns: { texture_name, asset_path, address_x, address_y, filter, mip_gen_settings, lod_bias, max_texture_size, flip_green, changed: bool, saved: bool, *_warning?: string, save_error?: string }

set_texture_settings

Destructive, idempotent.

Sets the given sRGB, compression and LOD group of a UTexture2D asset, rebuilds its resource when one changed and saves it in every case, returning the values read back. An unknown compression or LOD group name is still applied, as TC_Default or TEXTUREGROUP_World, with a compression_warning or lod_group_warning.

Parameter Type Required Description
texture_path string yes Asset path of the texture to modify
srgb boolean no True treats the texture as sRGB color, false as linear data such as normal or mask maps; omit to keep the current value
compression_settings string no TextureCompressionSettings name with or without the TC_ prefix, e.g. "Default", "Normalmap", "Masks", "VectorDisplacementmap", "BC7", "HDR"; omit to keep the current value
lod_group string no TextureGroup name with or without the TEXTUREGROUP_ prefix, e.g. "World", "UI", "Character", "Effects"; omit to keep the current value

Returns: { texture_name: string, asset_path: string, changed: bool, saved: bool, srgb: bool, compression: string, lod_group: string, compression_warning?: string, lod_group_warning?: string, save_error?: string }