Unreal Bridge
TornLux/UnrealBridge
Execute Python scripts inside a running Unreal Engine 5.3+ editor via TCP bridge.
Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.
$ npx skills add kevinpbuckley/VibeUE --skill animation-montage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kevinpbuckley/VibeUE animation-montage --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/animation-montage .claude/skills/animation-montage && 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 "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .claude/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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/animation-montageType 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 animation-montage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kevinpbuckley/VibeUE animation-montage --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/animation-montage .agents/skills/animation-montage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .agents/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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 animation-montage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kevinpbuckley/VibeUE animation-montage --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/animation-montage .cursor/skills/animation-montage && 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 "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .cursor/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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/animation-montage--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 animation-montage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kevinpbuckley/VibeUE animation-montage --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/animation-montage .gemini/skills/animation-montage && 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 "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .gemini/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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 animation-montageInstalls 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 animation-montage -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/animation-montage .github/skills/animation-montage && 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 "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .github/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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 animation-montage -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 animation-montage --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/animation-montage .opencode/skills/animation-montage && 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 "animation-montage" agent skill from https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/animation-montage into .opencode/skills/animation-montage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "animation-montage", 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.
animation-montageCreates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings.
This skill covers creating and editing Unreal Engine Animation Montages through the AnimMontageService Python API: making a montage from an animation or as an empty asset, managing sections and linking them for combos and flow control, slot tracks and animation segments, notifies, blend in and out settings, and branching points for frame-accurate gameplay events. The API reference is organized as discovery, creation, section management, section linking, segments, slot tracks, blend settings and branching points.
A few practical notes are recorded. The list_montages filters must be passed as empty strings rather than None, since an FString argument cannot be null. There is no playback-rate method, so the montage's RateScale property is set directly on the loaded asset and the asset is saved. A scripts folder holds a create_montage.txt example. The skill also says that if an unreal-engine-skills-manager MCP tool exists in the session, the agent may load an animation-system skill from it for domain knowledge, and should skip that step otherwise.
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 Animation Montage loads about 3.6k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 504 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). 504 words, ~3,631 tokens.
.claude/skills/animation-montage/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.
Use AnimMontageService for animation montage operations.
⚠️
list_montagesfilters are strings, notNone(issue #461) — pass""for "no filter", neverNone(an FString arg can't be null and raises a TypeError). Playback rate: there is noset_playback_rate_scalemethod; set the montage'sRateScaledirectly —unreal.load_asset(montage_path).set_editor_property("RateScale", 1.5)thenunreal.EditorAssetLibrary.save_asset(montage_path).
# List all montages in a path (use "" for no skeleton filter, NOT None)
montages = AnimMontageService.list_montages(search_path, skeleton_filter) -> Array[MontageInfo]
# Get detailed montage info
info = AnimMontageService.get_montage_info(montage_path) -> MontageInfo
# Find montages for a skeleton
montages = AnimMontageService.find_montages_for_skeleton(skeleton_path) -> Array[MontageInfo]
# Find montages using a specific animation
montages = AnimMontageService.find_montages_using_animation(anim_path) -> Array[MontageInfo]# Create montage from an animation sequence
path = AnimMontageService.create_montage_from_animation(anim_path, dest_path, name) -> str
# Create empty montage for a skeleton
path = AnimMontageService.create_empty_montage(skeleton_path, dest_path, name) -> str
# Duplicate existing montage
path = AnimMontageService.duplicate_montage(source_path, dest_path, new_name) -> str# List all sections
sections = AnimMontageService.list_sections(montage_path) -> Array[MontageSectionInfo]
# Add new section
AnimMontageService.add_section(montage_path, section_name, start_time) -> bool
# Remove section
AnimMontageService.remove_section(montage_path, section_name) -> bool
# Rename section
AnimMontageService.rename_section(montage_path, old_name, new_name) -> bool
# Move section to new time
AnimMontageService.set_section_start_time(montage_path, section_name, new_time) -> bool
# Get section at time
name = AnimMontageService.get_section_name_at_time(montage_path, time) -> str# Link sections: Section1 -> Section2
AnimMontageService.set_next_section(montage_path, from_section, to_section) -> bool
# Set section to loop
AnimMontageService.set_section_loop(montage_path, section_name, loop=True) -> bool
# Clear link (section ends montage)
AnimMontageService.clear_section_link(montage_path, section_name) -> bool
# Get all section links for flow visualization
links = AnimMontageService.get_all_section_links(montage_path) -> Array[SectionLink]# List segments in a slot track
segments = AnimMontageService.list_anim_segments(montage_path, track_index) -> Array[AnimSegmentInfo]
# Add animation at specific time
index = AnimMontageService.add_anim_segment(montage_path, track_index, anim_path, start_time, play_rate) -> int
# Remove segment
AnimMontageService.remove_anim_segment(montage_path, track_index, segment_index) -> bool
# Modify segment timing
AnimMontageService.set_segment_start_time(montage_path, track_index, segment_index, time) -> bool
AnimMontageService.set_segment_play_rate(montage_path, track_index, segment_index, rate) -> bool
AnimMontageService.set_segment_loop_count(montage_path, track_index, segment_index, count) -> bool# List slot tracks
tracks = AnimMontageService.list_slot_tracks(montage_path) -> Array[SlotTrackInfo]
# Add new slot track
index = AnimMontageService.add_slot_track(montage_path, slot_name) -> int
# Change slot name
AnimMontageService.set_slot_name(montage_path, track_index, new_slot_name) -> bool
# Remove slot track
AnimMontageService.remove_slot_track(montage_path, track_index) -> bool# Set blend in (options: Linear, Cubic, HermiteCubic, Sinusoidal, etc.)
AnimMontageService.set_blend_in(montage_path, time, option) -> bool
# Set blend out
AnimMontageService.set_blend_out(montage_path, time, option) -> bool
# Set blend out trigger time (-1 = auto)
AnimMontageService.set_blend_out_trigger_time(montage_path, time) -> bool
# Get all blend settings
settings = AnimMontageService.get_blend_settings(montage_path) -> MontageBlendSettings# List all branching points
points = AnimMontageService.list_branching_points(montage_path) -> Array[BranchingPointInfo]
# Add branching point for combo input window
index = AnimMontageService.add_branching_point(montage_path, name, trigger_time) -> int
# Remove branching point
AnimMontageService.remove_branching_point(montage_path, index) -> bool# Enable/disable root motion translation
AnimMontageService.set_enable_root_motion_translation(montage_path, enable) -> bool
# Enable/disable root motion rotation
AnimMontageService.set_enable_root_motion_rotation(montage_path, enable) -> bool# Open montage in Animation Editor
AnimMontageService.open_montage_editor(montage_path) -> bool
# Refresh editor UI: call this ONCE, AFTER all edits are done (see crash warning below)
AnimMontageService.refresh_montage_editor(montage_path) -> bool
# Jump to section in preview
AnimMontageService.jump_to_section(montage_path, section_name) -> bool
# Play preview
AnimMontageService.play_preview(montage_path, start_section) -> bool⚠️ CRASH WARNING — never structurally edit a montage while its editor is open. Adding/removing sections, slot tracks, segments, notifies, or branching points reallocates the montage's internal arrays. If the montage editor (Persona) is open, its live preview holds pointers into those arrays and the next tick will dereference freed memory → the editor hard-crashes. Rule: do ALL structural edits FIRST, then
refresh_montage_editor()/open_montage_editor()exactly once at the very end. Do NOT callrefresh_montage_editor()between edits. (The service now also auto-closes the editor before each structural edit as a safety net, but you should still batch edits and open last so the editor isn't opening and closing repeatedly.)
All montage_path parameters require the FULL asset path (package_name), NOT the folder path.
# CORRECT: Full asset path
montage_path = "/Game/Montages/AM_Attack"
# WRONG: Folder path
montage_path = "/Game/Montages" # This is a folder, not an asset!These methods return UStruct objects. Access fields with the exact snake_case names below —
guessing (skeleton_display_name, segment end_time, name, path) raises AttributeError.
Each struct field is read-only data already populated; just read it.
MontageInfo (from get_montage_info / list_montages / find_montages_for_skeleton):
montage_path, montage_name, skeleton_path, duration, section_count, slot_track_count,
notify_count, branching_point_count, blend_in_time, blend_out_time, blend_out_trigger_time,
enable_root_motion_translation, enable_root_motion_rotation, slot_names (Array[str]).
(No skeleton_display_name — use skeleton_path. No skeleton object — it's a path string.)
MontageSectionInfo (from list_sections):
section_name, section_index, start_time, end_time, duration, next_section_name,
loops, segment_count.
AnimSegmentInfo (from list_anim_segments / get_anim_segment_info):
segment_index, anim_sequence_path, anim_name, start_time, duration, play_rate,
anim_start_pos, anim_end_pos, loop_count, loops.
(Segments have NO end_time — that field exists only on sections. Compute segment end as
start_time + duration. Source-clip range is anim_start_pos → anim_end_pos.)
SlotTrackInfo (from list_slot_tracks): track_index, slot_name, segment_count, total_duration.
SectionLink (from get_all_section_links): from_section, to_section, is_loop.
BranchingPointInfo (from list_branching_points): index, notify_name, trigger_time, section_name.
Tip: when unsure, call
discover_python_class('unreal.MontageInfo, unreal.AnimSegmentInfo, unreal.MontageSectionInfo')— theEditor Propertiesblock lists every valid field name. Cheaper than a crash-and-retry loop.
import unreal
# 1. Create empty montage
path = unreal.AnimMontageService.create_empty_montage(
"/Game/Characters/SK_Mannequin",
"/Game/Montages",
"AM_ComboAttack"
)
# 2. Add animation segments sequentially (track 0)
unreal.AnimMontageService.add_anim_segment(path, 0, "/Game/Animations/Attack1", 0.0)
unreal.AnimMontageService.add_anim_segment(path, 0, "/Game/Animations/Attack2", 1.0)
unreal.AnimMontageService.add_anim_segment(path, 0, "/Game/Animations/Attack3", 2.0)
# 3. Add sections at animation boundaries
unreal.AnimMontageService.add_section(path, "Attack1", 0.0)
unreal.AnimMontageService.add_section(path, "Attack2", 1.0)
unreal.AnimMontageService.add_section(path, "Attack3", 2.0)
# 4. Link sections for combo flow
unreal.AnimMontageService.set_next_section(path, "Attack1", "Attack2")
unreal.AnimMontageService.set_next_section(path, "Attack2", "Attack3")
# Attack3 has no next section - ends the montage
# 5. Add branching points for input windows
unreal.AnimMontageService.add_branching_point(path, "Combo1Window", 0.7)
unreal.AnimMontageService.add_branching_point(path, "Combo2Window", 1.7)
# 6. Configure blend settings
unreal.AnimMontageService.set_blend_in(path, 0.15, "Cubic")
unreal.AnimMontageService.set_blend_out(path, 0.2, "Linear")
# 7. Save FIRST, while no editor is open
unreal.EditorAssetLibrary.save_asset(path)
# 8. THEN refresh/open the editor exactly once — never between the edits above
# (refreshing mid-edit can crash the editor; see CRASH WARNING)
unreal.AnimMontageService.refresh_montage_editor(path)import unreal
# 1. Create montage from animation
path = unreal.AnimMontageService.create_montage_from_animation(
"/Game/Animations/Reload",
"/Game/Montages",
"AM_Reload_UpperBody"
)
# 2. Change slot to UpperBody for layered blending
unreal.AnimMontageService.set_slot_name(path, 0, "UpperBody")
# 3. Configure blend
unreal.AnimMontageService.set_blend_in(path, 0.1, "Linear")
unreal.AnimMontageService.set_blend_out(path, 0.15, "Linear")
# 4. Disable root motion for upper body action
unreal.AnimMontageService.set_enable_root_motion_translation(path, False)
unreal.AnimMontageService.set_enable_root_motion_rotation(path, False)
# 5. Save
unreal.EditorAssetLibrary.save_asset(path)import unreal
montage_path = "/Game/Montages/AM_Combat"
# Add sections
unreal.AnimMontageService.add_section(montage_path, "Idle", 0.0)
unreal.AnimMontageService.add_section(montage_path, "Attack", 2.0)
# Make Idle loop until gameplay interrupts
unreal.AnimMontageService.set_section_loop(montage_path, "Idle", True)
# Attack ends the montage (no next section)
unreal.AnimMontageService.clear_section_link(montage_path, "Attack")# WRONG
montages = AnimMontageService.list_sections("/Game/Montages")
# CORRECT
sections = AnimMontageService.list_sections("/Game/Montages/AM_Attack")# WRONG - opening/refreshing the editor mid-edit, then editing more, can hard-crash
# the editor (live preview holds dangling pointers into reallocated montage arrays)
AnimMontageService.add_section(path, "Attack", 0.5)
AnimMontageService.refresh_montage_editor(path) # editor now open
AnimMontageService.add_anim_segment(path, 0, anim, 1.0) # mutates arrays under live preview -> CRASH risk
# CORRECT - do ALL structural edits first, save, THEN refresh/open exactly once at the end
AnimMontageService.add_section(path, "Attack", 0.5)
AnimMontageService.add_anim_segment(path, 0, anim, 1.0)
unreal.EditorAssetLibrary.save_asset(path)
AnimMontageService.refresh_montage_editor(path) # single refresh at the very end# WRONG - Section time must be within montage length
# If montage is 3.0s, this fails:
AnimMontageService.add_section(path, "Late", 5.0) # Beyond duration
# CORRECT - Add segments first to extend duration, then add sections
AnimMontageService.add_anim_segment(path, 0, anim_path, 3.0) # Extends montage
AnimMontageService.add_section(path, "Late", 3.5) # Now within range# WRONG - Changes lost on editor restart
AnimMontageService.add_section(path, "Attack", 0.5)
# CORRECT - Always save after changes
AnimMontageService.add_section(path, "Attack", 0.5)
unreal.EditorAssetLibrary.save_asset(path)execute_python_code)scripts/create_montage.txt — create a montage from an animation and add named sections.© 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/animation-montage of kevinpbuckley/VibeUE.
Open the folder on GitHubat commit dc051be
Unreal Animation Montage 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 Animation Montage this skillkevinpbuckley/VibeUE | 730 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Unreal BridgeTornLux/UnrealBridge | 306 | — | ~8.4k | Automated safety check: Notes | MIT | |
| Scenario Unreal Cinematicsscenario-labs/skills | 946 | — | ~5.1k | Automated safety check: Pass | MIT | |
| Scenario Unreal Pipeline Automationscenario-labs/skills | 946 | — | ~5k | Automated safety check: Pass | MIT | |
| Scenario Unreal Expertscenario-labs/skills | 946 | — | ~6.4k | Automated safety check: Pass | MIT | |
| Scenario Unreal Gameplayscenario-labs/skills | 946 | — | ~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 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.
kevinpbuckley/VibeUE
Creates, edits and inspects Unreal Engine UserDefinedEnums and UserDefinedStructs through Python, including adding values or members and reading internal versus display names.
Works with
Categories
Creates and edits Unreal Engine Animation Montages through AnimMontageService: sections, slots, segments, branching points, notifies and blend settings. This skill covers creating and editing Unreal Engine Animation Montages through the AnimMontageService Python API: making a montage from an animation or as an empty asset, managing sections and linking them for combos and flow control, slot tracks and animation segments, notifies, blend in and out settings, and branching points for frame-accurate gameplay events. The API reference is organized as discovery, creation, section management, section linking, segments, slot tracks, blend settings and branching points.
Unreal Animation Montage fits situations like: creating a montage from an animation or as an empty asset; adding sections and linking them for combo or flow control; setting up slot tracks and animation segments; adding branching points or adjusting blend in and out timing.
Run `npx skills add kevinpbuckley/VibeUE --skill animation-montage -a claude-code`. Or copy the skill folder (Content/Skills/animation-montage in kevinpbuckley/VibeUE) into .claude/skills/animation-montage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kevinpbuckley/VibeUE --skill animation-montage -a codex`. Or copy the skill folder (Content/Skills/animation-montage in kevinpbuckley/VibeUE) into .agents/skills/animation-montage 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 animation-montage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/animation-montage, .gemini/skills/animation-montage, .github/skills/animation-montage and .opencode/skills/animation-montage in your project.
SKILL.md names no scripts, command-line tools or credentials: Unreal Animation Montage is instructions for the agent only. Our summary lists: Unreal Engine with the AnimMontageService Python API available.
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 Animation Montage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k 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 Animation Montage: 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.
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.