Skeletal Meshes
Read and edit skeletal meshes, skeletons and physics assets. Unreal Engine 5 command reference with parameters and examples.
Read and edit skeletal meshes, skeletons and physics assets. Unreal Engine 5 command reference with parameters and examples.
38 commands. Each shows its parameters and an example, and has a copyable deep link, so you (or an AI agent) can jump straight to one.
get_skeletal_meshRead a skeletal mesh or skeleton: bones, LODs, materials, sockets, morph targets, physics asset
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
list_bonesList bones with parents, optionally under one bone, with reference-pose transforms
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| filter | string | No | Substring filter on bone names |
| under | string | No | Only bones under this bone |
| max_results | int | No | Max bones (0 = all) |
| transforms | bool | No | Include local reference-pose transforms |
get_boneRead one bone: local/global reference transform, children, retarget mode, sockets
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| bone_name | string | Yes | Bone name |
add_socketAdd a socket on a bone of a skeletal mesh (mesh-only) or skeleton (shared)
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| socket_name | string | Yes | Socket name |
| bone_name | string | Yes | Parent bone |
| location | json | No | Relative location [x, y, z] |
| rotation | json | No | Relative rotation [pitch, yaw, roll] |
| scale | json | No | Relative scale [x, y, z] |
cfa add_socket --asset-path /Game/Characters/SK_Hero --socket-name WeaponGrip --bone-name hand_r --location '[10,0,0]' --rotation '[0,90,0]'set_socketRename a socket, move it to another bone, or change its transform
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| socket_name | string | Yes | Socket name |
| new_name | string | No | Rename |
| bone_name | string | No | New parent bone |
| location | json | No | Relative location [x, y, z] |
| rotation | json | No | Relative rotation [pitch, yaw, roll] |
| scale | json | No | Relative scale [x, y, z] |
| force_always_animated | string | No | true or false |
remove_socketRemove a socket from the mesh or its skeleton
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| socket_name | string | Yes | Socket name |
list_socketsList sockets of a mesh (own + skeleton) or a skeleton
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh or skeleton asset path |
| filter | string | No | Substring filter on socket and bone names |
| max_results | int | No | Max sockets (0 = all) |
add_virtual_boneAdd a virtual bone from a source bone to a target bone
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeleton or skeletal mesh asset path |
| source_bone | string | Yes | Source bone |
| target_bone | string | Yes | Target bone |
| name | string | No | Virtual bone name |
remove_virtual_boneRemove virtual bones
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeleton or skeletal mesh asset path |
| names | stringlist | Yes | Virtual bone names |
set_bone_retarget_modeSet a bone's translation retargeting mode, optionally for its subtree
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeleton or skeletal mesh asset path |
| bone_name | string | Yes | Bone name |
| mode | string | Yes | Animation, Skeleton, AnimationScaled, AnimationRelative or OrientAndScale |
| children_too | bool | No | Apply to every descendant |
cfa set_bone_retarget_mode --asset-path /Game/Characters/SK_Hero_Skeleton --bone-name pelvis --mode AnimationScaled
cfa set_bone_retarget_mode --asset-path /Game/Characters/SK_Hero_Skeleton --bone-name spine_01 --mode Skeleton --children-tooedit_skeletonAdd, remove, rename, re-parent or move bones in one committed edit
--ops is a JSON array applied in order, then committed to the mesh and its skeleton once: {"op":"add","bone":"tail_01","parent":"pelvis","location":[0,0,-10],"rotation":[0,0,0]} {"op":"remove","bone":"tail_01","children":true} {"op":"rename","bone":"tail_01","new_name":"tail_base"} {"op":"parent","bone":"tail_01","parent":"spine_01"} {"op":"transform","bone":"tail_01","location":[0,0,-12],"rotation":[0,0,0],"move_children":true} Needs the Modeling Tools plugin (SkeletalMeshModifiers). Animations and physics assets that reference removed bones must be fixed afterwards.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| ops | json | Yes | JSON array of bone edits |
cfa edit_skeleton --asset-path /Game/Characters/SK_Hero --ops '[{"op":"add","bone":"tail_01","parent":"pelvis","location":[0,0,-10]}]'set_skeletal_mesh_lodSet a LOD's screen size, hysteresis, CPU access, build or reduction settings
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lod | int | Yes | LOD index |
| screen_size | float | No | Screen size (0..1) |
| hysteresis | float | No | LOD hysteresis |
| allow_cpu_access | string | No | true or false |
| build_settings | json | No | JSON object of FSkeletalMeshBuildSettings fields |
| reduction_settings | json | No | JSON object of FSkeletalMeshOptimizationSettings fields |
cfa set_skeletal_mesh_lod --asset-path /Game/Characters/SK_Hero --lod 1 --screen-size 0.4
cfa set_skeletal_mesh_lod --asset-path /Game/Characters/SK_Hero --lod 0 --build-settings '{"BoneInfluenceLimit":4}'regenerate_lodsRegenerate generated LODs, optionally to a new count
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| count | int | No | Total LOD count (0 = keep) |
| regenerate_imported | bool | No | Also regenerate imported LODs |
remove_lodsRemove LODs (never LOD 0)
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lods | json | Yes | LOD indices, e.g. [1,2] |
set_skeletal_mesh_materialAssign a material to a slot or rename the slot
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| slot | string | Yes | Slot name or index |
| material | string | No | Material asset path ('None' clears) |
| slot_name | string | No | Rename the slot |
assign_physics_assetAssign a Physics Asset to a mesh after a compatibility check
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| physics_asset | string | Yes | Physics Asset path ('None' clears) |
set_compatible_skeletonAdd or remove a compatible skeleton
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeleton or skeletal mesh asset path |
| skeleton | string | Yes | The other skeleton |
| remove | bool | No | Remove instead of add |
list_morph_targetsList morph targets with how many vertices each moves
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| filter | string | No | Substring filter on names |
| max_results | int | No | Max morph targets (0 = all) |
get_morph_targetRead a morph target: moved vertices and its largest deltas
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| name | string | Yes | Morph target name |
| lod | int | No | LOD index |
| max_deltas | int | No | Max deltas, largest first (0 = counts only) |
set_morph_targetCreate or edit a morph target from per-vertex deltas and rebuild
Vertex ids are the mesh data's import vertex ids (as get_skin_weights and get_morph_target report), not render vertex indices. Mode replace zeroes every vertex not listed; merge changes only the listed ones.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| name | string | Yes | Morph target name |
| lod | int | No | LOD index |
| deltas | json | Yes | JSON array of {vertex, delta: [x, y, z]} |
| mode | string | No | replace or merge |
| build | bool | No | Rebuild the mesh |
cfa set_morph_target --asset-path /Game/Characters/SK_Hero --name Smile --deltas '[{"vertex":120,"delta":[0,0.5,1.2]},{"vertex":121,"delta":[0,0.4,1.0]}]'remove_morph_targetRemove a morph target from every LOD and rebuild
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| name | string | Yes | Morph target name |
| build | bool | No | Rebuild the mesh |
get_skin_weightsRead per-vertex bone influences from the mesh data
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lod | int | No | LOD index |
| profile | string | No | Skin weight profile (default: base) |
| vertices | json | No | Vertex ids, e.g. [0,1,2] |
| bone | string | No | Only vertices this bone influences |
| max_results | int | No | Max vertices (0 = all) |
set_skin_weightsWrite per-vertex bone influences (normalised) and rebuild
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lod | int | No | LOD index |
| profile | string | No | Skin weight profile (default: base) |
| weights | json | Yes | JSON array of {vertex, influences: {bone: weight}} |
| build | bool | No | Rebuild the mesh |
cfa set_skin_weights --asset-path /Game/Characters/SK_Hero --weights '[{"vertex":120,"influences":{"hand_r":0.7,"lowerarm_r":0.3}}]'clean_skin_weightsPrune tiny influences, cap the influence count, renormalise, rebuild
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lod | int | No | LOD index |
| profile | string | No | Skin weight profile (default: base) |
| prune_threshold | float | No | Drop influences below this weight |
| max_influences | int | No | Keep at most this many per vertex |
| build | bool | No | Rebuild the mesh |
validate_skinningVerdict on a LOD's skin weights: no-influence vertices, unnormalised, over limit, bad bones
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Skeletal mesh asset path |
| lod | int | No | LOD index |
| profile | string | No | Skin weight profile (default: base) |
create_physics_assetGenerate a Physics Asset from a skeletal mesh's skinned vertices
Runs the same generator as the editor's Create Physics Asset: one body per bone above the minimum size, shapes fitted from the vertices skinned to each bone, constraints between neighbouring bodies. --params takes FPhysAssetCreateParams fields: MinBoneSize (20), GeomType (EFG_Sphyl, EFG_Box, EFG_Sphere, EFG_SingleConvexHull, EFG_MultiConvexHull...), VertWeight (EVW_DominantWeight / EVW_AnyWeight), bBodyForAll, bCreateConstraints, bDisableCollisionsByDefault, bWalkPastSmall, HullCount, MaxHullVerts.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Asset path for the new Physics Asset |
| skeletal_mesh | string | Yes | Skeletal mesh to generate for |
| params | json | No | JSON object of FPhysAssetCreateParams fields |
| assign | bool | No | Assign the asset to the mesh |
| save | bool | No | Save |
cfa create_physics_asset --asset-path /Game/Characters/PA_Hero --skeletal-mesh /Game/Characters/SK_Hero
cfa create_physics_asset --asset-path /Game/Characters/PA_Hero --skeletal-mesh /Game/Characters/SK_Hero --params '{"MinBoneSize":10,"GeomType":"EFG_Box"}'get_physics_assetRead bodies, shapes, constraints and collision pairs of a Physics Asset
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| filter | string | No | Substring filter on bone and constraint names |
| max_results | int | No | Max bodies and constraints (0 = all) |
| bone | string | No | Return this body's shapes in full |
add_physics_bodyAdd a body on a bone, fitted from the mesh, with a constraint to its parent body
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone to give a body |
| auto_shape | bool | No | Fit shapes from the skinned vertices |
| geom_type | string | No | capsule, sphere, box, tapered_capsule, convex or multi_convex |
| constraint | bool | No | Constrain to the parent body |
| include_children | bool | No | Fold bodiless child bones' skin (twists, helpers) into the fit |
cfa add_physics_body --asset-path /Game/Characters/PA_Hero --bone-name spine_02
cfa add_physics_body --asset-path /Game/Characters/PA_Hero --bone-name hand_r --geom-type box --constraint=falseremove_physics_bodyRemove a body, re-hanging its children's constraints on the next body up
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone of the body |
set_physics_bodyChange a body's physics type, mass scale, or any body setup property
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone of the body |
| physics_type | string | No | default, kinematic or simulated |
| mass_scale | float | No | Mass scale (> 0) |
| properties | json | No | JSON object of USkeletalBodySetup properties (DefaultInstance.*, PhysMaterial, bConsiderForBounds...) |
cfa set_physics_body --asset-path /Game/Characters/PA_Hero --bone-name pelvis --physics-type kinematic
cfa set_physics_body --asset-path /Game/Characters/PA_Hero --bone-name head --properties '{"DefaultInstance":{"LinearDamping":0.5}}'add_physics_shapeAdd a sphere, box, capsule or tapered capsule to a body
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone of the body (created empty if missing) |
| type | string | Yes | sphere, box, capsule or tapered_capsule |
| name | string | No | Shape name |
| center | json | No | Center [x, y, z] in bone space |
| rotation | json | No | Rotation [pitch, yaw, roll] degrees |
| radius | float | No | Radius (sphere, capsule) |
| length | float | No | Capsule straight length |
| extents | json | No | Box full extents [x, y, z] |
| radii | json | No | Tapered capsule radii [r0, r1] |
cfa add_physics_shape --asset-path /Game/Characters/PA_Hero --bone-name head --type sphere --radius 12 --center '[0,0,8]'
cfa add_physics_shape --asset-path /Game/Characters/PA_Hero --bone-name hand_r --type box --extents '[10,6,4]' --rotation '[0,0,90]'set_physics_shapeChange a shape's placement, size, collision or any field
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone of the body |
| shape | string | Yes | Shape name or index (get_physics_asset --bone) |
| new_name | string | No | Rename |
| center | json | No | Center [x, y, z] |
| rotation | json | No | Rotation [pitch, yaw, roll] |
| radius | float | No | Radius |
| length | float | No | Capsule length |
| extents | json | No | Box extents [x, y, z] |
| collision | string | No | enabled, query_only, physics_only, probe_only or none |
| contribute_to_mass | string | No | true or false |
| properties | json | No | JSON object of shape struct fields (RestOffset...) |
remove_physics_shapeRemove a shape from a body
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_name | string | Yes | Bone of the body |
| shape | string | Yes | Shape name or index |
add_physics_constraintAdd a constraint between two bodies, frames snapped to the bones
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| child_bone | string | Yes | Child bone (has a body) |
| parent_bone | string | Yes | Parent bone (has a body) |
| name | string | No | Joint name (default: the child bone) |
| disable_collision | bool | No | Disable collision between the two bodies |
remove_physics_constraintRemove a constraint by name or bone pair
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| name | string | No | Joint name |
| child_bone | string | No | Child bone |
| parent_bone | string | No | Parent bone |
set_physics_constraintSet swing/twist/linear limits, collision, snap frames, or any constraint field
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| name | string | No | Joint name |
| child_bone | string | No | Child bone |
| parent_bone | string | No | Parent bone |
| swing1 | string | No | free, limited or locked |
| swing1_limit | float | No | Swing 1 limit degrees |
| swing2 | string | No | free, limited or locked |
| swing2_limit | float | No | Swing 2 limit degrees |
| twist | string | No | free, limited or locked |
| twist_limit | float | No | Twist limit degrees |
| linear | string | No | free, limited or locked (all axes) |
| linear_limit | float | No | Linear limit cm |
| disable_collision | string | No | true or false |
| snap | bool | No | Re-snap frames to the bones |
| properties | json | No | JSON object of FConstraintInstance fields |
cfa set_physics_constraint --asset-path /Game/Characters/PA_Hero --name neck_01 --swing1 limited --swing1-limit 30 --twist locked
cfa set_physics_constraint --asset-path /Game/Characters/PA_Hero --child-bone hand_r --parent-bone lowerarm_r --properties '{"ProfileInstance":{"bLinearBreakable":true}}'set_physics_collisionEnable or disable collision between two bodies
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |
| bone_a | string | Yes | First body's bone |
| bone_b | string | Yes | Second body's bone |
| enabled | bool | Yes | Collide or not |
validate_physics_assetVerdict on a Physics Asset: shapeless bodies, missing bones, colliding overlaps, default frames, mass
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_path | string | Yes | Physics Asset path |