Sprite Gen
aldegad/sprite-gen
Generates images and game sprites through GPT or Grok with guided provider choices, separate saved defaults, automatic cleanup and optional curation.
Edit skeleton bone transforms/hierarchy, retargeting modes, curve metadata, blend profiles, bone constraints, and learn constraints from animations (VibeUE SkeletonService).
$ npx skills add kevinpbuckley/VibeUE --skill skeleton -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE skeleton --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/skeleton .claude/skills/skeleton && 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 "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .claude/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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/skeletonType 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 skeleton -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE skeleton --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/skeleton .agents/skills/skeleton && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .agents/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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 skeleton -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE skeleton --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/skeleton .cursor/skills/skeleton && 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 "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .cursor/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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/skeleton--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 skeleton -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE skeleton --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/skeleton .gemini/skills/skeleton && 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 "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .gemini/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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 skeletonInstalls 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 skeleton -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/skeleton .github/skills/skeleton && 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 "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .github/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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 skeleton -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 skeleton --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/skeleton .opencode/skills/skeleton && 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 "skeleton" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/skeleton into .opencode/skills/skeleton/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skeleton", 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.
skeletonEdit skeleton bone transforms/hierarchy, retargeting modes, curve metadata, blend profiles, bone constraints, and learn constraints from animations (VibeUE SkeletonService).
Skeleton is an agent skill from kevinpbuckley/VibeUE. Edit skeleton bone transforms/hierarchy, retargeting modes, curve metadata, blend profiles, bone constraints, and learn constraints from animations (VibeUE SkeletonService). Socket CRUD, bone enumeration, physics-asset, and material/LOD inspection are owned by the engine SkeletalMeshTools. Use when the user asks to add/transform bones, set retargeting, manage blend profiles or curves, or set bone constraints. For animation bone edits, also load animation-editing.
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
It sits in Game Development. It works with Model Context Protocol. The repository describes itself as: Unreal Engine Vibe Coding tool. The licence is MIT.
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.
Skeleton loads about 4.4k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 895 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). 895 words, ~4,401 tokens.
.claude/skills/skeleton/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; 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: "animation-system"}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.
Architecture (read first): VibeUE extends Unreal's native MCP endpoint. Socket CRUD, bone enumeration, physics-asset assignment, and material/LOD/morph inspection are owned by the engine toolset
editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools(called viacall_tool). VibeUE'sSkeletonServicewas trimmed to what the engine doesn't cover: bone transform/hierarchy editing, retargeting config, curve metadata, blend profiles, bone constraints, and learn-from-animations.Loading skills: skills load through the engine's
AgentSkillToolset(ListSkills/GetSkills) — there is novibeue-skills-managertool. Run VibeUE services withexecute_python_code(unreal.SkeletonService.<method>()); reach engine tools withcall_tool(discover withlist_toolsets/describe_toolset).Related Skills:
- animsequence / animation-editing - For editing animations with constraint validation (uses skeleton profiles) and keyframes
- animation-blueprint - For AnimBP state machines and navigation
Use this skill when: Editing bone transforms/hierarchy, retargeting modes, blend profiles, curve metadata, or bone constraints. For sockets / bone listing / physics asset / materials / LODs, use engine
SkeletalMeshTools(see below).
These moved to the engine. Discover the exact schemas with
describe_toolset("editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools") and call via call_tool
(the mesh argument is a {"refPath": "<SkeletalMesh asset path>"} object):
| Task | Engine tool (SkeletalMeshTools.*) |
|---|---|
| List sockets | get_socket_names |
| Add / remove / rename socket | add_socket, remove_socket, rename_socket |
| Get / set socket transform, get socket bone | get_socket_transform, set_socket_transform, get_socket_bone |
| List bones / parent / children | get_bone_names, get_bone_parent, get_bone_children |
| Material slots / get / set | get_material_slots, get_material, set_material |
| Physics asset get / assign | get_physics_asset, assign_physics_asset |
| LODs / vertices / sections / bounds | get_lod_count, get_vertex_count, get_section_count, get_bounds |
| Morph target names | get_morph_target_names |
# Example: add a socket on the hand_r bone, then list sockets
call_tool(toolset_name="editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools",
tool_name="add_socket",
arguments={"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"},
"socket_name": "Weapon_R", "bone_name": "hand_r"})
call_tool(toolset_name="editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools",
tool_name="set_socket_transform",
arguments={"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"},
"socket_name": "Weapon_R",
"transform": {"location": {"x":10,"y":0,"z":0},
"rotation": {"pitch":0,"yaw":90,"roll":0},
"scale": {"x":1,"y":1,"z":1}}})Note: the engine
add_socketalways adds the socket to the skeletal mesh. VibeUE's oldbAddToSkeleton(skeleton-wide socket) flag is gone — to share a socket across all meshes on a skeleton, add it on each mesh, or add it on the skeleton viaunreal.*directly.
Bone modifications (add, remove, rename, reparent) use a transaction system. Changes are NOT applied until you call commit_bone_changes():
import unreal
# Make bone changes
unreal.SkeletonService.add_bone("/Game/SKM_Character", "twist_arm_l", "upperarm_l", unreal.Transform())
unreal.SkeletonService.add_bone("/Game/SKM_Character", "twist_arm_r", "upperarm_r", unreal.Transform())
# ⚠️ CRITICAL: Commit changes!
unreal.SkeletonService.commit_bone_changes("/Game/SKM_Character")Forgetting to commit = changes are lost!
⚠️ Do NOT reparent bones via SkeletonModifier (known-broken, UE 5.7). Changing a bone's parent and calling
commit_bone_changes()fails with a hierarchy-mismatch validation error and can leave the commit stalled (the call may not return cleanly). Add/remove/rename/transform are safe; reparenting is not. If a user needs a different hierarchy, add a new bone at the desired parent and remove the old one rather than reparenting in place.
Socket CRUD is on SkeletalMeshTools (see the table at the top). The engine add_socket attaches to
the skeletal mesh; set its offset with set_socket_transform. There is no bAddToSkeleton flag.
SK_ assets → VibeUE SkeletonServiceSKM_ assets → VibeUE SkeletonServiceSKM_ assets → engine SkeletalMeshTools# Skeleton operations (VibeUE) - use SK_ path
unreal.SkeletonService.get_skeleton_info("/Game/Characters/SK_Mannequin")
unreal.SkeletonService.set_bone_retargeting_mode("/Game/Characters/SK_Mannequin", "pelvis", "Skeleton")
# Sockets / bone listing (engine) - use SKM_ path via call_tool, e.g.:
# call_tool("editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools", "get_socket_names",
# {"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"}})| Mode | Description | Use For |
|---|---|---|
Animation | Use animation data directly | Most bones (default) |
Skeleton | Use skeleton's reference pose | Root, pelvis, IK targets |
AnimationScaled | Scale animation by skeleton size | Height-scaled characters |
OrientAndScale | Match orientation and scale | Helper/utility bones |
For animation editing with constraint validation, use the skeleton profile methods:
import unreal
# Create/refresh skeleton profile with hierarchy and constraints
profile = unreal.SkeletonService.create_skeleton_profile("/Game/SK_Mannequin")
print(f"Skeleton has {profile.bone_count} bones")
# Learn constraints from existing animations
constraints = unreal.SkeletonService.learn_from_animations("/Game/SK_Mannequin", 50, 10)
print(f"Learned from {constraints.animation_count} animations")
# Set manual bone constraints (e.g., elbow as hinge)
unreal.SkeletonService.set_bone_constraints(
"/Game/SK_Mannequin",
"lowerarm_r",
unreal.Rotator(0, 0, 0), # Min rotation
unreal.Rotator(0, 145, 0), # Max rotation
True, # Is hinge joint
1 # Pitch axis (Y)
)
# Validate a rotation against constraints
result = unreal.SkeletonService.validate_bone_rotation(
"/Game/SK_Mannequin",
"upperarm_r",
unreal.Rotator(0, 180, 0), # Test rotation
True # Use learned constraints
)
if not result.is_valid:
print(f"Clamped to: {result.clamped_rotation}")See the
animsequenceskill for complete preview→validate→bake workflow.
Bone enumeration moved to the engine. Use get_bone_names (hierarchy order, root first) and walk
parent/children with get_bone_parent / get_bone_children:
# names = call_tool("editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools",
# "get_bone_names", {"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"}})
# for n in names:
# children = call_tool(... "get_bone_children",
# {"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"}, "bone_name": n})For a richer hierarchy with transforms/depth/retarget mode, VibeUE's
create_skeleton_profile(skeleton_path) returns bone_hierarchy (Array[BoneNodeInfo]) — see below.
import unreal
mesh_path = "/Game/Characters/SKM_Character"
# Add forearm twist bones
unreal.SkeletonService.add_bone(
mesh_path,
"lowerarm_twist_01_l",
"lowerarm_l",
unreal.Transform(location=[12.0, 0.0, 0.0])
)
unreal.SkeletonService.add_bone(
mesh_path,
"lowerarm_twist_01_r",
"lowerarm_r",
unreal.Transform(location=[12.0, 0.0, 0.0])
)
# Add upperarm twist bones
unreal.SkeletonService.add_bone(
mesh_path,
"upperarm_twist_01_l",
"upperarm_l",
unreal.Transform(location=[15.0, 0.0, 0.0])
)
unreal.SkeletonService.add_bone(
mesh_path,
"upperarm_twist_01_r",
"upperarm_r",
unreal.Transform(location=[15.0, 0.0, 0.0])
)
# CRITICAL: Commit the changes
unreal.SkeletonService.commit_bone_changes(mesh_path)
unreal.SkeletonService.save_asset(mesh_path)Socket CRUD is on the engine toolset. Add the socket, then set its offset transform:
mesh = {"refPath": "/Game/Characters/SKM_Character"}
TS = "editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools"
call_tool(TS, "add_socket", {"mesh": mesh, "socket_name": "Weapon_R", "bone_name": "hand_r"})
call_tool(TS, "set_socket_transform", {"mesh": mesh, "socket_name": "Weapon_R",
"transform": {"location": {"x":10,"y":0,"z":0},
"rotation": {"pitch":0,"yaw":90,"roll":0},
"scale": {"x":1,"y":1,"z":1}}})
call_tool(TS, "add_socket", {"mesh": mesh, "socket_name": "Holster_Back", "bone_name": "spine_03"})
call_tool(TS, "set_socket_transform", {"mesh": mesh, "socket_name": "Holster_Back",
"transform": {"location": {"x":0,"y":-20,"z":0},
"rotation": {"pitch":0,"yaw":0,"roll":90},
"scale": {"x":1,"y":1,"z":1}}})import unreal
skeleton_path = "/Game/Characters/SK_Character"
# Root and pelvis should use Skeleton mode
for bone in ["root", "pelvis"]:
unreal.SkeletonService.set_bone_retargeting_mode(skeleton_path, bone, "Skeleton")
# IK bones should use Animation mode
for bone in ["ik_foot_l", "ik_foot_r", "ik_hand_l", "ik_hand_r"]:
unreal.SkeletonService.set_bone_retargeting_mode(skeleton_path, bone, "Animation")
# Add a compatible skeleton for sharing animations
unreal.SkeletonService.add_compatible_skeleton(
skeleton_path,
"/Game/Mannequins/SK_Mannequin"
)
unreal.SkeletonService.save_asset(skeleton_path)import unreal
skeleton_path = "/Game/Characters/SK_Character"
# Create the blend profile
unreal.SkeletonService.create_blend_profile(skeleton_path, "UpperBody")
# Set lower body to 0 (no blend)
lower_body_bones = ["pelvis", "thigh_l", "thigh_r", "calf_l", "calf_r", "foot_l", "foot_r"]
for bone in lower_body_bones:
unreal.SkeletonService.set_blend_profile_bone(skeleton_path, "UpperBody", bone, 0.0)
# Set upper body to 1 (full blend)
upper_body_bones = ["spine_01", "spine_02", "spine_03", "clavicle_l", "clavicle_r"]
for bone in upper_body_bones:
unreal.SkeletonService.set_blend_profile_bone(skeleton_path, "UpperBody", bone, 1.0)
unreal.SkeletonService.save_asset(skeleton_path)import unreal
skeleton_path = "/Game/Characters/SK_Character"
# Add facial expression curves
facial_curves = ["BrowsUp", "BrowsDown", "EyesClosed", "Smile", "Frown"]
for curve in facial_curves:
unreal.SkeletonService.add_curve_metadata(skeleton_path, curve)
unreal.SkeletonService.set_curve_morph_target(skeleton_path, curve, True)
# Add material parameter curves
material_curves = ["EyeGlow", "SkinWetness", "BlushAmount"]
for curve in material_curves:
unreal.SkeletonService.add_curve_metadata(skeleton_path, curve)
unreal.SkeletonService.set_curve_material(skeleton_path, curve, True)
unreal.SkeletonService.save_asset(skeleton_path)There is no find_bones — get the full list from the engine get_bone_names and filter in Python:
names = call_tool("editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools",
"get_bone_names", {"mesh": {"refPath": "/Game/Characters/SKM_Mannequin"}})
hand_bones = [n for n in names if "hand" in n.lower()]
twist_bones = [n for n in names if "twist" in n.lower()]
ik_bones = [n for n in names if n.lower().startswith("ik_")]import unreal
skeleton_path = "/Game/Characters/SK_Mannequin"
info = unreal.SkeletonService.get_skeleton_info(skeleton_path)
print(f"Skeleton: {info.skeleton_name}")
print(f" Bones: {info.bone_count}")
print(f" Compatible Skeletons: {info.compatible_skeleton_count}")
print(f" Curve Metadata: {info.curve_meta_data_count}")
print(f" Blend Profiles: {info.blend_profile_count}")
if info.blend_profile_names:
print(f" Profiles: {', '.join(info.blend_profile_names)}")Python Naming Convention: C++ types like
FBoneNodeInfoare exposed asBoneNodeInfoin Python (noFprefix).
| Property | Type | Description |
|---|---|---|
bone_name | string | Name of the bone |
bone_index | int | Index in hierarchy |
parent_bone_name | string | Parent bone (empty = root) |
parent_bone_index | int | Parent index (-1 = root) |
child_count | int | Number of direct children |
depth | int | Depth in hierarchy (0 = root) |
local_transform | Transform | Transform relative to parent |
global_transform | Transform | World-space transform |
retargeting_mode | string | Translation retarget mode |
children | array[string] | Names of child bones |
| Property | Type | Description |
|---|---|---|
skeleton_path | string | Asset path |
skeleton_name | string | Display name |
bone_count | int | Number of bones |
compatible_skeleton_count | int | Compatible skeletons |
curve_meta_data_count | int | Curve metadata entries |
blend_profile_count | int | Blend profiles |
blend_profile_names | array[string] | Profile names |
preview_forward_axis | string | Forward axis setting |
| Property | Type | Description |
|---|---|---|
mesh_path | string | Asset path |
mesh_name | string | Display name |
skeleton_path | string | Associated skeleton |
bone_count | int | Number of bones |
lod_count | int | LOD levels |
socket_count | int | Number of sockets |
morph_target_count | int | Morph targets |
material_count | int | Materials |
physics_asset_path | string | Physics asset |
post_process_anim_bp_path | string | Post-process AnimBP |
unreal.SkeletonService.add_bone(path, "new_bone", "parent", transform)
# Bone is NOT added yet - changes lost!unreal.SkeletonService.add_bone(path, "new_bone", "parent", transform)
unreal.SkeletonService.commit_bone_changes(path) # NOW it's appliedunreal.SkeletonService.add_socket(...)That method was cut — sockets are now engine SkeletalMeshTools:
# WRONG: unreal.SkeletonService.add_socket(...) # no longer exists
# RIGHT: call_tool("editor_toolset.toolsets.skeletal_mesh.SkeletalMeshTools",
# "add_socket", {"mesh": {"refPath": "/Game/SKM_Character"}, ...})unreal.SkeletonService.set_bone_retargeting_mode(path, "pelvis", "Skeleton")
# Changes in memory only - lost on editor close!unreal.SkeletonService.set_bone_retargeting_mode(path, "pelvis", "Skeleton")
unreal.SkeletonService.save_asset(path)SkeletalMeshTools (via call_tool) — sockets, bone enumeration, physics asset, materials, LODs, morph targets.© 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/skeleton of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Skeleton 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 |
|---|---|---|---|---|---|---|
| Skeleton this skillkevinpbuckley/VibeUE | 726 | — | ~4.4k | Automated safety check: Pass | MIT | |
| Sprite Genaldegad/sprite-gen | 2.6k | — | ~4.8k | Automated safety check: Pass | Apache-2.0 | |
| Blockbench Pluginsjasonjgardner/blockbench-mcp-plugin | 495 | — | ~2.8k | Automated safety check: Pass | GPL-3.0 | |
| Unreal Blueprint Authoringflopperam/unreal-engine-mcp | 1.1k | — | ~1.6k | Automated safety check: Pass | None | |
| Locus Unity BridgeMisaka-Mikoto-Tech/agent-skills | 278 | — | ~4k | Automated safety check: Pass | MIT | |
| Assets Shader List AllIvanMurzak/Unity-MCP | 4.4k | — | ~435 | Automated safety check: Pass | Apache-2.0 |
aldegad/sprite-gen
Generates images and game sprites through GPT or Grok with guided provider choices, separate saved defaults, automatic cleanup and optional curation.
jasonjgardner/blockbench-mcp-plugin
Blockbench plugin/extension development for the 3D modeling tool.
flopperam/unreal-engine-mcp
Walks an agent through creating and editing Unreal Engine Blueprints with the Flopperam MCP's bp_* tools, from inspection to commit and verification.
Misaka-Mikoto-Tech/agent-skills
A skill your agent uses when an agent needs to inspect or control a real Unity Editor through Locus, especially when Unity MCP is unavailable, named-pipe discovery is needed, C must be executed, or…
IvanMurzak/Unity-MCP
List all shaders available in the project assets and packages, sorted by name.
flopperam/unreal-engine-mcp
Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.
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
Edit skeleton bone transforms/hierarchy, retargeting modes, curve metadata, blend profiles, bone constraints, and learn constraints from animations (VibeUE SkeletonService). Skeleton is an agent skill from kevinpbuckley/VibeUE. Edit skeleton bone transforms/hierarchy, retargeting modes, curve metadata, blend profiles, bone constraints, and learn constraints from animations (VibeUE SkeletonService).
Skeleton fits situations like: the user asks to add/transform bones; set retargeting; manage blend profiles; set bone constraints.
Run `npx skills add kevinpbuckley/VibeUE --skill skeleton -a claude-code`. Or copy the skill folder (Content/Skills/skeleton in kevinpbuckley/VibeUE) into .claude/skills/skeleton in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill skeleton -a codex`. Or copy the skill folder (Content/Skills/skeleton in kevinpbuckley/VibeUE) into .agents/skills/skeleton 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 skeleton -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/skeleton, .gemini/skills/skeleton, .github/skills/skeleton and .opencode/skills/skeleton in your project.
SKILL.md names no scripts, command-line tools or credentials: Skeleton 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.
Skeleton 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.4k tokens (SKILL.md is roughly 18k 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 Skeleton: Sprite Gen (aldegad/sprite-gen, 2.6k stars), Blockbench Plugins (jasonjgardner/blockbench-mcp-plugin, 495 stars), Unreal Blueprint Authoring (flopperam/unreal-engine-mcp, 1.1k stars) and Locus Unity Bridge (Misaka-Mikoto-Tech/agent-skills, 278 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 726 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.