Skip to content

Animation

256 tools. Back to the index.

add_anim_bone_track

Destructive, idempotent.

Add the animation track of one skeleton bone to a UAnimSequence through its data controller, filled with num_keys identity keys (zero translation, identity rotation, unit scale), as one undo step, then save the package. An existing track stays but its keys are replaced (idempotent). A bone_name the sequence's skeleton does not have is an error and nothing is written; an omitted bone_name targets the root bone. A missing sequence or skeleton is an error and a failed save makes success false, with saved=false and save_error. Real poses: set_anim_bone_track_keys; inverse: remove_anim_bone_track.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
bone_name string no Name of a bone of the skeleton of the sequence; omitted or empty means the root bone.
num_keys number no Number of identity keys to write, rounded, minimum 1 (default 2); not checked against the frame count of the sequence.

Returns: { anim_sequence_path, bone_name, num_bone_tracks, num_keys, success, saved, save_error, message }

add_anim_composite_segment

Additive.

Append an FAnimSegment referencing a real UAnimSequence to a UAnimComposite's AnimationTrack, then recompute its length. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
composite_path string yes Object path of the UAnimComposite (e.g. "/Game/Animation/AC_Example").
animation_path string yes Object path of the UAnimSequence to reference.
start_pos number no Segment start position; ignored after auto-stacking (default 0)
play_rate number no Segment play rate (default 1.0)
loop_count number no Segment loop count, minimum 1 (default 1)

Returns: { composite_path, animation_path, num_segments, composite_length, segments, success, saved, save_error }

add_anim_conduit

Additive, idempotent.

Add a conduit node named conduit_name to an existing state machine of an Animation Blueprint (a missing blueprint or machine is an error; create the machine with add_anim_state_machine), then mark the blueprint structurally modified and save it without compiling. Idempotent by name: an existing conduit is returned unchanged (already_existed true). The conduit is placed unconnected: link it to states with add_anim_transition; remove_anim_conduit undoes it. Refused while PIE runs unless force=true; a failed save is an error, the change kept in memory.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the target state machine
conduit_name string yes Name for the new conduit

Returns: { anim_blueprint_path: string, machine_name: string, conduit_name: string, node_class: string, conduit_created: bool, already_existed: bool, saved: bool, conduit_count: int, save_error?: string }

add_anim_curve_name

Additive, idempotent.

Register a curve name as curve metadata on a USkeleton (USkeleton::AddCurveMetaData) in an undo transaction, then save the skeleton package. Idempotent: a name already registered is a success with added=false, already_existed=true and saved=false, and the skeleton is neither modified nor saved. It adds no keys -- to put a keyed float curve on a UAnimSequence use add_anim_float_curve; remove_anim_curve_name is the inverse. An unknown skeleton is an error and a failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
curve_name string yes The curve name to add (e.g. 'Curve_Example').
skeleton_path string no Asset path of the USkeleton to edit (/Game/...); when omitted or empty the engine asset /Engine/EngineMeshes/SkeletalCube_Skeleton is edited and saved.

Returns: { skeleton_path, curve_name, present, added, already_existed, curve_count, saved, save_error, message }

add_anim_float_curve

Destructive, idempotent.

Add a float curve (Editable flag) to a UAnimSequence through its data controller and set its keys from [time, value] pairs as linear keys with auto tangents, in one undo step, then save the package. An existing float curve of that name is kept and its keys are replaced (idempotent); one that already holds exactly those keys is a success with changed=false and saved=false, and nothing is written or saved. curve_found confirms the curve and num_keys counts the keys sent. A missing sequence is an error and a failed save makes success false, with saved=false and save_error. Rekey: set_anim_curve_keys; transform curves: add_anim_transform_curve; a skeleton-only name: add_anim_curve_name; read back: get_anim_curve_data.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
curve_name string yes Float curve name to add.
keys array no JSON array of [time, value] pairs (default [[0,0],[1,1]])

Returns: { anim_sequence_path, curve_name, num_float_curves, num_keys, curve_found, changed, success, saved, save_error, message }

add_anim_graph_node

Additive.

Place a UAnimGraphNode_* (by class name) into an AnimGraph or a state's inner graph. Saves the ABP but does NOT recompile it -- run compile_anim_blueprint after your edits for runtime effect.

Parameter Type Required Description
anim_blueprint_path string yes Path or name of the UAnimBlueprint.
node_class string yes AnimGraphNode class: short name (e.g. "AnimGraphNode_Slot", "AnimGraphNode_PoseSearchHistoryCollector") or full path.
graph_name string no Target graph; omit/"AnimGraph" for the top-level AnimGraph, or a nested name like "MainSM > Idle".
x number no Node X position (optional, default 0).
y number no Node Y position (optional, default 0).

Returns: { node_id, node_class, graph_name, pins[], saved } (NodeToJson of the created node)

add_anim_notify

Additive.

Add an instance of a UAnimNotify class at a time on a UAnimSequence notify track (created when missing) and save the sequence; each call adds another event, and an unknown class is an error. Returns time and success. For montages use add_montage_notify; for durations add_anim_notify_state. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
notify_name string yes Class name of a loaded UAnimNotify subclass, tried as given and then with the AnimNotify_ prefix (e.g. 'AN_Footstep', or "PlaySound" for AnimNotify_PlaySound); a Blueprint notify goes by its generated name ending in _C.
time number no Notify trigger time in seconds (default 0)
track_name string no Notify track name (default 'Default')

Returns: { animation_path, notify_name, time, success, saved, save_error, message }

add_anim_notify_name

Additive.

Register a notify name in the AnimationNotifies list of a USkeleton inside an undo transaction and save the skeleton package; returns present, notify_count and saved. A name already registered is a success with added=false, already_existed=true and saved=false, and the skeleton is neither modified nor saved. Without skeleton_path it edits /Engine/EngineMeshes/SkeletalCube_Skeleton. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
notify_name string yes The notify name to register (e.g. 'Footstep').
skeleton_path string no Asset path of the USkeleton to edit (/Game/...); when omitted or empty the engine asset /Engine/EngineMeshes/SkeletalCube_Skeleton is edited and saved.

Returns: { skeleton_path, notify_name, present, added, already_existed, notify_count, saved, save_error, message }

add_anim_notify_state

Additive.

Add an instance of a UAnimNotifyState class with a start time and duration to a UAnimSequence notify track (created when missing) and save the sequence; each call adds another event, and unknown classes are refused. Returns start_time, duration and success. For instant notifies use add_anim_notify. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
notify_state_name string yes Class name of a loaded UAnimNotifyState subclass, tried as given and then with the AnimNotifyState_ prefix (e.g. "Trail" for AnimNotifyState_Trail); a Blueprint notify state goes by its generated name ending in _C.
start_time number no Notify state start time in seconds (default 0)
duration number no Notify state duration in seconds (default 1.0)
track_name string no Notify track name (default 'Default')

Returns: { animation_path, notify_state_name, start_time, duration, success, saved, save_error, message }

add_anim_slot_group

Additive, idempotent.

Add an animation slot group (the groups montage slots belong to) to a USkeleton asset and save it. Idempotent: an existing group returns added false and changes nothing, but the skeleton is still saved; a failed save returns success false. Returns added and slot_group_count.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
group_name string yes Name of the slot group to add, e.g. "WeaponGroup".

Returns: { asset_path: string, group_name: string, added: bool, slot_group_count: int, saved: bool }

add_anim_state

Additive.

Add a state node to a state machine inside an Animation Blueprint.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the target state machine
state_name string yes Name for the new state

Returns: { anim_blueprint_path: string, machine_name: string, state_name: string, node_class: string, state_created: bool, already_existed: bool, saved: bool, state_count: int, save_error?: string }

add_anim_state_machine

Additive, idempotent.

Add a state machine node named machine_name to the top-level AnimGraph of an Animation Blueprint, then mark the blueprint structurally modified and save it without compiling (compile_anim_blueprint gives runtime effect). Idempotent by name: an existing machine is returned unchanged (already_existed true). The node starts with only its entry and is not connected to the Output Pose: wire it with connect_anim_graph_pins, fill it with add_anim_state, add_anim_conduit and add_anim_transition, or build it in one call with build_animation_state_machine. Refused while PIE runs unless force=true; a failed save is an error, the change kept in memory.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name for the new state machine

Returns: { anim_blueprint_path: string, machine_name: string, node_class: string, state_machine_graph: string, state_machine_created: bool, already_existed: bool, saved: bool, state_machine_count: int, save_error?: string }

add_anim_sync_marker

Destructive.

Append an authored sync marker (name and time, on marker track 0) to a UAnimSequence in an undo transaction and save it; duplicates are not checked, nor is the time checked against the sequence length. Returns num_sync_markers. Remove with remove_anim_sync_marker. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
marker_name string yes Name of the sync marker (e.g. "LeftFootDown"); sequences in one sync group line up markers that share a name.
time number no Sync marker time in seconds (default 0.5)

Returns: { anim_sequence_path, marker_name, time, num_sync_markers, success, saved, save_error, message }

add_anim_transform_curve

Additive.

Add a transform curve (RCT_Transform) to a UAnimSequence via the data controller. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Object path of the UAnimSequence.
curve_name string yes Name of the transform curve to add.
keys array no JSON array of {time, location:[x,y,z], rotation:[pitch,yaw,roll], scale:[x,y,z]} objects

Returns: { anim_sequence_path, curve_name, num_transform_curves, num_keys, keys_set, success, saved, save_error }

add_anim_transition

Additive.

Create a source->target transition in an anim state machine.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the state machine that owns both states
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)
crossfade_duration number no Optional blend duration in seconds (default 0.2)
blend_mode string no Optional EAlphaBlendOption name, e.g. Linear, Cubic, HermiteCubic
bidirectional boolean no Optional; also allow the reverse target->source transition
priority_order number no Optional evaluation priority (higher wins)

Returns: { anim_blueprint_path: string, machine_name: string, source_state: string, target_state: string, transition_created: bool, already_existed: bool, crossfade_duration: number, blend_mode: string, bidirectional: bool, priority_order: int, transition_count: int, saved: bool, save_error?: string }

add_animation_asset_to_pose_search_database

Additive.

Append an animation asset to a UPoseSearchDatabase as an enabled entry over its full range, then save the database; an asset already in it is left alone (already_existed=true). The asset type is not checked, and the search index is not rebuilt: run build_pose_search_database_index afterwards.

Parameter Type Required Description
database_path string yes Asset path of the UPoseSearchDatabase (required).
animation_asset_path string yes Asset path of a UAnimSequenceBase / UAnimComposite / UAnimMontage / UBlendSpace (required).

Returns: { database_path, animation_asset_path, animation_asset_count, added, already_existed, saved, message }

add_blendspace_sample

Additive.

