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.

← API Reference

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
listAssetsnoFreeAll UProceduralVegetation assets in the project.
listPresetsnoFreeAll UProceduralVegetationPreset species-preset assets.
getInfonoFreeDeep inspection of a PVE asset's graph structure.
getNodePropertiesnoFreeEvery editable UPROPERTY on a PVE node.
getNodeTypenoFreeNode type with friendly name and property count.
setNodePropertiesyesFreeBulk write UPROPERTY values on a PVE node.
setNodePropertyFromPresetnoFreeQuery a preset variation's content for a node.
getPresetInfonoFreeInspect a preset with all its variations.
applyPresetyesFreeLoad a preset into a PVE graph's PresetLoader node.
executeyesFreeExecute the PVE graph via the PCG subsystem.
getExportInfonoFreeQuery export readiness from the output node.
getPlantDatanoFreeRead high-level plant structure from an executed graph.

editor.vegetation.listAssets

Find all UProceduralVegetation assets in the project.

No parameters.

Returns:

FieldTypeDescription
assetsarrayEach: {name, path, package_path, node_count}.
countnumberNumber 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:

NameTypeRequiredDescription
assetstringYesUObject path to a UProceduralVegetation asset.

Returns:

FieldTypeDescription
asset_pathstringEcho of the input asset path.
graph_pathstringUnderlying PCG graph path.
nodesarrayEach: {index, name, settings_class, is_pv_node, input_pin_count, output_pin_count}.
node_countnumberNumber of nodes.
connection_countnumberNumber 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:

NameTypeRequiredDescription
assetstringYesUObject path to the PVE asset.
nodeIndexnumberYesNode 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:

NameTypeRequiredDescription
assetstringYesUObject path to the PVE asset.
nodeIndexnumberYesNode 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:

NameTypeRequiredDescription
assetstringYesUObject path to PVE asset.
nodeIndexnumberYesNode index.
property namesvariesYesOne 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:

NameTypeRequiredDescription
assetstringYesUObject path to PVE asset.
nodeIndexnumberYesNode index.
presetstringYesUObject path to preset asset.
variationIndexnumberNoVariation 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:

NameTypeRequiredDescription
presetstringYesUObject 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:

NameTypeRequiredDescription
assetstringYesUObject path to PVE asset.
presetstringYesUObject 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:

NameTypeRequiredDescription
assetstringYesUObject 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:

NameTypeRequiredDescription
assetstringYesUObject 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:

NameTypeRequiredDescription
assetstringYesUObject 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