Agent skill

Unreal Foliage Placement

by kevinpbuckley in kevinpbuckley/VibeUE

Creates Unreal Engine foliage types and scatters or places foliage instances on landscapes and meshes through FoliageService, with seeded, reproducible layouts.

MITAuto-check passedGame Development

Install Unreal Foliage Placement

skills CLI
$ npx skills add kevinpbuckley/VibeUE --skill foliage -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install kevinpbuckley/VibeUE foliage --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Content/Skills/foliage .claude/skills/foliage && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
foliage
GitHub stars
730
Token cost
~3.2k tokens
SKILL.md length
913 words
Files
2 (incl. scripts)
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Creates Unreal Engine foliage types and scatters or places foliage instances on landscapes and meshes through FoliageService, with seeded, reproducible layouts.

  • Works in 3 steps: A valid landscape name/label → A painted layer on that landscape → Layer weight threshold (0.0-1.0) — only…
  • Adding trees, grass, bushes or rocks as foliage on a landscape
  • SKILL.md covers Critical Rules, Return Types - EXACT Properties, Workflows and Sample scripts (run via…
  • Creating a reusable foliage type from a static mesh

What it does

This skill drives Unreal Engine foliage from the agent: creating foliage types from static meshes, adding or scattering trees, grass, bushes and rocks across landscapes and meshes, and querying or removing instances on a surface. Placement methods need a valid static mesh or foliage type asset path, and the agent is told to list the available methods with discover_python_class on unreal.FoliageService.

Several rules shape the work. Scatter calls trace downward to find the ground, so instances outside the landscape bounds are rejected and counted in instances_rejected. Passing a mesh creates a temporary foliage type, so create_foliage_type comes first when you want a reusable one with custom properties. A seed makes layouts reproducible, with seed 0 giving random results, and scatter_foliage_on_layer needs a named landscape that has a painted layer.

World Partition levels get extra handling. Foliage lives in one actor per grid cell, the foliage type must be an asset, and a cell whose foliage actor exists but is not loaded makes the call fail without changing anything, so you load that region first. A scatter_foliage script ships with the skill.

When your agent uses it

  • Adding trees, grass, bushes or rocks as foliage on a landscape
  • Creating a reusable foliage type from a static mesh
  • Scattering foliage reproducibly or onto a painted landscape layer
  • Querying or removing foliage instances on a surface

Example prompts

  • “Scatter pine trees across the mountain landscape with seed 7 so I can recreate the layout.”
  • “Create a persistent foliage type from the SM_Bush mesh and scatter it on the grass layer of Landscape_Main.”
  • “Remove all foliage instances in the clearing near the village.”

Requirements

  • Unreal Engine with the VibeUE tooling available to the agent
  • A static mesh or foliage type asset path

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. A valid landscape name/label
  2. A painted layer on that landscape
  3. Layer weight threshold (0.0-1.0) — only places where weight exceeds threshold

What it can do on your machine

Read from SKILL.md and the folder at commit dc051be. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/, which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Unreal Foliage Placement loads about 3.2k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 913 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~71
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from kevinpbuckley/VibeUE at commit dc051be, republished under its MIT licence (© kevinpbuckley). 913 words, ~3,163 tokens.

Download SKILL.mdSave it as .claude/skills/foliage/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
foliage
description
Create foliage types and place/scatter foliage instances on landscapes and meshes (FoliageService). Use when the user asks to add trees/grass/bushes/rocks as foliage, create a foliage type from a mesh, scatter or paint foliage instances, or query/remove foliage on a surface.
display_name
Foliage & Vegetation
vibeue_classes
FoliageService
unreal_classes
InstancedFoliageActor, FoliageType, FoliageType_InstancedStaticMesh
keywords
foliage, vegetation, trees, grass, bushes, scatter, instances, forest, flora, plants, shrubs

🧠 Brains complement: IF an unreal-engine-skills-manager tool (external MCP) exists in this session, call it with {action: "load", skill: "landscape-and-foliage"} for UE domain knowledge on this topic — correct APIs, architecture, best practices — and treat it as the rubric for any review / "best practices" question. If no such tool is available (e.g. running under Claude Code or Codex without that MCP), skip this line entirely and proceed with this skill alone — do NOT attempt the call.

Foliage & Vegetation Skill

Critical Rules

Mesh Path Required

All placement methods require a valid UStaticMesh or UFoliageType asset path. Use discover_python_class('unreal.FoliageService') to see available methods.

Surface Trace

All scatter/add methods trace downward to find the ground surface. If no surface is hit (e.g., position is outside the landscape bounds), that instance is rejected. Check instances_rejected in the result.

Foliage Type Auto-Creation

When you pass a UStaticMesh path, the service auto-creates a transient UFoliageType internally. For persistent, reusable foliage types with custom properties, use create_foliage_type() first.

World Partition Levels

On a World Partition level the engine keeps foliage in one foliage actor per grid cell, and the service places, lists, counts and removes through those cell actors. There the foliage type must be an asset: a mesh path uses <Mesh>_FoliageType next to the mesh, or the one other foliage type asset for that mesh (several: the call asks for a foliage type path), and creates <Mesh>_FoliageType when there is none, saved only when the call places something and refused while PIE runs. A call that would touch a cell whose foliage actor exists but is not loaded fails and changes nothing: load that region first. Placement only counts the cell actor of the editor's current data layer / content bundle context, as the engine does: an unloaded cell actor of another data layer does not block placing into that cell. Builds that do this define the read-only console variable vibeue.Foliage.WorldPartitionCells.

Seed for Reproducibility

Use the seed parameter to get reproducible scatter patterns. Same seed + same parameters = same layout. Use seed=0 for random.

Layer-Aware Placement Requires Landscape

scatter_foliage_on_layer() requires:

  1. A valid landscape name/label
  2. A painted layer on that landscape
  3. Layer weight threshold (0.0-1.0) — only places where weight exceeds threshold

If you get instances_added=0 with instances_rejected ≈ 4× requested, every candidate failed the surface trace or the weight check. Before blaming the threshold, check geometry:

  • The scatter circle must overlap the painted part of the named landscape. A landscape is corner-anchored — created at (0,0) it spans (0,0)→(+50400,+50400) for 505 res @ scale 100, so a scatter "around (0,0)" is 3/4 off-landscape.
  • Verify weights at a few candidate points first: unreal.LandscapeService.get_layer_weights_at_location(label, x, y).
  • If another landscape/mesh overlaps the area at a higher Z, the surface trace hits that surface instead — instances land on the wrong surface or get rejected. Paint a larger area or center the scatter where only the target landscape exists.
Show full SKILL.md (440 more words)Show less
⚠️ Common Mistakes to Avoid
WRONGCORRECT
result.successresult.success (Python auto-converts bSuccess)
result.countresult.instances_added
result.instances_placedresult.instances_added (NOT instances_placed)
ft.asset_path on VibeUEFoliageTypeInfoft.foliage_type_path (NOT asset_path)
scatter_foliage(..., landscape="X")scatter_foliage(..., landscape_name_or_label="X")
clear_all_foliage() to clear one landscapeclear_all_foliage() removes ALL foliage from the ENTIRE level — use remove_foliage_in_radius() for targeted removal
Manually scattering foliage on a cloned landscapeIf source uses LandscapeGrassType (procedural), just copy paint layers — foliage auto-generates. Check list_foliage_types(): if 0, foliage is procedural.
Forgetting to check instances_rejectedAlways check — tells you how many failed surface trace or layer filter
Expecting get_instance_count() == -1 after removing all instances-1 means the type was never in the level. Once registered, the count is 0 after removal — the foliage type entry persists
Expecting list_foliage_types() to shrink after clear_all_foliage()Clearing removes instances, not type registrations — 0-instance entries remain listed. Filter on ft.instance_count > 0
set_foliage_type_property(path, "CullDistance", "30000")Whole structs need UE import text: "(Min=0,Max=30000)". Simpler: set the member via a dotted path — set_foliage_type_property(path, "CullDistance.Max", "30000")
Scattering "around the landscape at (0,0)" centered on (0,0)Landscapes are corner-anchored: created at (0,0) the terrain spans +X/+Y only. Center the scatter on the landscape's actual center (location + (resolution-1)*scale/2) or most candidates miss the surface
AssetDiscoveryService.list_assets(path) for cleanupAssetDiscoveryService.list_assets_in_path(path, asset_type) — or the manage_asset tool with action='list'

Return Types - EXACT Properties

FFoliageScatterResult (from scatter_foliage, scatter_foliage_rect, add_foliage_instances, scatter_foliage_on_layer)
PropertyTypeDescription
successboolWhether operation succeeded
instances_addedintNumber of instances actually placed
instances_requestedintNumber of instances requested
instances_rejectedintNumber rejected (no surface, slope, layer weight)
error_messagestrError details if failed
FFoliageRemoveResult (from remove_foliage_in_radius, remove_all_foliage_of_type, clear_all_foliage)
PropertyTypeDescription
successboolWhether operation succeeded
instances_removedintNumber of instances removed
error_messagestrError details if failed
VibeUEFoliageTypeInfo (from list_foliage_types)
PropertyTypeDescription
foliage_type_namestrName of the foliage type
mesh_pathstrPath to the static mesh
instance_countintNumber of instances in level
foliage_type_pathstrAsset path of the foliage type
FFoliageTypeCreateResult (from create_foliage_type)
PropertyTypeDescription
successboolWhether creation succeeded
asset_pathstrPath to the created foliage type asset
error_messagestrError details if failed
FFoliageQueryResult (from get_foliage_in_radius)
PropertyTypeDescription
successboolWhether query succeeded
total_instancesintTotal matching instances (may exceed returned list)
instancesArrayList of FFoliageInstanceInfo
error_messagestrError details if failed
FFoliageInstanceInfo (individual instance data)
PropertyTypeDescription
locationVectorWorld location
rotationRotatorWorld rotation
scaleVectorScale (DrawScale3D)
instance_indexintIndex in the foliage info array

Workflows

Quick Scatter Trees
python
import unreal

result = unreal.FoliageService.scatter_foliage(
    "/Game/Meshes/SM_Tree_01",
    0.0, 0.0,     # center X, Y
    5000.0,        # radius
    200,           # count
    min_scale=0.8,
    max_scale=1.2,
    seed=42
)
if result.success:
    print(f"Placed {result.instances_added}/{result.instances_requested}")
    print(f"Rejected: {result.instances_rejected}")
Create Foliage Type + Scatter
python
import unreal

# Step 1: Create a reusable foliage type with custom properties
ft = unreal.FoliageService.create_foliage_type(
    mesh_path="/Game/Meshes/SM_Pine_Tree",
    save_path="/Game/Foliage",
    asset_name="FT_PineTree",
    min_scale=0.7,
    max_scale=1.3,
    align_to_normal=True,
    align_to_normal_max_angle=30.0,
    ground_slope_max_angle=40.0,
    cull_distance_max=25000.0
)
if ft.success:
    print(f"Created: {ft.asset_path}")

    # Step 2: Scatter using the foliage type
    result = unreal.FoliageService.scatter_foliage(
        ft.asset_path, 0.0, 0.0, 8000.0, 500, seed=42)
Scatter on Paint Layer
python
import unreal

# Place grass clumps only where the "Grass" paint layer is dominant
result = unreal.FoliageService.scatter_foliage_on_layer(
    "/Game/Meshes/SM_Grass_Clump",
    "MyTerrain",            # landscape name
    "Grass",                 # layer name
    1000,                    # count
    min_scale=0.5,
    max_scale=1.5,
    layer_weight_threshold=0.6,
    seed=99
)
print(f"Placed {result.instances_added}, rejected {result.instances_rejected}")
Scatter in Rectangle
python
import unreal

result = unreal.FoliageService.scatter_foliage_rect(
    "/Game/Meshes/SM_Bush",
    -5000.0, -5000.0,  # min X, Y
    5000.0, 5000.0,     # max X, Y
    300,                 # count
    min_scale=0.5,
    max_scale=1.0,
    seed=7
)
Place at Specific Locations
python
import unreal

locations = [
    unreal.Vector(0, 0, 0),
    unreal.Vector(500, 500, 0),
    unreal.Vector(-500, 500, 0),
    unreal.Vector(500, -500, 0),
    unreal.Vector(-500, -500, 0),
]

result = unreal.FoliageService.add_foliage_instances(
    "/Game/Meshes/SM_Tree_01",
    locations,
    min_scale=1.0,
    max_scale=1.0,
    align_to_normal=True,
    random_yaw=True,
    trace_to_surface=True
)
Multi-Type Forest
python
import unreal

configs = [
    ("/Game/Meshes/SM_Oak",   300, 0.8, 1.2),
    ("/Game/Meshes/SM_Pine",  200, 0.7, 1.3),
    ("/Game/Meshes/SM_Birch", 100, 0.6, 1.0),
    ("/Game/Meshes/SM_Bush",  400, 0.4, 0.8),
]

for mesh, count, min_s, max_s in configs:
    result = unreal.FoliageService.scatter_foliage(
        mesh, 0.0, 0.0, 10000.0, count,
        min_scale=min_s, max_scale=max_s, seed=42)
    print(f"{mesh}: {result.instances_added} placed")
List and Query
python
import unreal

# List all foliage types in the level
types = unreal.FoliageService.list_foliage_types()
for ft in types:
    print(f"{ft.foliage_type_name}: {ft.instance_count} instances ({ft.mesh_path})")

# Get count for a specific type
count = unreal.FoliageService.get_instance_count("/Game/Meshes/SM_Tree_01")
print(f"Tree count: {count}")

# Query instances in a region
query = unreal.FoliageService.get_foliage_in_radius(
    "/Game/Meshes/SM_Tree_01", 0.0, 0.0, 2000.0, max_results=50)
for inst in query.instances:
    print(f"  [{inst.instance_index}] at {inst.location}")
Remove Foliage
python
import unreal

# Remove trees from a building site
result = unreal.FoliageService.remove_foliage_in_radius(
    "/Game/Meshes/SM_Tree_01", 2000.0, 3000.0, 500.0)
print(f"Removed {result.instances_removed}")

# Remove ALL instances of one type
result = unreal.FoliageService.remove_all_foliage_of_type("/Game/Meshes/SM_Bush")

# Nuclear option: remove everything
result = unreal.FoliageService.clear_all_foliage()
print(f"Cleared {result.instances_removed} total instances")
Check Existence
python
import unreal

# Does the mesh/foliage type exist as an asset?
if unreal.FoliageService.foliage_type_exists("/Game/Meshes/SM_Tree_01"):
    print("Asset exists")

# Are there any instances of this type in the level?
if unreal.FoliageService.has_foliage_instances("/Game/Meshes/SM_Tree_01"):
    print("Instances exist in level")

Sample scripts (run via execute_python_code)

  • scripts/scatter_foliage.txt — create a foliage type from a mesh and scatter instances onto the surface.

© kevinpbuckley, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in Content/Skills/foliage of kevinpbuckley/VibeUE.

  • SKILL.md
  • scripts/scatter_foliage.txt

Open the folder on GitHubat commit dc051be

Compare with similar skills

Unreal Foliage Placement next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Unreal Foliage Placement compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Unreal Foliage Placement this skillkevinpbuckley/VibeUE730—~3.2kAutomated safety check: PassMIT
Unreal BridgeTornLux/UnrealBridge306—~8.4kAutomated safety check: NotesMIT
Scenario Unreal Cinematicsscenario-labs/skills946—~5.1kAutomated safety check: PassMIT
Scenario Unreal Pipeline Automationscenario-labs/skills946—~5kAutomated safety check: PassMIT
Scenario Unreal Expertscenario-labs/skills946—~6.4kAutomated safety check: PassMIT
Scenario Unreal Gameplayscenario-labs/skills946—~5.2kAutomated safety check: PassMIT

Similar skills

  • Unreal Bridge

    TornLux/UnrealBridge

    Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.

    306 GitHub stars~8.4k tokensUpdated 9 days ago
    Game DevelopmentAuto-check: notes
  • Scenario Unreal Cinematics

    scenario-labs/skills

    A skill your agent uses when making a trailer, cutscene, cinematic or short film in Unreal Engine 5.8 with Sequencer: shot lists, master and shot sequences, cameras, lenses, depth of field, camera…

    946 GitHub stars~5.1k tokensUpdated today
    Game DevelopmentAuto-check passed
  • A skill your agent uses when importing FBX, USD, OBJ or glTF from Maya, ZBrush or Blender into Unreal Engine 5.8 in bulk or reimporting changed files, writing Editor Python tools, Interchange…

    946 GitHub stars~5k tokensUpdated today
    Game DevelopmentAuto-check passed
  • Scenario Unreal Expert

    scenario-labs/skills

    A skill your agent uses when an agent drives Unreal Engine 5.8 on a Mac for any task: Editor Python (the unreal module), headless UnrealEditor-Cmd -run=pythonscript jobs, Epic's Unreal MCP server…

    946 GitHub stars~6.4k tokensUpdated today
    Game DevelopmentAuto-check passed
  • Scenario Unreal Gameplay

    scenario-labs/skills

    A skill your agent uses when building or debugging UE5 gameplay: a character with double jump or dash, abilities with cooldowns, enemy AI that patrols, chases and attacks, a health bar or HUD…

    946 GitHub stars~5.2k tokensUpdated today
    Game DevelopmentAuto-check passed
  • 2D Map and Scene Generator

    0x0funky/agent-sprite-forge

    Plans and builds 2D game maps and scenes, from tilemaps and parallax backgrounds to HD-2D plates, with collision checks, a playable HTML preview and Tiled, Godot or LDtk export.

    4.4k GitHub stars~2.9k tokensUpdated 4 days ago
    Game DevelopmentAuto-check passed

More from kevinpbuckley/VibeUE

All 39 skills in this repo
  • Unreal Animation Bone Editor

    kevinpbuckley/VibeUE

    Previews, validates and bakes bone-rotation edits on Unreal Engine AnimSequences, enforcing a coordinate space and a constraint-checked preview-validate-bake loop.

    730 GitHub stars~1.3k tokensUpdated 3 days ago
    Auto-check passed
  • Unreal Animation Montage

    kevinpbuckley/VibeUE

    Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.

    730 GitHub stars~3.6k tokensUpdated 3 days ago
    Auto-check passed
  • Unreal AnimSequence Editor

    kevinpbuckley/VibeUE

    Creates and edits AnimSequence keyframes and bone tracks in Unreal Engine through AnimSequenceService, following an inspect, preview, validate and bake workflow with correct bone-space handling.

    730 GitHub stars~3.2k tokensUpdated 3 days ago
    Auto-check passed
  • Unreal Asset Import and Export

    kevinpbuckley/VibeUE

    Imports files into Unreal Engine, exports textures, reads the Content Browser selection and checks open assets via VibeUE, plus mesh reimport material fixes.

    730 GitHub stars~6.5k tokensUpdated 3 days ago
    Auto-check passed
  • Unreal Engine Settings Control

    kevinpbuckley/VibeUE

    Changes Unreal Engine console variables, scalability levels and raw INI values through VibeUE's Python API, now that registered settings moved to the engine's own toolset.

    730 GitHub stars~1.3k tokensUpdated 3 days ago
    Auto-check passed
  • Unreal Enhanced Input Setup

    kevinpbuckley/VibeUE

    Creates and wires Unreal Engine Enhanced Input assets through VibeUE's InputService: Input Actions, Mapping Contexts, key bindings, triggers and modifiers.

    730 GitHub stars~2.4k tokensUpdated 3 days ago
    Auto-check passed

Questions about Unreal Foliage Placement

What does Unreal Foliage Placement do?

Creates Unreal Engine foliage types and scatters or places foliage instances on landscapes and meshes through FoliageService, with seeded, reproducible layouts. This skill drives Unreal Engine foliage from the agent: creating foliage types from static meshes, adding or scattering trees, grass, bushes and rocks across landscapes and meshes, and querying or removing instances on a surface.FoliageService.

When should I use Unreal Foliage Placement?

Unreal Foliage Placement fits situations like: adding trees, grass, bushes or rocks as foliage on a landscape; creating a reusable foliage type from a static mesh; scattering foliage reproducibly or onto a painted landscape layer; querying or removing foliage instances on a surface.

How do I install Unreal Foliage Placement in Claude Code?

Run `npx skills add kevinpbuckley/VibeUE --skill foliage -a claude-code`. Or copy the skill folder (Content/Skills/foliage in kevinpbuckley/VibeUE) into .claude/skills/foliage in your project. Claude Code loads it when a task matches its description.

How do I install Unreal Foliage Placement in Codex?

Run `npx skills add kevinpbuckley/VibeUE --skill foliage -a codex`. Or copy the skill folder (Content/Skills/foliage in kevinpbuckley/VibeUE) into .agents/skills/foliage in your project. Codex loads it when a task matches its description.

Can I use Unreal Foliage Placement in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kevinpbuckley/VibeUE --skill foliage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/foliage, .gemini/skills/foliage, .github/skills/foliage and .opencode/skills/foliage in your project.

What does Unreal Foliage Placement need to run?

SKILL.md names no scripts, command-line tools or credentials: Unreal Foliage Placement is instructions for the agent only. Our summary lists: Unreal Engine with the VibeUE tooling available to the agent; A static mesh or foliage type asset path.

Does Unreal Foliage Placement access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Unreal Foliage Placement safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Unreal Foliage Placement use?

Unreal Foliage Placement is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Unreal Foliage Placement use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Unreal Foliage Placement?

Skills that share tags, products or a category with Unreal Foliage Placement: Unreal Bridge (TornLux/UnrealBridge, 306 stars), Scenario Unreal Cinematics (scenario-labs/skills, 946 stars), Scenario Unreal Pipeline Automation (scenario-labs/skills, 946 stars) and Scenario Unreal Expert (scenario-labs/skills, 946 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Unreal Foliage Placement?

kevinpbuckley (a GitHub user) maintains it in kevinpbuckley/VibeUE, which has 730 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 7, 2026.

Source: kevinpbuckley/VibeUE on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.