Add a blend sample (animation + blend position) to a BlendSpace. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
blendspace_path string yes Full asset path to the UBlendSpace (e.g.
animation_path string yes Full asset path to the UAnimSequence to use as sample.
blend_value any no Blend position: single number (1D) or array of up to 3 numbers (default 0)

Returns: { blendspace_path, sample_index, num_samples, success, saved, save_error, message }

add_bone

Additive, idempotent.

Add a bone named bone_name to the reference skeleton of a USkeleton asset under parent_name (omitted or empty: an extra root bone), with local_transform relative to the parent (a zero or missing scale becomes 1), then save the skeleton. Idempotent by name: an existing bone is returned (added false, already_existed true) without checking its parent or saving. An unknown parent is an error, and so is a failed save. Only the skeleton changes: skeletal meshes using it get no new bone, and there is no undo entry. No commit_bone_changes is needed; set_bone_parent and set_bone_transform edit bones, add_virtual_bone adds virtual ones.

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
bone_name string yes Name for the new bone; when a bone of that name already exists nothing changes (added false)
parent_name string no Parent bone name, or empty/null for a new root bone
local_transform object no Optional {location:[x,y,z], rotation:[p,y,r], scale:[x,y,z]}, defaults to identity

Returns: { asset_path, bone_name, bone_index, parent_index, bone_count, added, already_existed, saved, op: "add_bone" }

add_ik_goal

Additive, idempotent.

Add an IK goal to an IK Rig, associated with a bone, through the IK Rig controller (one undo transaction), then save the asset. If bone_name is omitted, a leaf bone of the rig's skeletal mesh is picked automatically. Idempotent: a goal of that name on the same bone is not re-created but returned with already_exists=true, saved=false and a note, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
goal_name string yes Unique name for the new goal
bone_name string no Optional bone name to attach the goal to

Returns: { asset_path: string, goal_name: string, bone_name: string, goal_count: int, saved: bool, already_exists?: bool, save_error?: string, note?: string }

add_ik_retarget_chain

Additive.

Add a retarget bone chain from start_bone to end_bone, optionally tied to an IK goal, to an IK Rig asset and save it. Both bones must exist in the skeleton of the rig; the chain name is made unique, so read chain_name back. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes IK Rig (UIKRigDefinition) asset path, e.g. "/Game/Retarget/IK_Hero".
chain_name string yes Name for the new retarget chain (uniquified by the engine)
start_bone string yes First bone of the chain; must exist in the skeleton of the rig.
end_bone string yes Last bone of the chain; must exist in the skeleton of the rig.
goal_name string no IK goal to attach the chain to (default none); not checked against the goals of the rig.

Returns: { asset_path: string, chain_name: string, start_bone: string, end_bone: string, goal_name: string, chain_count: int, saved: bool, save_error?: string }

add_ik_solver

Additive.

Add an IK solver to the bottom of an IK Rig's solver stack. Solver type is one of "FullBodyIK", "Limb", "Pole", "BodyMover", "SetTransform" or "StretchLimb" (default "FullBodyIK"). Unknown types are rejected with an honest error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_type string no Optional solver type: "FullBodyIK"|"Limb"|"Pole"|"BodyMover"|"SetTransform"|"StretchLimb"; defaults to "FullBodyIK"

Returns: { asset_path: string, solver_index: int, solver_type: string, solver_struct: string, solver_count: int, saved: bool, save_error?: string }

add_montage_notify

Destructive.

Append a name-only notify event (no UAnimNotify class) to a UAnimMontage at an absolute trigger time on notify track 0 and save the montage; every call appends another event. Returns trigger_time, notify_count and the notifies name list. Remove with remove_montage_notify. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
notify_name string yes Name of the notify event (e.g. 'Footstep').
trigger_time number no Absolute notify trigger time in seconds (default 0)

Returns: { montage_path, notify_name, trigger_time, notify_count, notifies, added, saved, save_error, message }

add_montage_section

Additive.

Add a composite section to a UAnimMontage at an absolute start time, or move the existing section of that name there; it does not link sections (use link_montage_sections). Saves the montage in an undo transaction and returns start_time, section_count, sections, already_existed and added (true only for a new section). A section of that name already at that start time is a success with changed=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
section_name string yes Name of the section to add (e.g. 'Loop').
start_time number no Absolute section start time in seconds (default 0)

Returns: { montage_path, section_name, start_time, section_count, sections, already_existed, added, changed, saved, save_error, message }

add_montage_segment

Additive.

Append an animation segment referencing a real UAnimSequence to a montage slot. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Object path of the UAnimMontage (e.g. "/Game/MyGame/AM_Example").
anim_sequence_path string yes Object path of the UAnimSequence to reference.
slot_name string no Montage slot name (e.g. DefaultSlot)
play_rate number no Segment play rate (default 1.0)
loop_count number no Segment loop count, minimum 1 (default 1)

Returns: { montage_path, anim_sequence_path, slot_name, segment_count, montage_length, play_rate, loop_count, success, saved, save_error }

add_montage_slot

Additive.

Add an empty slot animation track with the given slot name to a UAnimMontage in an undo transaction and save it; an existing slot of that name is a success with added=false, already_existed=true and saved=false, and the montage is neither modified nor saved. Returns slot_count, the slots list and present. Fill it with add_montage_segment; inverse: remove_montage_slot. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string yes Name of the slot track to add (e.g. 'UpperBody').

Returns: { montage_path, slot_name, slot_count, slots, present, already_existed, added, saved, save_error, message }

add_motion_warping_component

Additive, idempotent.

Attach a UMotionWarpingComponent to an actor in the editor world. Idempotent: if the actor already has one, returns the existing instance with already_existed:true instead of creating a duplicate. The component is NewObject<UMotionWarpingComponent>(Actor, FName("MotionWarping")) followed by RegisterComponent() so it shows up in GetComponents() immediately. The owning world's level is marked dirty so the editor persists the change on save; no explicit SavePackage call (avoids the noise of saving a transient actor out of an editor world).

Parameter Type Required Description
actor_path string yes Full editor path (e.g. "/Game/Maps/Test.Test:PersistentLevel.ActorName") or short name of the actor.

Returns: { actor_path: string, component_path: string, already_existed: bool }

add_notify_track

Additive.

Add a named notify TRACK to a UAnimSequence (the track itself, not events on it) in an undo transaction and save it. A track of that name already there is a success with already_existed=true and nothing saved; a failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
track_name string yes Notify track name to add.
color string no Optional track color as an [r,g,b] or [r,g,b,a] float array (default white).

Returns: { animation_path, track_name, track_names, track_count, already_existed, saved, save_error, message }

add_pose_search_channel_to_schema

Destructive.

Add a feature channel of channel_type to a UPoseSearchSchema asset or, when a channel of that class is already there, overwrite its Weight instead (already_existed=true); then finalize via PostEditChange and save. Returns schema_cardinality and channel_count; success stays true if the save fails: read saved.

Parameter Type Required Description
schema_path string yes Asset path of the UPoseSearchSchema (required).
channel_type string yes One of 'Pose', 'Trajectory', 'Position', 'Velocity', 'Heading' (required).
weight number no Channel weight (float); default 1.0, which also resets the weight of an existing channel when omitted

Returns: { schema_path, channel_type, channel_class, weight, schema_cardinality, channel_count, added, already_existed, weight_updated, saved, message }

add_pose_search_roled_skeleton

Destructive, idempotent.

Append a roled FPoseSearchRoledSkeleton (Skeleton + optional MirrorDataTable under a Role) to a UPoseSearchSchema for multi-character search. Idempotent on role: if an entry already exists under that role it no-ops (added=false, already_existed=true) instead of pushing a duplicate -- use set_pose_search_schema_skeleton if you actually want to REPLACE the skeleton bound to a role.

Parameter Type Required Description
asset_path string yes Asset path of the target UPoseSearchSchema (required).
skeleton_path string yes Asset path of the USkeleton to bind under the role (required).
role string yes Role name (FName) identifying the entry within a multi-character schema (required; empty = default/None role).
mirror_data_table_path string no Asset path of a UMirrorDataTable to bind under the role (optional; empty = none).

Returns: { asset_path, role, skeleton_path, mirror_data_table_path, roled_skeleton_count, added, already_existed, saved }

add_pose_to_pose_asset

Destructive.

Add a pose copied from the skeleton reference pose to a UPoseAsset under the given name (a pose of that name is replaced) and save it; refused when the asset has no skeleton. Returns num_poses, num_tracks and already_existed. For poses from animation frames use create_pose_asset_from_anim_sequence. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
pose_asset_path string yes Path to the UPoseAsset (e.g. '/Game/MyGame/Pose_Example').
pose_name string yes Name of the pose to add (e.g. 'RefPose_A').

Returns: { pose_asset_path, pose_name, num_poses, num_tracks, present, added, already_existed, saved, save_error, message }

add_retargeter_op

Additive.

Add a retarget op to the op stack of an IK Retargeter asset through its controller (one undo transaction), then save the asset; op_index and op_name are where and how the engine placed it. Default type: FK Chains op. An unknown op type, or a singleton op type the stack already has, is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Path to the UIKRetargeter asset
op_type string no Optional op class path (default "/Script/IKRig.IKRetargetFKChainsOp")

Returns: { asset_path: string, op_index: int, op_name: string, op_type: string, op_count: int, saved: bool, save_error?: string }

add_rig_bone

Additive.

Add a bone to the hierarchy of a Control Rig Blueprint, under parent_name or at the root, then compile and save the blueprint. The engine keeps names unique, so element_key is the name the bone really got. Refused while PIE runs unless force is set.

Parameter Type Required Description
control_rig_path string yes Control Rig Blueprint asset path, e.g. "/Game/Rigs/CR_Hero"
bone_name string yes Name of the new bone
parent_name string no Existing BONE to parent the new bone under; omitted or empty puts it at the root
location array no Optional [x, y, z] world location for the new bone.
rotation array no Optional [pitch, yaw, roll] world rotation for the new bone.
scale array no Optional [x, y, z] scale for the new bone.

Returns: { asset_path: string, element_key: string, element_type: string, parent: string, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, saved: bool, save_error: string }

add_rig_control

Additive.

Add a control to a Control Rig's hierarchy. Control types: Bool, Float, ScaleFloat, Integer, Vector2D, Position, Scale, Rotator, Transform, EulerTransform (defaults to Float).

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
control_name string yes Name of the new control
control_type string no One of: "bool", "float", "scalefloat", "integer", "int", "vector2d", "position", "scale", "rotator", "transform", "eulertransform" (default "float").
parent_name string no Optional existing element name to parent the new control under.
parent_type string no Element type of the parent (default "Null").

Returns: { asset_path: string, element_key: string, element_type: string, control_type: string, control_type_recognized: bool, parent: string, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, saved: bool, save_error: string }

add_rig_null

Additive.

Add a null (space) to a Control Rig's hierarchy.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
null_name string yes Name of the new null
parent_name string no Optional existing element name to parent the new null under.
parent_type string no Element type of the parent ("Bone" default, "Null"/"Control"/etc).
location array no Optional [x, y, z] world location for the new null.

Returns: { asset_path: string, element_key: string, element_type: string, parent: string, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, saved: bool, save_error: string }

Destructive.

Link an output pin to an input pin in the main RigVM graph of a Control Rig Blueprint (URigVMController::AddLink, no undo entry); a link already into that input pin, or out of an execute output pin, is replaced. Pins are NodeName.PinName paths as get_rigvm_graph lists them. A new link is then compiled and saved; a failed link (pins missing, incompatible or already linked) is an error with linked and saved false, and nothing is compiled or saved. Refused during PIE unless force. Add nodes with add_rigvm_node and set unlinked inputs with set_rigvm_pin_default; Blueprint graphs use connect_pins.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
source_pin string yes Output pin path NodeA.PinName
target_pin string yes Input pin path NodeB.PinName

Returns: { asset_path: string, source_pin: string, target_pin: string, linked: bool, link_count: int, saved: bool, save_error: string }

add_rigvm_node

Additive.

Add a rig-unit node to a Control Rig's RigVM solver graph

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
node_type string yes BeginExecution, PrepareForExecution, GetTransform, SetTransform, AimBone, or TwoBoneIKSimple
node_name string no Optional explicit node name
position array no Optional [x, y] editor graph position

Returns: { asset_path: string, node_name: string, node_title: string, node_type: string, pin_count: int, node_count: int, saved: bool, already_exists: bool, save_error: string }

add_skeletal_mesh_lod

Additive.

Append a new LOD entry to a skeletal mesh (clone of LOD 0 build settings).

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
screen_size number no Optional override for ScreenSize.Default of the new LOD (default 0.5)

Returns: { skeletal_mesh_path: string, lod_index: int, lod_count: int, screen_size: float, added: bool, note: string }

add_skeletal_mesh_socket

Additive.

Add a socket on a named bone of a skeletal mesh asset (undoable) and save the mesh. A copy also goes to the mesh's skeleton, which is then saved too; when the skeleton already has a socket of that name, the mesh has no skeleton, or the skeleton is engine content or under a read-only root, no copy is made (added_to_skeleton false) and skeleton_note says why. Errors, writing nothing, when the mesh does not load, the mesh already has a socket of that name, or the bone is missing from the mesh or its skeleton. success is false when a changed package fails to save. Edit existing sockets with set_skeletal_mesh_socket_transform or rename_skeletal_mesh_socket; skeleton-only sockets with add_socket_to_skeleton_asset.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
socket_name string yes Name for the new socket; leading and trailing spaces are trimmed, and a name the mesh already has is an error.
bone_name string yes Name of the bone to attach the socket to; it must exist in the mesh and, when the copy goes to the skeleton, in the skeleton too.
location array no Optional [x, y, z] relative location
rotation array no Optional [pitch, yaw, roll] relative rotation

Returns: { socket_name: string, bone_name: string, socket_count: int, location_x: float, location_y: float, location_z: float, added_to_skeleton: bool, skeleton_path: string, skeleton_note: string?, saved: bool, save_error: string?, skeleton_saved: bool?, skeleton_save_error: string? }

add_socket_to_skeleton_asset

Additive.

Add a socket to a USkeleton asset on a bone (the root by default) at a bone-relative location and rotation, then save; an existing socket of that name is updated in place (already_existed true). A failed save makes success false, with saved=false and save_error. A socket on a skeletal mesh asset (copied to its skeleton when that skeleton is project content): add_skeletal_mesh_socket.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
socket_name string yes Name of the socket; an existing socket with this name is updated instead of duplicated.
bone_name string no Bone to attach the socket to; must exist in the skeleton (default the root bone).
location array no Socket location relative to its bone as [x, y, z] (default 0,0,0)
rotation array no Socket rotation relative to its bone as [pitch, yaw, roll] (default 0,0,0)

Returns: { asset_path: string, socket_name: string, bone_name: string, socket_count: int, added: bool, already_existed: bool, saved: bool, save_error: string? }

add_virtual_bone

Additive.

Add a virtual bone from a source bone to a target bone of a USkeleton asset, named "VB <source>_<target>" by the engine, then save. Bone names are not checked against the skeleton; an existing pair returns that bone with already_exists true. Returns virtual_bone_name and virtual_bone_count.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
source_bone string no Bone the virtual bone starts from (default the first bone, usually the root); not validated.
target_bone string no Bone the virtual bone points to (default the first bone that differs from source_bone); not validated.

Returns: { asset_path: string, virtual_bone_name: string, source_bone: string, target_bone: string, virtual_bone_count: int, saved: bool, already_exists: bool }

add_warp_target_to_component

Destructive, idempotent.

Add (or update in-place) a FMotionWarpingTarget on an existing UMotionWarpingComponent. Exactly one of three payload shapes must be supplied: (1) component_path -> AddOrUpdateWarpTargetFromComponent(name, comp, NAME_None, false, TargetsForwardVector, ZeroVector, ZeroRotator); (2) location + rotation -> AddOrUpdateWarpTargetFromLocationAndRotation; (3) location only -> AddOrUpdateWarpTargetFromLocation. The engine API is idempotent by WarpTargetName (replace-in-place). Marking the owning actor dirty so the editor persists the change.

Parameter Type Required Description
actor_path string yes Full editor path or short name of the actor.
target_name string yes FName identifier for the warp target.
location array no Optional world [x, y, z] location for the target.
rotation array no Optional world [pitch, yaw, roll] rotation in degrees for the target.
component_path string no Optional name of a USceneComponent on the actor to drive the target transform.

Returns: { actor_path: string, target_name: string, warp_target_count: int, source: string, already_existed: bool }

assign_skeletal_mesh_physics_asset

Destructive.

Assign a physics asset to a skeletal mesh (or pass null/empty to clear it).

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
physics_asset_path string no Content path to the physics asset (e.g. /Game/MyPhysAsset); empty string clears the assignment

Returns: { skeletal_mesh_path: string, physics_asset_path: string, assigned: bool, cleared: bool, physics_asset_name: string }

bake_skeletal_mesh_lod

Destructive.

Run the editor's skeletal-mesh reduction pipeline via USkeletalMeshEditorSubsystem::RegenerateLOD.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
new_lod_count number no Target LOD count; <= 0 keeps current and re-runs reduction
regenerate_even_if_imported boolean no bool, regenerate even when LODs are imported (default false)
generate_base_lod boolean no bool, re-derive LOD 0 from source (default false)

Returns: { skeletal_mesh_path: string, old_lod_count: int, new_lod_count: int, lod_count: int, baked: bool, regenerate_even_if_imported: bool, generate_base_lod: bool, bake_warning: string }

build_animation_state_machine

Destructive, idempotent.

Atomic JSON-spec builder for an Animation Blueprint state machine. Builds (or reuses) the state machine, then iterates states, transitions, and per-transition rules in one idempotent call. Replaces 8+ primitive cmds (add_anim_state_machine + add_anim_state + add_anim_transition + set_anim_transition_rule_*) with a single spec. Re-running with the same spec is a no-op (each primitive is internally idempotent: state-by-name, transition-by-source+target). For repeated invocations that change rule shape, the rule is re-applied on the existing transition.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
state_machine_name string yes Target state machine name (created if missing via add_anim_state_machine)
spec object yes JSON describing the graph shape. states: [{name: str, animation?: str (/Game/Anim/Foo — optional; load-bearing for the runtime state asset but NOT created here), loop?: bool, pos?: [x, y]}]. transitions: [{from: str, to: str, blend?: number (= crossfade_duration seconds), bidirectional?: bool, priority_order?: int, rule?: object}]. Each rule variant maps 1:1 to an existing primitive cmd: {type: "automatic", enabled?: bool = false, trigger_time?: number = 0.0} | {type: "bool", variable: str (must exist on the AnimBP), invert?: bool = false} | {type: "comparison", variable: str (must be float/double on the AnimBP), operator: "=="|"!="|">"|"<"|">="|"<=", comparison_value: number}. An absent rule leaves the transition inert (no rule wired).
compile_after boolean no Optional, default false; if true runs compile_anim_blueprint at the end

Returns: { success: bool, anim_blueprint_path: string, machine_name: string, machine_already_existed: bool, states_created: int, states_skipped: int, transitions_created: int, transitions_updated: int, transitions_skipped: int, errors: [string], compiled: bool, compiled_after: bool }

build_pose_search_database_index

Destructive.

Request an async build of the PoseSearch index for a database

Parameter Type Required Description
database_path string yes Asset path of the UPoseSearchDatabase (required).
wait_for_completion boolean no If true, block until the build completes (the engine's FTickableGameObject pumps during the wait).

Returns: { database_path, schema_path, schema_cardinality, animation_asset_count, wait_for_completion, result, success, in_progress, failed, message }

clear_anim_graph_node_pin_binding

Destructive, idempotent.

Remove the property binding from one input pin of an AnimGraph node (inverse of set_anim_graph_node_pin_binding), dropping a stale binding without recreating the node. Returns was_bound, is_bound and cleared; an unbound pin gives cleared=false, not an error. Undoable; saves the AnimBP without recompiling (run compile_anim_blueprint).

Parameter Type Required Description
node_id string yes NodeGuid of the target UAnimGraphNode_* (from get_graph_nodes).
pin_name string yes The bound property/pin name whose binding to clear (e.g. "TransformTrajectory").
anim_blueprint_path string no Path or name of the UAnimBlueprint (aliases: anim_blueprint, blueprint_name).
graph_name string no Target graph (optional; deep-resolved; default the top-level AnimGraph).
anim_blueprint string no Alias of anim_blueprint_path, used only when anim_blueprint_path is absent or empty.
blueprint_name string no Alias of anim_blueprint_path, used only when anim_blueprint_path and anim_blueprint are both absent or empty.

Returns: { node_id, pin_name, was_bound, is_bound, cleared, saved }

clear_anim_transition_rule

Destructive, idempotent.

Remove every rule node from a transition's BoundGraph except the sink.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
machine_name string yes Name of the state machine that owns the transition
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)

Returns: { anim_blueprint_path, machine_name, source_state, target_state, rule_cleared, sink_present, removed_count, remaining_rule_nodes, saved, save_error? }

clear_motion_warping_targets

Destructive, idempotent.

Remove EVERY FMotionWarpingTarget from a UMotionWarpingComponent in one call (there is no bulk engine API; use remove_warp_target for a single named target). Reports previous + new count and the names it removed. Idempotent: clearing an already-empty component returns cleared:false + count:0, not an error.

Parameter Type Required Description
actor_name string yes Engine name of the actor carrying the UMotionWarpingComponent

Returns: { actor_name, cleared, previous_count, new_count, removed_names: [string] }

collapse_montage_segments

Destructive.

Collapse a montage slot track's segments end-to-end (no gaps, order preserved). A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string yes Name of the slot track to collapse.

Returns: { montage_path, slot_name, segment_count, applied, saved, save_error, message }

commit_bone_changes

Destructive.

Mark a skeleton dirty + save it. YOU DO NOT NEED THIS after add_bone / remove_bone / rename_bone / set_bone_transform: each of those already notifies the skeleton's listeners on its own. It exists for the cases those do not cover -- batched mutations made outside the modifier, or an asset import that never went through one (interop with other tools).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
force boolean no If true, mark dirty and save even when no-op (default true)

Returns: { asset_path, committed, force, bone_count, saved, op: "commit_bone_changes" }

compile_anim_blueprint

Destructive.

Compile an Animation Blueprint synchronously and save its package, even when the compile fails; returns status (EBlueprintStatus name), is_up_to_date, has_error and the error and warning messages with their counts. Refused while PIE runs unless force=true. Use get_anim_blueprint_info to inspect without compiling.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset

Returns: { anim_blueprint_path: string, compiled: bool, status: string, is_up_to_date: bool, has_error: bool, error_count: int, warning_count: int, errors: [string], warnings: [string], saved: bool, save_error?: string }

configure_animation_events

Destructive, idempotent.

Switch the tick of a skeletal mesh component in the editor world (or the one the world param picks): despite the name, it only toggles component ticking and tick-when-paused. Returns the previous and current tick flags; nothing is marked dirty or saved.

Parameter Type Required Description
component_name string yes Object name of the USkeletalMeshComponent, e.g. "CharacterMesh0", case-insensitive; the first actor in the world that has one with that name wins
event_settings string yes Tick mode, any case: 'enable' (tick on, not while paused), 'disable' (tick off) or 'custom' (tick on, paused setting kept)
world string no Optional world selector: absent/'editor' (default) | 'pie' (ambiguous: PlayWorld, else the first PIE context) | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'game' (alias of 'pie').

Returns: { component_name: string, requested_settings: string, events_configured: bool, previous_tick_enabled: bool, previous_tick_when_paused: bool, current_tick_enabled: bool, current_tick_when_paused: bool, component_valid: bool, component_class: string, anim_instance_class: string?, has_anim_instance: bool, world: string, world_name: string|null, world_package: string|null, world_type: string|null, net_mode: string|null, pie_instance: number }

connect_anim_graph_pins

Destructive.

Wire two AnimGraph pins (pose links AND data pins) using the graph's OWN schema. USE THIS INSTEAD OF connect_pins inside an AnimGraph: the generic connect_pins uses the K2 schema, which does not understand FPoseLink/FComponentSpacePoseLink pose pins, whereas this goes through UAnimationGraphSchema::TryCreateConnection so pose links connect correctly. Saves the ABP but does NOT recompile it -- run compile_anim_blueprint after your edits for runtime effect.

Parameter Type Required Description
anim_blueprint_path string yes Path/name of the UAnimBlueprint.
source_node_id string yes NodeGuid of the source node.
source_pin string yes Output pin name on the source node.
target_node_id string yes NodeGuid of the target node.
target_pin string yes Input pin name on the target node.
graph_name string no Target graph (optional, default the top-level AnimGraph).

Returns: { connected, source_node_id, target_node_id, saved }

connect_ik_goal_to_solver

Destructive, idempotent.

Connect an existing IK Rig goal to a solver, creating that solver's per-goal effector/settings, in one undo transaction, then save the asset. This is the step that makes get_/set_ik_goal_settings work: a goal added via add_ik_goal is not attached to any solver until connected. Idempotent: re-connecting an already-connected goal is a success with already_connected:true, saved:false and a note, and nothing is saved, avoiding the duplicate the raw engine call would create. An unknown goal or out-of-range solver_index is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
goal_name string yes Name of an existing goal (created via add_ik_goal).
solver_index number yes Index of the solver in the rig's solver stack.

Returns: { ik_rig_path: string, goal_name: string, solver_index: int, connected: bool, already_connected: bool, saved: bool, save_error?: string, note?: string }

copy_anim_graph_nodes

Additive.

Copy a set of AnimGraph nodes (with internal FAnimNode settings + intra-selection wiring) between graphs. Equivalent to the editor's copy/paste: preserves each node's runtime struct properties and any links WITHIN the copied set (links to nodes outside the selection are dropped). Saves the destination ABP but does NOT recompile it -- run compile_anim_blueprint after your edits for runtime effect.

Parameter Type Required Description
src_anim_blueprint_path string yes Source UAnimBlueprint path/name.
node_ids array yes Array of source NodeGuid strings (from get_graph_nodes) to copy.
dst_anim_blueprint_path string yes Destination UAnimBlueprint path/name.
src_graph string no Source graph name (optional, default the top-level AnimGraph).
dst_graph string no Destination graph name (optional, default the top-level AnimGraph).
offset_x number no X offset added to every pasted node (optional, default 0).
offset_y number no Y offset added to every pasted node (optional, default 0).

Returns: { copied_count, id_map:{old->new}, imported_nodes[], missing_node_ids[], saved }

create_anim_blueprint

Additive.

Create an Animation Blueprint (parent UAnimInstance) for a skeleton at package_path/name with the editor factory, compile it and save it; an existing Animation Blueprint at that path is returned unchanged (already_existed=true). Refused while PIE runs unless force=true. Returns asset_path, generated_class and target_skeleton_set.

Parameter Type Required Description
package_path string yes UE content folder, e.g. /Game/MyGame
name string yes Asset name for the new Animation Blueprint
skeleton_path string no Optional skeleton path; defaults to /Engine/EngineMeshes/SkeletalCube_Skeleton

Returns: { asset_path: string, name: string, skeleton_path: string, generated_class: string, is_anim_instance: bool, target_skeleton_set: bool, created: bool, already_existed: bool, saved: bool, save_error?: string }

create_anim_composite

Additive, idempotent.

Create and save a UAnimComposite asset bound to a USkeleton, under /Game. Idempotent: a UAnimComposite already at that path is returned unchanged with already_existed=true and saved=false, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
name string yes Asset name (e.g. 'AnimComp_Example').
package_path string no Target content package path where the asset is created (default /Game/Animation)
skeleton_path string no Asset path of the target Skeleton

Returns: { name, package_path, asset_path, composite_path, skeleton, num_segments, created, already_existed, saved, save_error, message }

create_anim_montage

Additive, idempotent.

Create and save an empty-but-valid UAnimMontage asset under /Game. Idempotent: a UAnimMontage already at that path is returned unchanged with already_existed=true and saved=false, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
name string yes Asset name (e.g. 'AM_Example').
package_path string no Target content package path where the asset is created (default /Game/Animation)
slot_name string no Montage slot name (e.g. DefaultSlot)
skeleton_path string no Asset path of the target Skeleton

Returns: { name, package_path, asset_path, montage_path, skeleton_path, slot_names, slot_name, slot_count, section_count, created, already_existed, saved, save_error, message }

create_anim_sequence

Additive, idempotent.

Create a UAnimSequence at package_path/anim_name bound to the USkeleton at skeleton_path (default the engine SkeletalCube_Skeleton) and save it; its data model gets frame_rate rounded to whole fps and round(length_seconds * fps) frames, but no bone tracks or curves. Idempotent: a UAnimSequence already at that path is returned unchanged (already_existed=true, saved=false, length and rate not applied) and nothing is saved; another asset class there or an unknown skeleton is an error. A failed save makes success false, with saved=false and save_error, and the new asset stays in memory only. Fill it with add_anim_bone_track or add_anim_float_curve; inspect it with get_anim_sequence_info.

Parameter Type Required Description
anim_name string yes Asset name (no path).
package_path string no Target content package path where the asset is created (default /Game/MCP)
length_seconds number no Sequence length in seconds (default 1.0)
frame_rate number no Sampling frame rate in fps (default 30)
skeleton_path string no Asset path of the target Skeleton

Returns: { anim_sequence_path, anim_name, skeleton, play_length, frame_rate, num_frames, success, saved, save_error, already_existed, message }

create_blend_space

Additive, idempotent.

Create and save a UBlendSpace (or UBlendSpace1D) asset under /Game. Idempotent: a UBlendSpace already at that path is returned unchanged with already_existed=true and saved=false, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
name string yes Asset name (e.g. 'BS_Example').
package_path string no Target content package path where the asset is created (default /Game/Animation)
is_1d boolean no If true create a 1D BlendSpace, else 2D (default false)
axis_name string no X-axis display name (default 'Speed')
axis_min number no X-axis minimum value (default 0)
axis_max number no X-axis maximum value (default 100)
skeleton_path string no Asset path of the target Skeleton

Returns: { name, package_path, asset_path, blend_space_path, is_1d, skeleton_path, axis_name, axis_min, axis_max, axis_grid_num, sample_count, created, already_existed, saved, save_error, message }

create_control_rig_blueprint

Additive, idempotent.

Create a Control Rig Blueprint (non-modular) at package_path/name with UControlRigBlueprintFactory, compile it and save it. Idempotent: an existing Control Rig Blueprint there is returned unchanged (already_existed=true). Returns asset_path, generated_class, is_control_rig and saved; refused while PIE runs unless force is set.

Parameter Type Required Description
package_path string yes Content folder starting with "/", e.g. "/Game/Rigs"; a trailing slash is ignored
name string yes Asset name of the Control Rig Blueprint, e.g. "CR_Hero"

Returns: { asset_path: string, name: string, generated_class: string, is_control_rig: bool, created: bool, already_existed: bool, saved: bool, save_error: string }

create_editable_skeletal_mesh

Additive, idempotent.

Duplicate a skeletal mesh (default /Engine/EngineMeshes/SkeletalCube) to package_path/skeletal_mesh_name in the project's content so it can be edited, creating the folder if needed. The copy keeps the source's skeleton (create_editable_skeleton makes a /Game skeleton) and is saved only when source control is enabled, otherwise follow with save_asset. Idempotent: a skeletal mesh already at that path is returned with created=false; any other asset there is an error. A source_mesh that is not a skeletal mesh is an error, and so is a destination that is engine content, under a read-only root or under no mounted root. duplicate_asset copies other asset types.

Parameter Type Required Description
package_path string yes Destination folder: a long package path used as given (/Game, /Game/MyGame or a project plugin mount), or a relative folder taken under /Game.
skeletal_mesh_name string yes Name for the new skeletal mesh asset
source_mesh string no Content path to source mesh to duplicate (default /Engine/EngineMeshes/SkeletalCube)

Returns: { asset_path: string, skeletal_mesh_name: string, source_mesh: string, created: bool }

create_editable_skeleton

Additive.

Create an editable /Game skeleton by duplicating an engine skeleton

Parameter Type Required Description
package_path string yes UE content folder, e.g. /Game/MyGame
name string yes Asset name for the new skeleton
source_skeleton string no Engine skeleton to duplicate, defaults to SkeletalCube_Skeleton

Returns: { asset_path: string, name: string, source: string, bone_count: int, created: bool, saved: bool, save_error: string }

create_ik_retargeter

Additive.

Create and save a UIKRetargeter asset wiring source + target IK Rigs. An existing retargeter at that path is rewired and saved when either rig differs; when it already uses both rigs nothing changes, nothing is saved (saved=false) and a note says so. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
package_path string yes UE content folder, e.g. /Game/MyGame
name string yes Asset name for the new IK Retargeter
source_ik_rig_path string yes Path to the source UIKRigDefinition (copy FROM)
target_ik_rig_path string yes Path to the target UIKRigDefinition (copy TO)

Returns: { asset_path: string, name: string, source_ik_rig: string, target_ik_rig: string, created: bool, already_existed: bool, saved: bool, save_error?: string, note?: string }

create_ik_rig

Additive, idempotent.

Create and save a UIKRigDefinition asset and set its source skeletal mesh. Idempotent: an existing rig is loaded and only given the mesh, then saved, when it has another one; when it already has that mesh, or the mesh does not load or the engine refuses it (skeletal_mesh_set false), nothing changes, nothing is saved and a note says why. The default skeletal_mesh_path is /Engine/EngineMeshes/SkeletalCube. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
package_path string yes UE content folder, e.g. /Game/MyGame
name string yes Asset name for the new IK Rig
skeletal_mesh_path string no Optional USkeletalMesh asset path; defaults to /Engine/EngineMeshes/SkeletalCube

Returns: { asset_path: string, name: string, skeletal_mesh: string, skeletal_mesh_set: bool, created: bool, already_existed: bool, saved: bool, save_error?: string, note?: string }

create_pose_asset

Additive, idempotent.

Create an empty UPoseAsset (no poses) at package_path/name, bound to the USkeleton at skeleton_path (default the engine SkeletalCube_Skeleton), and save it; no undo transaction. Idempotent: a UPoseAsset already at that path is returned untouched with already_existed=true and saved=false, even when bound to another skeleton, and nothing is saved. A name taken by another asset class or an unknown skeleton is an error, and a failed save makes success false, with saved=false and save_error. Add poses with add_pose_to_pose_asset; to build one from animation frames use create_pose_asset_from_anim_sequence.

Parameter Type Required Description
name string yes Asset name (e.g. 'Pose_Example').
package_path string no Target content package path where the asset is created (default /Game/Animation)
skeleton_path string no Asset path of the target Skeleton

Returns: { name, package_path, asset_path, pose_asset_path, skeleton, num_poses, created, already_existed, saved, save_error, message }

create_pose_asset_from_anim_sequence

Additive, idempotent.

Create a UPoseAsset built from a real UAnimSequence's frames and save it. Idempotent: a UPoseAsset already at that path is returned unchanged with already_existed=true and saved=false, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
pose_asset_name string yes Name for the new UPoseAsset.
anim_sequence_path string yes Object path of the source UAnimSequence.
package_path string no Target content package path where the asset is created (default /Game/Animation)

Returns: { pose_asset_path, pose_asset_name, source_anim, skeleton_path, num_poses, created, success, already_existed, saved, save_error }

create_pose_search_database

Additive.

Create and save a UPoseSearchDatabase data asset bound to a UPoseSearchSchema

Parameter Type Required Description
name string yes Asset name (e.g. 'PoseSearchDatabase_Example').
schema_path string yes Asset path of an existing UPoseSearchSchema (required).
package_path string no Target content package path (default /Game/MCP).

Returns: { name, package_path, asset_path, database_path, schema_path, schema_cardinality, animation_asset_count, created, already_existed, saved, message }

create_pose_search_schema

Additive.

Create and save a UPoseSearchSchema data asset bound to a USkeleton

Parameter Type Required Description
name string yes Asset name (e.g. 'PoseSearchSchema_Example').
package_path string no Target content package path (default /Game/MCP).
skeleton_path string no Asset path of the USkeleton (default /Engine/EngineMeshes/SkeletalCube_Skeleton).
sample_rate number no Schema SampleRate (int, ClampMin=1, ClampMax=240; default 30).

Returns: { name, package_path, asset_path, schema_path, skeleton_path, sample_rate, schema_cardinality, channel_count, created, already_existed, saved, message }

create_retarget_pose

Additive.

Create a new retarget pose for editing in an IK Retargeter through its controller, then save the asset. The engine makes the name unique, so read pose_name back. The pose is set as the current pose after creation, ready for bone rotation edits via set_retarget_pose_bone_rotation. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Content path to the IK Retargeter asset.
pose_name string yes Name for the new retarget pose
source_or_target string no Optional "Source" or "Target" scope; defaults to "Target"

Returns: { ik_retargeter_path: string, pose_name: string, source_or_target: string, success: bool, saved: bool, save_error?: string }

create_skeletal_mesh_morph_target

Additive, idempotent.

Register a new morph target on a skeletal mesh asset in memory only, for the rest of the editor session: it is never saved (persisted_to_disk is always false), and a mesh rebuild or reload drops any morph the mesh's imported source data does not contain. Each LOD gets one tiny seed delta on vertex 0 so the morph counts as valid; write real deltas with set_morph_target_deltas. Marks the mesh dirty. Idempotent: an existing name returns created=false and already_exists=true.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset (e.g. /Game/MyGame/SKM_Example)
morph_target_name string yes Name for the new morph target

Returns: { morph_target_name: string, skeletal_mesh_path: string, created: bool, persisted_to_disk: bool, total_morph_targets: int, note: string }

delete_montage_section

Destructive.

Delete the first composite section with that name (FName match, case ignored) from a UAnimMontage and save it; a missing name is a success with removed=false and nothing saved. Links from other sections (NextSectionName) are not updated. Returns removed_index, section_count and the remaining sections. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
section_name string yes Name of the FCompositeSection to remove; compared as an FName, so case is ignored.

Returns: { montage_path, section_name, removed_index?, already_existed, removed, section_count, sections[], saved, save_error, message }

disconnect_anim_graph_pins

Destructive.

Break AnimGraph pin links: a specific source->target link, or ALL links on the source pin. Use the specific form to insert a node into an existing chain (break A->B, then wire A->N and N->B). Saves the ABP but does NOT recompile it -- run compile_anim_blueprint after your edits for runtime effect.

Parameter Type Required Description
anim_blueprint_path string yes Path/name of the UAnimBlueprint.
source_node_id string yes NodeGuid of the source node.
source_pin string yes Pin name on the source node.
target_node_id string no NodeGuid of the target node (optional; if omitted, breaks ALL links on source_pin).
target_pin string no Pin name on the target node (optional; required if target_node_id is given).
graph_name string no Target graph (optional, default the top-level AnimGraph).

Returns: { disconnected, broke_all, source_node_id, source_pin, saved }

disconnect_ik_goal_from_solver

Destructive, idempotent.

Disconnect a goal from a solver, removing that solver's per-goal effector/settings, through the IK Rig controller (one undo transaction), then save the asset. Inverse of connect_ik_goal_to_solver. Idempotent: disconnecting a goal that isn't connected is a success with was_connected:false, saved:false and a note, and nothing is saved. An out-of-range solver_index is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
goal_name string yes Name of the goal.
solver_index number yes Index of the solver in the rig's solver stack.

Returns: { ik_rig_path: string, goal_name: string, solver_index: int, connected: bool, was_connected: bool, saved: bool, save_error?: string, note?: string }

duplicate_anim_sequence

Additive.

Copy a UAnimSequence to a new asset package_path/new_name with the same skeleton (StaticDuplicateObject) and save it; a name already taken by any asset, in memory or on disk (the source included), is refused and nothing is touched. A failed save makes success false, with saved=false and save_error, and the copy stays in memory only. Returns duplicate_path and duplicate_class. For other asset types use duplicate_asset.

Parameter Type Required Description
source_path string yes Asset path of the source UAnimSequence.
new_name string yes Name of the new duplicate.
package_path string no Target content package path where the asset is created (default /Game/MCP)

Returns: { source_path, duplicate_path, duplicate_class, saved, save_error }

edit_anim_notify

Destructive.

Edit an existing FAnimNotifyEvent on a UAnimSequence (identified by name + occurrence) in an undo transaction and save it. No editable field is an error before anything changes; edits that leave the event as it is are a success with applied=false, applied_count 0 and saved=false, and the sequence is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
notify_name string yes NotifyName of the event to edit (FName). Names are not unique; see occurrence_index.
occurrence_index number no Zero-based index AMONG events sharing notify_name (default 0)
time number no New trigger time in seconds (FAnimNotifyEvent::SetTime). Optional.
duration number no New duration in seconds (FAnimNotifyEvent::SetDuration; meaningful for notify-state). Optional.
trigger_chance number no New NotifyTriggerChance in [0,1]. Optional.
trigger_weight_threshold number no New TriggerWeightThreshold. Optional.
montage_tick_type string no New MontageTickType: 'Queued' or 'BranchingPoint'. Optional.
track_index number no New TrackIndex (zero-based). Optional.

Returns: { animation_path, notify_name, occurrence_index, matched_count, notify, applied_count, applied, saved, save_error, message }

edit_blendspace_sample

Destructive.

Edit a blend sample (by index): blend value and/or animation. At least one of blend_value / animation_path is required; both are individually optional so you can retime a sample without touching its animation, or swap the animation without moving it. A sample that already has those values is a success with value_edited=false, animation_replaced=false and saved=false, and the blend space is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
blendspace_path string yes Full asset path to the UBlendSpace.
index number yes Index of the sample to edit.
blend_value any no New blend position: single number (1D) or array of up to 3 numbers (optional).
animation_path string no Full asset path to a UAnimSequence to replace the sample's animation (optional).

Returns: { blendspace_path, index, value_edited, animation_replaced, num_samples, samples, saved, save_error, message }

evaluate_pose_search_query

Read-only.

Run a live motion-matching query on a PIE/Game actor against a loaded UPoseSearchDatabase (UPoseSearchLibrary::MotionMatch) and return the best-match asset + search cost, plus the query trajectory. Diagnoses why a chooser returns null. Best-effort: per-channel cost is not exposed by the BlueprintPure result.

Parameter Type Required Description
database_path string yes UPoseSearchDatabase asset path to search (required).
world string no Which world to resolve: absent (default) = prefer the live PIE/Game world | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'pie'/'game' force the live session (errors if none running) | 'editor' forces the editor world.
actor_name string no Actor name or label whose AnimInstance drives the query. Omitted = the first player controller's pawn.
pose_history_name string no Tag of the PoseSearchHistoryCollector anim-graph node used to build the query (default 'PoseHistory').
max_trajectory_samples number no Cap on emitted query trajectory samples (<=0 = all; default 0).

Returns: { world_mode, actor_name, actor_resolved, anim_instance_class, pose_history_name, pose_history_found, database_path, query_trajectory_samples[], trajectory_sample_count, is_trajectory_empty, has_match, best_match_asset, best_match_database, best_cost, selected_time, is_continuing_pose_search, wanted_play_rate, is_mirrored, is_looping, per_channel_cost[], note, world_name, world_package, world_type, net_mode, pie_instance }

get_active_montages

Read-only.

Report the AnimMontage(s) currently playing on a live PIE actor's skeletal mesh (useful for blend-out debugging).

Parameter Type Required Description
actor string yes Name, label, or full path of a live actor (resolved in the PIE world by default).
component string no Optional skeletal mesh component name; defaults to the actor's primary USkeletalMeshComponent.
world string no Which world to resolve the actor in: absent/'pie' (default, ambiguous: PlayWorld, else the first PIE context) | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'editor' | 'game' (alias of 'pie').

Returns: { actor, actor_name, component, world, anim_instance_class, montage_count, is_any_montage_playing, top_montage_id, enumeration, montages: [{ index, montage_path, montage_name, is_top, current_section, position, normalized_position, length, play_rate, blend_weight, desired_weight, blend_time, is_playing, is_active, instance_id, slots:[string] }], world_name: string|null, world_package: string|null, world_type: string|null, net_mode: string|null, pie_instance: number }

get_anim_asset_info

Read-only.

Load any animation asset and report its class, skeleton and asset_type (montage, composite, pose, sequence, blendspace or animation_asset) plus the counts of that type: sections/slots/notifies, segments, poses/tracks/curves, length, samples. Read-only; get_montage_info, get_anim_sequence_info and get_blendspace_samples give detail.

Parameter Type Required Description
asset_path string yes Path to the animation asset (UAnimMontage, UAnimComposite, UPoseAsset, UAnimSequence, or UBlendSpace)

Returns: { asset_path, class, skeleton, num_segments, num_poses, section_count, slot_count, notify_count, sequence_length, rate_scale, num_tracks, num_curves, sample_count, asset_type }

get_anim_blueprint_info

Read-only.

Read an Animation Blueprint without compiling or changing it: target skeleton, parent and generated class, is_anim_instance, is_template, graph_count, and the state machines of its top-level AnimGraph with their state counts (conduits not counted). list_anim_state_machines scans every function graph.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset

Returns: { asset_path: string, target_skeleton: string, target_skeleton_set: bool, parent_class: string, generated_class: string, is_anim_instance: bool, is_template: bool, graph_count: int, state_machine_count: int, state_machines: [{ name: string, state_count: int }] }

get_anim_curve_data

Read-only.

Read one curve of a UAnimSequence without changing it: for a float curve its flags, num_keys and keys as time/value pairs; for a transform curve only flags and a summed num_keys. found=false (still a success) when the curve does not exist.

Parameter Type Required Description
anim_sequence_path string yes Full asset path to the UAnimSequence
curve_name string yes Name of the curve to read
curve_type string no Curve type to target: float (default) or transform

Returns: { anim_sequence_path, curve_name, curve_type, found, num_keys, flags, time, value, keys }

get_anim_curve_names

Read-only.

List the bone tracks, float curves, and transform curves on a UAnimSequence

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.

Returns: { sequence_path, bone_track_count, float_curve_count, transform_curve_count, bone_tracks, float_curves, transform_curves }

get_anim_graph_node_properties

Read-only.

Read the internal FAnimNode struct of an AnimGraphNode as typed JSON (the runtime settings, not the K2 pin surface get_graph_nodes reports). Use it to mirror a reference ABP's settings when grafting nodes: Pose History PoseCount/CollectorName, Slot SlotName, blend params...

Parameter Type Required Description
anim_blueprint_path string yes Path/name of the UAnimBlueprint.
node_id string yes NodeGuid of the target AnimGraphNode.
graph_name string no Target graph (optional, default the top-level AnimGraph).

Returns: { node_id, node_class, node_struct, node_properties:{...} }

get_anim_notifies

Read-only.

List the notify events of a UAnimSequence without changing it: name, trigger time, duration, track_index and the notify_class or notify_state_class of each, plus num_notifies. Use get_notify_track_names for track names and get_montage_info for the notifies of a montage.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.

Returns: { name, time, duration, track_index, notify_class, notify_state_class, animation_path, num_notifies, notifies }

get_anim_sequence_info

Read-only.

Read a UAnimSequence without changing it: skeleton, play_length, frame_rate, num_frames, bone track and float curve counts from its data model, num_sync_markers, enable_root_motion, retarget_source and ref_pose_seq. Use get_anim_curve_names for the track and curve names.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.

Returns: { anim_sequence_path, skeleton, play_length, frame_rate, num_frames, num_bone_tracks, num_float_curves, num_sync_markers, enable_root_motion, success }

get_anim_state_machine_info

Read-only.

Read the nodes of one state machine of an Animation Blueprint without compiling or changing it: state_count counts the states, conduit_count the conduits and transition_count the transitions; states lists every state, conduit and alias node with its kind (class name) and graph position, transitions excluded.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
state_machine_name string yes Name of the state machine

Returns: { state_machine, state_count, conduit_count, transition_count, states:[{name,kind,x,y}] }

get_animation_blueprint_info

Read-only.

Find an Animation Blueprint in the Asset Registry and report its object path, class, package, is_loaded and the size and timestamp of its .uasset on disk. With load_full_data it also loads the asset and adds the target skeleton, its bone count, the generated class and is_abstract. Read-only. blueprint_name takes an object path, a package path or a short name searched under /Game (the first match when several share it); no match is an error. For parent class, graphs and state machines use get_anim_blueprint_info.

Parameter Type Required Description
blueprint_name string yes Name or full path of the Animation Blueprint asset
load_full_data boolean no When true, loads the asset and reports target skeleton, generated class, and bone count (optional, default false)

Returns: { blueprint_name: string, blueprint_path: string, blueprint_class: string, package_name: string, is_loaded: bool, file_size_bytes: number, file_size_kb: number, file_size_mb: number, last_modified: string, loaded_successfully: bool?, is_valid: bool?, target_skeleton: string?, skeleton_bone_count: number?, has_target_skeleton: bool?, generated_class: string?, is_abstract: bool?, load_error: string? }

get_blendspace_samples

Read-only.

Read every sample of a UBlendSpace or UBlendSpace1D in index order (animation path, blend_x/blend_y/blend_z, rate_scale) plus num_samples and the per-axis input smoothing under interpolation. Read-only; change samples with add_blendspace_sample, edit_blendspace_sample or remove_blendspace_sample.

Parameter Type Required Description
blendspace_path string yes Full asset path to the UBlendSpace.

Returns: { animation, blend_x, blend_y, blend_z, rate_scale, blendspace_path, num_samples, samples }

get_bone_transform

Read-only.

Read the LOCAL reference-pose transform of a bone (parent-relative, not component space). Exact inverse of set_bone_transform: it reads the same raw ref-pose array that one writes, so a read-modify-write round trip is lossless.

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
bone_name string yes Bone to read

Returns: { asset_path, bone_name, bone_index, found, location:[x,y,z], rotation:[p,y,r], scale:[x,y,z], bone_count, op: "get_bone_transform" }

get_ik_bone_settings

Read-only.

Get bone-specific settings for a bone within a solver. FullBodyIK returns snake_case keys (rotation/position stiffness, axis limits Free/Limited/Locked, min/max angles, preferred angles); StretchLimb (the only other solver with per-bone settings) is serialized generically (camelCase: squashDirection vector). Only FullBodyIK and StretchLimb support per-bone settings; others return a note.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver.
bone_name string yes Name of the bone to query settings for.

Returns: { ik_rig_path: string, solver_index: int, bone_name: string, settings: object }

get_ik_goal_settings

Read-only.

Get goal-specific settings for a goal connected to a solver. FullBodyIK returns snake_case keys (chain_depth, strength_alpha, pull_chain_alpha, pin_rotation); BodyMover (the only other solver with per-goal settings) is serialized generically (camelCase: influenceMultiplier, boneName). The goal must be connected to the solver first (connect_ik_goal_to_solver), else a note explains that. Solvers without per-goal settings return a note.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver.
goal_name string yes Name of the goal to query settings for.

Returns: { ik_rig_path: string, solver_index: int, goal_name: string, settings: object }

get_ik_retarget_chain_details

Read-only.

Get detailed info about a retarget chain: start/end bones, goal name.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
chain_name string yes Name of the retarget chain

Returns: { asset_path: string, chain_name: string, found: bool, start_bone: string, end_bone: string, goal_name: string }

get_ik_retargeter_info

Read-only.

Read the global structure of an IK Retargeter via its controller: source/target IK Rigs, the op-stack, per-op chain mappings, and the current poses. Read-only. Chain mappings are per-op in 5.6+ (there is no global RootSettings on the UIKRetargeter in 5.8; detailed root/global settings live inside the ops themselves).

Parameter Type Required Description
ik_retargeter_path string yes Content path to the UIKRetargeter asset.

Returns: { asset_path: string, source_ik_rig: string, target_ik_rig: string, op_count: int, ops: [{ op_index, op_name, enabled, parent_op, op_type }], chain_mappings: [{ op_name, target_chain, source_chain }], source: { current_pose, pelvis_bone, root_offset: {x,y,z} }, target: { current_pose, pelvis_bone, root_offset: {x,y,z} } }

get_ik_rig_info

Read-only.

Read an IK Rig asset: its skeletal mesh, the number of solvers, and every goal and retarget chain. Read-only; solvers are counted, not listed: get_ik_solver_details reads one by index.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset

Returns: { asset_path: string, solver_count: int, goal_count: int, retarget_chain_count: int, skeletal_mesh: string, goals: [{ goal_name, bone_name }], chains: [{ chain_name, start_bone, end_bone, goal_name }] }

get_ik_solver_bones

Read-only.

Read the start and end bone of one solver in an IK Rig asset, chosen by its 0-based position in the solver stack. Read-only; an out-of-range solver_index or a rig that does not load is an error. A solver type without an end bone returns "None" as end_bone. get_ik_solver_details adds the type, enabled state and connected goals; set_ik_solver_bones writes the bones.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_index number yes 0-based solver index

Returns: { asset_path: string, solver_index: int, start_bone: string, end_bone: string }

get_ik_solver_details

Read-only.

Read one solver of an IK Rig asset by its 0-based stack index: solver_type (the solver struct name, e.g. "IKRigFullBodyIKSolver"), unique_name ("<index+1> - <display name>"), enabled, start and end bone, and the names of the goals connected to it. Read-only; an out-of-range solver_index or a rig that does not load is an error. Use get_ik_solver_bones for just the bones, get_ik_solver_settings for its tunables, get_ik_rig_info for the goals and chains of the whole rig.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_index number yes 0-based solver index

Returns: { asset_path: string, solver_index: int, solver_type: string, unique_name: string, enabled: bool, start_bone: string, end_bone: string, connected_goal_count: int, connected_goals: [string] }

get_ik_solver_settings

Read-only.

Get detailed solver-specific settings for a solver in an IK Rig. Returns all solver-level parameters for the specified solver. FullBodyIK uses curated snake_case keys; every other solver type (Limb/Pole/BodyMover/SetTransform/StretchLimb) is serialized generically from its live settings struct (camelCase property names).

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver in the rig's solver stack.

Returns: { ik_rig_path: string, solver_index: int, solver_type: string, settings: object }

get_montage_info

Read-only.

Read a UAnimMontage without changing it: skeleton_path, section, slot and notify counts with their name lists, blend_in/blend_out times, blend modes, enable_auto_blend_out, blend_out_trigger_time, sync_group and sync_slot_index. Change them with set_montage_blend_times or set_montage_properties.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').

Returns: { montage_path, skeleton_path, section_count, slot_count, notify_count, sections, slots, notifies, blend_in, blend_out, blend_mode_in, blend_mode_out, enable_auto_blend_out, blend_out_trigger_time, sync_group, sync_slot_index }

get_morph_target_deltas

Read-only.

Read back the vertex deltas of a morph target on a specific LOD (inverse of set_morph_target_deltas).

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
morph_target_name string yes Name of the morph target to read
lod_index number no LOD index to read (default 0)
max_deltas number no Optional cap on how many deltas to return (default 5000); the response is honestly marked truncated if the LOD has more

Returns: { morph_target_name: string, lod_index: int, total_deltas: int, returned_deltas: int, truncated: bool, deltas: [{vertex_index, position_delta:{x,y,z}, normal_delta:{x,y,z}}] }

get_notify_track_names

Read-only.

List the notify track names of a UAnimSequence in track order (UAnimationBlueprintLibrary::GetAnimationNotifyTrackNames) without changing it; returns track_names and track_count. Use get_anim_notifies for the events and add_notify_track or remove_notify_track to edit tracks.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.

Returns: { animation_path, track_names, track_count }

get_pose_search_runtime_state

Read-only.

Read-only report of the live motion-matching state on a PIE/Game actor (why a chooser returns null): its AnimInstance, its MotionTrajectory samples, whether a PoseSearchHistoryCollector node named pose_history_name exists, and (optionally) the target database's schema/channels.

Parameter Type Required Description
world string no Which world to resolve: absent (default) = prefer the live PIE/Game world, else the editor world | 'server' (the PIE world with authority -- what a server-driven character lives in) | 'client' | 'pie:N' | 'pie'/'game' force the live session (errors if none running) | 'editor' forces the editor world.
actor_name string no Actor name or label to inspect. Omitted = the first player controller's pawn (the locally-controlled character).
pose_history_name string no Tag of the PoseSearchHistoryCollector anim-graph node to look up on the AnimInstance (default 'PoseHistory'). A missing node is the usual reason a query builds an empty pose portion.
database_path string no Optional UPoseSearchDatabase asset path; when given, its schema_path/schema_cardinality/channels/animation_asset_count are included.
max_trajectory_samples number no Cap on emitted trajectory samples (<=0 = all; default 0).

Returns: { world_mode, actor_name, actor_resolved, actor_resolved_by, skeletal_mesh_component, anim_instance_class, pose_history_name, pose_history_found, trajectory:{found,component,property,sample_count,is_trajectory_empty,samples[]}, is_trajectory_empty, database?:{database_path,schema_path,schema_cardinality,channel_count,channels[],animation_asset_count}, note, world_name, world_package, world_type, net_mode, pie_instance }

get_retarget_poses

Read-only.

List every retarget pose (source and target) of an IK Retargeter with its root translation delta and per-bone rotation deltas. Read-only. Bone rotation deltas use the same quat keys as set_retarget_pose_bone_rotation (quat_x, quat_y, quat_z, quat_w).

Parameter Type Required Description
ik_retargeter_path string yes Content path to the UIKRetargeter asset.

Returns: { asset_path: string, source: [{ name, is_current, root_translation_offset: {x,y,z}, bone_rotations: [{ bone, quat_x, quat_y, quat_z, quat_w }] }], target: [ ... same shape ... ] }

get_retargeter_op_info

Read-only.

Read one retarget op's live settings struct from an IK Retargeter by op index. Read-only (no save). The settings keys are the op settings UPROPERTY names with only the first character lower-cased (FJsonObjectConverter convention), e.g. FK Chains op exposes lODThreshold, bEnabled, bDebugDraw, chainDrawSize, bDrawChainLines. op_type is the settings struct name (e.g. IKRetargetFKChainsOpSettings), which differs from get_ik_retargeter_info.ops[].op_type (the op struct name).

Parameter Type Required Description
ik_retargeter_path string yes Content path to the UIKRetargeter asset.
op_index number yes 0-based index of the op in the retargeter's op stack.

Returns: { asset_path: string, op_index: int, op_name: string, op_type: string, enabled: bool, settings: object }

get_rig_control_value

Read-only.

Read a Control Rig control's current value (typed per ERigControlType) and its limit min/max. Round-trips set_rig_control_value / set_rig_control_limits.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset.
control_name string yes Name of an existing control element.

Returns: { asset_path: string, control_name: string, control_type: string, value: any, limit_enabled: bool, min: number?, max: number? }

get_rig_hierarchy

Read-only.

Read every element of a Control Rig Blueprint hierarchy in traversal order as elements [{name, type}], plus bone_count, null_count, control_count, curve_count, other_count (sockets, connectors and the rest) and total. Read-only: nothing is compiled or saved.

Parameter Type Required Description
control_rig_path string yes Control Rig Blueprint asset path, e.g. "/Game/Rigs/CR_Hero"

Returns: { asset_path: string, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, elements: [{name, type}] }

get_rigvm_graph

Read-only.

Read a Control Rig's RigVM solver graph nodes pins and links

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset

Returns: { asset_path: string, nodes: [object], node_count: int, link_count: int }

get_skeletal_mesh_info

Read-only.

Get detailed info about a skeletal mesh: LODs, materials, morph targets, sockets, bones.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset (e.g. /Game/MyMesh)

Returns: { skeletal_mesh_path: string, num_lods: int, num_materials: int, num_morph_targets: int, num_sockets: int, num_bones: int, bone_names: [string], lod_info: [{lod_index, num_verts, num_sections}] }

get_skeletal_mesh_lod_info

Read-only.

Get per-LOD build settings and screen size for a skeletal mesh.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number no LOD index to query (default 0)

Returns: { lod_index: int, screen_size: float, num_material_map_entries: int, allow_cpu_access: bool, build_settings: {...} }

get_skeletal_mesh_material_slots

Read-only.

Get all material slot info for a skeletal mesh: slot names, material paths.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset

Returns: { skeletal_mesh_path: string, num_material_slots: int, material_slots: [{slot_index, slot_name, material_path, overlay_material_path}] }

get_skeletal_mesh_morph_targets

Read-only.

Get all morph targets on a skeletal mesh with delta counts.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset

Returns: { skeletal_mesh_path: string, count: int, morph_targets: [{name, has_valid_data, num_deltas_lod0}] }

get_skeletal_mesh_section_info

Read-only.

Get section data for a LOD: material index, triangle count, vertex count, flags.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number no LOD index to query (default 0)

Returns: { skeletal_mesh_path: string, lod_index: int, num_sections: int, lod_num_vertices: int, sections: [{section_index, material_index, num_triangles, num_vertices, recompute_tangent, cast_shadow, visible_in_ray_tracing, disabled, bone_map_count}] }

get_skeleton_asset_info

Read-only.

Read a summary of a USkeleton asset: bone_count, the first 10 bone names only, every virtual bone with its source and target, slot_group_count and socket_count. Read-only; for up to 100 bone names use get_skeleton_info with load_full_data true.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".

Returns: { asset_path: string, bone_count: int, bones: [string], virtual_bone_count: int, virtual_bone_names: [string], virtual_bones: [{ name: string, source_bone: string, target_bone: string }], slot_group_count: int, socket_count: int }

get_skeleton_info

Read-only.

Retrieve metadata and optional full bone/socket/slot data for a Skeleton asset

Parameter Type Required Description
skeleton_name string yes Object path, package path, or bare short name of the Skeleton asset (resolved via mcp_common::ResolveAssetFlexible; an ambiguous short name errors out listing every candidate instead of picking one silently)
load_full_data boolean no When true, loads the asset and reports bone list (capped at 100), sockets, and slot groups (optional, default false)

Returns: { skeleton_name: string, skeleton_path: string, skeleton_class: string, package_name: string, is_loaded: bool, file_size_bytes: number, file_size_kb: number, file_size_mb: number, last_modified: string, loaded_successfully: bool?, is_valid: bool?, bone_count: number?, bones: [object]?, bones_truncated: bool?, socket_count: number?, slot_group_count: number?, load_error: string? }

inspect_motion_warping_component

Read-only.

Read the full data-layer state of a UMotionWarpingComponent: the b_search_for_windows_in_anims_within_montages flag, the warp target array (via GetWarpTargets()), the modifier count (via GetModifiers()), the runtime adapter class (GetOwnerAdapter()->GetClass()), and the protected switch-off-conditions array count (via reflection — FindFProperty<FArrayProperty> + FScriptArrayHelper). Read-only, idempotent.

Parameter Type Required Description
actor_path string yes Full editor path or short name of the actor.

Returns: { actor_path: string, b_search_for_windows_in_anims_within_montages: bool, warp_target_count: int, modifier_count: int, owner_adapter_class: string, switch_off_condition_count: int, warp_targets: array }

inspect_pose_search_database

Read-only.

Read-only walk of Schema, DatabaseAnimationAssets and Channels on a UPoseSearchDatabase

Parameter Type Required Description
database_path string yes Asset path of the UPoseSearchDatabase (required).

Returns: { database_path, schema_path, pose_search_mode, kd_tree_query_num_neighbors, number_of_principal_components, base_cost_bias, tags, schema_cardinality, animation_asset_count, animation_assets[], channel_count, channels[] }

inspect_pose_search_schema

Read-only.

Read-only walk of a UPoseSearchSchema's public fields + FinalizedChannels. An empty finalized_channels / is_finalized:false is NOT a bug in this tool: the schema only gets finalized by AddDefaultChannels() or by a PostEditChange() on it, so a freshly authored schema reports none until something triggers that.

Parameter Type Required Description
schema_path string yes Asset path of the UPoseSearchSchema (required).

Returns: { schema_path, sample_rate, schema_cardinality, number_of_permutations, permutations_sample_rate, permutations_time_offset, add_data_padding: bool, inject_additional_debug_channels: bool, draw_inject_additional_debug_channels: bool, roled_skeletons: [{ role_name, skeleton_path, mirror_table_path }], roled_skeleton_count, is_finalized: bool, channel_count, finalized_channels: [{ class, channel_name, weight }], note?: string } -- note only when is_finalized is false.

is_skeleton_shared

Read-only.

Find the skeletal mesh assets bound to a USkeleton asset through an Asset Registry query on their Skeleton tag, returning mesh_count, mesh_paths and shared (true when more than one mesh uses it). Read-only; only the skeleton itself is loaded.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".

Returns: { asset_path, mesh_count, shared, mesh_paths }

Destructive, idempotent.

Chain one montage section to the next by setting its NextSectionName. add_montage_section creates sections but never links them; this writes FCompositeSection::NextSectionName so playback flows section -> next. Pass next_section_name "" or "None" to clear the link. Done in an undo transaction, then saved. Idempotent: the link the section already has is a success with changed=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
section_name string yes Name of the existing section whose link to set.
next_section_name string yes Name of the existing section to play next (or "" / "None" to clear).

Returns: { montage_path, section_name, next_section_name, linked, changed, section_count, sections, saved, save_error, message }

list_anim_state_machines

Read-only.

List the state machine nodes at the top level of every function graph of an Animation Blueprint (the AnimGraph included), read-only and without compiling: count and state_machines [{name, graph_name}]. Machines nested inside states are not listed.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint

Returns: { count, state_machines: [{name, graph_name}] }

list_warp_targets_on_component

Read-only.

List every FMotionWarpingTarget on an actor's UMotionWarpingComponent. Read-only: wraps GetWarpTargets() (TConstArrayView<FMotionWarpingTarget>). Each entry reports the FName, the static location/rotation, the optional component reference (via path or null), the optional bone name, the b_follow_component flag, the location/rotation offsets, and the location_offset_direction enum integer.

Parameter Type Required Description
actor_path string yes Full editor path or short name of the actor.

Returns: { actor_path: string, warp_target_count: int, warp_targets: array }

move_ik_solver_in_stack

Destructive.

Move the solver at from_index so that it ends up at to_index (both 0-based positions in the solver stack) of an IK Rig asset through the IK Rig controller (one undo transaction), then save the asset. An index outside the stack is an error and nothing moves; from_index equal to to_index is not an error but moved false, saved false and a note, with nothing saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
from_index number yes Source 0-based solver index
to_index number yes Target 0-based solver index, below the solver count

Returns: { asset_path: string, from_index: int, to_index: int, moved: bool, solver_count: int, saved: bool, save_error?: string, note?: string }

play_animation

Destructive.

Play an AnimMontage on a skeletal mesh component with UAnimInstance::Montage_Play at play_rate, then jump to start_section if playback started. Editor world unless the world param says otherwise; the component needs an anim instance. playing/success mean Montage_Play returned a length above 0.

Parameter Type Required Description
component_name string yes Object name of the USkeletalMeshComponent, e.g. "CharacterMesh0", case-insensitive; the first actor in the world that has one with that name wins
montage_path string yes Full asset path to the AnimMontage (e.g. '/Game/Animations/MyMontage.MyMontage')
play_rate number no Playback rate multiplier (optional, default 1.0)
start_section string no Name of the section to jump to after play starts (optional)
world string no Optional world selector: absent/'editor' (default) | 'pie' (ambiguous: PlayWorld, else the first PIE context) | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'game' (alias of 'pie').

Returns: { component_name: string, montage_path: string, montage_name: string, playing: bool, play_rate: number, montage_length: number, return_value: number, success: bool, start_section: string?, world: string, world_name: string|null, world_package: string|null, world_type: string|null, net_mode: string|null, pie_instance: number }

refresh_anim_montage_cache

Destructive, idempotent.

Refresh derived cache data on a UAnimMontage (NotifyTracks / SequenceLength / bone-cache). Idempotent. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').

Returns: { montage_path, refreshed, sequence_length, slot_count, section_count, saved, save_error, message }

reimport_anim_sequence

Destructive.

Reimport a UAnimSequence, or any reimportable asset (the class is not checked), from source_file_path or its first recorded source via FReimportManager, automated (no dialogs) and unsaved. A missing source is refused before the reimport, which would crash the editor on it, and a reimport the handler reports as failed is a failure too: both make success false with reimported=false, and the missing source a note.

Parameter Type Required Description
anim_sequence_path string yes Full asset path to the UAnimSequence
source_file_path string no Absolute path of the file to reimport from on disk (e.g. "D:/Art/Walk.fbx"); defaults to the first source file recorded in the asset import data.

Returns: { anim_sequence_path, source_file_path, reimported, source_validated, note? }

remove_anim_blueprint

Destructive.

Delete a UAnimBlueprint asset after verifying the asset is a UAnimBlueprint.

Parameter Type Required Description
asset_path string no Long path of the UAnimBlueprint (e.g. /Game/Anim/ABP_Foo).

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_anim_bone_track

Destructive.

Remove the animation track of one bone from a UAnimSequence through its data controller (IAnimationDataController::RemoveBoneTrack, one undo step) and save the package. No track with that bone name is a success with removed=false and nothing saved; a failed save makes success false, with saved=false and save_error. List tracks with get_anim_curve_names.

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.
bone_name string yes Name of the bone track to remove; a name no track has removes nothing.

Returns: { sequence_path, bone_name, removed, saved, save_error }

remove_anim_composite

Destructive.

Delete a UAnimComposite asset after verifying the asset is a UAnimComposite.

Parameter Type Required Description
asset_path string no Long path of the UAnimComposite.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_anim_composite_segment

Destructive.

Remove an FAnimSegment by index from a UAnimComposite's AnimationTrack, then recompute its length. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
composite_path string yes Object path of the UAnimComposite (e.g. "/Game/Animation/AC_Example").
index number yes Zero-based index of the segment to remove, in [0, num_segments).

Returns: { composite_path, index, num_segments, composite_length, segments, success, saved, save_error }

remove_anim_conduit

Destructive.

Remove a conduit node (and its bound rule subgraph) from a state machine.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the state machine that owns the conduit
conduit_name string yes Name of the conduit to remove

Returns: { anim_blueprint_path: string, machine_name: string, conduit_name: string, removed: bool, already_absent: bool, conduit_count: int, transition_count: int, cascaded_transitions_removed: int, saved: bool, save_error?: string }

remove_anim_curve

Destructive.

Remove a float or transform curve by name from a UAnimSequence through its data controller (one undo step) and save the package. No such curve is a success with removed=false and nothing saved; a failed save makes success false, with saved=false and save_error. Any curve_type other than transform targets float curves.

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.
curve_name string yes Name of the curve to remove.
curve_type string no Curve type to target: float (default) or transform

Returns: { sequence_path, curve_name, curve_type, removed, saved, save_error }

remove_anim_curve_name

Destructive, idempotent.

Remove a curve metadata entry (curve name) from a USkeleton (idempotent).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
curve_name string yes The curve name to remove (e.g. 'Curve_Example').

Returns: { asset_path, curve_name, removed, already_absent, present, curve_count, curve_names, saved }

remove_anim_montage

Destructive.

Delete a UAnimMontage asset after verifying the asset is a UAnimMontage.

Parameter Type Required Description
asset_path string no Long path of the UAnimMontage.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_anim_notify

Destructive.

Remove every notify event whose NotifyName matches notify_name from a UAnimSequence (UAnimationBlueprintLibrary::RemoveAnimationNotifyEventsByName) in an undo transaction and save it. A name no event has is a success with removed=false, already_absent=true and saved=false, and the sequence is neither dirtied nor saved; a failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
notify_name string yes Name of the notify to remove (matches FAnimNotifyEvent.NotifyName).

Returns: { animation_path, notify_name, removed, removed_count, already_absent, saved, save_error }

remove_anim_sequence

Destructive.

Delete a UAnimSequence asset after verifying the asset is a UAnimSequence.

Parameter Type Required Description
asset_path string no Long path of the UAnimSequence.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_anim_slot_group

Destructive, idempotent.

Remove an animation slot group from a skeleton (idempotent; guarded against missing group).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset.
group_name string yes Name of the slot group to remove.

Returns: { asset_path: string, group_name: string, removed: bool, already_absent: bool, slot_group_count: int, slot_group_names: [string], saved: bool }

remove_anim_state

Destructive.

Remove a state node (and its bound animation subgraph) from a state machine.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the state machine that owns the state
state_name string yes Name of the state to remove

Returns: { anim_blueprint_path: string, machine_name: string, state_name: string, removed: bool, already_absent: bool, state_count: int, transition_count: int, cascaded_transitions_removed: int, saved: bool, save_error?: string }

remove_anim_sync_marker

Destructive.

Remove every authored sync marker with the given name from a UAnimSequence in an undo transaction and save the package. Returns markers_before, markers_after and removed; no marker with that name is a success with removed=false and nothing saved, and a failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.
marker_name string yes Name of the marker to remove.

Returns: { sequence_path, marker_name, markers_before, markers_after, removed, saved, save_error }

remove_anim_transition

Destructive.

Remove a source->target transition (and its rule subgraph) from a state machine.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset
machine_name string yes Name of the state machine that owns the transition
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)

