editor.vegetation UE 5.7+ only
Twelve methods for AI-driven procedural plant customization via UE's Procedural Vegetation Editor (PVE / Megaplants). Asset discovery, graph inspection, reflection-based property read/write on 11 PVE node types, preset library operations, and PCG-backed execution. AI agents reach through this namespace to generate species-parameterized vegetation assets without opening the PVE editor.
Requires: the ProceduralVegetation plugin (Experimental, EnabledByDefault: false, UE 5.7+ only). If not enabled, all methods return -32001 NotFound with guidance to enable it in Edit > Plugins. The handler uses runtime detection, so it works on both source and retail UE 5.7+ builds.
PCG integration. PVE graphs are PCG graphs. Use editor.pcg (90 methods) for graph structure (addNode, connectNodes, getNodes), node positioning, component attachment, parameter CRUD, and execution. Use editor.vegetation for the PVE-specific layer on top.
Method summary
| Method | Mutating | Tier | Purpose |
|---|---|---|---|
listAssets | no | Free | All UProceduralVegetation assets in the project. |
listPresets | no | Free | All UProceduralVegetationPreset species-preset assets. |
getInfo | no | Free | Deep inspection of a PVE asset's graph structure. |
getNodeProperties | no | Free | Every editable UPROPERTY on a PVE node. |
getNodeType | no | Free | Node type with friendly name and property count. |
setNodeProperties | yes | Free | Bulk write UPROPERTY values on a PVE node. |
setNodePropertyFromPreset | no | Free | Query a preset variation's content for a node. |
getPresetInfo | no | Free | Inspect a preset with all its variations. |
applyPreset | yes | Free | Load a preset into a PVE graph's PresetLoader node. |
execute | yes | Free | Execute the PVE graph via the PCG subsystem. |
getExportInfo | no | Free | Query export readiness from the output node. |
getPlantData | no | Free | Read high-level plant structure from an executed graph. |
editor.vegetation.listAssets
Find all UProceduralVegetation assets in the project.
No parameters.
Returns:
| Field | Type | Description |
|---|---|---|
assets | array | Each: {name, path, package_path, node_count}. |
count | number | Number of PVE assets. |
Example Request:
{ "jsonrpc": "2.0", "id": 1, "method": "editor.vegetation.listAssets" } Example Response:
{
"jsonrpc": "2.0", "id": 1,
"result": {
"assets": [
{ "name": "PV_OakTree", "path": "/Game/PV/PV_OakTree.PV_OakTree", "package_path": "/Game/PV/PV_OakTree", "node_count": 9 }
],
"count": 1
}
} editor.vegetation.listPresets
Find all UProceduralVegetationPreset (species preset) assets.
No parameters.
Returns: { presets: [{name, path, variation_count}], count }.
Example Request:
{ "jsonrpc": "2.0", "id": 2, "method": "editor.vegetation.listPresets" } Example Response:
{
"jsonrpc": "2.0", "id": 2,
"result": {
"presets": [
{ "name": "PV_OakSpeciesPreset", "path": "/Game/PV/Presets/PV_OakSpeciesPreset.PV_OakSpeciesPreset", "variation_count": 3 }
],
"count": 1
}
} editor.vegetation.getInfo
Deep inspection of a PVE asset's graph structure: per-node settings class, pin counts, PVE-node flag, and connection count.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to a UProceduralVegetation asset. |
Returns:
| Field | Type | Description |
|---|---|---|
asset_path | string | Echo of the input asset path. |
graph_path | string | Underlying PCG graph path. |
nodes | array | Each: {index, name, settings_class, is_pv_node, input_pin_count, output_pin_count}. |
node_count | number | Number of nodes. |
connection_count | number | Number of graph edges. |
Example Request:
{ "jsonrpc": "2.0", "id": 3, "method": "editor.vegetation.getInfo", "params": { "asset": "/Game/PV/PV_OakTree" } } Example Response:
{
"jsonrpc": "2.0", "id": 3,
"result": {
"asset_path": "/Game/PV/PV_OakTree.PV_OakTree",
"graph_path": "/Game/PV/PV_OakTree.PV_OakTree:PCGGraph",
"nodes": [
{ "index": 0, "name": "Importer", "settings_class": "PVImporter", "is_pv_node": true, "input_pin_count": 0, "output_pin_count": 1 },
{ "index": 1, "name": "FoliageDistributor","settings_class": "PVFoliageDistributor","is_pv_node": true, "input_pin_count": 1, "output_pin_count": 1 }
],
"node_count": 9,
"connection_count": 8
}
} editor.vegetation.getNodeProperties
Read every editable UPROPERTY from a PVE graph node via reflection. Works for all 11 PVE node types (FoliageDistributor, MeshBuilder, Gravity, Carve, Scale, Slope, BoneReduction, RemoveBranches, Importer, PresetLoader, Output) without requiring their private headers.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to the PVE asset. |
nodeIndex | number | Yes | Node index as returned by getInfo. |
Returns: { node_index, node_name, settings_class, is_pv_node, properties: { propName: value, ... } }.
Example Request:
{
"jsonrpc": "2.0", "id": 4,
"method": "editor.vegetation.getNodeProperties",
"params": { "asset": "/Game/PV/PV_OakTree", "nodeIndex": 1 }
} Example Response:
{
"jsonrpc": "2.0", "id": 4,
"result": {
"node_index": 1,
"node_name": "FoliageDistributor",
"settings_class": "PVFoliageDistributor",
"is_pv_node": true,
"properties": { "EthyleneThreshold": 0.3, "InstanceSpacing": 10.0, "MaximumNodeBuds": 6 }
}
} editor.vegetation.getNodeType
Get the specific PVE node type with friendly name and property count.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to the PVE asset. |
nodeIndex | number | Yes | Node index. |
Returns: { node_index, node_name, settings_class, is_pv_node, friendly_name, property_count }.
Example Request:
{ "jsonrpc": "2.0", "id": 5, "method": "editor.vegetation.getNodeType", "params": { "asset": "/Game/PV/PV_OakTree", "nodeIndex": 1 } } Example Response:
{
"jsonrpc": "2.0", "id": 5,
"result": { "node_index": 1, "node_name": "FoliageDistributor", "settings_class": "PVFoliageDistributor", "is_pv_node": true, "friendly_name": "Foliage Distributor", "property_count": 12 }
} editor.vegetation.setNodeProperties
Bulk write UPROPERTY values on a PVE graph node via reflection. Pass one or more property-name/value pairs; failed writes surface in errors.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
nodeIndex | number | Yes | Node index. |
| property names | varies | Yes | One or more property name/value pairs. |
Returns: { success: true, properties_changed: N, errors?: [...] }.
Example Request:
{
"jsonrpc": "2.0", "id": 6,
"method": "editor.vegetation.setNodeProperties",
"params": {
"asset": "/Game/PV/MyTree",
"nodeIndex": 2,
"EthyleneThreshold": 0.5,
"InstanceSpacing": 15.0,
"MaximumNodeBuds": 8
}
} Example Response:
{ "jsonrpc": "2.0", "id": 6, "result": { "success": true, "properties_changed": 3 } } editor.vegetation.setNodePropertyFromPreset
Query a preset variation's content for applying to a node. Read-only probe -- does not mutate the graph.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
nodeIndex | number | Yes | Node index. |
preset | string | Yes | UObject path to preset asset. |
variationIndex | number | No | Variation index. Default 0. |
Returns: { success, variation_name, foliage_mesh_count, material_count, profile_count }.
Example Request:
{
"jsonrpc": "2.0", "id": 7,
"method": "editor.vegetation.setNodePropertyFromPreset",
"params": { "asset": "/Game/PV/PV_OakTree", "nodeIndex": 5, "preset": "/Game/PV/Presets/PV_OakSpeciesPreset", "variationIndex": 1 }
} Example Response:
{
"jsonrpc": "2.0", "id": 7,
"result": { "success": true, "variation_name": "OakMature", "foliage_mesh_count": 3, "material_count": 2, "profile_count": 1 }
} editor.vegetation.getPresetInfo
Inspect a UProceduralVegetationPreset with every variation it carries.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
preset | string | Yes | UObject path to preset asset. |
Returns: { preset_path, name, variation_count, variant_data_count, variations: [{index, name, foliage_mesh_count, material_count, profile_count}] }.
Example Request:
{ "jsonrpc": "2.0", "id": 8, "method": "editor.vegetation.getPresetInfo", "params": { "preset": "/Game/PV/Presets/PV_OakSpeciesPreset" } } Example Response:
{
"jsonrpc": "2.0", "id": 8,
"result": {
"preset_path": "/Game/PV/Presets/PV_OakSpeciesPreset.PV_OakSpeciesPreset",
"name": "PV_OakSpeciesPreset",
"variation_count": 3,
"variant_data_count": 3,
"variations": [
{ "index": 0, "name": "OakSapling", "foliage_mesh_count": 2, "material_count": 1, "profile_count": 1 }
]
}
} editor.vegetation.applyPreset
Load a preset into a PVE graph's PresetLoader node. Returns a warning if no PresetLoader node is present.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
preset | string | Yes | UObject path to preset asset. |
Returns: { success, preset_path, warning? }.
Example Request:
{ "jsonrpc": "2.0", "id": 9, "method": "editor.vegetation.applyPreset", "params": { "asset": "/Game/PV/PV_OakTree", "preset": "/Game/PV/Presets/PV_OakSpeciesPreset" } } Example Response:
{ "jsonrpc": "2.0", "id": 9, "result": { "success": true, "preset_path": "/Game/PV/Presets/PV_OakSpeciesPreset.PV_OakSpeciesPreset" } } editor.vegetation.execute
Execute the PVE graph via the PCG subsystem. Returns a warning if no PCG component hosts the graph.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
Returns: { success, elapsed_ms, node_count, warning? }.
Example Request:
{ "jsonrpc": "2.0", "id": 10, "method": "editor.vegetation.execute", "params": { "asset": "/Game/PV/PV_OakTree" } } Example Response:
{ "jsonrpc": "2.0", "id": 10, "result": { "success": true, "elapsed_ms": 3421, "node_count": 9 } } editor.vegetation.getExportInfo
Query export readiness from the graph's output node.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
Returns: { asset_path, has_output_node, output_settings: {...}, warning? }.
Example Request:
{ "jsonrpc": "2.0", "id": 11, "method": "editor.vegetation.getExportInfo", "params": { "asset": "/Game/PV/PV_OakTree" } } Example Response:
{
"jsonrpc": "2.0", "id": 11,
"result": {
"asset_path": "/Game/PV/PV_OakTree.PV_OakTree",
"has_output_node": true,
"output_settings": { "ExportPath": "/Game/PV/Generated", "MeshBudget": 8192 }
}
} editor.vegetation.getPlantData
Read high-level plant structure from an executed graph: node-type census and pipeline-stage flags.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
asset | string | Yes | UObject path to PVE asset. |
Returns: { asset_path, total_node_count, pv_node_count, pv_node_types: [...], pipeline_stages: { has_importer, has_foliage, has_mesh_builder, has_output } }.
Example Request:
{ "jsonrpc": "2.0", "id": 12, "method": "editor.vegetation.getPlantData", "params": { "asset": "/Game/PV/PV_OakTree" } } Example Response:
{
"jsonrpc": "2.0", "id": 12,
"result": {
"asset_path": "/Game/PV/PV_OakTree.PV_OakTree",
"total_node_count": 9,
"pv_node_count": 8,
"pv_node_types": ["Importer", "FoliageDistributor", "MeshBuilder", "Output"],
"pipeline_stages": { "has_importer": true, "has_foliage": true, "has_mesh_builder": true, "has_output": true }
}
} Related
- API Reference index
- editor.pcg -- the 90-method PCG namespace that powers the underlying PVE graph
- editor.foliage -- UE's instance-based foliage type and procedural foliage volume API