CodeFizz
ToolsDemoDocsBlogRoadmapChangelogPricingFAQ
Get the plugin

Getting Started

  • Introduction
  • Quick Start
  • Requirements
  • Installing the CLI
  • License & Machines

Guides

  • Installing the Plugin
  • The AI Skill
  • CLI vs MCP
  • Multiple Editors
  • How It Works
  • Discovering Commands
  • The Editor Chat Panel

Walkthroughs

  • Build a Blueprint with AI
  • Author a Material Graph
  • Create a Niagara System
  • Rig a Character with AI
  • Build an Animation Blueprint
  • Build Sound with AI
  • Build a Modular Character
  • Grow a Tree with AI
  • Build a Gameplay Ability System
  • Generate a Landscape with AI
  • Work with World Partition

Reference

  • Reference
  • Audio
  • Mutable
  • Control Rig
  • Niagara
  • PCG
  • Procedural Vegetation
  • Materials
  • Gameplay Ability System
  • World Building
  • Behavior Trees
  • Environment Queries
  • StateTree
  • Sequencer
  • Level Actors
  • Project Settings
  • Blueprints
  • Blueprint Structs
  • Enhanced Input
  • Asset Management
  • Bulk Asset Ops
  • Data Assets
  • Object Properties
  • UMG Widgets
  • Data Tables
  • Curves
  • Animation
  • Console Commands
  • Profiling
  • Core
  • Debug
  • Mass Entity (ECS)

Help

  • FAQ
  • Troubleshooting
  • For AI Agents
  • Fix: Plugin failed to load, module could not be loaded (GetLastError 126)
  • Fix: bridge unreachable, editor not responding
  • Fix: cfa targeted the wrong Unreal editor
  • Fix: the CodeFizz panel does not show Active
  • Fix: Unknown command, or plugin version mismatch after an update
DocsReferenceLevel Actors

Level Actors

Every Level Actors command in CodeFizz Editor Agent, with parameters and examples.

Loading…
PreviousSequencerNextProject Settings
CodeFizz

A drop-in Unreal Engine 5 plugin that exposes the entire editor surface (Blueprints, Materials, Niagara, PCG, StateTree, Control Rig, Insights profiling, and more) over the Model Context Protocol. Connect Claude Code, Cursor, VS Code, or any MCP-compatible client and let your AI build inside the engine.

Product

  • Features
  • Docs
  • Tools
  • Blog
  • Demo
  • Roadmap
  • Changelog
  • Pricing
  • FAQ

Resources

  • Install guide
  • Discord
  • YouTube
  • Open-source edition
  • Manage subscription

Legal

  • Refund Policy
  • Privacy Policy
  • Terms of Service

© 2026 CodeFizz. All rights reserved.

CodeFizz Editor Agent is a CodeFizz product. Payments processed by Polar Software, Inc. (Polar), the Merchant of Record.

54 commands. Each shows its parameters and an example, and has a copyable deep link, so you (or an AI agent) can jump straight to one.

get_actors_in_level

List all actors in the current level

Returns every actor currently placed in the active level, including their names, types, and transforms. Use this to get an overview of level contents before performing targeted operations.

example
  cfa get_actors_in_level
find_actors_by_name

Find actors by name pattern

Searches the current level for actors whose label matches the given pattern. Supports partial matching, so you can find groups of related actors without listing every actor in the level.

ParameterTypeRequiredDescription
patternstringYesName pattern to search
example
  cfa find_actors_by_name --pattern "Light"
  cfa find_actors_by_name --pattern "BP_Conveyor"
spawn_actor

Spawn an actor in the level

Creates a new actor instance in the current level at the specified transform. The actor-type defaults to StaticMeshActor but can be any built-in actor class. Use spawn_blueprint_actor for Blueprint-based actors instead.

ParameterTypeRequiredDescription
namestringYesActor name
actor_typestringNoActor type
locationjsonNoJSON array [x,y,z]
rotationjsonNoJSON array [pitch,yaw,roll]
scalejsonNoJSON array [x,y,z]
static_meshstringNoStatic mesh path
example
  cfa spawn_actor --name "MyCube" --actor-type "StaticMeshActor" --location "[0,0,100]" --rotation "[0,45,0]" --scale "[2,2,2]"
  cfa spawn_actor --name "FloorPlane" --static-mesh "/Engine/BasicShapes/Plane.Plane" --location "[0,0,0]"
search_classes

Search available UClasses by name, optionally filtered by a base class

Enumerates loaded UClasses whose name contains the query (case-insensitive), optionally restricted to subclasses of base_class (e.g. 'ActorComponent', 'Actor', or a full path). Excludes abstract (unless include_abstract), deprecated, and transient/generated classes. Returns name, full path, parent, and is_abstract. Use it to discover the exact class name or path to pass to add_component_to_blueprint, spawn_actor_by_class, etc.

ParameterTypeRequiredDescription
querystringNoCase-insensitive substring to match in the class name
base_classstringNoOnly return subclasses of this class (short name or full path)
max_resultsintNoMaximum number of results
include_abstractboolNoInclude abstract classes (default false)
example
  cfa search_classes --query "StaticMesh" --base-class ActorComponent
  cfa search_classes --query Light --base-class Actor --max-results 20
delete_actor

Delete an actor from the level

Removes a placed actor from the current level by its label name. The deletion is immediate and cannot be undone from the CLI, so verify the target with find_actors_by_name first if unsure.

ParameterTypeRequiredDescription
namestringYesActor name
example
  cfa delete_actor --name "MyCube"
set_actor_transform

Set actor location/rotation/scale

Updates the world transform of an existing actor in the level. You can set any combination of location, rotation, and scale -- omitted fields are left unchanged.

