Level Actors
Every Level Actors command in CodeFizz Editor Agent, with parameters and examples.
Every Level Actors command in CodeFizz Editor Agent, with parameters and examples.
42 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_levelList 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.
cfa get_actors_in_levelfind_actors_by_nameFind 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| pattern | string | Yes | Name pattern to search |
cfa find_actors_by_name --pattern "Light"
cfa find_actors_by_name --pattern "BP_Conveyor"spawn_actorSpawn 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Actor name |
| actor_type | string | No | Actor type |
| location | json | No | JSON array [x,y,z] |
| rotation | json | No | JSON array [pitch,yaw,roll] |
| scale | json | No | JSON array [x,y,z] |
| static_mesh | string | No | Static mesh path |
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_classesSearch 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | No | Case-insensitive substring to match in the class name |
| base_class | string | No | Only return subclasses of this class (short name or full path) |
| max_results | int | No | Maximum number of results |
| include_abstract | bool | No | Include abstract classes (default false) |
cfa search_classes --query "StaticMesh" --base-class ActorComponent
cfa search_classes --query Light --base-class Actor --max-results 20delete_actorDelete 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Actor name |
cfa delete_actor --name "MyCube"set_actor_transformSet 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Actor name |
| location | json | No | JSON array [x,y,z] |
| rotation | json | No | JSON array [pitch,yaw,roll] |
| scale | json | No | JSON array [x,y,z] |
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_actorSpawn 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| blueprint_path | string | Yes | Blueprint asset path |
| location | json | No | JSON array [x,y,z] |
| rotation | json | No | JSON array [pitch,yaw,roll] |
| scale | json | No | JSON array [x,y,z] |
| name | string | No | Actor name |
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_classSpawn 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| class_name | string | Yes | Actor class name |
| location_x | float | No | X location |
| location_y | float | No | Y location |
| location_z | float | No | Z location |
| rotation_yaw | float | No | Yaw rotation |
| rotation_pitch | float | No | Pitch rotation |
| rotation_roll | float | No | Roll rotation |
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 45get_selected_actorsGet 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.
cfa get_selected_actorsget_world_infoGet 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.
cfa get_world_infotake_screenshotCapture viewport or editor window to PNG
Captures a screenshot of the editor viewport or entire editor window and saves it as a PNG file. If no file path is specified, an auto-generated path is used. The resulting file can be viewed with the Read tool.
| Parameter | Type | Required | Description |
|---|---|---|---|
| file_path | string | No | Output file path (default: auto) |
| mode | string | No | viewport or window |
cfa take_screenshot
cfa take_screenshot --file-path "C:/Screenshots/level_overview.png" --mode "viewport"
cfa take_screenshot --mode "window"focus_viewportFrame 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| actor | string | No | Actor label or name to frame in the viewport |
| direction | string | No | View angle preset: top/bottom/front/back/left/right/iso (with actor) |
| pitch | float | No | Custom camera pitch in degrees (overrides direction; use with actor) |
| yaw | float | No | Custom camera yaw in degrees (overrides direction; use with actor) |
| fill | float | No | Fraction of the frame the actor fills, 0-1 (default 1 = tight) |
| distance | float | No | Explicit camera distance from the actor (overrides fill) |
| location | string | No | Camera world position: "(X=..,Y=..,Z=..)" or X,Y,Z |
| rotation | string | No | Camera rotation: "(P=..,Y=..,R=..)" (used with location) |
| realtime | bool | No | Enable viewport Realtime so placed effects simulate (default true) |
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_mapContext-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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| class_filter | string | No | Only include actors whose class NAME contains this substring |
| label_filter | string | No | Only include actors whose outliner LABEL contains this substring |
| region_grid | bool | No | Include the ASCII density heatmap (default true) |
| grid_size | int | No | Density heatmap resolution NxN (4-64) |
| cell_size | float | No | Clustering merge distance in world units (default: auto ~2x median actor size) |
| drill | int | No | Return the raw actors of cluster <id> instead of the summary |
| page | int | No | Drill page index |
| page_size | int | No | Drill actors per page |
| export | bool | No | Write the full flat per-actor JSON to Exports/ (interchange) |
cfa get_scene_map
cfa get_scene_map --drill 0 --page 0
cfa get_scene_map --label-filter "Brick_"
cfa get_scene_map --export trueget_mesh_infoNative 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| mesh_path | string | Yes | Static mesh content path (object or package path) |
| include_collision | bool | No | Include collision primitives (the real shape) (default true) |
| include_sockets | bool | No | Include named sockets with local transforms (default true) |
cfa get_mesh_info --mesh-path "/Engine/BasicShapes/Cube.Cube"
cfa get_mesh_info --mesh-path "/Game/Meshes/SM_Rock" --include-collision truespawn_actors_batchSpawn 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| actors | json | Yes | JSON array of {mesh,location,rotation,scale,name,type} |
| mesh | string | No | Default static mesh path for entries that omit it |
| type | string | No | Default actor type (StaticMeshActor/PointLight/SpotLight/DirectionalLight/CameraActor) |
| name_prefix | string | No | Auto-name entries as <prefix><index> when they omit 'name' |
| folder | string | No | Put all spawned actors into this outliner folder (organized on creation) |
| return_names | bool | No | Return the created labels (default false = counts only) |
# 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_batchBulk-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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name_prefix | string | No | Delete actors whose label/name starts with this |
| names | json | No | JSON array of exact labels/names to delete |
cfa delete_actors_batch --name-prefix "City_"
echo '{"names":["Ramp_A","Ramp_B"]}' | cfa delete_actors_batch --json -move_actors_to_folderPut 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| folder | string | Yes | Outliner folder path ('/' nests) |
| name_prefix | string | No | Select actors whose label/name starts with this |
| names | json | No | JSON array of exact labels/names to select |
cfa move_actors_to_folder --folder "Structures/Pyramid" --name-prefix "Brick_"create_folderCreate 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| folder | string | Yes | Outliner folder path ('/' nests) |
cfa create_folder --folder "Structures"delete_folderDelete 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| folder | string | Yes | Outliner folder path |
| recursive | bool | No | Also delete subfolders (default true) |
cfa delete_folder --folder "Structures"list_foldersList all outliner folders in the level
Enumerates every outliner folder (World-Partition aware). Use to verify folder create/delete. Optional filter matches a substring.
| Parameter | Type | Required | Description |
|---|---|---|---|
| filter | string | No | Only list folders whose path contains this |
cfa list_folders
cfa list_folders --filter "Structures"rename_folderRename/move an outliner folder
Renames an outliner folder (and moves its actors + subfolders).
| Parameter | Type | Required | Description |
|---|---|---|---|
| folder | string | Yes | Existing folder path |
| new_folder | string | Yes | New folder path |
cfa rename_folder --folder "Structures" --new-folder "Buildings"group_actorsGroup 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).
| Parameter | Type | Required | Description |
|---|---|---|---|
| name_prefix | string | No | Select actors whose label/name starts with this |
| names | json | No | JSON array of exact labels/names to select |
cfa group_actors --name-prefix "Brick_"ungroup_actorsDissolve the editor Group(s) containing the given actors
Ungroups the AGroupActor(s) that contain the selected actors. Select via name_prefix and/or names.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name_prefix | string | No | Select actors whose label/name starts with this |
| names | json | No | JSON array of exact labels/names to select |
cfa ungroup_actors --name-prefix "Brick_"attach_actorsAttach 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| parent | string | Yes | The actor to attach children to (label or name) |
| name_prefix | string | No | Select child actors whose label/name starts with this |
| names | json | No | JSON array of exact child labels/names |
cfa attach_actors --parent "Reactor" --name-prefix "Pipe_"detach_actorsDetach actors from their parent (become independent)
Detaches actors from their attachment parent (keeps world transform). Select via name_prefix and/or names.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name_prefix | string | No | Select actors whose label/name starts with this |
| names | json | No | JSON array of exact labels/names |
cfa detach_actors --name-prefix "Pipe_"capture_top_downOff-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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| file_path | string | No | Output PNG path (default: Saved/Screenshots/MCP_TopDown.png) |
| resolution | int | No | Square render resolution in pixels (64-8192) |
| padding | float | No | Extra margin around the level footprint (>=1.0) |
| ortho_width | float | No | Override the ortho width in world units (default: auto-fit) |
| center | string | No | Override view center "X,Y,Z" (e.g. a get_scene_map region center) |
cfa capture_top_down
cfa capture_top_down --file-path "C:/Shots/floorplan.png" --resolution 2048 --padding 1.2set_actor_propertySet 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| actor_label | string | Yes | Actor outliner label or UObject name |
| property_path | string | Yes | Dotted property path (e.g. Settings.BloomIntensity) |
| property_value | json | Yes | JSON-encoded value (number, bool, string, object, array) |
| component_name | string | No | Optional: anchor path to a named component |
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_metadataInspect 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| actor_label | string | Yes | Actor outliner label or UObject name |
| property_path | string | No | Optional dotted path; empty = top-level |
| filter | string | No | Case-insensitive substring on full path |
| category | string | No | UPROPERTY(Category=X) exact match (case-insensitive) |
| depth | int | No | Struct nesting levels to expand |
| expand_enums | bool | No | Include valid_values for enum-typed fields |
| include_inherited | bool | No | Walk super class properties |
| descend_into_objects | bool | No | If path lands on object ref, enumerate its class |
| max_entries | int | No | Cap on emitted entries (0 = summary only) |
| cursor | int | No | Pagination offset (use _summary.next_cursor) |
| component_name | string | No | Optional: anchor to a named component |
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_slotsList 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.)
| Parameter | Type | Required | Description |
|---|---|---|---|
| actor | string | No | Placed actor's label/name (reports all its mesh components, or just 'component') |
| actor_label | string | No | Alias for 'actor' |
| blueprint_path | string | No | Blueprint asset: reports its mesh component templates (class defaults). Add 'component' for one. |
| asset_path | string | No | Any asset path (a Blueprint resolves like blueprint_path) |
| component | string | No | Optional: restrict to one mesh component (object or class name) |
| component_name | string | No | Alias for 'component' |
| mesh_path | string | No | A StaticMesh asset path to read slots from directly |
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_batchAssign 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).
| Parameter | Type | Required | Description |
|---|---|---|---|
| assignments | json | No | JSON 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 |
| actor | string | No | Single-assignment: target a placed actor by label/name |
| blueprint_path | string | No | Single-assignment: target a Blueprint's component template(s) / class defaults |
| asset_path | string | No | Single-assignment: any asset path (a Blueprint resolves like blueprint_path) |
| name_prefix | string | No | Single-assignment: every placed actor whose label/name starts with this |
| component | string | No | Optional: restrict to one mesh component (default = all mesh components on the target) |
| slot | int | No | Element slot index to set (default 0) |
| slot_name | string | No | Element slot by name (alternative to slot; resolved via GetMaterialIndex) |
| all_slots | bool | No | Set every element slot on the component |
| material | string | No | Material/MaterialInstance asset path, or empty string to clear the override to the mesh default |
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_classSpawn 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| class_path | string | Yes | Full path, BP path, or short name |
| name | string | No | Optional outliner label |
| location | json | No | JSON [x,y,z] |
| rotation | json | No | JSON [pitch,yaw,roll] |
| scale | json | No | JSON [x,y,z] |
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_actorsFlexible 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name_pattern | string | No | Case-insensitive substring on UObject name |
| label_pattern | string | No | Case-insensitive substring on outliner label |
| class_filter | string | No | Class name (short or full path) |
| tag | string | No | Match actors with this Tag |
| exact_class | bool | No | Require exact class match (else IsA) |
| max_results | int | No | Result cap (0 = unlimited) |
| include_transform | bool | No | Include location/rotation/scale |
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 5get_actor_propertiesGet 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| actor_label | string | Yes | Actor label or UObject name |
| filter | string | No | Substring filter (top-level for nested, full path for flat) |
| include_components | bool | No | Also return component properties |
| flat | bool | No | Flat dotted-path dict mode |
| max_depth | int | No | (flat) max struct nesting |
| include_metadata | bool | No | (flat) emit metadata blob per leaf |
| expand_arrays | bool | No | (flat) emit Field[N] entries |
| array_element_limit | int | No | (flat) max array elements |
| category | string | No | (flat) UPROPERTY(Category=X) exact match |
| include_inherited | bool | No | (flat) walk super classes |
| max_entries | int | No | (flat) cap on emitted entries |
| cursor | int | No | (flat) pagination offset |
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 truequit_editorClose 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| save | bool | No | Save all unsaved changes before closing (default false = discard unsaved changes) |
cfa quit_editor
cfa quit_editor --saveplay_in_editorStart 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| new_window | bool | No | Always open a separate PIE window instead of using the active viewport |
| simulate | bool | No | Simulate-In-Editor (SIE) instead of Play-In-Editor |
cfa play_in_editor
cfa play_in_editor --new-window
cfa play_in_editor --simulatestop_play_in_editorStop 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.
cfa stop_play_in_editorlist_level_templatesList 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.
cfa list_level_templatescreate_levelCreate 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Package path for the new level, e.g. /Game/Maps/MyLevel |
| template | string | No | Template map path or display name (from list_level_templates). Omit for a blank level. |
| partitioned | bool | No | Make a World Partition (Open World) blank level. Ignored when --template is set. |
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_levelOpen an existing level in the editor
Loads the map at --asset-path into the editor (ULevelEditorSubsystem::LoadLevel).
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Package path of the level to open, e.g. /Game/Maps/MyLevel |
cfa open_level --asset-path /Game/Maps/MyLevelsave_levelSave 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.
cfa save_levelsave_level_asSave 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Package path to save the level to, e.g. /Game/Maps/MyLevel |
cfa save_level_as --asset-path /Game/Maps/MyLevelsetup_default_sceneDrop 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).
| Parameter | Type | Required | Description |
|---|---|---|---|
| preset | string | No | Physically-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. |
| sky | bool | No | Spawn the sky rig: sun (atmosphere light) + SkyAtmosphere + SkyLight (real-time capture) + HeightFog |
| floor | bool | No | Spawn a floor plane |
| clouds | bool | No | Spawn a VolumetricCloud |
| post_process | bool | No | Spawn an unbound PostProcessVolume (exposure/tonemapping) |
| player_start | bool | No | Spawn a PlayerStart |
| sun_pitch | float | No | Sun (DirectionalLight) pitch in degrees (Environment Light Mixer default) |
| sun_yaw | float | No | Sun (DirectionalLight) yaw in degrees |
| sun_roll | float | No | Sun (DirectionalLight) roll in degrees |
| floor_size | float | No | Floor plane size in metres |
| folder | string | No | Outliner folder for the spawned actors |
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