Returns: { anim_blueprint_path: string, machine_name: string, source_state: string, target_state: string, removed: bool, already_absent: bool, transition_count: int, saved: bool, save_error?: string }

remove_animation_asset_from_pose_search_database

Destructive, idempotent.

Remove one FPoseSearchDatabaseAnimationAsset entry from a UPoseSearchDatabase by 0-based index (inverse of add_animation_asset_to_pose_search_database). Idempotent: an out-of-range index returns removed:false + note, not an error. The database index is NOT rebuilt here -- run build_pose_search_database_index afterwards.

Parameter Type Required Description
database_path string yes Full /Game/... asset path of the database.
animation_asset_index number yes 0-based index into DatabaseAnimationAssets[].

Returns: { database_path, animation_asset_index, removed, previous_count, new_count }

remove_blend_profile

Destructive, idempotent.

Remove a WHOLE UBlendProfile from a skeleton (idempotent). Inverse of set_blend_profile_bone, which is what implicitly CREATES a profile -- there is no separate create_blend_profile to undo.

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
profile_name string yes Name of the UBlendProfile to remove

Returns: { asset_path, profile_name, removed, already_absent, profile_count, profile_names, saved }

remove_blend_space

Destructive.

Delete a UBlendSpace asset after verifying the asset is a UBlendSpace.

