Unreal Bridge
TornLux/UnrealBridge
Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.
Creates, edits and inspects Unreal Engine UserDefinedEnums and UserDefinedStructs through Python, including adding values or members and reading internal versus display names.
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE enum-struct --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Content/Skills/enum-struct .claude/skills/enum-struct && rm -rf skills-srcUse ~/.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/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .claude/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-structType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE enum-struct --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .agents/skills && cp -r skills-src/Content/Skills/enum-struct .agents/skills/enum-struct && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .agents/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE enum-struct --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/Content/Skills/enum-struct .cursor/skills/enum-struct && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .cursor/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kevinpbuckley/VibeUE.git --path Content/Skills/enum-struct--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE enum-struct --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/Content/Skills/enum-struct .gemini/skills/enum-struct && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .gemini/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kevinpbuckley/VibeUE enum-structInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .github/skills && cp -r skills-src/Content/Skills/enum-struct .github/skills/enum-struct && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .github/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kevinpbuckley/VibeUE --skill enum-struct -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kevinpbuckley/VibeUE enum-struct --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/Content/Skills/enum-struct .opencode/skills/enum-struct && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "enum-struct" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/enum-struct into .opencode/skills/enum-struct/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "enum-struct", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
enum-structCreates, edits and inspects Unreal Engine UserDefinedEnums and UserDefinedStructs through Python, including adding values or members and reading internal versus display names.
The skill covers the EnumStructService workflows for Blueprint-level enums and structs in Unreal Engine. It is explicit that native C++ enums and structs are read-only and only UserDefinedEnums and UserDefinedStructs can be modified through this service, using Python's unreal module to search and operate on them.
Naming is a common pitfall it corrects for: create_enum and create_struct only prepend an E or F prefix when the given name does not already start with it, so passing TestState yields ETestState while E_TestState is kept as given, and creation fails outright on a name that already exists, requiring a delete first. Enum entries also have immutable internal names like NewEnumerator0 that differ from the display name every other method works with, so add_enum_value, rename_enum_value and remove_enum_value all operate on display names, and get_enum_info returns both together.
Read from SKILL.md and the folder at commit dc051be. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/, which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Unreal Enum and Struct Editor loads about 2.3k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 449 words of instructions outside code blocks.
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.
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.
The full file from kevinpbuckley/VibeUE at commit dc051be, republished under its MIT licence (© kevinpbuckley). 449 words, ~2,341 tokens.
.claude/skills/enum-struct/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Native C++ enums and structs are read-only. Only UserDefinedEnums and UserDefinedStructs can be modified:
import unreal
# Search for user-defined enums only (editable)
enums = unreal.EnumStructService.search_enums("Weapon", True) # bUserDefinedOnly=True
# Check if an enum is user-defined before modifying
# (returns a single EnumInfo or None — NOT a (success, info) tuple)
info = unreal.EnumStructService.get_enum_info("EMyEnum")
if info and info.is_user_defined: # field is is_user_defined, NOT b_is_user_defined
unreal.EnumStructService.add_enum_value("EMyEnum", "NewValue")create_enum / create_struct only prepend E/F when the name doesn't already start
with that letter; they never insert underscores or reformat. So:
E_TestState → pass "E_TestState" (passing "TestState" creates ETestState)EWeaponType → "WeaponType" or "EWeaponType" both workCreation fails with an empty string if the asset already exists — delete it first
(delete_enum / delete_struct), there is no overwrite.
UserDefinedEnum entries have immutable internal names (NewEnumerator0..N). Every
EnumStructService method speaks display names: the name you pass to
add_enum_value becomes the display name, get_enum_values returns display names,
and rename_enum_value / remove_enum_value accept display names (rename changes the
display name only). For internal+display pairs use get_enum_info(...).values
(each entry has name = internal, display_name, value, index).
import unreal
# Create a new enum — pass the exact final name (here E prefix gets prepended)
enum_path = unreal.EnumStructService.create_enum("/Game/Data/Enums", "WeaponType")
print(f"Created: {enum_path}") # /Game/Data/Enums/EWeaponType.EWeaponType
if not enum_path:
# creation failed — most likely the asset already exists; delete_enum first
...
# Add values
unreal.EnumStructService.add_enum_value(enum_path, "Sword", "Melee Sword")
unreal.EnumStructService.add_enum_value(enum_path, "Bow", "Ranged Bow")
unreal.EnumStructService.add_enum_value(enum_path, "Staff", "Magic Staff")
# Verify
values = unreal.EnumStructService.get_enum_values(enum_path)
print(f"Values: {values}") # ['Sword', 'Bow', 'Staff']import unreal
# Create a new struct (F prefix added automatically)
struct_path = unreal.EnumStructService.create_struct("/Game/Data/Structs", "WeaponData")
print(f"Created: {struct_path}")
# Add properties
unreal.EnumStructService.add_struct_property(struct_path, "WeaponName", "FString", "Unnamed")
unreal.EnumStructService.add_struct_property(struct_path, "Damage", "float", "10.0")
unreal.EnumStructService.add_struct_property(struct_path, "AttackSpeed", "float", "1.0")
unreal.EnumStructService.add_struct_property(struct_path, "WeaponType", "EWeaponType") # Use our enum
# Add array property
unreal.EnumStructService.add_struct_property(struct_path, "SpecialEffects", "FName", "", "Array")
# Verify — get_struct_info returns a single StructInfo (or None), NOT a (success, info) tuple
info = unreal.EnumStructService.get_struct_info(struct_path)
if info:
print(f"Properties: {info.property_count}")
for prop in info.properties:
print(f" {prop.name}: {prop.type} (default: {prop.default_value}, guid: {prop.guid})")Notes:
prop.name is the authored name ("Damage") and all mutation methods
(rename_struct_property, set_struct_property_default, remove_struct_property,
change_struct_property_type) accept authored names. GUIDs live per property
(StructPropertyInfo.guid) — StructInfo itself has no guid field.MemberVar_0); the first
add_struct_property call removes it automatically. If you ever see a stray
MemberVar_* bool in an older struct, drop it with
remove_struct_property(path, "MemberVar_0").import unreal
# Search all enums containing "Weapon"
enums = unreal.EnumStructService.search_enums("Weapon")
for e in enums:
print(f"{e.name} ({e.value_count} values) - UserDefined: {e.is_user_defined}")
# Search user-defined structs only
structs = unreal.EnumStructService.search_structs("Data", True) # bUserDefinedOnly=True
for s in structs:
print(f"{s.name} ({s.property_count} properties)")
# Get detailed enum info — returns a single EnumInfo (or None), NOT a (success, info) tuple
enum_info = unreal.EnumStructService.get_enum_info("EWeaponType")
if enum_info:
for v in enum_info.values:
print(f" {v.name} = {v.value} ({v.display_name})")import unreal
enum_path = "/Game/Data/Enums/EWeaponType.EWeaponType"
# Rename a value
unreal.EnumStructService.rename_enum_value(enum_path, "Sword", "LongSword")
# Change display name
unreal.EnumStructService.set_enum_value_display_name(enum_path, "Bow", "Composite Bow")
# Remove a value
unreal.EnumStructService.remove_enum_value(enum_path, "Staff")
# Add new value
unreal.EnumStructService.add_enum_value(enum_path, "Crossbow", "Heavy Crossbow")import unreal
struct_path = "/Game/Data/Structs/FWeaponData.FWeaponData"
# Rename a property
unreal.EnumStructService.rename_struct_property(struct_path, "Damage", "BaseDamage")
# Change property type — ⚠️ this RESETS the default value to the new type's zero;
# re-set the default afterwards if you need one
unreal.EnumStructService.change_struct_property_type(struct_path, "BaseDamage", "int32")
# Set default value
unreal.EnumStructService.set_struct_property_default(struct_path, "BaseDamage", "15")
# Remove a property
unreal.EnumStructService.remove_struct_property(struct_path, "SpecialEffects")
# Add new property
unreal.EnumStructService.add_struct_property(struct_path, "CriticalMultiplier", "float", "2.0")After creating a UserDefinedStruct, it becomes available as a DataTable row type. The struct must contain at least one property before it can be used as a row type.
import unreal
# Create the row struct with EnumStructService
struct_path = unreal.EnumStructService.create_struct("/Game/Data", "ItemRow")
unreal.EnumStructService.add_struct_property(struct_path, "ItemName", "FString")
unreal.EnumStructService.add_struct_property(struct_path, "Value", "int32", "0")
unreal.EnumStructService.add_struct_property(struct_path, "Icon", "UTexture2D")DataTable creation itself is no longer a VibeUE service — it is owned by the engine's native asset
toolset. Create the DataTable with the engine AssetTools toolset via call_tool (pass the
FItemRow struct as the row structure); run describe_toolset on AssetTools for the exact action
name and parameters. You can also create one in raw Python via unreal.AssetToolsHelpers +
unreal.DataTableFactory if you prefer execute_python_code.
When adding struct properties, use these type strings:
bool, int32, int64, float, doubleFString, FName, FText, uint8, byteFVector, FVector2D, FRotator, FTransformFColor, FLinearColorFGameplayTag, FGameplayTagContainerAActor, APawn, ACharacterUTexture2D, UMaterial, UStaticMeshUSoundBase, UAnimSequenceUse the ContainerType parameter:
# Array of strings
unreal.EnumStructService.add_struct_property(path, "Tags", "FString", "", "Array")
# Set of names
unreal.EnumStructService.add_struct_property(path, "UniqueNames", "FName", "", "Set")
# Map of string to int
unreal.EnumStructService.add_struct_property(path, "Scores", "int32", "", "Map")search_enums() to find the correct pathis_user_defined property before modifyingBlueprintService.search_variable_types() to find valid type namesexecute_python_code)scripts/create_enum_struct.txt — create a UserDefinedEnum (+values) and a UserDefinedStruct.© kevinpbuckley, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in Content/Skills/enum-struct of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Unreal Enum and Struct Editor 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Unreal Enum and Struct Editor this skillkevinpbuckley/VibeUE | 717 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Unreal BridgeTornLux/UnrealBridge | 305 | — | ~8.4k | Automated safety check: Notes | MIT | |
| Scenario Unreal Cinematicsscenario-labs/skills | 898 | — | ~5.1k | Automated safety check: Pass | MIT | |
| Scenario Unreal Pipeline Automationscenario-labs/skills | 898 | — | ~5k | Automated safety check: Pass | MIT | |
| Scenario Unreal Expertscenario-labs/skills | 898 | — | ~6.4k | Automated safety check: Pass | MIT | |
| Scenario Unreal Gameplayscenario-labs/skills | 898 | — | ~5.2k | Automated safety check: Pass | MIT |
TornLux/UnrealBridge
Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.
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…
scenario-labs/skills
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…
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…
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…
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.
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.
kevinpbuckley/VibeUE
Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.
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.
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.
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.
kevinpbuckley/VibeUE
Creates and wires Unreal Engine Enhanced Input assets through VibeUE's InputService: Input Actions, Mapping Contexts, key bindings, triggers and modifiers.
Works with
Categories
Creates, edits and inspects Unreal Engine UserDefinedEnums and UserDefinedStructs through Python, including adding values or members and reading internal versus display names. The skill covers the EnumStructService workflows for Blueprint-level enums and structs in Unreal Engine. It is explicit that native C++ enums and structs are read-only and only UserDefinedEnums and UserDefinedStructs can be modified through this service, using Python's unreal module to search and operate on them.
Unreal Enum and Struct Editor fits situations like: creating a new Blueprint enum or struct asset in Unreal Engine; adding or renaming enum values or struct members; defining a struct to use as a DataTable row.
Run `npx skills add kevinpbuckley/VibeUE --skill enum-struct -a claude-code`. Or copy the skill folder (Content/Skills/enum-struct in kevinpbuckley/VibeUE) into .claude/skills/enum-struct in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill enum-struct -a codex`. Or copy the skill folder (Content/Skills/enum-struct in kevinpbuckley/VibeUE) into .agents/skills/enum-struct in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kevinpbuckley/VibeUE --skill enum-struct -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/enum-struct, .gemini/skills/enum-struct, .github/skills/enum-struct and .opencode/skills/enum-struct in your project.
SKILL.md names no scripts, command-line tools or credentials: Unreal Enum and Struct Editor is instructions for the agent only. Our summary lists: Unreal Engine with the EnumStructService available; Python.
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.
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.
Unreal Enum and Struct Editor is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Unreal Enum and Struct Editor: Unreal Bridge (TornLux/UnrealBridge, 305 stars), Scenario Unreal Cinematics (scenario-labs/skills, 898 stars), Scenario Unreal Pipeline Automation (scenario-labs/skills, 898 stars) and Scenario Unreal Expert (scenario-labs/skills, 898 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kevinpbuckley (a GitHub user) maintains it in kevinpbuckley/VibeUE, which has 717 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 1, 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.