ParameterTypeRequiredDescription
namestringYesActor name
locationjsonNoJSON array [x,y,z]
rotationjsonNoJSON array [pitch,yaw,roll]
scalejsonNoJSON array [x,y,z]
example
  cfa set_actor_transform --name "MyCube" --location "[100,200,50]"
  cfa set_actor_transform --name "MyCube" --rotation "[0,90,0]" --scale "[1,1,2]"
spawn_blueprint_actor

Spawn a Blueprint actor instance

Spawns an instance of a Blueprint asset into the current level. Use this instead of spawn_actor when you need to place a Blueprint-based actor with its full component hierarchy and default properties.

ParameterTypeRequiredDescription
blueprint_pathstringYesBlueprint asset path
locationjsonNoJSON array [x,y,z]
rotationjsonNoJSON array [pitch,yaw,roll]
scalejsonNoJSON array [x,y,z]
namestringNoActor name
example
  cfa spawn_blueprint_actor --blueprint-path "/Game/Blueprints/BP_Miner" --location "[500,0,0]"
  cfa spawn_blueprint_actor --blueprint-path "/Game/Blueprints/BP_ConveyorBelt" --location "[0,0,0]" --rotation "[0,90,0]" --name "Belt_01"
spawn_actor_from_class

Spawn an actor from a class name

Spawns an actor using a C++ or Blueprint class name with individual float parameters for location and rotation instead of JSON arrays. Useful when you know the exact class name and want to specify coordinates directly.

ParameterTypeRequiredDescription
class_namestringYesActor class name
location_xfloatNoX location
location_yfloatNoY location
location_zfloatNoZ location
rotation_yawfloatNoYaw rotation
rotation_pitchfloatNoPitch rotation
rotation_rollfloatNoRoll rotation
example
  cfa spawn_actor_from_class --class-name "PointLight" --location-x 100 --location-y 200 --location-z 300
  cfa spawn_actor_from_class --class-name "AMyCustomActor" --location-z 50 --rotation-yaw 45
get_selected_actors

Get currently selected viewport actors

Returns the list of actors currently selected in the Unreal Editor viewport. Useful for inspecting or modifying whatever the user has selected in the editor.

example
  cfa get_selected_actors
get_world_info

Get current level info (world name, actor count)

Returns metadata about the currently loaded world, including the level name, total actor count, and other summary information. Use this to confirm which level is active before performing operations.

example
  cfa get_world_info
take_screenshot

Capture viewport, a named window, or an asset editor to PNG

Captures a screenshot as PNG. Three targets. Default mode=viewport grabs the level viewport. mode=window grabs the window the user is currently looking at. Pass --asset-path to grab a specific asset's editor, or --window to grab a window by title substring: both capture that window directly through Slate, so it does NOT need operating system focus and works while the editor sits behind other applications. --asset-path is the reliable one, because an asset editor can be a floating window or a tab docked in the main frame and this resolves either; it also activates that tab first (--focus=false to skip), since a window only renders its active tab. Call list_editor_windows to see what is open. The resulting file can be viewed with the Read tool.

ParameterTypeRequiredDescription
file_pathstringNoOutput file path (default: auto)
modestringNoviewport or window (implied by --asset-path/--window)
asset_pathstringNoCapture this asset's editor, floating or docked. No OS focus needed
windowstringNoCapture the window whose title contains this substring
focusboolNoWith --asset-path, activate its tab first so the window renders it
example
  cfa take_screenshot
  cfa take_screenshot --file-path "C:/Screenshots/level_overview.png" --mode "viewport"
  cfa take_screenshot --asset-path "/Game/Anims/BS_Locomotion" --file-path "C:/Shots/bs.png"
  cfa take_screenshot --window "BS_Locomotion"
wait_for_compilation

Block until asset and shader compilation finishes

Waits until the editor has no assets and no shader jobs left to compile, then returns. Read any metric only after this returns idle. Material instruction counts, widget layout, lighting budgets and FX cost are all measured against whatever is compiled at that instant, so asking while a compile is still running returns a real number for the wrong thing, with nothing to indicate it. Polls rather than blocking outright, so a timeout is honoured; if it times out it says so and reports what is still outstanding rather than pretending it finished.

ParameterTypeRequiredDescription
timeout_secondsfloatNoGive up after this long and report what is left
example
  cfa wait_for_compilation
  cfa wait_for_compilation --timeout-seconds 300
read_message_log

Read an editor Message Log listing

Returns the messages the editor put in one of its Message Log listings, with counts by severity. These are the same entries the Message Log window shows, and they carry detail that a command's own result does not: which asset failed to load, which actor failed a map check, why a Blueprint compile complained. Filter with --severity error or warning, and cap with --max-results. A log only exists once something has written to it this session, so an unknown name is refused by name rather than returned empty, which would read as no problems.

ParameterTypeRequiredDescription
log_namestringYesListing name, e.g. PIE, BlueprintLog, AssetCheck, MapCheck, LoadErrors
severitystringNoOnly error, warning or info
max_resultsintNoCap returned messages (1-500); reports how many were dropped
example
  cfa read_message_log --log-name PIE
  cfa read_message_log --log-name AssetCheck --severity error
  cfa read_message_log --log-name MapCheck --max-results 20
validate_project_assets

Run the project's own data validators over its assets

Runs every validator the project itself defines (each UEditorValidatorBase subclass, plus every IsDataValid override) over the assets you point it at, and reports a verdict with the assets that failed and why. This is the project's own definition of correct, not ours, so it catches the rules a studio actually cares about. Scope it with --path, --filter or an explicit --assets list, and cap the work with --max-assets. Assets are loaded to validate them, so a whole-project run is slow; narrow the path while iterating. Verdict is fail if anything is invalid, pass_with_warnings if only warnings were raised, pass otherwise.