Parameter Type Required Description
asset_path string no Long path of the UBlendSpace.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_blendspace_1d

Destructive.

Delete a UBlendSpace1D asset after verifying the asset is a UBlendSpace1D.

Parameter Type Required Description
asset_path string no Long path of the UBlendSpace1D.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_blendspace_sample

Destructive.

Remove a blend sample (by index) from a BlendSpace. WARNING: the remaining indices REORDER -- the engine removes with a swap, so the LAST sample lands in the deleted slot. Never remove a batch by descending index and assume the rest held still: the full post-op sample list is returned so the caller can re-sync before the next call. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
blendspace_path string yes Full asset path to the UBlendSpace.
index number yes Index of the sample to remove.

Returns: { blendspace_path, removed, num_samples, samples, saved, save_error, message }

remove_bone

Destructive, idempotent.

Remove a bone from a skeleton's reference skeleton (idempotent).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
bone_name string yes Name of the bone to remove
remove_children boolean no If true, recursively remove all descendant bones (default false)

Returns: { asset_path, bone_name, removed, already_absent, remove_children, bone_count, saved, op: "remove_bone" }

remove_ik_goal

Destructive, idempotent.

Remove an IK goal from an IK Rig by name through the IK Rig controller (one undo transaction), then save the asset. Inverse of add_ik_goal: also detaches the goal from every solver's effector and clears it from any retarget chain that referenced it. Idempotent: removing a goal that isn't present is a success with removed:false, already_absent:true, saved:false and a note, and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
goal_name string yes Name of the goal to remove

