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
DocsReferenceWorld Building

World Building

Every World Building command in CodeFizz Editor Agent, with parameters and examples.

Loading…
PreviousGameplay Ability SystemNextBehavior Trees
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.

55 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.

paint_landscape_layers

Paint every landscape layer in one normalised pass

Paints all layers together with per-vertex weights normalised to sum to exactly 255. This exists because painting layers one at a time is wrong: LandscapeLayerBlend normalises internally, so several layers each written at 255 average into a washed-out mix instead of resolving to a dominant material, and any vertex no rule claims ends up with zero total weight and renders black. Slope is measured on a box-blurred heightfield (--slope-smoothing), because central differences over adjacent samples are high frequency and alias into a stipple that no amount of weight blending repairs. Layer syntax is "Name:rule:threshold:blend", semicolon separated. Rules: all, above_height, below_height, slope_above, slope_below. Include one 'all' layer as a base so every vertex is covered. Weights are read back per layer and reported, so engine renormalisation is visible rather than assumed.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
layersstringYes"Name:rule:threshold:blend;...", include one 'all' layer as the base
layer_info_pathstringNoPackage path for any layer info assets that must be created
slope_smoothingintNoBox-blur radius in vertices applied before slope is measured
edge_noisefloatNoJitter each boundary so transitions are not clean contour lines
example
  cfa paint_landscape_layers --layers "Rock:all; Grass:below_height:3000:2600; Snow:above_height:5400:1800"
  cfa paint_landscape_layers --layers "Rock:all; Grass:slope_below:200:180; Snow:above_height:6000:1500" --slope-smoothing 3
create_volume

Spawn a volume with real brush geometry at a given size

Spawns any AVolume subclass and builds its brush at the size you ask for, mirroring the editor's own drag-and-drop path (UCubeBuilder + UActorFactory::CreateBrushForVolumeActor). spawn_actor_by_class also produces a volume, but always with the actor factory's fixed 200x200x200 brush, so sizing it afterwards means scaling the actor rather than rebuilding the brush the collision is derived from. --size is the full box size in world units, not half-extents. Use --unbound for a post-process volume that should affect the whole level regardless of shape. Verified identical on UE 5.6, 5.7 and 5.8 (CubeBuilder.h:18/28/32/36, ActorFactory.h:99).

ParameterTypeRequiredDescription
class_pathstringYesVolume class: full path (/Script/Engine.PostProcessVolume) or short name (PostProcessVolume)
namestringNoActor label for the new volume (defaults to the class name)
locationstringNoWorld location of the volume centre as "X,Y,Z", e.g. "0,0,500". Defaults to the origin
rotationstringNoWorld rotation as "Pitch,Yaw,Roll". Defaults to zero
sizestringNoFull box size in world units as "X,Y,Z", e.g. "4000,4000,2000". Defaults to 1000,1000,1000
unboundboolNoPost-process volumes only: affect the whole level regardless of the volume's shape
folderstringNoOutliner folder to place the volume in, e.g. Environment
example
  cfa create_volume --class-path /Script/Engine.PostProcessVolume --name Grade_Main --size 4000,4000,2000
  cfa create_volume --class-path NavMeshBoundsVolume --name Nav_Bounds --size 8000,8000,2000
  cfa create_volume --class-path PostProcessVolume --name Grade_Global --unbound
validate_volume

Verify a volume has brush geometry and actually does something

Checks that a volume works rather than merely exists: brush geometry present, bounds non-zero, and for post-process volumes how many bOverride_ flags are actually active. A post-process volume with zero active overrides changes nothing, which is the most common silent no-op in the domain. Returns verdict pass / pass_with_warnings / fail plus an issues list.

ParameterTypeRequiredDescription
actor_labelstringYesActor label or name of the volume to check
example
  cfa validate_volume --actor-label Grade_Main
create_landscape

Create a landscape at a chosen resolution

Spawns an ALandscape and imports a flat heightfield at the requested resolution. Resolution comes from section_size x sections_per_component x component_count, giving (component_count * section_size * sections_per_component) + 1 vertices per axis. Defaults produce 8x8 components of 63 quads = 505x505 vertices, 50400x50400 world units at scale 100. Scale is applied BEFORE import because ULandscapeInfo captures DrawScale when it is created, which import does. Uses the TArrayView Import overload, the older TArray* form is deprecated on 5.6/5.7 and gone in 5.8.

ParameterTypeRequiredDescription
namestringNoActor label (defaults to Landscape)
section_sizeintNoQuads per section: 7, 15, 31, 63, 127 or 255
sections_per_componentintNo1 or 2
component_count_xintNoComponents in X
component_count_yintNoComponents in Y
locationstringNoWorld location as "X,Y,Z"
scalestringNoActor scale as "X,Y,Z"
materialstringNoLandscape material asset path
example
  cfa create_landscape --name Terrain --component-count-x 8 --component-count-y 8
  cfa create_landscape --name Small --section-size 31 --component-count-x 2 --component-count-y 2 --scale 100,100,100
sculpt_landscape

Sculpt landscape heights with a shape

Writes heights through FLandscapeEditDataInterface, which is public in all three versions (the interactive brush FEdModeLandscape is Private/ and unreachable). Shapes: flat, hill, valley, ramp, terrace, noise, ridge, mountain (ridged multifractal, sharp crests rather than a dome), plateau, crater. Two passes reshape existing terrain and therefore REQUIRE --additive: erosion (thermal, material above the talus angle slides downhill, producing scree slopes and flat valley floors) and river (carves a meandering channel with smooth banks; --height is the cut depth, --radius sets the channel width). --additive adds to existing heights instead of replacing, so shapes can be layered. --seed makes noise and ridge reproducible. Heights are read back after the write, so the reported min/max world height is measured, not predicted. The edit layer is addressed by explicit GUID rather than the default constructor, which would target whatever layer the editor happens to have selected.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
shapestringYesflat, hill, valley, ramp, terrace, noise, ridge, mountain, plateau, crater, erosion or river
heightfloatNoPeak height in world units, signed
centerstringNoCentre in landscape vertex coordinates as "X,Y"
radiusfloatNoRadius in vertices (defaults to a quarter of the landscape)
seedintNoSeed for noise and ridge
additiveboolNoAdd to existing heights instead of replacing
example
  cfa sculpt_landscape --shape hill --height 4000 --radius 120
  cfa sculpt_landscape --shape noise --height 800 --seed 7 --additive
  cfa sculpt_landscape --shape ridge --height 2500 --additive