ParameterTypeRequiredDescription
pathstringNoContent path to validate recursively
assetsstringlistNoExplicit asset object paths; overrides --path
filterstringNoOnly assets whose object path contains this
usecasestringNomanual, save, commandlet, presubmit or script; validators can behave differently per usecase
max_assetsintNoCap how many assets are validated; reports asset_limit_reached when hit
max_resultsintNoCap returned failing assets (1-200); reports how many were dropped
load_assetsboolNoLoad unloaded assets so they can be validated; false skips them
skip_excluded_directoriesboolNoHonour the project's excluded validation directories
example
  cfa validate_project_assets
  cfa validate_project_assets --path /Game/Characters
  cfa validate_project_assets --filter ABP_ --max-results 50
  cfa validate_project_assets --assets /Game/Hero.Hero --usecase presubmit
validate_blueprint_compile

Compile a Blueprint and report which nodes failed

Compiles a Blueprint with our own results log attached, then reports the errors and warnings mapped to the nodes that caused them, rather than as a flat wall of text. Each entry names the node and the graph it lives in, so you can go straight to it. Also reports orphaned pins (left behind when a function signature changed) and dangling_exec_chains, the number of exec chains nothing drives, which is the usual sign of a graph that silently never runs (a dead chain counts once, at its head). Compiler notes are reported as note and do not count as warnings. Compiling never saves the asset, even in a project set to save on compile. status distinguishes up_to_date_with_warnings from up_to_date, so a Blueprint that compiles but is dirty does not read as clean.

ParameterTypeRequiredDescription
blueprint_pathstringYesBlueprint asset path or name
max_resultsintNoCap reported nodes (1-200); reports how many were dropped
example
  cfa validate_blueprint_compile --blueprint-path /Game/BP_Player
  cfa validate_blueprint_compile --blueprint-path /Game/BP_Player --max-results 50
validate_collision

Find static meshes with missing or unusable collision

Checks every static mesh under a path for collision that will not work. A mesh with no simple collision primitives is reported as an error: default traces and sweeps miss it and it cannot block or simulate, though explicit complex traces still hit it. A mesh set to use complex collision as simple is a warning, because it cannot be simulated. Meshes that pass are counted but not listed, so the output stays small on a large project. The check reads the collision counts the engine already publishes to the asset registry, so a whole project sweep loads nothing; loaded_for_inspection reports how many meshes had to be loaded because those tags were missing.

ParameterTypeRequiredDescription
pathstringNoContent path to check recursively
filterstringNoOnly meshes whose object path contains this
max_resultsintNoCap reported meshes (1-200); reports how many were dropped
example
  cfa validate_collision
  cfa validate_collision --path /Game/Environment
  cfa validate_collision --filter SM_Rock --max-results 50
validate_replication

Check a class for silent multiplayer bugs

Statically checks one class for the replication mistakes that cost hours to find at runtime, with no PIE session needed. Reports properties marked Replicated that were never registered in GetLifetimeReplicatedProps, RepNotify properties whose OnRep function does not exist, server RPCs with no validation (a client can call those with any arguments), and reliable multicasts, whose cost scales with connection count. The missing-registration case is a warning rather than an error because a project that auto-registers replicated properties replicates them anyway.

ParameterTypeRequiredDescription
class_pathstringYesClass path, Blueprint asset path, or native class name
max_resultsintNoCap reported issues (1-200); reports how many were dropped
example
  cfa validate_replication --class-path /Game/BP_Player.BP_Player
  cfa validate_replication --class-path Character
list_editor_windows

List open editor windows and asset editors

Lists every top-level Slate window the editor has open (title, size, visible, minimized) plus every asset currently being edited and which window holds it. Use this to find the right target for take_screenshot --window or --asset-path, and to tell whether an asset editor opened as its own window or as a tab docked in the main frame.

example
  cfa list_editor_windows
focus_asset_editor

Bring an asset's editor tab to the front

Activates the tab for an already-open asset editor and raises its window, so the user is looking at that asset. Works whether the editor is a floating window or a tab docked in the main frame. Open the asset first with open_asset. Use this when you want the person watching to see the thing you are about to change.

ParameterTypeRequiredDescription
asset_pathstringYesAsset whose editor tab should come to the front
example
  cfa focus_asset_editor --asset-path "/Game/Anims/ABP_Hero"
focus_viewport

Frame the level viewport on an actor or move the camera

Aims the active level editor perspective viewport. Pass an actor label/name to frame it (like pressing F). Add direction (top/bottom/front/back/left/right/iso) or explicit pitch+yaw to frame it FROM a chosen angle, and fill (0-1) or distance to control how tight the framing is. Or pass an explicit location (and optional rotation) to place the camera directly.

ParameterTypeRequiredDescription
actorstringNoActor label or name to frame in the viewport
directionstringNoView angle preset: top/bottom/front/back/left/right/iso (with actor)
pitchfloatNoCustom camera pitch in degrees (overrides direction; use with actor)
yawfloatNoCustom camera yaw in degrees (overrides direction; use with actor)
fillfloatNoFraction of the frame the actor fills, 0-1 (default 1 = tight)
distancefloatNoExplicit camera distance from the actor (overrides fill)
locationstringNoCamera world position: "(X=..,Y=..,Z=..)" or X,Y,Z
rotationstringNoCamera rotation: "(P=..,Y=..,R=..)" (used with location)
realtimeboolNoEnable viewport Realtime so placed effects simulate (default true)
example
  cfa focus_viewport --actor "ElectricBeamTest"
  cfa focus_viewport --actor "Reactor" --direction "top" --fill 0.8
  cfa focus_viewport --actor "Reactor" --pitch -30 --yaw 120 --distance 1500
  cfa focus_viewport --location "(X=600,Y=-600,Z=400)" --rotation "(P=-25,Y=45,R=0)"
get_scene_map

Context-friendly clustered understanding of the level