Returns: { asset_path: string, goal_name: string, removed: bool, already_absent: bool, goal_count: int, saved: bool, save_error?: string, note?: string }

remove_ik_retarget_chain

Destructive.

Remove the retarget chain with that name from an IK Rig asset through the IK Rig controller (one undo transaction), then save the asset. A name no chain has is not an error but removed false, saved false and a note, with nothing saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
chain_name string yes Name of the retarget chain to remove

Returns: { asset_path: string, chain_name: string, removed: bool, chain_count: int, saved: bool, save_error?: string, note?: string }

remove_ik_solver

Destructive.

Remove the solver at a 0-based index from the solver stack of an IK Rig asset through the IK Rig controller (one undo transaction), then save the asset. An out-of-range index is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_index number yes 0-based index of the solver to remove

Returns: { asset_path: string, removed_solver_index: int, solver_count: int, removed: bool, saved: bool, save_error?: string }

remove_montage_notify

Destructive.

Remove the notify event at a zero-based index from the Notifies array of a UAnimMontage and save it; an index past the end changes nothing and still returns success with removed=false. Returns removed_notify_name, notify_count_before, notify_count and the remaining notify names. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
notify_index number yes Zero-based index into the montage's Notifies array. Use get_montage_info first to list notifies.

Returns: { montage_path, notify_index, removed_notify_name?, notify_count_before, notify_count, notifies[], removed, saved, save_error, message }

remove_montage_slot

Destructive.

Remove a slot animation track from a UAnimMontage by name or index. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string no Name of the FSlotAnimationTrack to remove (FName). Either this or slot_index is required.
slot_index number no Zero-based index into SlotAnimTracks (alternative to slot_name). Use get_montage_info first to list slots.

Returns: { montage_path, slot_name?, slot_index?, removed_index?, removed_slot_name?, slot_count, slots[], already_existed, removed, saved, save_error, message }

remove_motion_warping_component

Destructive, idempotent.

Detach the UMotionWarpingComponent from an actor (mirror of add_motion_warping_component). Idempotent: an actor that has no such component returns already_existed:false + removed:false + note, not an error.

Parameter Type Required Description
actor_path string yes Full editor path or short name of the actor.

Returns: { actor_path: string, component_path?: string, removed: bool, already_existed: bool, note?: string }

remove_notify_track

Destructive.

Remove a named notify TRACK from an AnimSequence (deletes events on it + reindexes the rest). A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
animation_path string yes Full asset path to the UAnimSequence.
track_name string yes Notify track name to remove.

Returns: { animation_path, track_name, track_names, track_count, already_absent, saved, save_error, message }

remove_pose_asset

Destructive, idempotent.

Permanently delete one UPoseAsset after checking that the path loads as one: a force delete with no confirmation and no undo that nulls references to it. Idempotent: a path that no longer loads gives deleted=false with a note, not an error, and so does an asset of another class; during PIE the delete fails with deleted=false. Check get_asset_referencers first. To drop one pose or curve inside the asset use remove_pose_from_pose_asset or remove_pose_curve; delete_asset removes an asset of any type.

Parameter Type Required Description
asset_path string no Long path of the UPoseAsset.

Returns: { asset_path, asset_class, package_name, deleted, already_existed, note? }

remove_pose_curve

Destructive.

Delete the named curve from a UPoseAsset (UPoseAsset::DeleteCurves) in an undo transaction and save the asset; an absent curve is a success with removed=false, removed_count 0 and saved=false, and the asset is neither modified nor saved. Returns removed_count, removed and num_curves. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
pose_asset_path string yes Path to the UPoseAsset.
curve_name string yes Name of the curve to remove.

Returns: { pose_asset_path, curve_name, removed_count, removed, num_curves, saved, save_error, message }

remove_pose_from_pose_asset

Destructive.

Delete the named pose from a UPoseAsset (UPoseAsset::DeletePoses, which also fixes the base pose index) in an undo transaction and save the asset. An absent name is a success with removed=false and saved=false, and the asset is neither modified nor saved. Returns was_present, removed_count, contains_after, num_poses and the remaining pose_names. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
pose_asset_path string yes Path to the UPoseAsset (e.g. '/Game/MyGame/Pose_Example').
pose_name string yes Name of the pose to remove.

Returns: { pose_asset_path, pose_name, was_present, removed_count, removed, contains_after, num_poses, pose_names, saved, save_error, message }

remove_pose_search_channel_from_schema

Destructive.

Remove a UPoseSearchFeatureChannel_* from a UPoseSearchSchema by index or type (inverse of add_pose_search_channel_to_schema)

Parameter Type Required Description
schema_path string yes Asset path of the UPoseSearchSchema (required).
channel_index number no 0-based index into the schema's source Channels array (optional; takes precedence over channel_type).
channel_type string no One of 'Pose', 'Trajectory', 'Position', 'Velocity', 'Heading'; removes the first channel of that class (optional; used only when channel_index is absent).

Returns: { schema_path, channel_index, channel_type, channel_class, schema_cardinality, channel_count, previous_count, removed, already_absent, saved, message }

remove_pose_search_database

Destructive, idempotent.

Destroy a UPoseSearchDatabase asset (mirror of create_pose_search_database). Typed-delete: it loads the asset and REFUSES to delete it if it is not a UPoseSearchDatabase, so it cannot wipe the wrong asset the way the generic delete_asset can. Idempotent on missing assets.

Parameter Type Required Description
database_path string yes Full /Game/... asset path of the database.

Returns: { database_path, deleted, already_existed, asset_class?, note? }

remove_pose_search_roled_skeleton

Destructive, idempotent.

Remove a roled FPoseSearchRoledSkeleton entry from a UPoseSearchSchema by role or by index (inverse of add_pose_search_roled_skeleton). Idempotent: no match = no write, reported as already_absent. The schema is re-finalized after the removal, so finalized_channels changes with it.

Parameter Type Required Description
asset_path string yes Asset path of the target UPoseSearchSchema (required).
role string no Role name (FName) of the FPoseSearchRoledSkeleton entry to remove (provide this OR skeleton_index; empty = default/None role).
skeleton_index number no 0-based index into the roled-skeleton list of the entry to remove (provide this OR role).

Returns: { asset_path, role, skeleton_index, removed_skeleton_path, roled_skeleton_count, previous_count, removed, already_absent, saved }

remove_pose_search_schema

Destructive, idempotent.

Destroy a UPoseSearchSchema asset (mirror of create_pose_search_schema). Typed-delete: it loads the asset and REFUSES to delete it if it is not a UPoseSearchSchema, so it cannot wipe the wrong asset the way the generic delete_asset can. Idempotent on missing assets.

Parameter Type Required Description
schema_path string yes Full /Game/... asset path of the schema.

Returns: { schema_path, deleted, already_existed, asset_class?, note? }

remove_retarget_pose

Destructive, idempotent.

Remove a retarget pose from an IK Retargeter by name through its controller, then save the asset. Inverse of create_retarget_pose. If the removed pose was the current one, the retargeter falls back to the default pose. Idempotent: removing a pose that isn't present is a success with removed:false, already_absent:true, saved:false and a note, and nothing is saved. The engine's built-in default pose cannot be removed (honest error). A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Content path to the IK Retargeter asset.
pose_name string yes Name of the retarget pose to remove
source_or_target string no Optional "Source" or "Target" scope; defaults to "Target"

Returns: { ik_retargeter_path: string, pose_name: string, source_or_target: string, removed: bool, already_absent: bool, success: bool, saved: bool, save_error?: string, note?: string }

remove_retargeter_op

Destructive.

Remove the op at a 0-based index, with any child ops, from the op stack of an IK Retargeter asset through its controller (one undo transaction), then save the asset. An out-of-range index is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Path to the UIKRetargeter asset
op_index number yes 0-based op index

Returns: { asset_path: string, removed_op_index: int, removed: bool, op_count: int, saved: bool, save_error?: string }

remove_rig_element

Destructive.

Remove one element (by name and type) from a Control Rig Blueprint hierarchy with RemoveElement, then compile and save the blueprint. Errors on an unknown type or a missing element. Returns the per-type counts afterwards; refused while PIE runs unless force is set.

Parameter Type Required Description
control_rig_path string yes Control Rig Blueprint asset path, e.g. "/Game/Rigs/CR_Hero"
element_name string yes Name of the element to remove
element_type string yes Element type, any case: "Bone", "Null" (or "Space"), "Control", "Curve", "Socket" or "Connector"

Returns: { asset_path: string, element_key: string, element_type: string, removed: bool, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, saved: bool, save_error: string }

remove_rigvm_node

Destructive.

Remove a node from a Control Rig's RigVM solver graph, then compile and save the rig. A node that is not found, or that the controller fails to remove, is an error and nothing is compiled or saved.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
node_name string yes Graph node name to remove, as reported by add_rigvm_node

Returns: { asset_path: string, node_name: string, removed: bool, node_count: int, saved: bool, save_error: string }

remove_skeletal_mesh_lod

Destructive.

Remove one LOD from a skeletal mesh asset, with its source model and cached reduction data; higher LODs shift down one index. lod_index must be 1 or more and below the LOD count, otherwise an error (LOD 0 is never removed). Marks the mesh dirty without saving or rebuilding render data, so follow with save_asset. Use add_skeletal_mesh_lod to append a LOD, get_skeletal_mesh_lod_info to inspect them, set_skeletal_mesh_min_lod to skip the most detailed LODs while keeping them.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number yes Index of the LOD to remove (must be > 0)

Returns: { skeletal_mesh_path: string, lod_index: int, lod_count: int, removed: bool }

remove_skeletal_mesh_morph_target

Destructive.

Remove a morph target from a skeletal mesh by name.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
morph_target_name string yes Name of the morph target to remove

Returns: { morph_target_name: string, skeletal_mesh_path: string, removed: bool, remaining_morph_targets: int }

remove_skeletal_mesh_socket

Destructive, idempotent.

Remove a socket from a skeletal mesh (and its skeleton twin). Idempotent: re-running with an absent socket returns already_removed=true without mutating the asset.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
socket_name string yes Name of the socket to remove

Returns: { socket_name: string, skeletal_mesh_path: string, removed: bool, already_removed: bool, socket_count: int }

remove_socket_from_skeleton_asset

Destructive, idempotent.

Remove a socket from the socket list of a USkeleton asset and save it. Idempotent: a missing socket returns removed false and already_absent true without saving. Returns socket_count and the remaining socket_names; sockets that exist only on a skeletal mesh are untouched (use remove_skeletal_mesh_socket).

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
socket_name string yes Name of the socket to remove (case-insensitive).

Returns: { asset_path: string, socket_name: string, removed: bool, already_absent: bool, socket_count: int, socket_names: [string], saved: bool }

remove_virtual_bone

Destructive, idempotent.

Remove a virtual bone from a USkeleton asset, named directly or found by its source and target bones, then save. Idempotent: no match returns removed false and already_absent true without saving. Returns the remaining virtual_bone_names; a failed save returns success false.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
virtual_bone_name string no Full virtual bone name with its "VB " prefix, e.g. "VB pelvis_hand_r"; when given, source_bone and target_bone are ignored.
source_bone string no Source bone name; used with target_bone to resolve the virtual bone when virtual_bone_name is omitted.
target_bone string no Target bone name; used with source_bone to resolve the virtual bone when virtual_bone_name is omitted.

Returns: { asset_path: string, virtual_bone_name: string, removed: bool, already_absent: bool, virtual_bone_count: int, virtual_bone_names: [string], saved: bool }

remove_warp_target

Destructive, idempotent.

Remove a FMotionWarpingTarget from a UMotionWarpingComponent by FName. Wraps UMotionWarpingComponent::RemoveWarpTarget(name) which returns the count of entries removed (0 or 1; the array is keyed by FName). Idempotent: removing a non-existent target returns count:0 without raising an error.

Parameter Type Required Description
actor_path string yes Full editor path or short name of the actor.
target_name string yes FName identifier of the warp target to remove.

Returns: { actor_path: string, target_name: string, removed_count: int, warp_target_count: int }

rename_anim_curve

Destructive.

Rename a float or transform curve on a UAnimSequence through its data controller (one undo step) and save it; errors when the source curve does not exist or the rename is refused. The same name for both is a success with renamed=false, saved=false and a note, and nothing is written or saved. Any curve_type other than transform means float. Returns renamed and saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Full asset path to the UAnimSequence
old_curve_name string yes Name of the existing curve to rename, as listed by get_anim_curve_names.
new_curve_name string yes Name the curve gets after the rename.
curve_type string no Curve type to target: float (default) or transform

Returns: { anim_sequence_path, old_curve_name, new_curve_name, renamed, saved, save_error, note? }

rename_bone

Destructive.

Rename a bone in the reference skeleton of a USkeleton asset and save it. Fails with an error when old_name is not a bone or new_name is already taken; skeletal meshes and animations that use the old name are not updated. A failed save returns success false.

Parameter Type Required Description
skeleton_path string yes USkeleton asset path, e.g. "/Game/Characters/SK_Hero_Skeleton".
old_name string yes Current bone name; must exist in the reference skeleton.
new_name string yes Desired new bone name (must not already exist)

Returns: { asset_path, old_name, new_name, renamed: true, not_found: false, already_used: false, bone_count, saved, save_error?, op: "rename_bone" }

rename_ik_retarget_chain

Destructive.

Rename a retarget chain of an IK Rig asset through the IK Rig controller (one undo transaction) and save it. The engine makes the new name unique, so read new_name back; an unknown chain_name is not an error but returns renamed false, saved false and a note, with nothing saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes IK Rig (UIKRigDefinition) asset path, e.g. "/Game/Retarget/IK_Hero".
chain_name string yes Current name of the retarget chain, as get_ik_rig_info lists it.
new_name string yes Requested new name; the engine may add a suffix to keep it unique.

Returns: { asset_path: string, old_name: string, new_name: string, renamed: bool, saved: bool, save_error?: string, note?: string }

rename_montage_section

Destructive.

Rename an existing FCompositeSection on a UAnimMontage by zero-based section_index, in an undo transaction, and save it. The name the section already has (FName match, case ignored) is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
section_index number yes Zero-based index into CompositeSections (use get_montage_info first to list).
new_name string yes New FName for the section.

Returns: { montage_path, section_index, old_name, new_name, section_count, sections, applied, saved, save_error, message }

rename_pose_in_pose_asset

Destructive.

Rename an existing named pose in a UPoseAsset (UPoseAsset::ModifyPoseName) in an undo transaction and save it; renamed is measured by reading the pose names back. An unknown old_pose_name, a new_pose_name another pose already has, or a rename the engine does not take is an error with nothing saved; the same name for both is a success with renamed=false and saved=false, and nothing is modified or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
pose_asset_path string yes Path to the UPoseAsset.
old_pose_name string yes Current name of the pose to rename.
new_pose_name string yes New name for the pose.

Returns: { pose_asset_path, old_pose_name, new_pose_name, renamed, contains_new, contains_old, num_poses, pose_names, saved, save_error, message }

rename_rig_element

Destructive, idempotent.

Rename an element in a Control Rig's hierarchy. Idempotent: renaming to the current name is a no-op ({ renamed:false, already_named:true }). The engine disambiguates name collisions with a numeric suffix rather than failing, reported honestly via name_adjusted.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset
element_type string yes Element type ("Bone"/"Null"/"Control"/"Curve"/"Socket"/"Connector")
element_name string yes Current name of the element to rename
new_name string yes Desired new name for the element

Returns: { asset_path: string, old_name: string, element_key: string, element_type: string, renamed: bool, already_named: bool, name_adjusted: bool, bone_count: int, null_count: int, control_count: int, curve_count: int, other_count: int, total: int, saved: bool, save_error: string }

rename_skeletal_mesh_morph_target

Destructive.

Rename a morph target on a skeletal mesh asset and save the mesh. Fails if old_name is not a morph target of the mesh or new_name already exists; a failed save also returns an error although the rename stays in memory. Returns old_name, new_name and renamed.

Parameter Type Required Description
skeletal_mesh_path string yes Skeletal mesh asset path, e.g. "/Game/Characters/SKM_Hero".
old_name string yes Current morph target name, as get_skeletal_mesh_morph_targets lists it.
new_name string yes New morph target name; must not already exist on the mesh.

Returns: { old_name: string, new_name: string, skeletal_mesh_path: string, renamed: bool }

rename_skeletal_mesh_socket

Destructive.

Rename a socket on a skeletal mesh (and its skeleton twin).

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
old_name string yes Current name of the socket
new_name string yes New name for the socket

Returns: { old_name: string, new_name: string, skeletal_mesh_path: string, renamed: bool, already_renamed: bool, socket_count: int }

scaffold_aim_offset_blend_space

Additive.

Create a UAimOffsetBlendSpace for a skeleton at package_path/asset_name and save it, or re-save the one already there (already_existed=true); a failed save still succeeds with saved=false. Yaw/pitch ranges and grid counts are only echoed, not written: set axes with set_blendspace_properties.

Parameter Type Required Description
package_path string yes Content folder for the new asset, e.g. /Game/Animation/AimOffsets (a trailing slash is ignored).
asset_name string yes Name of the aim offset asset (e.g. "AO_Rifle"); the object path becomes package_path/asset_name.asset_name.
skeleton_path string yes Asset path of the USkeleton the new aim offset targets (e.g. "/Game/Characters/Mannequin/SK_Mannequin_Skeleton"); a reused asset keeps its own skeleton.
yaw_min number no Yaw lower bound echoed in the reply (default -90.0 degrees); not written to the asset.
yaw_max number no Yaw upper bound echoed in the reply (default 90.0); not written to the asset.
pitch_min number no Pitch lower bound echoed in the reply (default -90.0); not written to the asset.
pitch_max number no Pitch upper bound echoed in the reply (default 90.0); not written to the asset.
num_grid_points_yaw number no Yaw grid divisions echoed in the reply (default 4); not written to the asset.
num_grid_points_pitch number no Pitch grid divisions echoed in the reply (default 4); not written to the asset.