paint_landscape_layer

Paint a landscape weight layer

Paints a target layer, creating its layer info asset if needed via UE::Landscape::CreateTargetLayerInfo, present in 5.6, 5.7 and 5.8, unlike ALandscapeProxy::CreateLayerInfo which 5.8 removed. Rules select which vertices get weight: all, above_height, below_height, slope_above, slope_below (--threshold sets the cutoff). Weights are always read back afterwards and reported as vertices_verified_nonzero, because on 5.8 SetAlphaData's weight-adjust arguments are silently discarded, so the write cannot be trusted to have renormalized. A material must be assigned for painted layers to be visible.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
layer_namestringYesTarget layer name, e.g. Grass
layer_info_pathstringNoPackage path for a new layer info asset
rulestringNoall, above_height, below_height, slope_above or slope_below
thresholdfloatNoCutoff for the height and slope rules
weightintNoWeight 0-255 to paint
blend_rangefloatNoDistance over which weight ramps in around the threshold. Zero gives a hard edge that aliases into a stipple pattern
edge_noisefloatNoJitter the boundary by this amount so the transition is not a clean contour line
example
  cfa paint_landscape_layer --layer-name Grass
  cfa paint_landscape_layer --layer-name Rock --rule slope_above --threshold 300
  cfa paint_landscape_layer --layer-name Snow --rule above_height --threshold 2500
get_landscape_info

Read a landscape's resolution, scale, height range and layers

Reports resolution, component sizing, scale, world size, the measured min/max world height read from the heightfield, the assigned material and the target layer list.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
example
  cfa get_landscape_info
clear_landscape_splines

Remove all landscape splines

Removes every control point and segment from the landscape's spline component and re-rasterises the splines edit layer. Clearing the objects alone is not enough: the deformation lives in that layer and stays baked in until it is re-applied from the empty set.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
example
  cfa clear_landscape_splines
add_landscape_spline

Deform the landscape along a spline

Places a Landscape Spline that raises or lowers the terrain along a path. Unlike carving heights directly this is NON-DESTRUCTIVE: the deformation lives in the landscape's own spline edit layer, and the control points stay editable by hand in the Landscape tool afterwards. Heights are sampled from the terrain at each point, so the corridor follows the ground unless you offset it. Optionally paints a target layer along the corridor, which is how road beds and riverbanks are normally authored.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
pointsstringYesControl points "X,Y; X,Y; X,Y" in WORLD units; at least two
widthfloatNoHalf-width of the flattened corridor, world units (default 400)
side_fallofffloatNoFalloff either side beyond the width, world units (default 600)
end_fallofffloatNoFalloff at the two ends, world units (default 400)
raiseboolNoRaise terrain below the spline (default true)
lowerboolNoLower terrain above the spline (default true)
layer_namestringNoTarget layer to paint along the corridor, e.g. Gravel
height_offsetfloatNoVertical offset on every sampled height (default 0)
applyboolNoApply the deformation now; false leaves it for hand editing (default true)
point_spacingfloatNoMax spacing between control points, world units; the path is subdivided and dropped onto the terrain so the corridor follows the ground instead of ramping. 0 uses your points verbatim (default 1500)
height_smoothingintNoSmooth sampled heights along the run, points either side (default 2)
example
  cfa add_landscape_spline --points "-20000,0; -5000,3000; 8000,-2000; 20000,1000" --width 500
  cfa add_landscape_spline --points "0,0; 10000,0" --width 300 --layer-name "Gravel" --height-offset 120
edit_terrain_region

Edit one region of an existing landscape

Applies a single operation to a circular region of the landscape that is already there, or to the whole landscape if no centre is given. The operation runs over the full heightfield and is then blended into the region through a smoothstep falloff, so erosion never sees an artificial boundary to erode against and the edit welds into the surrounding terrain with no visible rim. flatten with no explicit height targets the region's own mean, which lands the plateau where the ground already is instead of stepping.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
operationstringYesraise, lower, flatten, smooth, noise, mountain, terrace, erode, thermal
centerstringNoCentre "X,Y" in WORLD units; omit to affect the whole landscape
radiusfloatNoRegion radius in world units (default 10000)
fallofffloatNoFraction of the radius spent blending out, 0-1; 0 gives a hard seam (default 0.5)
amountfloatNoHeight change for raise/lower/noise/mountain (default 1000)
heightfloatNoTarget height for flatten; omit to use the region's own mean
use_heightboolNoSet when passing an explicit flatten height
radius2intNoBlur radius for smooth, brush radius for erode (default 2)
iterationsfloatNoPasses for smooth/thermal, droplets per vertex for erode (default 4)
step_heightfloatNoVertical step spacing for terrace, in world units (default 400)
feature_scalefloatNoFeature wavelength in vertices for noise/mountain (default 120)
seedintNoRandom seed (default 1)
example
  cfa edit_terrain_region --operation flatten --center "0,0" --radius 6000
  cfa edit_terrain_region --operation mountain --center "-12000,4000" --radius 9000 --amount 2500
  cfa edit_terrain_region --operation smooth --center "5000,5000" --radius 4000 --iterations 6
add_river

Carve a river into an existing landscape