Summarizes the level so an agent understands it WITHOUT reading a giant per-actor list (scales 10 -> 100k actors). Default returns: content bounds, per-category counts, and one line per detected CLUSTER (actors grouped by mesh, split spatially via grid+union-find connected components), each tagged with an arrangement (grid/ring/line/scattered via PCA + circle-fit + spacing) plus count, instance count, center, size, folder. Also an ASCII density heatmap of the whole level. Drill into a cluster's raw actors with --drill <id> (paginated). Use --export true to write the full flat per-actor JSON to Exports/ (interchange only). label_filter/class_filter scope by label or class-name substring.

ParameterTypeRequiredDescription
class_filterstringNoOnly include actors whose class NAME contains this substring
label_filterstringNoOnly include actors whose outliner LABEL contains this substring
region_gridboolNoInclude the ASCII density heatmap (default true)
grid_sizeintNoDensity heatmap resolution NxN (4-64)
cell_sizefloatNoClustering merge distance in world units (default: auto ~2x median actor size)
drillintNoReturn the raw actors of cluster <id> instead of the summary
pageintNoDrill page index
page_sizeintNoDrill actors per page
exportboolNoWrite the full flat per-actor JSON to Exports/ (interchange)
example
  cfa get_scene_map
  cfa get_scene_map --drill 0 --page 0
  cfa get_scene_map --label-filter "Brick_"
  cfa get_scene_map --export true
get_mesh_info

Native shape/bounds/pivot of a static mesh asset (before placing)

Inspects a UStaticMesh asset (not a placed actor) so you can plan placement precisely: native bounds (size + half-extent), pivot_offset (bounds center relative to the mesh pivot), bounding sphere radius, the REAL collision shape (convex hulls with vertex counts, boxes, spheres, capsules) which conveys weird shapes far better than an AABB, named sockets with local transforms, and vertex/triangle/LOD/material counts.

ParameterTypeRequiredDescription
mesh_pathstringYesStatic mesh content path (object or package path)
include_collisionboolNoInclude collision primitives (the real shape) (default true)
include_socketsboolNoInclude named sockets with local transforms (default true)
example
  cfa get_mesh_info --mesh-path "/Engine/BasicShapes/Cube.Cube"
  cfa get_mesh_info --mesh-path "/Game/Meshes/SM_Rock" --include-collision true
spawn_actors_batch

Spawn many actors from one computed array in a single call

Spawns a whole layout (city, pyramid, grid...) at once from a JSON array of specs, in a single undo transaction. Each entry: {mesh, location [x,y,z], rotation [p,y,r], scale [x,y,z], name, type}. Top-level 'mesh'/'type'/'name_prefix' act as defaults so a shared-mesh batch stays compact. Far faster than one spawn per actor (one bridge call, one mesh load per unique path). Pass the params via --json - (stdin) for large batches. Manage/revert afterwards with delete_actors_batch --name-prefix.

ParameterTypeRequiredDescription
actorsjsonYesJSON array of {mesh,location,rotation,scale,name,type}
meshstringNoDefault static mesh path for entries that omit it
typestringNoDefault actor type (StaticMeshActor/PointLight/SpotLight/DirectionalLight/CameraActor)
name_prefixstringNoAuto-name entries as <prefix><index> when they omit 'name'
folderstringNoPut all spawned actors into this outliner folder (organized on creation)
return_namesboolNoReturn the created labels (default false = counts only)
example
  # build the whole layout in one call (params piped as JSON on stdin)
  echo '{"mesh":"/Engine/BasicShapes/Cube.Cube","name_prefix":"City_","actors":[{"location":[0,0,0],"scale":[10,10,1]},{"location":[500,0,250],"scale":[3,3,5]}]}' | cfa spawn_actors_batch --json -
delete_actors_batch

Bulk-delete actors by name/label prefix or an explicit list

Deletes every actor whose label/name starts with name_prefix, and/or is in the names list, in a single undo transaction. Reverts a spawn_actors_batch in one call.

ParameterTypeRequiredDescription
name_prefixstringNoDelete actors whose label/name starts with this
namesjsonNoJSON array of exact labels/names to delete
example
  cfa delete_actors_batch --name-prefix "City_"
  echo '{"names":["Ramp_A","Ramp_B"]}' | cfa delete_actors_batch --json -
move_actors_to_folder

Put actors into an outliner folder (organization only)

Moves selected actors into a named outliner folder (auto-created; '/' nests). Folders are pure organization, no transform effect. Select actors via name_prefix and/or names.

ParameterTypeRequiredDescription
folderstringYesOutliner folder path ('/' nests)
name_prefixstringNoSelect actors whose label/name starts with this
namesjsonNoJSON array of exact labels/names to select
example
  cfa move_actors_to_folder --folder "Structures/Pyramid" --name-prefix "Brick_"
create_folder

Create an empty outliner folder

Creates an empty outliner folder (World-Partition aware). Use move_actors_to_folder or spawn_actors_batch --folder to populate it.

ParameterTypeRequiredDescription
folderstringYesOutliner folder path ('/' nests)
example
  cfa create_folder --folder "Structures"
delete_folder

Delete an outliner folder (and subfolders)

Deletes an outliner folder by enumerating the world's real folders and removing the exact match (World-Partition safe). Recursive by default (also removes subfolders). Actors inside move up to the parent (not deleted). Returns the count actually removed.

ParameterTypeRequiredDescription
folderstringYesOutliner folder path
recursiveboolNoAlso delete subfolders (default true)
example
  cfa delete_folder --folder "Structures"
list_folders

List all outliner folders in the level

Enumerates every outliner folder (World-Partition aware). Use to verify folder create/delete. Optional filter matches a substring.

ParameterTypeRequiredDescription
filterstringNoOnly list folders whose path contains this
example
  cfa list_folders
  cfa list_folders --filter "Structures"
rename_folder

Rename/move an outliner folder

Renames an outliner folder (and moves its actors + subfolders).

