Image to Three.js Model
img2threejs/img2threejs
Rebuilds the object in a reference image as a procedural, animation-ready Three.js model written entirely in code, using staged sculpting with quality checks.
Create and modify UMG Widget Blueprints (UI) — build the widget hierarchy, set properties, style fonts/brushes, author widget animations, bind events, capture previews, run PIE checks, and wire MVVM…
$ npx skills add kevinpbuckley/VibeUE --skill umg-widgets -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE umg-widgets --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/umg-widgets .claude/skills/umg-widgets && 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 "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .claude/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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/umg-widgetsType 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 umg-widgets -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE umg-widgets --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/umg-widgets .agents/skills/umg-widgets && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .agents/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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 umg-widgets -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE umg-widgets --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/umg-widgets .cursor/skills/umg-widgets && 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 "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .cursor/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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/umg-widgets--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 umg-widgets -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE umg-widgets --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/umg-widgets .gemini/skills/umg-widgets && 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 "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .gemini/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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 umg-widgetsInstalls 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 umg-widgets -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/umg-widgets .github/skills/umg-widgets && 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 "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .github/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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 umg-widgets -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 umg-widgets --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/umg-widgets .opencode/skills/umg-widgets && 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 "umg-widgets" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/umg-widgets into .opencode/skills/umg-widgets/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "umg-widgets", 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.
umg-widgetsCreate and modify UMG Widget Blueprints (UI) — build the widget hierarchy, set properties, style fonts/brushes, author widget animations, bind events, capture previews, run PIE checks, and wire MVVM…
Umg Widgets is an agent skill from kevinpbuckley/VibeUE. Create and modify UMG Widget Blueprints (UI) — build the widget hierarchy, set properties, style fonts/brushes, author widget animations, bind events, capture previews, run PIE checks, and wire MVVM ViewModels. Use when the user asks to create a UI/HUD/menu, add or arrange widgets (Button, TextBlock, Image, panels), style or animate a widget, or set up data bindings in a Widget Blueprint (WBP).
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts (for example `mvvm.md`, `reference.md` and `workflows.md`).
It sits in Game Development. The repository describes itself as: Unreal Engine Vibe Coding tool. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
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 10 files 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.
Umg Widgets loads about 4.1k tokens when it runs. Until then it costs about 102 tokens; SKILL.md has 1,714 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). 1,714 words, ~4,087 tokens.
.claude/skills/umg-widgets/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.🧠 Brains complement: IF an
unreal-engine-skills-managertool (external MCP) exists in this session, call it with{action: "load", skill: "umg-and-slate"}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.
This skill covers authoring Widget Blueprints (WBP) with WidgetService. Read the Critical Rules
below first — they prevent the most common failures. Then pick a task from the Task Index and load the
matching workflow doc and/or run the matching sample script.
Load the
blueprintsskill when you also need to add Blueprint variables, functions, or components, andblueprint-graphswhen wiring event-graph nodes for bound events.
WidgetService does not create the asset. Create it with the factory, then use WidgetService
to populate it:
import unreal
factory = unreal.WidgetBlueprintFactory()
factory.set_editor_property("parent_class", unreal.UserWidget)
asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
asset_tools.create_asset("MainMenu", "/Game/UI", unreal.WidgetBlueprint, factory)Do not call BlueprintEditorLibrary.get_blueprint_class(), unreal.create_widget_blueprint(), or
WidgetService.create_widget() — none exist. (Runnable: scripts/create_widget.txt.)
unreal.WidgetService.add_component(path, "CanvasPanel", "RootCanvas", "", True) # empty parent -> becomes root
unreal.WidgetService.add_component(path, "Button", "PlayButton", "RootCanvas", False)That 5th argument is is_variable, not set_as_root — a widget becomes the root because its parent
name is empty, not because of that flag. A 6th argument, child_index, inserts at a position instead of
appending; reorder_component moves an existing widget within its parent. See reference.md ▸ Child order.
⚠️ Widget names are unique per-blueprint, NOT per-parent. UMG enforces one name across the whole Widget Blueprint, so you can't add an
ItemLabel/ItemButtonunder each ofItem1,Item2,Item3. Suffix per-parent (Item1Label,Item2Label, …) — reusing a name silently lands the component on the wrong parent or no-ops.
unreal.WidgetService.set_property(path, "PlayText", "Font.Size", "24") # "24", not 24ColorAndOpacity on text/image widgets is FSlateColor, whose export text is
"(SpecifiedColor=(R=1.0,G=0.5,B=0.0,A=1.0))" — a bare LinearColor string is auto-wrapped
into that form by set_property. ShadowColorAndOpacity is a plain FLinearColor:
"(R=0.0,G=0.0,B=0.0,A=1.0)". Named color strings ("red", "orange") are NOT supported on
either — pass numeric RGBA.
Always get_property after set_property and compare. A struct set can return True
while writing nothing (UE struct import ignores unrecognized member names). If the readback
still shows the old value, your value string didn't match the struct's member layout — check
list_properties for the property's real type and use its export-text form.
Use set_font / set_brush (with WidgetFontInfo / WidgetBrushInfo) when changing a complete font
or brush — they keep related fields together. Use set_property only for single leaf values or slot
aliases like Position X, Size Y, Anchor Min X. See reference.md for every field name; runnable
examples in scripts/apply_font.txt and scripts/apply_brush.txt.
set_brush requires a slot_name: set_brush(widget_path, component_name, slot_name, brush_info)
(for an Image the slot is "Brush"). set_font takes an optional property_name that defaults to "Font".
⚠️
set_property("Font.Typeface", ...)silently returns False (size and color leaf-sets work, but typeface/family do not go through the struct sub-property path). Always change typeface/family viaset_fontwith aWidgetFontInfo. Don't trust theTrue/Falsereturn ofset_propertyon nested struct sub-fields — read it back to confirm.
✅
set_fontcolour is now applied (ColorAndOpacityis anFSlateColor; the old path silently no-op'd a bare(R=,G=,B=,A=)tuple). Pass a LINEAR tuple, e.g.(R=0.035,G=0.002,B=0.002,A=1);set_fontreturns False and logs a Warning if a supplied colour did not land, so trust the return.
⚠️
get_fontreadback quirk (issue #470): the struct-typed string fieldscolor,shadow_color, andshadow_offsetcome back as two concatenated representations glued together, e.g.shadow_offset == "(X=0.0,Y=0.0)(X=1.000000,Y=1.000000)". The trailing parenthesized group is the real value. Scalar fields (size,typeface,font_family,letter_spacing,outline_size) are clean. When verifying a font round-trip, parse the last(...)group of these three fields (or compare scalars only) until #470 is fixed.
set_editor_property("width_override", 34.0) on a USizeBox stores the value but leaves the paired
bOverride_WidthOverride edit-condition flag false — the override silently never applies (the value
even reads back as 34.0). Call the dedicated setters (set_width_override(), set_height_override(),
set_min_desired_width(), ...) which set flag + value together. Applies to any widget property gated
by a bOverride_* flag; after a raw property set, read the flag back before trusting the layout.
add_animation_track / add_keyframe target actual widget properties or slot aliases
(RenderOpacity, ColorAndOpacity, Position X/Y, Size X/Y). Always create the animation first,
then the track, then keyframes. (Runnable: scripts/create_animation.txt.)
capture_preview renders an editor-side PNG without starting gameplay — use for appearance checks.
It now renders with a single gamma pass (an sRGB PNG matching the designer, no more double-gamma) and
a layout prepass (Overlay-centred content is centred, not bottom-aligned).start_pie + spawn_widget_in_pie are for runtime state / live property reads — use only when you
need a live instance.Use list_widget_blueprints("") to find existing WBPs, then pass just the asset name (e.g.
"WBP_HealthBar", not the full package path) as component_type. The child WBP must already exist;
circular references are rejected; the parent recompiles automatically.
| WRONG | CORRECT |
|---|---|
p.name | p.property_name |
p.type | p.property_type |
p.property_value | p.current_value |
w.component_name / w.name | w.widget_name |
w.widget_type | w.widget_class |
WidgetInfo complete fields: widget_name, widget_class, parent_widget, is_root_widget, is_variable, children.
children is an Array[str] of widget NAMES, not nested objects. Iterating it and reading
.widget_name/.is_variable raises AttributeError: 'str' object has no attribute .... To walk
the tree, build a name→info map first:
infos = {w.widget_name: w for w in unreal.WidgetService.get_hierarchy(path)}
for child_name in infos["RootCanvas"].children:
child = infos[child_name] # look the child up by name
print(child.widget_name, child.widget_class, child.is_variable)get_widget_snapshot(path) returns full data (hierarchy + slot + all properties) for a valid
path — if it comes back empty, the path is wrong; do not conclude the widget is empty.
Full field tables for every return type are in reference.md.
For "do our widgets follow best practices?" style audits:
properties, any *Delegate
entry (e.g. VisibilityDelegate, TextDelegate) with current_value of (null).None is
unbound — a function name there means a polling property binding exists.BlueprintService (a WBP is a Blueprint):
list_graphs(path) → get_nodes_in_graph(path, "EventGraph") → find Event Tick →
get_node_pins(path, graph, node_id) and check each pin's connected flag. A Tick node with
no connected pins is just the default stub, not live logic.BlueprintService.get_graphs,
get_functions, get_connected_nodes, unreal.find_class. Use list_graphs,
list_functions, get_nodes_in_graph, get_node_details (includes pin connections), and
unreal.load_class(None, path) instead.set_propertyset_property edits slot layout through these aliases (string values):
Position X/Y, Size X/Y, Anchor Min X/Y, Anchor Max X/Y, Alignment X/Y
(pivot — set to 0.5 with anchors at 0.5 to truly center), ZOrder (or Z Order).Horizontal Alignment / Vertical Alignment
(values Fill/Left/Center/Right/Top/Bottom), Padding (one value or (Left=..,Top=..,Right=..,Bottom=..)),
Padding Left/Top/Right/Bottom, and on box slots Size Rule (Fill/Automatic) + Size Value.unreal.WidgetService.set_property(path, "PlayButton", "ZOrder", "5")
unreal.WidgetService.set_property(path, "HeaderRow", "Vertical Alignment", "Top")
unreal.WidgetService.set_property(path, "HeaderRow", "Padding", "8")Shadowed names prefer the WIDGET (fixed in issue #553). A name that exists on both a widget and its slot (e.g.
HorizontalAlignmenton a Border sitting in an Overlay) now writes the widget's own property; a log warning notes the ambiguity. To target the slot explicitly, prefix withSlot.— e.g.set_property(path, "BackgroundBorder", "Slot.HorizontalAlignment", "Center")(value aliases likeFill/Centerstill work behind the prefix). Names that exist only as slot aliases (the lists above) keep resolving to the slot with no prefix needed.
reparent_widgetMove an existing widget to a new parent panel (preserves the widget object/GUID):
unreal.WidgetService.reparent_widget(path, "BackgroundImage", "MainContainer")Rejects moving a panel into itself/a descendant; the root cannot be reparented.
| Type | Purpose |
|---|---|
CanvasPanel | Absolute positioning (X, Y coords) |
VerticalBox | Stack children vertically |
HorizontalBox | Stack children horizontally |
Overlay | Stack children on top of each other |
Pick the task, load its workflow section, and/or run its sample script via execute_python_code.
Sample scripts under scripts/ are runnable examples — edit the variables at the top, then execute.
| Task | Workflow | Sample script (run via execute_python_code) |
|---|---|---|
| Create a Widget Blueprint | workflows.md → Create Widget Blueprint | scripts/create_widget.txt |
| Build a menu (root + panel + buttons) | workflows.md → Build a Menu | scripts/build_menu.txt |
| Position widgets on a CanvasPanel | workflows.md → Canvas Positioning | — |
| Inspect a widget (hierarchy + properties) | workflows.md → Inspect a Widget | scripts/inspect_hierarchy.txt |
| Apply full font styling | workflows.md → Font Styling | scripts/apply_font.txt |
| Apply full brush styling | workflows.md → Brush Styling | scripts/apply_brush.txt |
| Author a widget animation | workflows.md → Widget Animation | scripts/create_animation.txt |
| Bind a widget event to a function | workflows.md → Bind Event | — |
| Rename / remove a widget | workflows.md → Edit the Hierarchy | — |
| Edit slot layout (z-order, alignment, padding) / reparent | SKILL.md → Slot editing | scripts/edit_slots.txt |
| Capture a preview PNG | workflows.md → Capture Preview | scripts/capture_preview.txt |
| Inspect a widget live in PIE | workflows.md → PIE Runtime Check | scripts/pie_inspect.txt |
| Add MVVM ViewModel + bindings | mvvm.md | scripts/mvvm_hud.txt |
Load these only when the task needs them — read the sibling file directly under
Plugins/VibeUE/Content/Skills/umg-widgets/ (the engine AgentSkillToolset GetSkills is the
loader that exposes this skill; there is no vibeue-skills-manager tool):
workflows.md — step-by-step task workflows with copy-paste Python for every task above.reference.md — field-name tables for every return type (FWidgetInfo, FWidgetComponentSnapshot,
FWidgetSlotInfo, FWidgetFontInfo, FWidgetBrushInfo, FWidgetAnimInfo, FWidgetPreviewResult,
FPIEWidgetHandle), the WidgetService action list, common properties, and event names.mvvm.md — MVVM ViewModel support: rules, creation types, binding modes, field names, and full
add/bind/list/remove workflows.get_widget_snapshot(path) and confirm the expected widgets/parents.get_property / get_font / get_brush).unreal.EditorAssetLibrary.save_asset(path).Never report a widget as created/configured until it appears in a fresh get_widget_snapshot result.
capture_preview renders correct gamma/colour now, but still confirm slot values with get_component_snapshot and layout in PIE. UMG colours are LINEAR — a dark sRGB red is about (0.035, 0.002, 0.002).ObjectIterator are discarded on the next compile; set them with set_property(path, widget, "Slot.<Prop>", value) or in C++ NativeConstruct.add_component(path, type, name, parent_name="") becomes it. BindWidget binds only when the tree widget is is_variable=True; reading a bound member from Python is blocked, so enumerate ObjectIterator(unreal.TextBlock) filtered by the instance path.bind_event is only provably bound on the GameInstance_*-outered PIE instance (asset/preview instances always read unbound); simulate a click with on_clicked.broadcast() on that instance. Hand-built bound-event nodes compile but never fire — use create_component_bound_event.WidgetBlueprintLibrary to unreal.WidgetLibrary, and UserWidget instances do not expose get_widget_from_name.SetInputMode_GameAndUIEx in Construct; the input mode survives ServerTravel; DefaultInput.ini holds a full serialised InputSettings block mid-file, so a key appended at the section top is silently overridden.© 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 13 other files (scripts) in Content/Skills/umg-widgets of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Umg Widgets 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 |
|---|---|---|---|---|---|---|
| Umg Widgets this skillkevinpbuckley/VibeUE | 730 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Image to Three.js Modelimg2threejs/img2threejs | 18k | 1 repos | ~8.2k | Automated safety check: Pass | Apache-2.0 | |
| Web CloneJane-xiaoer/claude-skill-web-clone | 1k | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Threejs Game Directormajidmanzarpour/threejs-game-skills | 2.5k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Game Asset Generatorhtdt/godogen | 7.1k | — | ~2.8k | Automated safety check: Pass | MIT | |
| Threejs Gameplay Systemsvalkor-ai/loom | 1.2k | 1 repos | ~1.4k | Automated safety check: Pass | Apache-2.0 |
img2threejs/img2threejs
Rebuilds the object in a reference image as a procedural, animation-ready Three.js model written entirely in code, using staged sculpting with quality checks.
Jane-xiaoer/claude-skill-web-clone
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…
majidmanzarpour/threejs-game-skills
Entrypoint for building, upgrading, and finishing Three.js browser games.
htdt/godogen
Generates game art from text prompts: PNG images, GLB 3D models, rigged characters, animations and sprites, with background removal.
valkor-ai/loom
Build and iterate playable Three.js game systems: starter scaffold, architecture, design briefs, core loops, level and encounter design, entities, input, camera, collision and physics, scoring…
CyberAgentGameEntertainment/NovaShader
Execute C with Unity APIs when existing uloop tools cannot inspect or edit enough.
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.
Categories
Create and modify UMG Widget Blueprints (UI) — build the widget hierarchy, set properties, style fonts/brushes, author widget animations, bind events, capture previews, run PIE checks, and wire MVVM…. Umg Widgets is an agent skill from kevinpbuckley/VibeUE. Create and modify UMG Widget Blueprints (UI) — build the widget hierarchy, set properties, style fonts/brushes, author widget animations, bind events, capture previews, run PIE checks, and wire MVVM ViewModels.
Umg Widgets fits situations like: the user asks to create a UI/HUD/menu; arrange widgets (Button; animate a widget; set up data bindings in a Widget Blueprint (WBP).
Run `npx skills add kevinpbuckley/VibeUE --skill umg-widgets -a claude-code`. Or copy the skill folder (Content/Skills/umg-widgets in kevinpbuckley/VibeUE) into .claude/skills/umg-widgets in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill umg-widgets -a codex`. Or copy the skill folder (Content/Skills/umg-widgets in kevinpbuckley/VibeUE) into .agents/skills/umg-widgets 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 umg-widgets -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/umg-widgets, .gemini/skills/umg-widgets, .github/skills/umg-widgets and .opencode/skills/umg-widgets in your project.
SKILL.md names no scripts, command-line tools or credentials: Umg Widgets is instructions for the agent only. Our summary lists: Python 3.
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.
Umg Widgets is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k 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 Umg Widgets: Image to Three.js Model (img2threejs/img2threejs, 18k stars), Web Clone (Jane-xiaoer/claude-skill-web-clone, 1k stars), Threejs Game Director (majidmanzarpour/threejs-game-skills, 2.5k stars) and Game Asset Generator (htdt/godogen, 7.1k 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 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.