Edits the landscape that is already there, without regenerating it. The river's path is traced by following the terrain's own steepest descent from the start point, so it physically cannot run uphill or over a summit whatever start you give it. Width and depth are sized from the drainage each cell carries, so headwaters are a shallow notch and the trunk cuts deep and wide. Depressions are filled first, otherwise the trace stops in the first pit it meets. Reports total descent from source to mouth as proof the channel actually falls.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
startstringNoStart "X,Y" in WORLD units; omit to start from the wettest point
from_peakboolNoStart from the highest point instead of the wettest
depthfloatNoBed depth in world units at the widest point (default 300)
width_scalefloatNoWidth multiplier; width follows drainage area (default 2.5)
valley_widthfloatNoValley shoulder as a multiple of channel width (default 2.5)
tributariesboolNoAlso carve every tributary above the channel threshold
tostringNoDestination "X,Y" in WORLD units; routes THROUGH what lies between, cutting a gorge across high ground (a water gap)
climb_penaltyfloatNoHow hard the route avoids climbing when 'to' is given; high hugs valleys, low drives over ridges (default 40)
flow_attractionfloatNoHow strongly the route is drawn onto existing channels, 0-0.95; without it the route is a straight canal (default 0.85)
excavation_weightfloatNoHow strongly the route prefers low ground over being short; the main knob against a straight canal (default 12)
relaxintNoStream power steps after the carve so the terrain erodes to the river as base level, growing tributaries and flanks instead of a bare trench; 0 skips
water_pluginboolNoUse the engine Water plugin river body for real water rendering instead of a plain spline mesh ribbon
channel_depthfloatNoMinimum channel depth below local ground so the water runs the whole course; 0 derives it from water depth
carveboolNoCarve the channel into the heightmap ourselves; ignored when a Water plugin body is created since its brush already lowers the terrain
min_widthfloatNoNarrowest the river may get in world units; the engine default is 2048 and thinner reads as a ribbon in a dry channel
spline_pointsintNoHow many points the water spline gets; tangents interpolate between them, so few and smooth beats many and stepped
max_slope_degreesfloatNoSteepest reach the river may hold; the headwater above this slope is dropped so the river starts below the cascade
wall_anglefloatNoValley wall angle in degrees; real threshold hillslopes are 30-35 (default 35)
concavityfloatNoProfile concavity; 0.45 is the conventional reference (default 0.45)
incisionfloatNoExtra drop of the whole bed below the traced ground, world units (default 0)
waterboolNoAlso place a visible water surface along the channel (spline meshes, no plugin needed)
water_depthfloatNoHow far above the carved bed the water sits, world units (default 60)
water_materialstringNoMaterial for the water; omit to generate a translucent one
layersstringNoPaint from the river's own masks: "Riverbank:water_above:0.04:0.10; Rock:all". Adds water and flow to the height/slope rules
layer_info_pathstringNoPackage path for any layer info assets that must be created
mask_smoothingintNoBlur radius for the water and flow masks before painting (default 3)
example
  cfa add_river
  cfa add_river --start "25000,25000" --depth 400
  cfa add_river --from-peak --tributaries
generate_terrain

Generate a complete eroded terrain into a landscape

Builds the whole terrain in one pass: a ridged multifractal base shape with domain warping, then droplet hydraulic erosion which carves dendritic drainage networks, then thermal talus slippage which stops the ridges hydraulic erosion sharpens from becoming knife edges. Reports the slope distribution, because that is what actually distinguishes plausible terrain from procedural-looking terrain: real mountains run about 20-30 degrees median with under one percent above 60. Erosion cost is linear in droplets and quadratic in brush radius.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
seedintNoRandom seed; the same seed always gives the same terrain
amplitudefloatNoPeak-to-trough height in world units before erosion (default 4000)
sharpnessfloatNo0 rolling hills, 1 sharp ridged crests (default 1)
warpfloatNoHow much ridgelines meander; 0 runs them straight (default 0.5)
feature_scalefloatNoLargest feature wavelength in vertices (default 220)
erosionfloatNoHydraulic droplets per vertex; 0 skips erosion (default 1)
erosion_radiusintNoBrush radius in vertices; 2 narrow gullies, 4 broad valleys (default 3)
talus_anglefloatNoThermal talus angle in degrees; 30-35 scree, 40-45 rocky (default 33)
thermal_iterationsintNoThermal passes; without these ridges never converge (default 12)
layersstringNoPaint from the erosion's own history: "Name:rule:threshold:blend" separated by semicolons. Rules add flow, deposit, wear, debris (thresholds 0-1) to height and slope
layer_info_pathstringNoPackage path for any layer info assets that must be created
mask_structurefloatNoAccumulation mask detail, 0 smooth to 1 fine (default 0.5)
mask_smoothingintNoBlur radius for accumulation masks; droplet deposition is per-cell so without this they are speckly (default 2)
hydrologyboolNoFill depressions, route flow, extract and carve the river network (default true)
channel_densityfloatNoChannel head at this fraction of map drainage area; lower is denser (default 0.002)
river_depthfloatNoChannel bed depth in world units (default 260)
flow_convergencefloatNoMFD exponent; 1 diffuse, 4 crisp channels without D8 staircase (default 4)
stream_power_iterationsintNoStream power steps; makes valleys concave and slope-area correct. 0 skips (default 220)
erodibilityfloatNoK in dz/dt = U - K*A^m*S^n; higher cuts faster and lowers relief (default 0.00004)
upliftfloatNoRock uplift per step in world units; relief scales with uplift/erodibility (default 2)
hillslope_diffusionfloatNoDiffusion as a fraction of the stability limit, 0-0.9; rounds ridge crests (default 0.25)
detailfloatNoFine relief added back AFTER erosion, world units. Stream power diffuses every step and thermal smooths every pass, so a long run leaves smooth clay however good the large shape is; this puts rock texture back on the faces. 0 disables (default 55)
detail_scalefloatNoWavelength of that detail in vertices; smaller is crisper (default 9)
detail_slope_biasfloatNoSlope in degrees at which detail reaches full strength; below it it ramps off so flats stay smooth (default 26)
river_startstringNoRiver source "X,Y" world units; with river_to the river is graded BEFORE erosion so the ranges build around it
river_tostringNoRiver mouth "X,Y" world units; placed at the floor of the map
river_meanderfloatNoSideways wander of the course in world units; 0 is a dead-straight canal
river_meander_wavelengthfloatNoDistance between one bend and the next, world units
river_valley_widthfloatNoValley floor half-width coefficient (metres at 1 km2 drainage)
river_wall_anglefloatNoCorridor valley wall angle in degrees
river_drop_fractionfloatNoHow far the river descends as a fraction of map relief
concavityfloatNoLong-profile concavity for the corridor
example
  cfa generate_terrain --amplitude 5000 --erosion 1.0
  cfa generate_terrain --sharpness 0.3 --erosion 0.5 --feature-scale 400