Returns: { asset_path, skeleton_path, yaw_min, yaw_max, pitch_min, pitch_max, num_grid_points_yaw, num_grid_points_pitch, already_existed, saved, note? }

scaffold_blend_space_2d

Additive, idempotent.

Create a UBlendSpace (2D) asset for parameter-driven animation blending (e.g. Speed x Direction). Idempotent on re-run; axis metadata left at engine defaults (set the protected axis fields afterwards with set_blendspace_properties).

Parameter Type Required Description
package_path string yes /Game/... folder for the new asset (required)
asset_name string yes Display name (required)
skeleton_path string yes USkeleton the BS targets (required)
axis_x_label string no Optional X-axis display name (default "X"); engine field is protected so visible only after editor opens the asset.
axis_y_label string no Optional Y-axis display name (default "Y"); same engine protection caveat.
min_x number no Optional X axis lower bound (default 0); recorded in response but not written to asset.
max_x number no Optional X axis upper bound (default 100); same caveat as above.
min_y number no Optional Y axis lower bound (default 0)
max_y number no Optional Y axis upper bound (default 100)
num_grid_points_x number no Optional X grid density (default 4)
num_grid_points_y number no Optional Y grid density (default 4)

Returns: { asset_path, skeleton_path, axis_x_label, axis_y_label, x_axis_range, y_axis_range, num_grid_points_x, num_grid_points_y, already_existed, saved, note? }

scaffold_locomotion_animbp

Additive, idempotent.

Create or update a character Animation Blueprint with a "Locomotion" state machine + Idle/Walk/Run states + bidirectional transitions between them. Idempotent: re-running on an existing AnimBP returns the existing scaffold.

Parameter Type Required Description
package_path string yes UE content folder, e.g. "/Game/MyGame".
asset_name string yes Blueprint asset name, e.g. "ABP_PlayerLocomotion".
skeleton_path string yes Path to the target USkeleton.
machine_name string no Optional state machine name (default "Locomotion").
states array no Optional list of state names to add (default ["Idle", "Walk", "Run"]).
add_transitions boolean no Optional bool (default true). Add Idle<->Walk and Walk<->Run transitions.

Returns: { anim_blueprint_path, package_path, skeleton_path, machine_name, state_count, transition_count, already_existed, saved }

scale_anim_curve

Destructive.

Retime a FLOAT curve on a UAnimSequence through its data controller (one undo step), then save the package: every key TIME becomes (t - origin) * factor + origin, and the key VALUES are left untouched -- this stretches/compresses a curve in time, it does not scale its amplitude. FLOAT-CURVE ONLY: a name that is not a float curve of the sequence, a transform curve included, is an error and nothing is written. A retime that moves no key (factor 1, no keys, or every key at the origin) is a success with applied=false and saved=false, and nothing is written or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
curve_name string yes Name of the float curve.
factor number no Scale factor applied to each key TIME (default 1.0).
origin number no Time origin the key times are scaled about (default 0.0).

Returns: { anim_sequence_path, curve_name, origin, factor, num_keys, applied, saved, save_error, message }

set_anim_additive_settings

Destructive, idempotent.

Set the additive-animation type and base pose on a UAnimSequence in an undo transaction and save it. Settings the sequence already has are a success with changed=false and saved=false, and the sequence is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Object path of the UAnimSequence.
additive_anim_type string no Additive type: LocalSpaceBase|RotationOffsetMeshSpace|None (default LocalSpaceBase)
ref_pose_type string no Base pose type: RefPose|AnimScaled|AnimFrame|LocalAnimFrame|None (default RefPose)
ref_frame_index number no Frame index used for the base pose (default 0)
ref_pose_anim_path string no Object path of the reference UAnimSequence for the base pose (optional)

Returns: { anim_sequence_path, additive_anim_type, ref_pose_type, ref_frame_index, ref_pose_anim_set, changed, success, saved, save_error, message? }

set_anim_bone_track_keys

Destructive, idempotent.

Replace the keys of one bone track of a UAnimSequence with the given per-key transforms (translation, rotation, scale: real pose data, not identity), adding the track when it is missing, through its data controller as one undo step, then save the package; num_keys_readback and first_key are read back from the data model. A bone_name the sequence's skeleton does not have is an error and nothing is written; an omitted bone_name targets the root bone. A failed save makes success false, with saved=false and save_error. Identity keys: add_anim_bone_track.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
keys array yes Array of per-key transforms: { translation:[x,y,z], rotation:[pitch,yaw,roll] (deg), scale:[x,y,z] }. translation default [0,0,0], rotation default [0,0,0], scale default [1,1,1].
bone_name string no Name of a bone of the skeleton of the sequence; omitted or empty means the root bone.

Returns: { anim_sequence_path, bone_name, num_keys, num_keys_readback, num_bone_tracks, first_key:{translation,rotation_euler}, success, saved, save_error, message }

set_anim_curve_color

Destructive, idempotent.

Set the editor display color of a FLOAT curve on a UAnimSequence through its data controller (one undo step), then save the package (cosmetic: it tints the curve in the editor, it does not affect evaluation). FLOAT-CURVE ONLY: a name that is not a float curve of the sequence, a transform curve included, is an error and nothing is written. The color the curve already has is a success with applied=false and saved=false, and nothing is written or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
curve_name string yes Name of the float curve.
color array no RGBA color as [r, g, b, a] in 0..1 (default [1,1,1,1]).

Returns: { anim_sequence_path, curve_name, color, applied, saved, save_error, message }

set_anim_curve_comment

Destructive, idempotent.

Set the author comment of a FLOAT curve on a UAnimSequence through its data controller (one undo step), then save the package (metadata only; it does not affect evaluation). FLOAT-CURVE ONLY: a name that is not a float curve of the sequence, a transform curve included, is an error and nothing is written. The comment the curve already has (case-sensitive) is a success with applied=false and saved=false, and nothing is written or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
curve_name string yes Name of the float curve.
comment string no Comment string to set (default empty).

Returns: { anim_sequence_path, curve_name, comment, applied, saved, save_error, message }

set_anim_curve_interp_mode

Destructive, idempotent.

Replace the curve flags (the EAnimAssetCurveFlags bitmask) of an existing float or transform curve on a UAnimSequence with one flag, in an undo transaction, then save the package. Despite the name it changes no key interpolation or tangents: linear and editable both set Editable; metadata, drive_track and disabled set those flags. interp_mode is required; an unknown mode, curve or sequence is an error, and any curve_type other than transform means float. old_flags and new_flags are the bitmasks before and after; flags the curve already has are a success with applied=false, saved=false and a note, and nothing is written or saved; a failed save makes success false, with saved=false and save_error. get_anim_curve_data reads the flags.

Parameter Type Required Description
anim_sequence_path string yes Full asset path to the UAnimSequence
curve_name string yes Name of the curve
interp_mode string yes One of "linear|editable|metadata|drive_track|disabled"
curve_type string no Curve type to target: float (default) or transform

Returns: { anim_sequence_path, curve_name, interp_mode, old_flags, new_flags, applied, saved, save_error, note? }

set_anim_curve_keys

Destructive, idempotent.

Replace every key of an existing float curve on a UAnimSequence with the given [time, value] pairs as linear keys with auto tangents, through its data controller in an undo transaction, then save the package; num_keys is read back. The curve must exist (add_anim_float_curve first) and keys needs at least one valid pair. A transform curve is refused, since its keys are transforms, not [time, value] pairs: rekey it with add_anim_transform_curve. Any other curve_type is an error, and so is a rekey the data controller rejects, with nothing saved. A curve that already holds exactly those keys is a success with applied=false, saved=false and a note, and nothing is written or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Full asset path to the UAnimSequence
curve_name string yes Name of the float curve (e.g. "MyCurve")
keys array no JSON array of [time, value] pairs, time in seconds, at least one; entries that are not such a pair are skipped, and tangents or interpolation cannot be given.
curve_type string no Curve type to target: float (default) or transform; transform is refused with an error pointing at add_anim_transform_curve.

Returns: { anim_sequence_path, curve_name, curve_type, num_keys, applied, saved, save_error, note? }

set_anim_frame_rate

Destructive, idempotent.

Set the frame rate of the data model of a UAnimSequence (IAnimationDataController::SetFrameRate, one undo step) to fps rounded to whole frames per second, then save the package; fps, numerator and denominator are read back from the data model. The data controller only takes a rate that is a multiple or a factor of the current one, and the frame count must stay whole at the new rate: any other rate is an error and nothing changes. The rate the data model already has is a success with changed=false, saved=false and a note, and nothing is written or saved. A failed save makes success false, with saved=false and save_error. get_anim_sequence_info reads the rate.

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.
fps number yes New frame rate in frames per second, rounded to a whole number that must be at least 1.

Returns: { sequence_path, fps, numerator, denominator, changed, saved, save_error, note? }

set_anim_graph_node_pin_binding

Destructive, idempotent.

Bind an AnimGraph node input pin to a variable or property path in the node property-binding map (the Details-panel bind chip), e.g. "TransformTrajectory" to "Trajectory"; set_anim_graph_node_property edits the FAnimNode struct instead. Returns applied and the stored binding; saves the AnimBP without recompiling (run compile_anim_blueprint).

Parameter Type Required Description
node_id string yes NodeGuid of the target UAnimGraphNode_* (from get_graph_nodes).
pin_name string yes The bound property/pin name (e.g. "TransformTrajectory").
binding_path string yes The variable/property path to bind the pin to (e.g. "Trajectory", or nested "MyStruct.Member"). This tool does not check that the path resolves.
anim_blueprint_path string no Path or name of the UAnimBlueprint (aliases: anim_blueprint, blueprint_name).
graph_name string no Target graph (optional; deep-resolved; default the top-level AnimGraph).
anim_blueprint string no Alias of anim_blueprint_path, used only when anim_blueprint_path is absent or empty.
blueprint_name string no Alias of anim_blueprint_path, used only when anim_blueprint_path and anim_blueprint are both absent or empty.

Returns: { node_id, pin_name, binding_path, applied, binding:{property_name, property_path[], path_as_text, is_bound, is_promotion, binding_type, pin_category}, saved }

set_anim_graph_node_property

Destructive, idempotent.

Write a property of an AnimGraphNode's internal FAnimNode struct by (dotted) name. Saves the ABP but does NOT recompile it -- run compile_anim_blueprint after your edits for runtime effect.

Parameter Type Required Description
anim_blueprint_path string yes Path/name of the UAnimBlueprint.
node_id string yes NodeGuid of the target AnimGraphNode.
property string yes Property path inside the FAnimNode (e.g. "PoseCount", "SlotName"). A leading "Node." is tolerated. Nested structs use dots ("A.B").
value string no Text value (UE ImportText form: number, "EnumName", "(X=1,Y=2)"...). Use for scalars/enums/simple structs.
value_json any no JSON value applied via JsonValueToUProperty. Use for complex/nested types. Takes precedence over value.
graph_name string no Target graph (optional, default the top-level AnimGraph).

Returns: { node_id, property, applied, new_value, saved }

set_anim_montage_preview_mesh

Destructive, idempotent.

Set the editor preview USkeletalMesh of a UAnimMontage (SetPreviewMesh, one undo step) and save the montage; it only changes what the asset editor shows, and the mesh skeleton is not checked against the montage. Returns mesh_path, prev_mesh_path and applied; the preview mesh the montage already has is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
mesh_path string yes Asset path of the preview USkeletalMesh (e.g. '/Engine/EngineMeshes/SkeletalCube').

Returns: { montage_path, mesh_path, prev_mesh_path, applied, saved, save_error, message }

set_anim_montage_rate_scale

Destructive, idempotent.

Set the global RateScale (and optionally BlendOutTriggerTime) on a UAnimMontage in an undo transaction and save it. Values the montage already has, or none given, are a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Path to the UAnimMontage (e.g. '/Game/MyGame/AM_Example').
name string no Alias of montage_path
rate_scale number no Global play rate scale (defaults to current value)
blend_out_trigger_time number no Blend-out trigger time in seconds (defaults to current value)

Returns: { montage_path, rate_scale, blend_out_trigger_time, applied, saved, save_error, message }

set_anim_montage_skeleton

Destructive, idempotent.

Rebind a UAnimMontage to a different USkeleton (clears existing source link + recomputes bone caches) in an undo transaction and save it. The skeleton the montage already uses is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
skeleton_path string yes Asset path of the new Skeleton (e.g. '/Engine/EngineMeshes/SkeletalCube_Skeleton').

Returns: { montage_path, skeleton_path, prev_skeleton_path, applied, saved, save_error, message }

set_anim_number_of_frames

Destructive, idempotent.

Set the number of frames of the data model of a UAnimSequence (IAnimationDataController::SetNumberOfFrames, one undo step), then save the package; frame_count is read back from the data model. When the data model rate differs from the sequence sampling rate (as after set_anim_frame_rate), a count that is not a whole number of frames at the sampling rate is an error naming the multiple to use, with nothing changed (only the default sampling rate is checked, not per-platform overrides of it). The current count gives saved=false and a note, with nothing saved. A count the data controller rejects is an error with nothing saved, and a failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
sequence_path string yes Asset path of the UAnimSequence.
frame_count number yes New number of frames (integer > 0).

Returns: { sequence_path, frame_count, saved, save_error, note? }

set_anim_retarget_source

Destructive, idempotent.

Set a UAnimSequence's retarget source (and optionally its retarget reference-pose sequence) in an undo transaction and save it. A ref_pose_seq_path that does not load is an error before anything changes; values the sequence already has are a success with changed=false, applied_count 0, saved=false and a note, and nothing is modified or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Object path of the UAnimSequence to mutate.
retarget_source string no Retarget-source name (FName). Must name an entry in the owning skeleton's retarget-source map to RESOLVE at runtime, but the property write persists regardless. Use 'None' (or empty) to clear.
ref_pose_seq_path string no Optional object path of a UAnimSequence used as the additive retarget reference pose (RefPoseSeq). Pass empty/'None' to clear it.

Returns: { anim_sequence_path, retarget_source, ref_pose_seq, ref_pose_seq_set, ref_pose_seq_cleared, applied_count, notes, changed, success, saved, save_error, note? }

set_anim_root_motion

Destructive, idempotent.

Write the three root motion settings of a UAnimSequence (bEnableRootMotion, RootMotionRootLock, bForceRootLock) and save it. All three are written on every call, so an omitted one is reset to its default; an unknown root lock name applies RefPose while the reply echoes the given text. Settings the sequence already has are a success with changed=false and saved=false, and the sequence is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
anim_sequence_path string yes Asset path of the UAnimSequence.
enable_root_motion boolean no Whether to enable root motion extraction (default true)
root_motion_root_lock string no Root lock mode: RefPose|AnimFirstFrame|Zero (default RefPose)
force_root_lock boolean no Whether to force the root lock (default false)

Returns: { anim_sequence_path, enable_root_motion, root_motion_root_lock, force_root_lock, changed, success, saved, save_error, message }

set_anim_transition_rule_automatic

Destructive, idempotent.

Set the automatic rule of one transition (source_state to target_state) in a state machine of an Animation Blueprint: bAutomaticRuleBasedOnSequencePlayerInState and AutomaticRuleTriggerTime, both written every call (omitted means false and 0). Marks it structurally modified and saves without compiling; refused while PIE runs unless force=true.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
machine_name string yes Name of the state machine that owns the transition
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)
enabled boolean no True lets the transition fire on its own when the sequence player of the source state nears its end (bAutomaticRuleBasedOnSequencePlayerInState); omitted writes false.
trigger_time number no AutomaticRuleTriggerTime in seconds (default 0.0; negative = blend lead)

Returns: { anim_blueprint_path, machine_name, source_state, target_state, enabled, trigger_time, rule_graph_has_result_node, saved, save_error? }

set_anim_transition_rule_from_bool

Destructive, idempotent.

Wire a bool variable's getter as the rule of a transition.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
machine_name string yes Name of the state machine that owns the transition
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)
variable_name string yes Name of an existing bool variable on the AnimBP (or its parent C++ class)

Returns: { anim_blueprint_path, machine_name, source_state, target_state, variable_name, variable_kind, rule_set, sink_present, contributor_count, contributor_node_class, saved, save_error? }

set_anim_transition_rule_from_comparison

Destructive, idempotent.

Wire a float comparison as the rule of a transition.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
machine_name string yes Name of the state machine that owns the transition
source_state string yes Name of the source state (transition origin)
target_state string yes Name of the target state (transition destination)
variable_name string yes Name of an existing float variable on the AnimBP (or its parent C++ class)
operator string yes One of "==", "!=", ">", "<", ">=", "<=" (compared against comparison_value)
comparison_value number no Float literal on the right-hand side of the comparison

Returns: { anim_blueprint_path, machine_name, source_state, target_state, variable_name, operator, comparison_value, variable_kind, rule_set, sink_present, contributor_count, contributor_node_classes, saved, save_error? }

set_animation_speed

Destructive, idempotent.

Set the play rate of a skeletal mesh component, found by object name in the editor world (or the world the world param selects), and switch its component tick on. Only a component in Use Animation Asset (single node) mode takes it: in Animation Blueprint mode nothing changes and actual_speed reads 0, so check speed_set_successfully. Transient: nothing is saved or undoable. A speed outside 0-10 or no such component is an error. For montages use play_animation with play_rate, or set_anim_montage_rate_scale on the asset.

Parameter Type Required Description
component_name string yes Object name of the USkeletalMeshComponent, e.g. "CharacterMesh0", case-insensitive; the first actor in the world that has one with that name wins
speed number yes Playback speed multiplier; must be between 0.0 and 10.0
world string no Optional world selector: absent/'editor' (default) | 'pie' (ambiguous: PlayWorld, else the first PIE context) | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'game' (alias of 'pie').

Returns: { component_name: string, requested_speed: number, previous_speed: number, actual_speed: number, speed_set_successfully: bool, previous_tick_enabled: bool, current_tick_enabled: bool, component_valid: bool, component_class: string, anim_instance_class: string?, has_anim_instance: bool, anim_instance_valid: bool?, warning: string?, world: string, world_name: string|null, world_package: string|null, world_type: string|null, net_mode: string|null, pie_instance: number }

set_blend_profile_bone

Destructive, idempotent.

Set a bone's blend scale on a UBlendProfile (creates profile if missing).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
profile_name string yes Name of the UBlendProfile (created if absent when create_if_missing=true)
bone_name string yes Bone to scale
scale number yes Blend scale value (clamped to [0, 1] by UBlendProfile)
create_if_missing boolean no If true, create the profile when not present (default true)

Returns: { asset_path, profile_name, bone_name, scale, updated, created_profile, profile_count, saved, op: "set_blend_profile_bone" }

set_blendspace_interpolation

Destructive, idempotent.

Set a blend space's INPUT-SMOOTHING (interpolation) per axis: smoothing time, damping ratio, max speed, smoothing type. Distinct from set_blendspace_properties (which only sets the BlendParameters axis name/min/max/grid). Writes UBlendSpace::InterpolationParam[axis] via reflection. 1D smooths axis 0 only; 2D smooths X (axis 0) and Y (axis 1). Only the supplied fields change, in one undo transaction, then the blend space is saved; an unknown smoothing type is an error before anything changes, and values the axes already have are a success with changed=false, applied_count 0, saved=false and a note, with nothing modified or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
blend_space_path string yes Full asset path of the UBlendSpace / UBlendSpace1D.
x_interpolation_time number no Optional X-axis smoothing time in seconds (>= 0; 0 disables smoothing).
x_damping_ratio number no Optional X-axis damping ratio (>= 0; only used when type is SpringDamper).
x_max_speed number no Optional X-axis maximum speed in real units (>= 0; only used when type is SpringDamper or Exponential).
x_interpolation_type string no Optional X-axis smoothing type: Averaged|Linear|Cubic|EaseInOut|Exponential|SpringDamper.
y_interpolation_time number no Optional Y-axis smoothing time in seconds (2D only, >= 0).
y_damping_ratio number no Optional Y-axis damping ratio (2D only, >= 0).
y_max_speed number no Optional Y-axis maximum speed (2D only, >= 0).
y_interpolation_type string no Optional Y-axis smoothing type (2D only): Averaged|Linear|Cubic|EaseInOut|Exponential|SpringDamper.

Returns: { blend_space_path, is_1d, x_axis: {interpolation_time, damping_ratio, max_speed, interpolation_type}, y_axis: {...}, applied_count, notes, changed, saved, save_error, note? }

