CodeFizz
ToolsDemoDocsRoadmapChangelogPricingFAQ
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

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

Reference

  • Reference
  • Audio
  • Mutable
  • Control Rig
  • Niagara
  • PCG
  • Procedural Vegetation
  • Materials
  • 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

Help

  • FAQ
  • Troubleshooting
  • For AI Agents
DocsWalkthroughsGrow a Tree with AI

Grow a Tree with AI

A guided example: build a Procedural Vegetation graph from empty, grow a trunk that branches and droops, skin it into a mesh, scatter foliage, and export the plant to mesh assets.

Loading…
PreviousBuild a Modular CharacterNextReference
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
  • 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.

This walkthrough grows a tree from an empty asset: a trunk that branches and bends under its own weight, a mesh skinned onto it, foliage scattered over the result, and an export to real mesh assets with no click. Every command here needs Unreal Engine 5.8 or later. They are all listed in the Procedural Vegetation reference.

A vegetation asset is a PCG graph

This is the thing worth knowing first. A Procedural Vegetation asset derives from the same graph type PCG uses, and every vegetation node from the same settings type, so the whole PCG command set works on one. You add nodes, wire pins, set properties, lay the graph out and batch edits exactly as you would anywhere else. There is no separate add node command for vegetation, and none is needed.

Read a node before you touch it

These nodes are large. The Grower alone carries 179 properties, many of them gated behind a condition that decides whether they do anything at all. Discovery is not optional here, it is how you avoid setting things that quietly have no effect.

1

Search the menu the editor renders

Node titles and categories come from the plugin's own add node menu, so they are always what your engine really has. Several searches in one call.

bash
cfa search_pv_nodes --filters "grower,mesh,foliage" --max-results 5
2

Read one node's schema

Every property path with its type, default, Unreal's own description, the valid values of every enum, the slider and clamp ranges, and the edit condition. Narrow by category, because the full set will not fit in one answer.

bash
cfa describe_pv_nodes --node PVGrowerSettings --category Growth
3

Or write the whole thing to a file

Every node and every property, written to disk so it never floods the conversation. Read the file instead of asking again.

bash
cfa export_pv_schema --name FullSchema

Build the pipeline

The chain runs Grower, then any post growth modifiers, then Mesh Builder, Bone Reduction, and Foliage Distributor. The Mesh Builder wants a cross section on its Profile pin, and the Distributor wants a palette on its Foliage pin.

4

Create an empty asset

Without a sample you get just Input and Output. Prefer empty while learning, because a duplicated sample hides over a hundred authored values you did not choose.

bash
cfa create_procedural_vegetation --asset-path /Game/Veg/PV_Oak
5

Add the nodes

Ordinary PCG node adds. Read the stable names back rather than predicting them, because they follow the node title and not the class.

bash
cfa add_pcg_node --graph-path /Game/Veg/PV_Oak --settings-class /Script/ProceduralVegetation.PVGrowerSettings
cfa add_pcg_node --graph-path /Game/Veg/PV_Oak --settings-class /Script/ProceduralVegetation.PVMeshBuilderSettings
cfa read_pcg_graph --graph-path /Game/Veg/PV_Oak
6

Wire it

Pin labels matter. The Mesh Builder's inputs include Profile, BranchRadius, MeshDetails and MaterialDetails, and one of them is spelled with spaces.

bash
cfa connect_pcg_pins --graph-path /Game/Veg/PV_Oak \
  --from-node-name ProceduralVegetationGrower_0 --from-pin-label Out \
  --to-node-name ProceduralVegetationMesher_0 --to-pin-label In

Give the trunk a shape

The Plant Profile Loader takes its shape from a data asset, and its output pin is named after the profile you author. The points are a cross section measured around the branch, not a taper running up the trunk, so they have to close back on themselves.

7

Author the profile in a data asset

Roughly a hundred samples around the ring. A constant radius is a circle, and gentle variation reads as bark.

bash
cfa create_data_asset --asset-path /Game/Veg/PPD_Oak \
  --class-name ProceduralVegetationPlantProfileDataAsset

cfa set_asset_property --asset-path /Game/Veg/PPD_Oak --property-name Profiles \
  --property-value '((Name="Trunk",Points=(1.0,1.02,0.99,...)))'
8

Point the loader at it, then wire the named pin

The output pin appears once the asset is assigned, and carries the name you gave the profile.