validate_landscape

Verify a landscape is usable

Checks the landscape has ULandscapeInfo (absent means it was never imported), a readable extent, non-flat heights, an assigned material (without one, painted layers are invisible), target layers, and registered components. Returns verdict pass / pass_with_warnings / fail.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
example
  cfa validate_landscape
build_lighting

Start a Lightmass lighting build

Starts GEditor->BuildLighting at the chosen quality. Lightmass runs out of process, so this returns immediately, poll lighting_build_status. Refuses when Auto Apply Lighting is disabled in Editor Preferences, because in that state Lightmass finishes and then parks forever waiting for a human to click Apply Now, with the build reporting in_progress true and no completion delegate ever firing. Progress percentage is not available: FStaticLightingManager is engine-private, so only a running/not-running state exists.

ParameterTypeRequiredDescription
qualitystringNopreview, medium, high or production
current_level_onlyboolNoBuild only the current level
example
  cfa build_lighting --quality preview
  cfa build_lighting --quality production --current-level-only
lighting_build_status

Poll a lighting build

Reports in_progress, exporting, and the unbuilt-object counts. By default it also ticks UpdateBuildLighting, which is the pump that advances the build's stages, an interactively ticking editor calls it already, but an unattended one needs this to progress.

ParameterTypeRequiredDescription
pumpboolNoTick the build once while polling
example
  cfa lighting_build_status
recapture_sky

Recapture sky lights

The engine's RecaptureSky only ENQUEUES a capture; the work happens in UpdateSkyCaptureContents, which the editor tick normally drives. This command does both, so a headless run completes. Static-mobility sky lights are reported as skipped rather than counted as success: the engine refuses to capture those unless the project has ray tracing or distance fields enabled.

ParameterTypeRequiredDescription
actorstringNoSky light actor label (omit for all sky lights)
example
  cfa recapture_sky
  cfa recapture_sky --actor SkyLight
update_reflection_captures

Flush or fully rebake reflection captures

By default flushes pending capture updates via UpdateReflectionCaptureContents. --full-build runs GEditor->BuildReflectionCaptures, which waits on shader compilation and recaptures sky first. That path is gated on feature level SM5 because the engine hard-asserts below it. Note per-capture resolution does not exist in any version, it is the project setting r.ReflectionCaptureResolution, reachable through set_project_settings.

ParameterTypeRequiredDescription
full_buildboolNoFull rebake instead of flushing pending updates
example
  cfa update_reflection_captures
  cfa update_reflection_captures --full-build
validate_lighting

Verify lighting is built

Reads the same unbuilt-object count that drives the viewport's LIGHTING NEEDS TO BE REBUILT banner, refreshing it from the renderer first so the number is live rather than stale. Also reports unbuilt reflection captures and how many static/stationary lights have no baked data. Returns verdict pass / pass_with_warnings / fail.

example
  cfa validate_lighting
build_navigation

Start a navigation mesh build (asynchronous)

Starts UNavigationSystemV1::Build(), which is fire-and-forget: it returns before tiles finish, so this command returns immediately rather than blocking the bridge. Poll navigation_build_status until in_progress is false, then run validate_navigation. Refuses up front when the level has no navigation bounds, since a build would silently produce nothing. Create bounds with create_volume --class-path NavMeshBoundsVolume.

example
  cfa create_volume --class-path NavMeshBoundsVolume --name Nav_Bounds --size 6000,6000,2000
  cfa build_navigation
  cfa navigation_build_status
navigation_build_status

Poll an in-flight navigation build

Reports in_progress, build_locked, remaining_tasks and built_tiles. Tile counting is version-aware: 5.8 has GetNumActiveTiles, while 5.6 and 5.7 count tiles with valid bounds. The engine's GetNavMeshTilesCount is deliberately NOT used, it is the tile pool size and reports non-zero on a completely empty navmesh.

example
  cfa navigation_build_status
validate_navigation

Verify navigation is built and actually pathable

Checks navigation bounds exist, nav data exists, and tiles are genuinely built. Pass --test-point to additionally project a world point onto the navmesh: a navmesh can exist, report tiles, and still be unusable, and the projection is what catches that. Returns verdict pass / pass_with_warnings / fail plus an issues list.

ParameterTypeRequiredDescription
test_pointstringNoWorld point as "X,Y,Z" to project onto the navmesh
project_extentstringNoHalf-extents "X,Y,Z" for the test_point search; defaults to the full navigable height so a point above or below the surface still finds it
example
  cfa validate_navigation
  cfa validate_navigation --test-point 0,0,200
set_spline_points

Set or append a spline's points

Writes points through the USplineComponent function API using the editor's own mutation sequence: batch every point with bUpdateSpline=false, rebuild once, then set the construction-script override so a rerun cannot discard the edit. This deliberately does NOT go through the reflection property writer: 5.7 made the parallel FSpline member persisted state with a LastAuthority arbiter, so writing SplineCurves as a property desyncs the two copies on 5.7 and 5.8. Reading by reflection is still fine.