set_blendspace_properties

Destructive, idempotent.

Configure an existing blend space's X and (for 2D) Y axis: name, min, max, grid divisions. create_blend_space only sets X; this sets the Y axis too (and can change X after creation). On a 1D blend space the y_axis_* params are reported as an honest note and ignored. Only the supplied fields change, in one undo transaction, then the blend space is saved; values the axes already have are a success with changed=false, applied_count 0, saved=false and a note, and nothing is modified or saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
blend_space_path string yes Full asset path of the UBlendSpace / UBlendSpace1D.
x_axis_name string no Optional X axis display name.
x_axis_min number no Optional X axis minimum value.
x_axis_max number no Optional X axis maximum value.
x_axis_grid integer no Optional X axis grid divisions (>= 1).
y_axis_name string no Optional Y axis display name (2D only).
y_axis_min number no Optional Y axis minimum value (2D only).
y_axis_max number no Optional Y axis maximum value (2D only).
y_axis_grid integer no Optional Y axis grid divisions (2D only, >= 1).

Returns: { blend_space_path, is_1d, x_axis: {name, min, max, grid}, y_axis: {name, min, max, grid}, applied_count, notes, changed, saved, save_error, note? }

set_bone_parent

Destructive, idempotent.

Re-parent a bone (pass empty parent_name to make it a new root).

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
bone_name string yes Bone to re-parent
parent_name string no New parent bone name, or empty/null to detach to root

Returns: { asset_path, bone_name, parent_name, bone_index, parent_index, updated, not_found, bone_count, saved, op: "set_bone_parent" }

set_bone_transform

Destructive, idempotent.

Update the local reference-pose transform of an existing bone

Parameter Type Required Description
skeleton_path string yes Path to the USkeleton asset
bone_name string yes Bone to update
local_transform object yes {location:[x,y,z], rotation:[p,y,r], scale:[x,y,z]} — all three required

Returns: { asset_path, bone_name, bone_index, updated, not_found, bone_count, saved, op: "set_bone_transform" }

set_ik_bone_settings

Destructive, idempotent.

Set bone-specific settings for a bone within a solver, as one undo transaction, then save the IK Rig asset; a failed save makes success false, with saved=false and save_error. Partial update (idempotent): only fields present in settings are applied; bone settings are auto-created if absent (a bone the rig skeleton lacks is an error, with nothing changed), and existing settings that already have those values give changed false, saved false and a note, with nothing saved. FullBodyIK snake_case keys: rotation_stiffness (0-1), position_stiffness (0-1), limit_x/limit_y/limit_z ("Free"/"Limited"/"Locked"), min_x, max_x, min_y, max_y, min_z, max_z, use_preferred_angles (bool), preferred_x, preferred_y, preferred_z. StretchLimb uses its live bone struct's camelCase keys (squashDirection: {x,y,z}). Only FullBodyIK and StretchLimb support per-bone settings; others return an honest error.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver.
bone_name string yes Name of the bone to modify.
settings object yes Object with bone-specific fields to set.