bash
cfa set_pcg_node_property_path --graph-path /Game/Veg/PV_Oak \
  --node-name ProceduralVegetationPlantProfileLoader_0 \
  --property-path PlantProfileData --property-value '"/Game/Veg/PPD_Oak.PPD_Oak"'
The loader's own Profiles array is a mirror, not an input
The node shows a Profiles array, but the pins are built from the data asset it points at, not from that array. Writing to the node directly succeeds and produces no pin. Author the profile in the data asset and assign it.

Grow it

The simulation runs in cycles. One cycle grows one segment, so the number of cycles is the budget the whole plant is built from, and the trunk spends it first.

9

Set the cycle count first

This is the master switch and its default is the minimum. Everything else you tune is judged against it.

bash
cfa set_pcg_node_property_path --graph-path /Game/Veg/PV_Oak \
  --node-name ProceduralVegetationGrower_0 \
  --property-path GrowerParams.GrowthCycles --property-value 45
10

Shape it

Height, spread, thickness and branch depth. Set several in one batch so they land as a single undo step.

bash
cfa set_pcg_node_property_path --graph-path /Game/Veg/PV_Oak --node-name ProceduralVegetationGrower_0 \
  --property-path GrowerParams.TrunkGrowth.PlantTargetLength --property-value 11.0
11

Clear the lower trunk

Root zone auxin suppresses sprouting near the base, and apical dominance keeps a single leader. Together they give a clean trunk with the crown above it.

bash
cfa set_pcg_node_property_path --graph-path /Game/Veg/PV_Oak --node-name ProceduralVegetationGrower_0 \
  --property-path GrowerParams.Auxin.RadicalAuxin --property-value 0.3
GrowthCycles defaults to 1, and 1 grows a bare spike
At the default you get a single stem with no branching at all, no matter what else you set. Its usable maximum is 45, which is what Epic's own shipped trees use. Raising it from 1 to 45 on a test tree took it from one branch to over three thousand. If a tree looks like a stick, check this before anything else.
Segment length trades height against branching
One segment per cycle means a short segment length spends the whole budget climbing and leaves nothing for branches. Longer segments finish the trunk sooner and leave cycles for the crown. Raising MaxGeneration or branch length will not help once the cycles are gone.

Look at it without regrowing it

Selecting a node is what drives the viewport, so you can inspect any stage by asking for that node. It reads what is already there rather than running the graph again, which is the difference between a wait of over a minute and about half a second. The graph regenerates by itself whenever you change a property, so you never need to ask for that.

12

Preview a stage

The Grower for the branch skeleton, Bone Reduction for the bone colouring, the Foliage Distributor for the finished plant.

bash
cfa open_asset --asset-path /Game/Veg/PV_Oak
cfa preview_pv_node --graph-path /Game/Veg/PV_Oak --node-name ProceduralVegetationFoliageDistributor_0
13

Tidy the graph

Nodes added over the bridge all land at the origin on top of each other. Lay it out, then save, because layout is an unsaved edit.

bash
cfa layout_pcg_graph --graph-path /Game/Veg/PV_Oak
cfa save_asset --asset-path /Game/Veg/PV_Oak

Export it

Unreal offers no scripted way to export a plant, so this drives the editor's own Export command and answers its dialog for you. It works the same whether the editor is in front of you or running unattended.

14

Name the output, then export

The graph needs an Export node with a mesh name set. Export reads evaluated data, so on a graph that has not generated yet the first call starts generation and reports needs_generation. Call it again once that finishes.

bash
cfa set_pcg_node_property_path --graph-path /Game/Veg/PV_Oak --node-name Export_0 \
  --property-path ExportSettings.MeshName --property-value '"SM_Oak"'

cfa export_procedural_vegetation --asset-path /Game/Veg/PV_Oak
15

Learn from a working tree

Dumps only the values that differ from their defaults, plus the wiring. Epic's shipped tree collapses to 143 authored values, which is what makes two plants comparable.

bash
cfa export_pcg_graph_config --graph-path /Game/Veg/PV_Oak
Check assets_created, not success alone
Verify an export by the assets it wrote. If foliage is missing from the result, the export setting that builds Nanite foliage is on by default and stores leaves as assembly parts rather than geometry, which can render as no leaves at all. Turning it off merges real geometry instead, at the cost of a much heavier export, so thin the foliage first.
Unreal Engine 5.8 and later
Every command here needs 5.8. On 5.6 and 5.7 each one returns a message naming the version and changes nothing, so a script written against 5.8 fails clearly rather than halfway through.