ParameterTypeRequiredDescription
folderstringYesExisting folder path
new_folderstringYesNew folder path
example
  cfa rename_folder --folder "Structures" --new-folder "Buildings"
group_actors

Group actors into an editor Group (AGroupActor)

Creates an editor Group from the selected actors (select one -> selects all, like Ctrl+G). Different from folders (organization) and attachment (transform). Select via name_prefix and/or names (>=2 actors).

ParameterTypeRequiredDescription
name_prefixstringNoSelect actors whose label/name starts with this
namesjsonNoJSON array of exact labels/names to select
example
  cfa group_actors --name-prefix "Brick_"
ungroup_actors

Dissolve the editor Group(s) containing the given actors

Ungroups the AGroupActor(s) that contain the selected actors. Select via name_prefix and/or names.

ParameterTypeRequiredDescription
name_prefixstringNoSelect actors whose label/name starts with this
namesjsonNoJSON array of exact labels/names to select
example
  cfa ungroup_actors --name-prefix "Brick_"
attach_actors

Attach actors as children of a parent (transform hierarchy)

Attaches child actors to a parent so moving/rotating the parent moves the children (keeps world transform, so they stay put visually). Undo-able, outliner-reflected, cycle-validated. Select children via name_prefix and/or names.

ParameterTypeRequiredDescription
parentstringYesThe actor to attach children to (label or name)
name_prefixstringNoSelect child actors whose label/name starts with this
namesjsonNoJSON array of exact child labels/names
example
  cfa attach_actors --parent "Reactor" --name-prefix "Pipe_"
detach_actors

Detach actors from their parent (become independent)

Detaches actors from their attachment parent (keeps world transform). Select via name_prefix and/or names.

ParameterTypeRequiredDescription
name_prefixstringNoSelect actors whose label/name starts with this
namesjsonNoJSON array of exact labels/names
example
  cfa detach_actors --name-prefix "Pipe_"
capture_top_down

Off-screen orthographic top-down (floor-plan) render to PNG