Returns: { ik_rig_path: string, solver_index: int, bone_name: string, success: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_ik_goal_settings

Destructive, idempotent.

Set goal-specific settings for a goal connected to a solver, as one undo transaction, then save the IK Rig asset. Partial update (idempotent): only fields present in settings are applied. FullBodyIK uses snake_case keys: bone_name, chain_depth (0+), strength_alpha (0-1), pull_chain_alpha (0-1), pin_rotation (0-1). BodyMover uses its live goal struct's camelCase keys (influenceMultiplier 0-10, clamped server-side). Connect the goal first with connect_ik_goal_to_solver. Solvers without per-goal settings return an honest error. Settings that already have those values give changed false, saved false and a note, with nothing saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver.
goal_name string yes Name of the goal to modify.
settings object yes Object with goal-specific fields to set.

Returns: { ik_rig_path: string, solver_index: int, goal_name: string, success: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_ik_retarget_chain_bones

Destructive, idempotent.

Change the start bone, end bone and/or IK goal of an existing retarget chain in an IK Rig asset through the IK Rig controller (each change an undo transaction), then save the asset. Pass at least one of the three, else an error. A missing chain, a bone not in the rig skeleton or a goal_name the rig has no goal for is not an error but start_bone_set, end_bone_set or goal_set false, and that field is left unchanged. A value the chain already has is left alone; when nothing changes, changed is false, saved is false, a note says why and nothing is saved. A failed save makes success false, with saved=false and save_error. Siblings: add_ik_retarget_chain, rename_ik_retarget_chain.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
chain_name string yes Name of the retarget chain to mutate
start_bone string no Optional new start bone
end_bone string no Optional new end bone
goal_name string no Optional new associated IK goal, which must be a goal of the rig; None clears the goal of the chain.

Returns: { asset_path: string, chain_name: string, start_bone: string, end_bone: string, goal_name: string, start_bone_set: bool, end_bone_set: bool, goal_set: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_ik_solver_bones

Destructive, idempotent.

Set the start bone and/or end bone of one solver in an IK Rig asset (0-based stack index) through the IK Rig controller, which records each change as an undo transaction, then save the asset. Pass at least one bone, else an error. An out-of-range index, a bone missing from the rig skeleton, or a start or end bone on a solver type without one is not an error: start_bone_set or end_bone_set comes back false, next to the bones read back, and nothing is stored for it. A bone the solver already has is left alone; when nothing changes, changed is false, saved is false, a note says why and nothing is saved. A failed save makes success false, with saved=false and save_error. get_ik_solver_bones reads them.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_index number yes 0-based solver index
start_bone string no Optional start bone name
end_bone string no Optional end bone name

Returns: { asset_path: string, solver_index: int, start_bone: string, end_bone: string, start_bone_set: bool, end_bone_set: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_ik_solver_enabled

Destructive, idempotent.

Enable or disable the solver at a 0-based index of an IK Rig asset through the IK Rig controller (one undo transaction), then save the asset; enabled is read back. An out-of-range index is not an error but set_ok false, and a solver already in the requested state gives changed false: in both cases saved is false, a note says why and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Path to the UIKRigDefinition asset
solver_index number yes 0-based solver index
enabled boolean no Optional bool; defaults to true

Returns: { asset_path: string, solver_index: int, enabled: bool, set_ok: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_ik_solver_settings

Destructive, idempotent.

Set detailed solver-specific settings on a solver in an IK Rig, as one undo transaction, then save the asset. Partial update: only fields present in settings are applied (idempotent). FullBodyIK uses snake_case keys: root_bone, iterations (0-1000), sub_iterations (0-1000), mass_multiplier (0-10), allow_stretch (bool), root_behavior (enum string), global_pull_chain_alpha (0-1), max_angle (0-45), over_relaxation (1-2). Other solver types (Limb/Pole/BodyMover/SetTransform/StretchLimb) accept the camelCase names of their live settings struct; ClampMin/ClampMax bounds are enforced server-side. Settings that already have those values give changed false, saved false and a note, with nothing saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_rig_path string yes Content path to the IK Rig asset.
solver_index number yes Index of the solver in the rig's solver stack.
settings object yes Object with solver-type-specific fields to set.

Returns: { ik_rig_path: string, solver_index: int, solver_type: string, success: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_montage_blend_times

Destructive, idempotent.

Set the blend-in / blend-out times (clamped to >= 0) on a UAnimMontage in an undo transaction and save it. Times the montage already has, or none given, are a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
blend_in number no Blend-in time in seconds (defaults to current value)
blend_out number no Blend-out time in seconds (defaults to current value)

Returns: { montage_path, blend_in, blend_out, applied, saved, save_error, message }

set_montage_properties

Destructive, idempotent.

Set only the supplied blend modes, auto blend out, trigger time, sync group/slot and deprecated root motion fields of a UAnimMontage in one undo step and save it; bad enum names, or no field, are refused before any change, and supplied values the montage already has are a success with changed=false, applied_count 0 and saved=false, with nothing modified or saved. For blend times use set_montage_blend_times. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
blend_mode_in string no BlendModeIn: 'Standard' or 'Inertialization' (EMontageBlendMode). Optional.
blend_mode_out string no BlendModeOut: 'Standard' or 'Inertialization' (EMontageBlendMode). Optional.
enable_auto_blend_out boolean no When true the montage blends out by itself near its end (bEnableAutoBlendOut); omitted keeps the current value.
blend_out_trigger_time number no BlendOutTriggerTime in seconds (<0 = auto from BlendOut time). Optional.
sync_group string no Sync group name (SyncGroup) the montage joins for marker-based sync; an empty string sets None, omitted keeps the current value.
sync_slot_index number no Zero-based index of the slot track whose animation drives the sync group (SyncSlotIndex); omitted keeps the current value.
enable_root_motion_translation boolean no bEnableRootMotionTranslation (bool, DEPRECATED since 4.5). Optional.
enable_root_motion_rotation boolean no bEnableRootMotionRotation (bool, DEPRECATED since 4.5). Optional.
root_motion_root_lock string no RootMotionRootLock: 'RefPose'|'AnimFirstFrame'|'Zero' (DEPRECATED since 4.5). Optional.

Returns: { montage_path, blend_mode_in, blend_mode_out, enable_auto_blend_out, blend_out_trigger_time, sync_group, sync_slot_index, root_motion: {...}, applied_count, notes, changed, saved, save_error, message }

set_montage_section_start_time

Destructive, idempotent.

Set the StartTime on an existing FCompositeSection by zero-based section_index, in an undo transaction, and save it. The start time the section already has is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
section_index number yes Zero-based index into CompositeSections.
start_time number yes Absolute section start time in seconds.

Returns: { montage_path, section_index, start_time, applied, saved, save_error, message }

set_montage_segment_anim_sequence

Destructive, idempotent.

Rebind an existing FAnimSegment on a slot track to a different UAnimSequence (resets segment start/end times to the new sequence's range, play rate and loop count to 1 and its start position to 0) in an undo transaction and save the montage. A segment that already references that sequence with those values is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string yes Name of the slot track containing the segment (e.g. 'DefaultSlot').
segment_index number yes Zero-based index into the slot track's AnimSegments.
anim_sequence_path string yes Object path of the UAnimSequence to reference (must share the montage's skeleton).

Returns: { montage_path, slot_name, segment_index, anim_sequence_path, anim_start_time, anim_end_time, applied, saved, save_error, message }

set_montage_segment_start_time

Destructive, idempotent.

Set the AnimStartTime on an existing FAnimSegment by (slot_name, segment_index), clamped to [0, AnimEndTime], in an undo transaction, and save the montage. AnimEndTime is left untouched. The (clamped) start time the segment already has is a success with applied=false and saved=false, and the montage is neither modified nor saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string yes Name of the slot track containing the segment.
segment_index number yes Zero-based index into the slot track's AnimSegments.
start_time number yes New AnimStartTime in seconds (clamped to [0, AnimEndTime]).

Returns: { montage_path, slot_name, segment_index, start_time, anim_end_time, applied, saved, save_error, message, note? }

set_morph_target_deltas

Destructive, idempotent.

Set vertex deltas for a morph target on a specific LOD. Each delta is a dict with keys: vertex_index (int), position_delta ({x,y,z}), normal_delta ({x,y,z}).

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
morph_target_name string yes Name of the morph target to modify
deltas array yes List of delta dicts, e.g. [{"vertex_index": 0, "position_delta": {"x": 1.0, "y": 0, "z": 0}, "normal_delta": {"x": 0, "y": 0, "z": 0}}]
lod_index number no LOD index to populate (default 0)

Returns: { morph_target_name: string, lod_index: int, deltas_set: int, total_deltas_lod0: int, saved: bool }

set_morph_target_generated_by_engine

Destructive, idempotent.

Flag morph targets of a skeletal mesh asset as generated by engine tools rather than imported from a source file, on every LOD, then save the mesh (a failed save is an error). The flag is only ever set, never cleared; names not on the mesh are ignored, and an empty or missing list flags every morph. When any flag changes the engine runs PreEditChange/PostEditChange on the mesh, which rebuilds it. modified says whether anything changed; flagged lists every morph now marked on LOD 0. Names come from get_skeletal_mesh_morph_targets.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
morph_target_names array no List of morph target names to flag; empty list = flag every morph on the mesh

Returns: { skeletal_mesh_path: string, requested_count: int, named_list: bool, modified: bool, flagged: [string], note: string }

set_motion_warping_component_search_in_anims

Destructive, idempotent.

Set bSearchForWindowsInAnimsWithinMontages on the UMotionWarpingComponent of an editor-world actor found by internal name (not label): when true, warping windows are also searched in animations inside montages. Marks the level dirty, not saved; returns previous and new values and changed.

Parameter Type Required Description
actor_name string yes Internal object name of the actor with the UMotionWarpingComponent, e.g. "BP_Hero_C_0"; the outliner label does not match.
enabled boolean yes Sets bSearchForWindowsInAnimsWithinMontages: when true, motion-warping windows are also searched in animations nested inside montages (required, no default)

Returns: { actor_name, previous_search_in_anims: bool, new_search_in_anims: bool, changed: bool }

set_motion_warping_target_bone_name

Destructive, idempotent.

Set the BoneName on an existing FMotionWarpingTarget (resolves the existing Component ref).

Parameter Type Required Description
actor_name string yes Engine name of the actor carrying the UMotionWarpingComponent
warp_target_name string yes FName of the existing warp target on the component
bone_name string yes Skeletal bone on the target's Component to anchor to; NAME_None follows the component root

Returns: { actor_name, warp_target_name, previous_bone_name: string, new_bone_name: string, changed: bool }

set_motion_warping_target_follow_component

Destructive, idempotent.

Set bFollowComponent on an existing component-based warp target of an editor-world actor found by internal name, keeping its Component, BoneName and offsets. A missing target, or one without a Component, is an error. WarpTargets is Transient, so the change is not saved with the level.

Parameter Type Required Description
actor_name string yes Internal object name of the actor with the UMotionWarpingComponent, e.g. "BP_Hero_C_0"; the outliner label does not match.
warp_target_name string yes FName of the existing warp target on the component
follow boolean yes When true the target tracks the Component's live transform each frame; when false it snapshots the current transform (required, no default)

Returns: { actor_name, warp_target_name, previous_follow: bool, new_follow: bool, changed: bool }

set_motion_warping_target_location

Destructive, idempotent.

Update an existing FMotionWarpingTarget's location (and optionally rotation) by FName -- an idempotent replace-in-place. Choose this over add_warp_target_to_component when the target already exists and you only want to nudge where it points; add_warp_target_to_component is the one that CREATES a target.

Parameter Type Required Description
actor_name string yes Engine name of the actor carrying the UMotionWarpingComponent
warp_target_name string yes FName of the existing target
location array no [x, y, z] world location
rotation array no Optional [pitch, yaw, roll] rotation; defaults to ZeroRotator

Returns: { actor_name, warp_target_name, location_set, previous_count, new_count }

set_motion_warping_target_location_offset

Destructive, idempotent.

Set LocationOffset (FVector) on an existing FMotionWarpingTarget (keeps BoneName/follow/rotation-offset).

Parameter Type Required Description
actor_name string yes Engine name of the actor carrying the UMotionWarpingComponent
warp_target_name string yes FName of the existing warp target on the component
location_offset array no [x, y, z] offset applied to the target relative to its LocationOffsetDirection

Returns: { actor_name, warp_target_name, previous_x, previous_y, previous_z, new_x, new_y, new_z, changed: bool }

set_motion_warping_target_rotation

Destructive, idempotent.

Set the rotation of an existing warp target of an editor-world actor (found by internal name), keeping its Location. The target is rebuilt as a plain transform target, so a component-based one loses its Component, BoneName, follow flag and offsets. WarpTargets is Transient: not saved.

Parameter Type Required Description
actor_name string yes Internal object name of the actor with the UMotionWarpingComponent, e.g. "BP_Hero_C_0"; the outliner label does not match.
warp_target_name string yes FName of the existing warp target on the component
rotation array no New world rotation in degrees as [pitch, yaw, roll]; omitted means [0, 0, 0].

Returns: { actor_name, warp_target_name, previous_pitch, previous_yaw, previous_roll, new_pitch, new_yaw, new_roll, changed: bool }

set_pose_asset_base_pose

Destructive, idempotent.

Set which named pose of a UPoseAsset is its base pose (UPoseAsset::SetBasePoseName) in an undo transaction, then save the asset; an empty or None base_pose_name goes back to the skeleton reference pose. A name the asset does not contain is an error before anything changes, and so is a base pose the engine does not take (read back from the asset), with nothing saved. The base pose the asset already has is a success with applied=false and saved=false, and nothing is modified or saved. A failed save makes success false, with saved=false and save_error. The base pose only drives evaluation of an additive pose asset, which additive and note report. Edit poses with add_pose_to_pose_asset, rename_pose_in_pose_asset and remove_pose_from_pose_asset.

Parameter Type Required Description
pose_asset_path string yes Path to the UPoseAsset.
base_pose_name string no Name of the pose to use as the base; empty/None resets to the reference pose.

Returns: { pose_asset_path, base_pose_name, requested_name, applied, base_pose_index, is_reference_pose, additive, note, saved, save_error, message }

set_pose_search_database_schema

Destructive, idempotent.

Bind a UPoseSearchSchema to a UPoseSearchDatabase (assigns the Schema field). Use it right after creating a database with no schema, or to rebind an existing one; a database without a schema cannot be indexed.

Parameter Type Required Description
database_path string yes Asset path of the UPoseSearchDatabase (required).
schema_path string yes Asset path of the UPoseSearchSchema to bind (required).

Returns: { database_path, previous_schema_path, new_schema_path, changed: bool, saved: bool }

set_pose_search_schema_mirror_data_table

Destructive, idempotent.

Bind (or rebind) the UMirrorDataTable of the schema's FPoseSearchRoledSkeleton entry under role (default role when omitted). Refused when no entry has that role.

Parameter Type Required Description
asset_path string yes Asset path of the UPoseSearchSchema to edit (required).
mirror_data_table_path string yes Asset path of the UMirrorDataTable to bind under the given role (required).
role string no Role name (FName) identifying the FPoseSearchRoledSkeleton entry within a multi-character schema (optional; empty = default role).

Returns: { asset_path, role, previous_mirror_data_table_path, new_mirror_data_table_path, changed, saved }

set_pose_search_schema_properties

Destructive, idempotent.

Author UPoseSearchSchema scalar tunables via reflection (partial merge + clamp). Replaces the 8 former per-field set_pose_search_schema_* setters.

Parameter Type Required Description
asset_path string yes Asset path of the target UPoseSearchSchema (required).
properties object yes Object of UPoseSearchSchema UPROPERTY fields to merge; keys are the C++ property NAMES (case-insensitive), absent keys untouched. Covers: SampleRate(int, ClampMin=1 ClampMax=240), bAddDataPadding(bool), bInjectAdditionalDebugChannels(bool), bDrawInjectAdditionalDebugChannels(bool), NumberOfPermutations(int, ClampMin=1), PermutationsSampleRate(int, ClampMin=1 ClampMax=240), PermutationsTimeOffset(float), DataPreprocessor(enum name: None/Normalize/NormalizeOnlyByDeviation/NormalizeWithCommonSchema). Object-refs (skeleton, mirror_data_table) and the role tag are set via their dedicated commands, not here.

Returns: { asset_path, asset_class, settings, applied_keys, changed, saved }

set_pose_search_schema_role

Destructive, idempotent.

Rename the role (FName) of the schema's FPoseSearchRoledSkeleton entry under role_from (default role when omitted). Refused when new_role is already taken by another entry.

Parameter Type Required Description
asset_path string yes Asset path of the UPoseSearchSchema to edit (required).
new_role string yes New role name (FName) to assign to the entry, identifying it within a multi-character schema (required).
role_from string no Existing role name (FName) of the FPoseSearchRoledSkeleton entry to rename (optional; empty = default role).

Returns: { asset_path, previous_role, new_role, changed, saved }

set_pose_search_schema_skeleton

Destructive, idempotent.

Bind (or rebind) the USkeleton of the schema's FPoseSearchRoledSkeleton entry under role. Idempotent by role: if a skeleton is already bound under that role it is REPLACED; if no roled entry exists for that role yet, one is created. Use add_pose_search_roled_skeleton instead when you want to ADD a second character's role without disturbing the first.

Parameter Type Required Description
asset_path string yes Asset path of the UPoseSearchSchema to edit (required).
skeleton_path string yes Asset path of the USkeleton to bind under the given role (required).
role string no Role name (FName) identifying the FPoseSearchRoledSkeleton entry within a multi-character schema (optional; empty = default role).

Returns: { asset_path, role, previous_skeleton_path, new_skeleton_path, changed, saved }

set_retarget_pose_bone_rotation

Destructive, idempotent.

Set a bone's rotation offset in the current retarget pose (euler degrees) of an IK Retargeter asset, as one undo transaction, then save the asset; the offset is read back as quat_x..quat_w. Creates a default pose if none is current. bone_name is stored as given, not checked against the skeleton. When the pose to edit is already current and already holds exactly that offset for the bone, changed is false, saved is false, a note says so and nothing is saved. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Path to the UIKRetargeter asset
bone_name string yes Name of the bone to update
source_or_target string no Optional "Source" or "Target" scope; defaults to "Target"
pitch number no Euler pitch in degrees (used when no quat is provided)
yaw number no Euler yaw in degrees
roll number no Euler roll in degrees
quat_x number no Optional quaternion X
quat_y number no Optional quaternion Y
quat_z number no Optional quaternion Z
quat_w number no Optional quaternion W
rotation object no Optional nested {x, y, z, w} quaternion object
pose_name string no Optional explicit retarget pose name; created if missing

Returns: { asset_path: string, bone_name: string, source_or_target: string, retarget_pose: string, quat_x: number, quat_y: number, quat_z: number, quat_w: number, changed: bool, saved: bool, save_error?: string, note?: string }

set_retargeter_chain_mapping

Destructive, idempotent.

Make source_chain drive target_chain in an IK Retargeter asset, overwriting the previous mapping, on every op whose chain mapping lists target_chain (or only the op named op_name), in one undo transaction, then save the asset. source_chain is not validated, so a misspelled name is stored as given. set_ok is false when no op lists target_chain; mapped_source is read back from the first matching op. When no op lists target_chain, or every one already maps it to source_chain, changed is false, saved is false, a note says why and nothing is saved. A failed save makes success false, with saved=false and save_error. get_ik_retargeter_info shows the per-op mappings.

Parameter Type Required Description
ik_retargeter_path string yes Path to the UIKRetargeter asset
source_chain string yes Name of the source retarget chain
target_chain string yes Name of the target retarget chain to map to
op_name string no Optional op name as get_ik_retargeter_info lists it; omitted, every op whose chain mapping lists target_chain is updated

Returns: { asset_path: string, source_chain: string, target_chain: string, mapped_source: string, set_ok: bool, changed: bool, saved: bool, save_error?: string, note?: string }

set_retargeter_op_settings

Destructive, idempotent.

Partial-merge a retarget op's live settings struct (only the JSON fields present are written -> idempotent), and optionally toggle the op enabled flag, as one undo transaction, then save the asset. Settings keys match get_retargeter_op_info (first char lower-cased, e.g. lODThreshold). Numeric ClampMin/ClampMax metadata is enforced after the merge. The optional enabled flag is applied via the controller. The payload echoes the read-back settings. When neither is given, or the op already has those settings and that enabled state, changed is false, saved is false, a note says why and nothing is saved. An out-of-range op_index is an error. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
ik_retargeter_path string yes Content path to the UIKRetargeter asset.
op_index number yes 0-based index of the op in the retargeter's op stack.
settings object no Partial settings object; only present fields are written (e.g. { lODThreshold: 5 }).
enabled boolean no Optional: enable/disable the op (applied via the controller).

Returns: { asset_path: string, op_index: int, op_name: string, op_type: string, enabled: bool, settings: object, changed: bool, saved: bool, save_error?: string, note?: string }

set_rig_control_limits

Destructive, idempotent.

Set a scalar Control Rig control's min/max limits (Float/ScaleFloat/Integer). Enables the limit array for the control type and sets MinimumValue/MaximumValue type-correctly; once enabled, set_rig_control_value clamps via ApplyLimits. Verified read-back.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset.
control_name string yes Name of an existing control element (Float/ScaleFloat/Integer).
min number yes Minimum value (number).
max number yes Maximum value (number).
enable boolean no Whether to enable the limits (optional, default true).

Returns: { asset_path: string, control_name: string, control_type: string, min: number, max: number, limit_enabled: bool, saved: bool, save_error?: string }

set_rig_control_settings

Destructive, idempotent.

Edit an existing Control Rig control's shape/gizmo/color/limit-draw settings (the bits add_rig_control can't set afterwards). Read-modify-write: reads the control's FRigControlSettings, applies the provided fields, writes back via URigHierarchyController::SetControlSettings, recompiles + saves, and returns the verified read-back. Only the supplied fields change.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset.
control_name string yes Name of an existing control element.
display_name string no Optional display name (FName) for the control.
shape_name string no Optional gizmo shape name (e.g. "Default", "Box", "Sphere", "Circle").
shape_color array no Optional shape color [R, G, B] or [R, G, B, A] floats (0..1).
shape_visible boolean no Optional bool: whether the gizmo shape is visible in 3D.
draw_limits boolean no Optional bool: whether to draw the control's limits in debug.

Returns: { asset_path: string, control_name: string, settings_applied: { display_name, shape_name, shape_color: [float], shape_visible, draw_limits }, applied_count: int, saved: bool, save_error?: string }

set_rig_control_shape_transform

Destructive, idempotent.

Set the local shape (gizmo) transform of an existing Control Rig control. Reads the current local shape transform, overrides only the supplied location/rotation/scale, writes back via URigHierarchy::SetControlShapeTransform, recompiles + saves, and returns the verified read-back. This positions the manipulator gizmo relative to the control, independent of the control's value.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset.
control_name string yes Name of an existing control element.
location array no Optional [X, Y, Z] gizmo location.
rotation array no Optional [Pitch, Yaw, Roll] gizmo rotation.
scale array no Optional [X, Y, Z] gizmo scale.

Returns: { asset_path: string, control_name: string, shape_transform: { location: [float], rotation: [float], scale: [float] }, applied_count: int, saved: bool, save_error?: string }

set_rig_control_value

Destructive, idempotent.

Set a Control Rig control's pose value (Initial + Current), type-correct per the control's ERigControlType. add_rig_control only seeds the identity value. SetControlValue applies the control's limits, so a value outside an enabled min/max is clamped (set limits first with set_rig_control_limits). Verified read-back.

Parameter Type Required Description
control_rig_path string yes Path to the UControlRigBlueprint asset.
control_name string yes Name of an existing control element.
value string no The value: bool (Bool), number (Float/ScaleFloat/Integer), or [x,y(,z)] (Vector2D/Position/Scale/Rotator).

Returns: { asset_path: string, control_name: string, control_type: string, value: any, saved: bool, save_error?: string }

set_rigvm_pin_default

Destructive, idempotent.

Set the default value of a pin in the main RigVM graph of a Control Rig Blueprint (URigVMController::SetPinDefaultValue, no undo entry), then compile and save it. success reflects the save even when the write failed: check set, pin_found and current_value, which is read back.

Parameter Type Required Description
control_rig_path string yes Asset path of the UControlRigBlueprint, e.g. "/Game/Rigs/CR_Mannequin".
pin_path string yes Pin path NodeName.PinName, e.g. SetTransform.bInitial
value string yes Value in UE export-text form, e.g. "true", "1.0" or "(X=0.0,Y=0.0,Z=1.0)"; array pins are resized to the given element count.

Returns: { asset_path: string, pin_path: string, value: string, set: bool, pin_found: bool, current_value: string, saved: bool, save_error: string }

set_skeletal_mesh_allow_cpu_access

Destructive, idempotent.

Set bAllowCPUAccess on every LOD of a skeletal mesh. Used to keep vertex/skin data resident for FX sampling or other CPU work.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
b_allow boolean no New value for the flag (default true)

Returns: { skeletal_mesh_path: string, b_allow: bool, applied_lods: int, saved: bool }

set_skeletal_mesh_anim_class

Destructive, idempotent.

Repoint a Blueprint's skeletal mesh component AnimClass to a (fork) AnimBlueprint. Also handles the INHERITED native Character Mesh, which is not in the SCS and which the generic component-property setters cannot reach: it writes the CDO component archetype so spawned instances inherit the new AnimClass. Also sets AnimationMode=AnimationBlueprint.

Parameter Type Required Description
blueprint_name string yes Character/Actor Blueprint (name or path), e.g. "BP_MyCharacter".
anim_class string yes The AnimBlueprint to use: an ABP asset path (resolved to its generated class) or a "..._C" class path/name.
component_name string no Skeletal mesh component to target (optional). Omit to target the Character's inherited Mesh.

Returns: { blueprint, component, anim_class, previous_anim_class, applied, wrote_cdo_archetype, saved }

set_skeletal_mesh_lod_build_settings

Destructive, idempotent.

Change the stored build settings of one LOD of a skeletal mesh asset, only the fields you pass, and save the mesh. The mesh is not rebuilt here, so the settings take effect at its next build or reimport; a failed save returns an error. Returns settings_applied.

Parameter Type Required Description
skeletal_mesh_path string yes Skeletal mesh asset path, e.g. "/Game/Characters/SKM_Hero".
lod_index number no 0-based LOD index (default 0); an index the mesh does not have fails the call.
recompute_normals boolean no Ignore the imported normals and recompute them (bRecomputeNormals).
recompute_tangents boolean no Ignore the imported tangents and recompute them (bRecomputeTangents).
use_mikk_t_space boolean no Use MikkTSpace when computing tangents (bUseMikkTSpace).
compute_weighted_normals boolean no Weight computed normals by triangle area and corner angle (bComputeWeightedNormals).
remove_degenerates boolean no Remove degenerate triangles at build time (bRemoveDegenerates).
high_precision_tangents boolean no Store tangents at 16-bit instead of 8-bit precision (bUseHighPrecisionTangentBasis).
high_precision_weights boolean no Use 16-bit instead of 8-bit skin weights for rendering (bUseHighPrecisionSkinWeights).
full_precision_uvs boolean no Store UVs at full floating-point precision (bUseFullPrecisionUVs).
bone_influence_limit number no Maximum bone influences per vertex; 0 uses the DefaultBoneInfluenceLimit project setting, and values above the project limit have no effect.

Returns: { lod_index: int, settings_applied: {...}, saved: bool }

set_skeletal_mesh_lod_reduction_settings

Destructive, idempotent.

Author a LOD's FSkeletalMeshOptimizationSettings (ReductionSettings) — the data bake_skeletal_mesh_lod consumes, making the bake steerable instead of running with defaults. Partial update (idempotent): only fields present are written. Enums are by name (full "SMTC_NumOfTriangles" or short "NumOfTriangles"). termination_criterion (SMTC_) and reduction_method (SMOT_) are DISTINCT.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset.
lod_index number no LOD index to modify (default 0).
termination_criterion string no SMTC_*: NumOfTriangles|NumOfVerts|TriangleOrVert|AbsNumOfTriangles|AbsNumOfVerts|AbsTriangleOrVert.
reduction_method string no SMOT_*: NumOfTriangles|MaxDeviation|TriangleOrDeviation.
num_of_triangles_percentage number no float ratio of triangles to retain (0.1 = 10%).
num_of_vert_percentage number no float ratio of vertices to retain.
max_deviation_percentage number no float [0,1], accuracy target when reduction_method=MaxDeviation.
max_num_of_triangles number no int absolute triangle cap (ClampMin 4).
max_num_of_verts number no int absolute vertex cap (ClampMin 6).
max_num_of_triangles_percentage number no int (editor-only) cap when using percentage criterion (ClampMin 4).
max_num_of_verts_percentage number no int (editor-only) cap when using percentage criterion (ClampMin 6).
base_lod number no int base LOD index to generate from (default 0).
silhouette_importance string no SMOI_*: Off|Lowest|Low|Normal|High|Highest.
texture_importance string no SMOI_* importance of texture density.
shading_importance string no SMOI_* importance of shading quality.
skinning_importance string no SMOI_* importance of skinning quality.
max_bones_per_vertex number no int max bone influences per vertex (ClampMin 1).
welding_threshold number no float vertex weld distance.
normals_threshold number no float hard-edge angle in degrees (used when recalc_normals).
recalc_normals boolean no bool recompute normals.
remap_morph_targets boolean no bool remap morph targets onto the reduced LOD.
enforce_bone_boundaries boolean no bool penalize collapses across different major bones.

Returns: { lod_index: int, settings_applied: {...}, saved: bool }

set_skeletal_mesh_lod_screen_size

Destructive, idempotent.

Set ScreenSize.Default (the screen size at which this LOD switches in) of one LOD of a skeletal mesh asset. Marks the mesh dirty but does NOT save it, so follow with save_asset; per-platform overrides are left as they are. Returns old_screen_size and screen_size.

Parameter Type Required Description
skeletal_mesh_path string yes Skeletal mesh asset path, e.g. "/Game/Characters/SKM_Hero".
lod_index number yes 0-based LOD index; must be below the LOD count of the mesh.
screen_size number yes New ScreenSize.Default value, e.g. 0.3; the call fails without it.

Returns: { skeletal_mesh_path: string, lod_index: int, old_screen_size: float, screen_size: float, applied: bool }

set_skeletal_mesh_lod_settings

Destructive, idempotent.

Set the remaining flat per-LOD scalars/enums of FSkeletalMeshLODInfo that no other setter covers (hysteresis, CPU access, morph error tolerance, skin cache usage, mesh deformer, prioritization weight). Partial update (idempotent): only fields present are written.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset.
lod_index number no LOD index to modify (default 0).
lod_hysteresis number no float, avoids flickering at the LOD boundary.
allow_cpu_access boolean no bool, keep this LOD's data on the CPU (e.g. for FX sampling).
morph_target_position_error_tolerance number no float in microns, Clamp 0.01..10000 (default 20).
skin_cache_usage string no ESkinCacheUsage by NAME: Auto|Disabled|Enabled (Disabled=255, parsed by name).
allow_mesh_deformer boolean no bool, whether a Mesh Deformer is used on this LOD.
weight_of_prioritization number no float >=0, weight given to BonesToPrioritize/SectionsToPrioritize.

Returns: { lod_index: int, settings_applied: {...}, saved: bool }

set_skeletal_mesh_material_slot

Destructive, idempotent.

Assign a material to an existing material slot of a skeletal mesh ASSET (writes FSkeletalMaterial.MaterialInterface in USkeletalMesh::GetMaterials()). Address the slot by slot_index OR slot_name (exactly one). Never auto-grows the slot array.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the USkeletalMesh asset.
material_path string yes Content path to the UMaterialInterface to assign.
slot_index number no Zero-based index of an existing material slot (mutually exclusive with slot_name).
slot_name string no Name of an existing material slot to resolve to its index (mutually exclusive with slot_index).

Returns: { skeletal_mesh_path: string, slot_index: int, slot_name: string, material_path: string, saved: bool }

set_skeletal_mesh_min_lod

Destructive, idempotent.

Set the platform-wide forced-min-LOD bias on a skeletal mesh.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
min_lod number no New MinLodIdx (must be in [0, NumLODs-1])

Returns: { skeletal_mesh_path: string, old_min_lod: int, min_lod: int, lod_count: int, applied: bool }

set_skeletal_mesh_section_cast_shadow

Destructive, idempotent.

Set the cast shadow flag on a specific section of a skeletal mesh LOD.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number no LOD index containing the section (default 0)
section_index number no Index of the section to modify (default 0)
cast_shadow boolean no New value for the flag (default true)

Returns: { lod_index: int, section_index: int, cast_shadow: bool, saved: bool }

set_skeletal_mesh_section_recompute_tangent

Destructive, idempotent.

Set the recompute tangent flag on a specific section of a skeletal mesh LOD.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number no LOD index containing the section (default 0)
section_index number no Index of the section to modify (default 0)
recompute_tangent boolean no New value for the flag (default true)

Returns: { lod_index: int, section_index: int, recompute_tangent: bool, saved: bool }

set_skeletal_mesh_section_visible_in_ray_tracing

Destructive, idempotent.

Toggle a section's bVisibleInRayTracing flag on a specific skeletal mesh LOD.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
lod_index number no LOD index containing the section (default 0)
section_index number no Index of the section to modify (default 0)
b_visible boolean no New value for the flag (default true)

Returns: { lod_index: int, section_index: int, b_visible: bool, saved: bool }

set_skeletal_mesh_socket_parent

Destructive, idempotent.

Re-parent an existing socket on a skeletal mesh to a different bone. Validates the bone exists in the reference skeleton.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
socket_name string yes Name of the socket to re-parent
parent_bone_name string yes Bone name to attach the socket to (must exist in skeleton)

Returns: { socket_name: string, parent_bone_name: string, skeletal_mesh_path: string, reparented: bool }

set_skeletal_mesh_socket_transform

Destructive, idempotent.

Set the local transform (relative to parent bone) of a socket on a skeletal mesh. All three of location/rotation/scale are optional; only fields present are written.

Parameter Type Required Description
skeletal_mesh_path string yes Content path to the skeletal mesh asset
socket_name string yes Name of the socket to modify
location array no Optional [x, y, z] relative location
rotation array no Optional [pitch, yaw, roll] relative rotation (degrees)
scale array no Optional [x, y, z] relative scale

Returns: { socket_name: string, skeletal_mesh_path: string, applied: {location, rotation, scale}, location_x: float, location_y: float, location_z: float, rotation_pitch: float, rotation_yaw: float, rotation_roll: float, scale_x: float, scale_y: float, scale_z: float }

setup_foot_ik

Destructive, idempotent.

Add a Leg IK node (UAnimGraphNode_LegIK) to the top-level AnimGraph of an Animation Blueprint, or reuse the first one already there, bind the feet into its LegsDefinition, then mark the blueprint structurally modified and save it without compiling. Leg 0 gets left_foot_bone and leg 1 right_foot_bone as the FK foot bone; a leg's IK target bone is set to the same bone when it is unset or the leg's foot changes, so the node compiles but has no effect until each IK target names an IK bone (set_anim_graph_node_property on LegsDefinition with the returned node_id); legs beyond the first two and the other leg settings are kept. Bones the target skeleton lacks are an error and nothing is written. The node is left unwired: connect it with connect_anim_graph_pins. Idempotent; refused while PIE runs unless force=true.

Parameter Type Required Description
anim_blueprint_path string yes Path to the UAnimBlueprint asset.
left_foot_bone string yes Left foot bone, written as the FK foot bone of leg 0; checked against the target skeleton when the blueprint has one.
right_foot_bone string yes Right foot bone, written as the FK foot bone of leg 1; checked against the target skeleton when the blueprint has one.

Returns: { anim_blueprint_path, node_id, left_foot_bone, right_foot_bone, legs: [{ fk_foot_bone, ik_foot_bone, num_bones_in_limb }], bones_checked_against, ik_node_count, already_existed, saved, save_error }

sort_montage_segments

Destructive.

Sort a montage slot track's segments by start time ascending. A failed save makes success false, with saved=false and save_error.

Parameter Type Required Description
montage_path string yes Full asset path of the montage (e.g. '/Game/MyGame/AM_Example').
slot_name string yes Name of the slot track to sort.

Returns: { montage_path, slot_name, segment_count, applied, saved, save_error, message }

stop_animation

Destructive.

Stop montage playback on a skeletal mesh component with Montage_Stop and a 0.25 s blend-out: only montage_path when given, otherwise every active montage. Editor world unless the world param says otherwise; an unknown montage_path is an error. was_playing and playing cover any montage.

Parameter Type Required Description
component_name string yes Object name of the USkeletalMeshComponent, e.g. "CharacterMesh0", case-insensitive; the first actor in the world that has one with that name wins
montage_path string no Full asset path of a specific AnimMontage to stop; if omitted, stops all montages (optional)
world string no Optional world selector: absent/'editor' (default) | 'pie' (ambiguous: PlayWorld, else the first PIE context) | 'server' (the PIE world with authority) | 'client' | 'pie:N' | 'game' (alias of 'pie').

Returns: { component_name: string, was_playing: bool, playing: bool, success: bool, montage_path: string?, montage_name: string?, world: string, world_name: string|null, world_package: string|null, world_type: string|null, net_mode: string|null, pie_instance: number }

validate_anim_state_machine

Read-only.

Check a state machine of an Animation Blueprint by node counts, without compiling or changing it: no states is an error, one an info, several without transitions a warning. state_count counts states only (conduits and aliases excluded), transition_count the transition nodes; compile_anim_blueprint is the check that the machine compiles.

Parameter Type Required Description
anim_blueprint_path string yes Asset path of the UAnimBlueprint
state_machine_name string yes Name of a state machine in the top-level AnimGraph, matched without case (see list_anim_state_machines).

Returns: { is_valid, errors[], warnings[], info[], state_count, transition_count }

wire_aim_offset

Destructive, idempotent.

Create a UBlendSpace1D asset for aim-offset blending (yaw or pitch axis). Idempotent on re-run.

Parameter Type Required Description
package_path string yes UE content folder.
asset_name string yes BlendSpace1D asset name.
skeleton_path string yes Path to the target USkeleton.
axis_name string no Optional axis name (default "Yaw").
min_value number no Optional float (default -90.0). Axis minimum.
max_value number no Optional float (default 90.0). Axis maximum.
num_grid_points number no Optional int (default 4).

Returns: { asset_path, axis_name, min_value, max_value, num_grid_points, already_existed, saved }