ParameterTypeRequiredDescription
actorstringYesActor label or name owning the spline
componentstringNoSpline component name (defaults to the actor's first)
pointsstringYesPoints as "X,Y,Z; X,Y,Z;..."
spacestringNoCoordinate space of the given points: world or local
point_typestringNolinear, curve, constant, curveclamped or curvecustomtangent
appendboolNoAppend instead of replacing the existing points
closed_loopboolNoClose the spline into a loop
example
  cfa set_spline_points --actor Road_Spline --points "0,0,0; 1000,0,0; 2000,500,0; 3000,500,100"
  cfa set_spline_points --actor Fence --points "0,0,0; 500,0,0" --point-type linear --closed-loop
set_spline_point

Edit one spline point: location, tangents, rotation, scale, type

Edits a single point without rebuilding the whole spline. Two engine behaviours are handled for you. First, SetRotationAtSplinePoint realigns tangents to the rotation's forward vector, so rotation is applied BEFORE tangents, otherwise your tangents would be silently discarded. Second, the engine's singular SetTangentAtSplinePoint forwards the same vector to both arrive and leave, collapsing a broken tangent; this uses the plural form so arrive and leave stay independent. Note a custom tangent only survives on a point of type curvecustomtangent.

ParameterTypeRequiredDescription
actorstringYesActor label or name owning the spline
componentstringNoSpline component name (defaults to the actor's first)
indexintYesIndex of the point to edit
locationstringNoNew location as "X,Y,Z"
arrive_tangentstringNoArrive tangent as "X,Y,Z"
leave_tangentstringNoLeave tangent as "X,Y,Z"
rotationstringNoRotation as "Pitch,Yaw,Roll" (applied before tangents)
scalestringNoScale as "X,Y,Z"
point_typestringNolinear, curve, constant, curveclamped or curvecustomtangent
spacestringNoCoordinate space: world or local
example
  cfa set_spline_point --actor Road --index 2 --location 1500,700,200
  cfa set_spline_point --actor Road --index 2 --point-type curvecustomtangent --arrive-tangent 0,900,0 --leave-tangent 900,0,0
get_spline

Read a spline's points, length and sampled transforms

Returns each point's world location, type and distance along the spline, plus total length and the closed-loop flag. --sample-count additionally returns that many locations sampled at even distance, which is the same stepping scatter_foliage uses for its spline pattern, the engine has no spacing concept of its own, so distribution is defined here.

ParameterTypeRequiredDescription
actorstringYesActor label or name owning the spline
componentstringNoSpline component name (defaults to the actor's first)
sample_countintNoAlso return this many evenly spaced samples along the spline
example
  cfa get_spline --actor Road_Spline
  cfa get_spline --actor Road_Spline --sample-count 20
validate_spline

Verify a spline is usable

Checks the spline has at least two points, non-zero length, no duplicate consecutive points (which produce zero-length segments and break distance-based sampling), and that the construction-script override flag is set, without it, a Blueprint rerun silently discards the points. Returns verdict pass / pass_with_warnings / fail plus an issues list.

ParameterTypeRequiredDescription
actorstringYesActor label or name owning the spline
componentstringNoSpline component name (defaults to the actor's first)
example
  cfa validate_spline --actor Road_Spline
add_component

Add a component to a placed actor in the level

Adds a component instance to an actor already in the level (as opposed to add_component_to_blueprint, which edits a Blueprint's template). This is how you give a plain actor a SplineComponent, a BoxComponent, a light component and so on. The component's properties are then ordinary reflected properties, editable with set_actor_property --component-name.

ParameterTypeRequiredDescription
actorstringYesActor label or name to add the component to
component_classstringNoComponent class, e.g. SplineComponent or /Script/Engine.SplineComponent
component_typestringNoAlias for component_class
component_namestringNoName for the new component (defaults to the class name)
attach_parentstringNoExisting component to attach under (defaults to the root)
example
  cfa add_component --actor Road_Spline --component-class SplineComponent --component-name Path
  cfa add_component --actor Trigger_A --component-class BoxComponent
create_foliage_type

Create a foliage type asset from a static mesh

Creates a UFoliageType_InstancedStaticMesh asset. Foliage types must be assets: the engine asserts on a non-asset type in a World Partition level, and the engine's own save helper opens a modal dialog, so this uses the dialog-free duplicate path instead. Every placement rule is an ordinary reflected property, so shape the type with set_asset_property: Density, Radius, ScaleX/ScaleY/ScaleZ (FFloatInterval min/max), ZOffset, AlignToNormal, RandomYaw, RandomPitchAngle, GroundSlopeAngle, Height, LandscapeLayers, CollisionWithWorld, CullDistance, CastShadow and the rest. scatter_foliage then applies whatever you set.

ParameterTypeRequiredDescription
mesh_pathstringYesStatic mesh to grow foliage from
asset_pathstringYesPackage path for the new foliage type, e.g. /Game/Foliage/FT_Bush
example
  cfa create_foliage_type --mesh-path /Game/Meshes/SM_Bush --asset-path /Game/Foliage/FT_Bush
  cfa set_asset_property --asset-path /Game/Foliage/FT_Bush --property-path AlignToNormal --property-value true
scatter_foliage

Place foliage in a reproducible pattern (the brush, without the brush)

Places foliage using the engine's own painting pipeline, with pattern generation in place of a mouse stroke. For each point it calls AInstancedFoliageActor::FoliageTrace to find the ground, then FPotentialInstance::PlaceInstance, which applies the foliage type's own scale range, random yaw and pitch, Z offset, align-to-normal, ground-slope and height rules. So shaping the type with set_asset_property changes the result here, exactly as it would when painting by hand. Patterns: random (uniform in a disc), grid (lattice), radial (concentric rings), spline (along a spline actor, with optional sideways scatter). Use --seed for a reproducible layout. Points that miss the ground or fail the type's rules are reported as missed_ground and rejected_by_type_rules rather than dropped silently.

ParameterTypeRequiredDescription
foliage_typestringYesFoliage type asset path from create_foliage_type
patternstringNorandom, grid, radial or spline
centerstringNoCentre of the area as "X,Y,Z". Defaults to the origin
radiusfloatNoRadius of the scatter area in world units
countintNoHow many instances to attempt
spacingfloatNoSpacing in world units for the grid and spline patterns; overrides count
seedintNoRandom seed so a scatter is reproducible
spline_actorstringNoSpline actor label, for the spline pattern
spline_offsetfloatNoSideways scatter either side of the spline, in world units
trace_heightfloatNoHow far above the area to start the downward ground trace
example
  cfa scatter_foliage --foliage-type /Game/Foliage/FT_Bush --center 0,0,0 --radius 3000 --count 400
  cfa scatter_foliage --foliage-type /Game/Foliage/FT_Grass --pattern grid --radius 2000 --spacing 150
  cfa scatter_foliage --foliage-type /Game/Foliage/FT_Tree --pattern spline --spline-actor Road_Spline --spline-offset 400 --spacing 300
clear_foliage_instances

Remove placed foliage instances, keeping the types

Removes instances while leaving the foliage types in the palette. This is deliberately separate from remove_foliage_type because the engine's own AddInstances counterpart, RemoveAllInstances, actually deletes the TYPE and destroys its components rather than clearing instances.

ParameterTypeRequiredDescription
foliage_typestringNoFoliage type asset path. Omit to clear every type in the level
example
  cfa clear_foliage_instances --foliage-type /Game/Foliage/FT_Bush
  cfa clear_foliage_instances
remove_foliage_type

Remove a foliage type from the level entirely

Deletes the type from the level's foliage actors, destroying its instances and render components. Requires an explicit type, there is no remove-everything form, because this is destructive.

ParameterTypeRequiredDescription
foliage_typestringYesFoliage type asset path to remove
example
  cfa remove_foliage_type --foliage-type /Game/Foliage/FT_Bush
get_foliage_info

List foliage types in the level with instance counts

Reads the authoritative editor-side instance data rather than the render component, so counts are correct even while the instance tree is still rebuilding and for actor-based foliage that has no render component at all.

ParameterTypeRequiredDescription
filterstringNoSubstring matched against the foliage type path
max_resultsintNoMaximum types to return
example
  cfa get_foliage_info
validate_foliage

Verify placed foliage is actually going to render

Checks each foliage type has a source mesh, has instances, and that the render component's instance count matches the editor data, a mismatch means the instance tree is still rebuilding, which is the difference between 'the data is right' and 'the player sees it'. Returns verdict pass / pass_with_warnings / fail plus an issues list.

ParameterTypeRequiredDescription
foliage_typestringNoFoliage type asset path. Omit to check every type
example
  cfa validate_foliage
  cfa validate_foliage --foliage-type /Game/Foliage/FT_Bush
list_editor_modes

List the editor modes this build registers, and which is active

Enumerates editor modes from FEditorModeRegistry rather than a hardcoded table, so modes added by plugins show up too. Typical ids are EM_Default (Selection), EM_Landscape, EM_Foliage, EM_MeshPaint, EM_Modeling, EM_Fracture, EM_Bsp, EM_AnimationEditMode and EM_PCGEditorMode. Hidden modes are excluded unless --include-hidden.

ParameterTypeRequiredDescription
filterstringNoSubstring matched against the mode id or display name
include_hiddenboolNoInclude modes the editor hides from the toolbar
example
  cfa list_editor_modes
  cfa list_editor_modes --filter Foliage
set_editor_mode

Switch the level editor to a mode by id

Activates an editor mode (FEditorModeTools::ActivateMode). Note you do NOT need this to author anything: foliage placement, landscape edits and spline edits all go through data APIs that work in any mode, and the interactive brushes (FEdModeFoliage, FEdModeLandscape) live in Private/ and are unreachable anyway. Use this to leave the editor on the right tab for a human to inspect or continue by hand. An unknown id lists the closest matches instead of failing blindly.

ParameterTypeRequiredDescription
mode_idstringYesMode id from list_editor_modes, e.g. EM_Foliage
example
  cfa set_editor_mode --mode-id EM_Foliage
  cfa set_editor_mode --mode-id EM_Default
apply_terrain_process

Run one geomorphic process over an existing landscape

glacial: a shallow-ice simulation. Ice accumulates above an equilibrium line, flows under its own weight, and abrades the bed in proportion to how fast it slides. That coupling is what produces U-shaped cross sections, cirques and overdeepened basins -- shapes no amount of river erosion can make, because a river cuts at a point and a glacier cuts across its whole width. snow: lying snow with avalanching off steep faces and wind scouring the windward side into the lee. Written to the 'snow' mask, not the heightfield, so later erosion still cuts rock. coastal: a wave-cut bench at the waterline with the bluff standing behind it. stratify: tilted sedimentary bedding with alternating hard and soft beds. The tilt matters -- flat bedding gives every hill the same contour rings, which reads as a terrace filter rather than exposed geology.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
processstringYesglacial, snow, coastal or stratify
equilibrium_line_altitudefloatNoglacial: height above which snow accumulates; the master control for where glaciers form
mass_balance_gradientfloatNoglacial: ice gained per world unit above the line; real alpine values are 0.005-0.01
flow_ratefloatNoglacial: how far ice spreads for a given thickness; larger gives longer valley glaciers
glacial_erodibilityfloatNoglacial: bed cut per unit of sliding; scales the result without changing its shape
cirque_strengthfloatNoglacial: headwall retreat that opens a bowl at the valley head; 0 disables cirques
iterationsintNoglacial: erosion steps (default 120)
snow_linefloatNosnow: height above which snow lies
depth_gradientfloatNosnow: extra depth per world unit above the snow line
repose_angle_degreesfloatNosnow: steepest slope snow sits on before avalanching
wind_direction_degreesfloatNosnow: wind bearing; scours the windward face and loads the lee
wind_strengthfloatNosnow: 0 leaves an even blanket, which reads as artificial
sea_levelfloatNocoastal: water height in world units
bench_widthfloatNocoastal: width of the wave-cut bench
bluff_angle_degreesfloatNocoastal: angle of the bluff behind the bench
bed_thicknessfloatNostratify: thickness of one sedimentary bed
strengthfloatNostratify: how hard beds are snapped to, 0-1
tilt_degreesfloatNostratify: bedding tilt; flat bedding looks like a terrace filter
tilt_direction_degreesfloatNostratify: direction the beds dip towards
example
  cfa apply_terrain_process --process glacial --equilibrium-line-altitude 3200
  cfa apply_terrain_process --process snow --snow-line 2600 --wind-direction-degrees 240
  cfa apply_terrain_process --process coastal --sea-level 200 --bench-width 1500
  cfa apply_terrain_process --process stratify --bed-thickness 180 --tilt-degrees 6
regenerate_terrain_region

Regenerate one region of a landscape and merge it seamlessly

Generates fresh terrain inside a region and marries it to what is already around it. poisson (default) solves for a surface whose SLOPES are the new terrain's but whose edge heights are exactly the old terrain's, so the join is continuous by construction rather than faded: no ramp, no flattened rim, which are the two ways a crossfade gives itself away. poisson_mixed additionally keeps whichever side has the stronger local slope at each cell, so ridges and channels running in from outside continue through the patch instead of stopping at its edge. feather is a plain crossfade, honest but flattening. replace is a hard edge. The patch is generated across the whole world grid and then mean-matched to the region it replaces, so its noise lines up and it does not sit as a dome or a bowl inside the seam. Reports the seam step before and after, so the join is measured rather than assumed.

ParameterTypeRequiredDescription
actorstringNoLandscape actor label (omit if there is only one)
centerstringYesRegion centre "X,Y" in WORLD units
radiusfloatYesRegion radius in world units
blendstringNopoisson, poisson_mixed, feather or replace
seedintNoRandom seed for the patch
amplitudefloatNoPeak-to-trough height of the new terrain before erosion
sharpnessfloatNo0 rolling hills, 1 sharp ridged crests
warpfloatNoHow much ridgelines meander
feature_scalefloatNoLargest feature wavelength in vertices
erosionfloatNoHydraulic droplets per vertex; 0 skips erosion
talus_anglefloatNoThermal talus angle in degrees
thermal_iterationsintNoThermal passes
falloff_widthfloatNoTransition band in world units
example
  cfa regenerate_terrain_region --center "25000,25000" --radius 8000 --seed 7
  cfa regenerate_terrain_region --center "25000,25000" --radius 8000 --blend poisson_mixed --amplitude 6000
  cfa regenerate_terrain_region --center "12000,30000" --radius 5000 --blend feather --falloff-width 3000
get_world_partition_info

Report a World Partition level's grids, data layers and loaded actor counts

Reports streaming on/off, the runtime grids with their cell size and loading range, the data layer count, and how many actors exist versus how many are loaded right now. Refuses with an explanation on a non-partitioned level, where every actor is always loaded anyway.

example
  cfa get_world_partition_info
list_world_partition_actors

List every actor in a partitioned level without loading it

Reads the actor descriptions rather than the loaded actors, so it sees actors that streaming has unloaded and that find_actors therefore cannot. Reports label, class, bounds, whether the actor is spatially loaded, its data layers, and whether it is in memory right now. This is how you find an actor that seems to have vanished after reopening a partitioned map.

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the actor label or name
class_pathstringNoClass filter: full path (/Script/Water.WaterBodyRiver) or short name (WaterBodyRiver); matches subclasses
regionstringNoWorld-space box "MinX,MinY,MinZ,MaxX,MaxY,MaxZ" to intersect
loaded_onlyboolNoOnly report actors currently loaded in the editor
max_resultsintNoMaximum actors to return; truncation is always reported
example
  cfa list_world_partition_actors --class-path WaterBodyRiver
  cfa list_world_partition_actors --filter River --loaded-only
load_world_partition_region

Load a region of a partitioned level so its actors can be edited

Loads a box or sphere of the world into the editor. Loading is asynchronous, so poll with list_world_partition_actors --loaded-only. Name the region so it can be released again.

ParameterTypeRequiredDescription
regionstringNoWorld-space box "MinX,MinY,MinZ,MaxX,MaxY,MaxZ"
centerstringNoSphere centre "X,Y,Z", used with radius
radiusfloatNoSphere radius in world units, used with center
namestringNoName for the region so it can be unloaded again (default CFA_Region)
example
  cfa load_world_partition_region --center "12000,12000,0" --radius 20000
unload_world_partition_region

Release a region loaded by load_world_partition_region

ParameterTypeRequiredDescription
namestringNoRegion name; omit to release every region this tool loaded
example
  cfa unload_world_partition_region --name Valley
pin_world_partition_actors

Keep matched actors loaded regardless of camera position

Requires a filter and/or a class, because pinning everything would load the whole map. Pass --unpin to release them back to normal streaming.

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the actor label or name
class_pathstringNoClass filter: full path or short name; matches subclasses
unpinboolNoRelease instead of pin
max_resultsintNoMaximum actors to pin in one call
example
  cfa pin_world_partition_actors --class-path WaterBodyRiver
set_actor_spatially_loaded

Set whether an actor streams with the grid or is always loaded

A water zone ships always-loaded and a water body does not, which is why a river vanishes from the outliner when a partitioned map is reopened. Right for a small always-relevant actor, wrong for anything numerous.

ParameterTypeRequiredDescription
actor_labelstringYesActor label or name
spatially_loadedboolNoFalse keeps the actor always loaded
example
  cfa set_actor_spatially_loaded --actor-label Landscape_River --spatially-loaded=false
create_data_layer

Create a data layer asset and an instance of it in this world

A Runtime layer can be streamed in and out during play. An Editor layer only organises the editor and is stripped from a cook, so it can never have a runtime state.

ParameterTypeRequiredDescription
asset_pathstringYesPackage path for the data layer asset
layer_typestringNoRuntime or Editor
debug_colorstringNoDebug colour "R,G,B" 0-1 shown in the Data Layers outliner
supports_actor_filtersboolNoAllow actors to filter on this layer
parentstringNoParent data layer instance name, so this one nests under it
example
  cfa create_data_layer --asset-path /Game/DataLayers/DL_Vegetation --layer-type Runtime
  cfa create_data_layer --asset-path /Game/DataLayers/DL_Blockout --layer-type Editor --debug-color "0.9,0.4,0.1"
list_data_layers

List data layers with type, parent, state and actor counts

Membership is counted from the actor descriptions, so unloaded actors still count.

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the layer name
example
  cfa list_data_layers
assign_actors_to_data_layer

Add or remove matched actors to a data layer

Goes through the editor subsystem so the actor and the world data layers actor stay in agreement. Only LOADED actors can be assigned; load_world_partition_region first if needed.

ParameterTypeRequiredDescription
data_layerstringYesLayer instance name or the asset path it was created with
filterstringNoCase-insensitive substring matched against the actor label or name
class_pathstringNoClass filter: full path or short name; matches subclasses
removeboolNoRemove from the layer instead of adding
max_resultsintNoMaximum actors to touch in one call
example
  cfa assign_actors_to_data_layer --data-layer DL_Vegetation --class-path InstancedFoliageActor
set_data_layer_state

Set a data layer's editor visibility, editor loading and initial runtime state

Asking for a runtime state on an Editor layer is refused, because such a layer is stripped from a cook and can never have one.

ParameterTypeRequiredDescription
data_layerstringYesLayer instance name or asset path
visiblestringNoEditor visibility; omit to leave unchanged
loaded_in_editorstringNoWhether the layer's actors load in the editor; omit to leave unchanged
initial_runtime_statestringNoRuntime layers only: Unloaded, Loaded or Activated
example
  cfa set_data_layer_state --data-layer DL_Vegetation --initial-runtime-state Activated
  cfa set_data_layer_state --data-layer DL_Blockout --visible false
remove_data_layer

Remove a data layer instance from this world

The data layer asset itself is left alone.

ParameterTypeRequiredDescription
data_layerstringYesLayer instance name or asset path
example
  cfa remove_data_layer --data-layer DL_Vegetation
create_hlod_layer

Create an HLOD layer asset

Layer types: Instancing, MeshMerge, MeshSimplify, MeshApproximate, Custom, and CustomHLODActor on 5.7+. The parent chain is what produces more than one HLOD level. An unknown type is refused with the list this engine actually offers.

ParameterTypeRequiredDescription
asset_pathstringYesPackage path for the HLOD layer asset
layer_typestringNoInstancing, MeshMerge, MeshSimplify, MeshApproximate, Custom, CustomHLODActor (5.7+)
cell_sizeintNoCell size of the grid its HLOD actors live on; 0 keeps the default
loading_rangefloatNoLoading range of that grid; 0 keeps the default
spatially_loadedboolNoWhether the generated HLOD actors stream
parent_layerstringNoParent HLOD layer asset path, for a multi-level chain
example
  cfa create_hlod_layer --asset-path /Game/HLOD/HLOD_Instanced --layer-type Instancing
  cfa create_hlod_layer --asset-path /Game/HLOD/HLOD_Far --layer-type MeshMerge --cell-size 25600 --parent-layer /Game/HLOD/HLOD_Instanced
list_hlod_layers

List HLOD layer assets with type, cell size, loading range and parent

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the layer name
example
  cfa list_hlod_layers
set_actor_hlod_layer

Assign an HLOD layer to matched actors, or clear the override

Actors with no HLODLayer property are reported as unchanged rather than silently skipped.

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the actor label or name
class_pathstringNoClass filter: full path or short name; matches subclasses
hlod_layerstringNoHLOD layer asset path; empty clears the override
max_resultsintNoMaximum actors to touch in one call
example
  cfa set_actor_hlod_layer --class-path StaticMeshActor --hlod-layer /Game/HLOD/HLOD_Instanced
build_world_partition

Run a World Partition builder (hlod, minimap, navigation, foliage...)

Builders: hlod, minimap, navigation, foliage, spline_meshes, static_lighting, rvt, and landscape on 5.7+. These run for minutes to hours and block the editor, so WITHOUT --confirm this only reports what the builder does and how long it is likely to take. Ask the user whether to run it here or leave it to them, then re-run with --confirm.

ParameterTypeRequiredDescription
builderstringYeshlod, minimap, navigation, foliage, spline_meshes, static_lighting, rvt, landscape (5.7+)
confirmboolNoActually run it; without this only the estimate is reported
example
  cfa build_world_partition --builder hlod
  cfa build_world_partition --builder minimap --confirm
set_world_partition_settings

Set any editable UWorldPartition property by reflection

Whatever this engine version exposes works; anything it does not is named along with the list of what is available. Covers streaming enable, server streaming modes, the data layers logic operator and the HLOD flags.

ParameterTypeRequiredDescription
propertystringYesProperty name on the UWorldPartition
valuestringYesValue, parsed against the property's own reflected type
example
  cfa set_world_partition_settings --property bEnableStreaming --value true
set_runtime_grid

Add, edit or remove a named runtime grid

Refuses with an explanation when the world uses a runtime hash that has no named grids.

ParameterTypeRequiredDescription
grid_namestringYesGrid name; a new name adds, an existing one edits
cell_sizeintNoCell size in world units; 0 leaves unchanged
loading_rangefloatNoLoading range in world units; 0 leaves unchanged
priorityintNoPriority when grids overlap
removeboolNoRemove the grid instead
example
  cfa set_runtime_grid --grid-name Buildings --cell-size 25600 --loading-range 51200
set_actor_runtime_grid

Put matched actors onto a named runtime grid

ParameterTypeRequiredDescription
filterstringNoCase-insensitive substring matched against the actor label or name
class_pathstringNoClass filter: full path or short name; matches subclasses
grid_namestringYesGrid name; empty puts actors back on the default grid
max_resultsintNoMaximum actors to touch in one call
example
  cfa set_actor_runtime_grid --class-path StaticMeshActor --grid-name Buildings
validate_world_partition

Check a partitioned world is actually partitioned

Streaming enabled, actors that genuinely stream, and runtime data layers not left unloaded in the editor where any edit would miss their actors. Returns verdict pass/pass_with_warnings/fail.

example
  cfa validate_world_partition