Renders an orthographic top-down floor-plan of the whole level to a PNG off-screen (does not disturb the user's viewport). Auto-fits OrthoWidth to the level footprint. Far more legible than a perspective screenshot for understanding layout.

ParameterTypeRequiredDescription
file_pathstringNoOutput PNG path (default: Saved/Screenshots/MCP_TopDown.png)
resolutionintNoSquare render resolution in pixels (64-8192)
paddingfloatNoExtra margin around the level footprint (>=1.0)
area_widthfloatNoHow much ground to cover in world units. Defaults to the whole landscape; give a smaller width with --center to study one area
ortho_widthfloatNoOlder name for area_width, still accepted
pitchfloatNoCamera pitch. -90 is straight down (default); around -25 shows relief, which a straight-down frame flattens
yawfloatNoCompass direction to view from, used when pitch is angled
centerstringNoOverride view center "X,Y,Z" (e.g. a get_scene_map region center)
example
  cfa capture_top_down
  cfa capture_top_down --file-path "C:/Shots/floorplan.png" --resolution 2048 --padding 1.2
set_actor_property

Set a property at any nested path on a placed actor

Writes any property on the actual placed level actor (not the CDO/Blueprint defaults). Walks dotted paths through structs, FArrayProperty, FSetProperty and static C arrays via Field[N] syntax. Fires PostEditChangeProperty on the top-level FProperty so the renderer/component refresh, and marks the level dirty for save.

ParameterTypeRequiredDescription
actor_labelstringYesActor outliner label or UObject name
property_pathstringYesDotted property path (e.g. Settings.BloomIntensity)
property_valuejsonYesJSON-encoded value (number, bool, string, object, array)
component_namestringNoOptional: anchor path to a named component
example
  cfa set_actor_property --actor-label "PostProcessVolume_1" --property-path "Settings.BloomIntensity" --property-value 2.0
  cfa set_actor_property --actor-label "PostProcessVolume_1" --property-path "Settings.bOverride_BloomIntensity" --property-value true
  cfa set_actor_property --actor-label "PostProcessVolume_1" --property-path "Settings.LensFlareTints[2]" --property-value '{"R":0,"G":1,"B":0,"A":1}'
  cfa set_actor_property --actor-label "MyMeshActor" --component-name "StaticMeshComponent" --property-path "Mobility" --property-value "Movable"
get_actor_property_metadata

Inspect property type/clamp/enum metadata on a placed actor

Returns per-property metadata (cpp_type, ue_type, category, current_value, clamp_min/max, ui_min/max, valid_values for enums, inner/element/key/value types for containers, object_class/meta_class for refs, is_struct/is_array/is_enum/is_object/is_bool flags) PLUS a _summary header (total_available, total_returned, truncated, next_cursor, own_count, inherited_count, class_chain, categories breakdown). Object refs DO NOT auto-descend by default, use component_name to switch context, or pass descend_into_objects=true. max_entries=0 returns only the _summary so you can plan first.

ParameterTypeRequiredDescription
actor_labelstringYesActor outliner label or UObject name
property_pathstringNoOptional dotted path; empty = top-level
filterstringNoCase-insensitive substring on full path
categorystringNoUPROPERTY(Category=X) exact match (case-insensitive)
depthintNoStruct nesting levels to expand
expand_enumsboolNoInclude valid_values for enum-typed fields
include_inheritedboolNoWalk super class properties
descend_into_objectsboolNoIf path lands on object ref, enumerate its class
max_entriesintNoCap on emitted entries (0 = summary only)
cursorintNoPagination offset (use _summary.next_cursor)
component_namestringNoOptional: anchor to a named component
example
  cfa get_actor_property_metadata --actor-label "PostProcessVolume_1" --property-path "Settings.AutoExposureMethod"
  cfa get_actor_property_metadata --actor-label "PostProcessVolume_1" --property-path "Settings" --filter "bloom" --depth 1
  cfa get_actor_property_metadata --actor-label "MCP_TestPointLight" --component-name "LightComponent0" --category "Light" --max-entries 20
  cfa get_actor_property_metadata --actor-label "MCP_TestPointLight" --max-entries 0
  cfa get_actor_property_metadata --actor-label "MCP_TestPointLight" --include-inherited false --component-name "LightComponent0"
get_material_slots

List material element slots (index, slot name, current material, override state) for any target's mesh components, placed actor, Blueprint component template, or a StaticMesh asset

Reads material slots via Epic's own mesh-component API (GetMaterialSlotNames / GetNumMaterials / GetMaterial), for any UMeshComponent (StaticMesh, SkeletalMesh, InstancedStaticMesh). Targets through the universal object resolver, the SAME addressing as set_object_property: 'actor' (+optional 'component') for a placed actor, or 'blueprint_path'/'asset_path' (+optional 'component') for a Blueprint's component template / class defaults. With no 'component' it reports EVERY mesh component on the target. Each slot: index, slot_name, current material, and whether it's an override vs the mesh default; each component is tagged source=instance|blueprint_template. 'mesh_path' reads a StaticMesh asset's slots directly. (actor_label / component_name are still accepted as aliases.)

ParameterTypeRequiredDescription
actorstringNoPlaced actor's label/name (reports all its mesh components, or just 'component')
actor_labelstringNoAlias for 'actor'
blueprint_pathstringNoBlueprint asset: reports its mesh component templates (class defaults). Add 'component' for one.
asset_pathstringNoAny asset path (a Blueprint resolves like blueprint_path)
componentstringNoOptional: restrict to one mesh component (object or class name)
component_namestringNoAlias for 'component'
mesh_pathstringNoA StaticMesh asset path to read slots from directly
example
  cfa get_material_slots --actor "SM_Chair_2"
  cfa get_material_slots --blueprint-path "/Game/BP/BP_Chair.BP_Chair"
  cfa get_material_slots --blueprint-path "/Game/BP/BP_Chair.BP_Chair" --component "Mesh"
  cfa get_material_slots --mesh-path "/Game/Meshes/SM_Chair.SM_Chair"
set_materials_batch

Assign materials per element slot to any target's mesh components, placed actors, Blueprint component templates, one or many, in a single call

Overrides materials via Epic's own UMeshComponent::SetMaterial and finalizes through the universal resolver's ApplyPropertyEdit, so a live edit reregisters the component (shows immediately) and a Blueprint-template edit persists + propagates to instances, exactly like the Details panel. Universal targeting (same addressing as set_object_property): each assignment targets by 'actor' (a placed actor), 'blueprint_path'/'asset_path' (a Blueprint's component template / class defaults), or 'name_prefix' (all matching placed actors, pairs with spawn_actors_batch). 'component' is optional (default = ALL mesh components on the target). Slot is 'slot' (index, default 0), 'slot_name' (resolved via GetMaterialIndex), or 'all_slots'. 'material' is an asset path, or empty string to clear the override back to the mesh default. Pass 'assignments' (an array) to do many at once. Returns applied_count + per-result {component, source, slots, material} + errors (a bad slot lists the valid indices AND slot names).

ParameterTypeRequiredDescription
assignmentsjsonNoJSON array of {actor|blueprint_path|asset_path|name_prefix, component?, slot?|slot_name?|all_slots?, material}, omit to use the top-level fields as one assignment
actorstringNoSingle-assignment: target a placed actor by label/name
blueprint_pathstringNoSingle-assignment: target a Blueprint's component template(s) / class defaults
asset_pathstringNoSingle-assignment: any asset path (a Blueprint resolves like blueprint_path)
name_prefixstringNoSingle-assignment: every placed actor whose label/name starts with this
componentstringNoOptional: restrict to one mesh component (default = all mesh components on the target)
slotintNoElement slot index to set (default 0)
slot_namestringNoElement slot by name (alternative to slot; resolved via GetMaterialIndex)
all_slotsboolNoSet every element slot on the component
materialstringNoMaterial/MaterialInstance asset path, or empty string to clear the override to the mesh default
example
  cfa set_materials_batch --actor "TC_Orange" --material "/Game/CFATest/Materials/M_Orange.M_Orange"
  cfa set_materials_batch --name-prefix "TC_" --slot 0 --material "/Game/CFATest/Materials/M_Concrete.M_Concrete"
  cfa set_materials_batch --blueprint-path "/Game/BP/BP_Chair.BP_Chair" --component "Mesh" --slot-name "Seat" --material "/Game/M/M_Wood.M_Wood"
  cfa set_materials_batch --json '{"assignments":[{"blueprint_path":"/Game/BP/BP_Car.BP_Car","all_slots":true,"material":"/Game/M/M_Red.M_Red"},{"actor":"Wheel","slot":1,"material":""}]}'
spawn_actor_by_class

Spawn ANY AActor subclass, engine, plugin, or Blueprint

Resolves class_path as full UClass path ("/Script/Engine.PostProcessVolume"), Blueprint asset path ("/Game/BP_Miner"), or short name ("PostProcessVolume"). Validates child of AActor + not abstract + not deprecated. Uses UEditorActorSubsystem::SpawnActorFromClass when available so Ctrl+Z restores. Replaces the legacy whitelist of spawn_actor.

ParameterTypeRequiredDescription
class_pathstringYesFull path, BP path, or short name
namestringNoOptional outliner label
locationjsonNoJSON [x,y,z]
rotationjsonNoJSON [pitch,yaw,roll]
scalejsonNoJSON [x,y,z]
example
  cfa spawn_actor_by_class --class-path "/Script/Engine.PostProcessVolume" --name "GlobalPP" --location "[0,0,0]"
  cfa spawn_actor_by_class --class-path "/Script/Engine.SkyAtmosphere"
  cfa spawn_actor_by_class --class-path "/Game/Blueprints/BP_Miner.BP_Miner_C" --location "[500,0,100]" --rotation "[0,90,0]"
find_actors

Flexible actor search by name, label, class, or tag

Combine any number of filters (all AND'd together) to query the level. Useful to confirm an actor exists, list all of a class, or filter by tag. Returns total_scanned/total_matched even when truncated, so you know if you need to widen max_results.

ParameterTypeRequiredDescription
name_patternstringNoCase-insensitive substring on UObject name
label_patternstringNoCase-insensitive substring on outliner label
class_filterstringNoClass name (short or full path)
tagstringNoMatch actors with this Tag
exact_classboolNoRequire exact class match (else IsA)
max_resultsintNoResult cap (0 = unlimited)
include_transformboolNoInclude location/rotation/scale
example
  cfa find_actors --label-pattern "Light" --max-results 10
  cfa find_actors --class-filter "PointLight" --include-transform true
  cfa find_actors --class-filter "/Script/Engine.PostProcessVolume" --exact-class true
  cfa find_actors --tag "MCPModified"
  cfa find_actors --name-pattern "Conveyor" --class-filter "ConveyorBeltActor" --max-results 5
get_actor_properties

Get property values from a live placed actor instance

Reads the placed instance (not CDO). flat=false returns nested JSON with top-level filter; flat=true returns dotted-path dict with path-aware filter, depth limit, and optional per-property metadata, use this for searching deep into structs like FPostProcessSettings.

ParameterTypeRequiredDescription
actor_labelstringYesActor label or UObject name
filterstringNoSubstring filter (top-level for nested, full path for flat)
include_componentsboolNoAlso return component properties
flatboolNoFlat dotted-path dict mode
max_depthintNo(flat) max struct nesting
include_metadataboolNo(flat) emit metadata blob per leaf
expand_arraysboolNo(flat) emit Field[N] entries
array_element_limitintNo(flat) max array elements
categorystringNo(flat) UPROPERTY(Category=X) exact match
include_inheritedboolNo(flat) walk super classes
max_entriesintNo(flat) cap on emitted entries
cursorintNo(flat) pagination offset
example
  cfa get_actor_properties --actor-label "PostProcessVolume_1" --filter "bloom"
  cfa get_actor_properties --actor-label "PostProcessVolume_1" --flat true --filter "bloom" --max-depth 4
  cfa get_actor_properties --actor-label "MyActor" --include-components true --flat true --include-metadata true
quit_editor

Close the connected Unreal Editor the safe way (no process kill)

Shuts down the editor this command is routed to through Unreal's own graceful shutdown, exactly like File > Exit, instead of killing it by PID. By default it discards unsaved changes (like clicking Don't Save). Pass --save to write every unsaved map and asset first. Either way the save and confirm popups are skipped, so it works whether or not the editor was launched unattended. The editor exits a moment after this command returns its result.

ParameterTypeRequiredDescription
saveboolNoSave all unsaved changes before closing (default false = discard unsaved changes)
example
  cfa quit_editor
  cfa quit_editor --save
play_in_editor

Start Play-In-Editor (PIE), in the active viewport, or a new window

Starts a Play-In-Editor session the same way the toolbar Play button does. If a level viewport is currently active/visible, the game plays inside that viewport; if no level viewport is showing (e.g. a Blueprint editor tab is focused), it opens a separate PIE window. Pass --new-window to always open a separate window, or --simulate for Simulate-In-Editor (SIE) instead of play. The session starts a moment after this returns (RequestPlaySession is deferred). Stop it with stop_play_in_editor.

ParameterTypeRequiredDescription
new_windowboolNoAlways open a separate PIE window instead of using the active viewport
simulateboolNoSimulate-In-Editor (SIE) instead of Play-In-Editor
example
  cfa play_in_editor
  cfa play_in_editor --new-window
  cfa play_in_editor --simulate
stop_play_in_editor

Stop the running Play/Simulate-In-Editor session

Ends the active PIE or SIE session via Unreal's RequestEndPlayMap (the safe, deferred path). No-op if nothing is playing. The session ends a moment after this returns.

example
  cfa stop_play_in_editor
list_level_templates

List the New-Level templates the editor offers (Basic, Open World, blanks, project templates)

Reads GUnrealEd->GetTemplateMapInfos(), the exact source the editor's New Level picker uses, plus the two blank options (Empty Level, Empty Open World). Each entry returns display_name, category, template_map (the asset path to pass to create_level's --template), and a partitioned flag for the blank options.

example
  cfa list_level_templates
create_level

Create and open a new level (blank, partitioned, or from a template)

Creates a new map at --asset-path and opens it. With no --template it makes a blank level (add --partitioned for an Empty Open World / World Partition level). With --template (a template_map path or a display name from list_level_templates, e.g. "Basic" or "Open World") it clones that template map. Mirrors ULevelEditorSubsystem::NewLevel / NewLevelFromTemplate. Save the result with save_level (already has a path), a template/blank level is opened but not yet written to disk.

ParameterTypeRequiredDescription
asset_pathstringYesPackage path for the new level, e.g. /Game/Maps/MyLevel
templatestringNoTemplate map path or display name (from list_level_templates). Omit for a blank level.
partitionedboolNoMake a World Partition (Open World) blank level. Ignored when --template is set.
example
  cfa create_level --asset-path /Game/Maps/MyLevel
  cfa create_level --asset-path /Game/Maps/MyWorld --partitioned
  cfa create_level --asset-path /Game/Maps/MyLevel --template "Basic"
open_level

Open an existing level in the editor

Loads the map at --asset-path into the editor (ULevelEditorSubsystem::LoadLevel).

ParameterTypeRequiredDescription
asset_pathstringYesPackage path of the level to open, e.g. /Game/Maps/MyLevel
example
  cfa open_level --asset-path /Game/Maps/MyLevel
save_level

Save the current level in place

Saves the currently open level (ULevelEditorSubsystem::SaveCurrentLevel). A brand-new unsaved level needs save_level_as with a path instead.

example
  cfa save_level
save_level_as

Save the current level to a new asset path

Writes the current editor world to --asset-path (UEditorLoadingAndSavingUtils::SaveMap). Use this to persist a freshly created template/blank level.

ParameterTypeRequiredDescription
asset_pathstringYesPackage path to save the level to, e.g. /Game/Maps/MyLevel
example
  cfa save_level_as --asset-path /Game/Maps/MyLevel
setup_default_scene

Drop a ready-to-light environment (sun, sky, fog, floor) into the current level, with optional lighting presets

Spawns a default lighting/sky rig into the current level in one call so a freshly created empty map is instantly viewable: DirectionalLight (sun), SkyAtmosphere, SkyLight, ExponentialHeightFog, and a floor plane, all filed under an Environment outliner folder. Pass --preset (clear|noon|sunset|overcast|snowy|night) to also apply a physically-grounded grade (sun angle/intensity, fog, atmosphere, exposure, saturation) following Unreal's outdoor-lighting rules, a preset forces the sky rig + a PostProcessVolume on. Without a preset, toggle parts with --sky/--floor/--clouds/--post-process/--player-start and tune the sun with --sun-pitch/--sun-yaw and the floor with --floor-size (metres).

ParameterTypeRequiredDescription
presetstringNoPhysically-grounded lighting preset: clear, noon, sunset, overcast, snowy, night. Forces the sky rig + PostProcessVolume on and grades sun/fog/atmosphere/exposure. Empty = plain rig, no grade.
skyboolNoSpawn the sky rig: sun (atmosphere light) + SkyAtmosphere + SkyLight (real-time capture) + HeightFog
floorboolNoSpawn a floor plane
cloudsboolNoSpawn a VolumetricCloud
post_processboolNoSpawn an unbound PostProcessVolume (exposure/tonemapping)
player_startboolNoSpawn a PlayerStart
sun_pitchfloatNoSun (DirectionalLight) pitch in degrees (Environment Light Mixer default)
sun_yawfloatNoSun (DirectionalLight) yaw in degrees
sun_rollfloatNoSun (DirectionalLight) roll in degrees
floor_sizefloatNoFloor plane size in metres
folderstringNoOutliner folder for the spawned actors
example
  cfa setup_default_scene --preset clear
  cfa setup_default_scene --preset sunset --floor-size 200
  cfa setup_default_scene --preset overcast
  cfa setup_default_scene --clouds --player-start
get_undo_history

Read the editor's undo stack, newest first

Lists the editor's undo history the way the Undo History window does. Every CFA mutation is one entry titled 'CFA: <command>' with source=cfa, while the user's own edits show source=editor, so an agent can tell its work apart from theirs. Pass --details to also report what each transaction changed: the objects touched, their classes, and the property names that differ. Use --scope mine or --scope others to filter, and --filter to match on title.

ParameterTypeRequiredDescription
max_resultsintNoHow many entries to return, newest first
filterstringNoOnly return entries whose title contains this text
scopestringNoall (default), mine (authored by CFA), or others (authored by the user or the editor)
detailsboolNoInclude the objects and property names each transaction changed
example
  cfa get_undo_history
  cfa get_undo_history --scope mine --details
  cfa get_undo_history --filter spawn_actor --max-results 5
undo

Roll back the last N transactions, as Ctrl+Z does

Undoes the top of the editor's undo stack. By default (--scope mine) it stops at the first entry CFA did not author, so an agent can back its own work out without reverting the user's edits, and reports stopped_because when it stops early. The undo stack is strictly last-in-first-out, so a CFA transaction sitting below a user edit cannot be reverted on its own; check get_undo_history first. Pass --scope any to undo whatever is on top regardless of who made it.

ParameterTypeRequiredDescription
countintNoHow many transactions to undo
scopestringNomine (default) stops at the first entry CFA did not author; any undoes whatever is on top
example
  cfa undo
  cfa undo --count 5
  cfa undo --count 3 --scope any
batch

Run many commands in one round trip and one undo step

Executes an ordered list of commands against the editor in a single bridge call. Consecutive undoable steps share one transaction, so fifty edits collapse to a single Ctrl+Z. A step can reference an earlier step's output with "$2.asset_path", substitution only, it is a data format, not a scripting language. By default the batch is atomic: if any step fails the whole thing is rolled back with undo. Use --continue-on-error to run everything and get a per-step report instead, or --dry-run to validate command names and parameters without touching the project. Asset creation and deletion sit outside Unreal's undo system, so those steps are never rolled back and are listed under not_rolled_back.

ParameterTypeRequiredDescription
stepsjsonYesJSON array of {command, params} objects, run in order
atomicboolNoRoll the whole batch back if any step fails
continue_on_errorboolNoRun every step even when some fail, then report which failed
dry_runboolNoValidate every step without mutating anything
include_resultsboolNoInclude each step's full result payload
example
  cfa batch --json '{"steps":[{"command":"spawn_actor","params":{"name":"A","location":[0,0,100]}},{"command":"spawn_actor","params":{"name":"B","location":[200,0,100]}}]}'
  cfa batch --dry-run --json '{"steps":[{"command":"spawn_actor","params":{"name":"A"}}]}'
  cfa batch --continue-on-error --json '{"steps":[...]}'
redo

Re-apply the last N undone transactions

Redoes transactions previously undone. By default (--scope mine) it stops at the first entry CFA did not author; pass --scope any to redo whatever is next.

ParameterTypeRequiredDescription
countintNoHow many transactions to redo
scopestringNomine (default) stops at the first entry CFA did not author; any redoes whatever is next
example
  cfa redo
  cfa redo --count 3