CodeFizz
ToolsDemoDocsRoadmapChangelogPricingFAQ
Get the plugin

Getting Started

  • Introduction
  • Quick Start
  • Requirements
  • Installing the CLI
  • License & Machines

Guides

  • Installing the Plugin
  • The AI Skill
  • CLI vs MCP
  • Multiple Editors
  • How It Works
  • Discovering Commands

Walkthroughs

  • Build a Blueprint with AI
  • Author a Material Graph
  • Create a Niagara System
  • Rig a Character with AI

Reference

  • Reference
  • Control Rig
  • Niagara
  • PCG
  • Materials
  • StateTree
  • Sequencer
  • Level Actors
  • Project Settings
  • Blueprints
  • Blueprint Structs
  • Enhanced Input
  • Asset Management
  • Bulk Asset Ops
  • Data Assets
  • Object Properties
  • UMG Widgets
  • Data Tables
  • Curves
  • Console Commands
  • Profiling
  • Core
  • Debug

Help

  • FAQ
  • Troubleshooting
  • For AI Agents
DocsReferenceControl Rig

Control Rig

Every Control Rig command in CodeFizz Editor Agent, with parameters and examples.

Loading…
PreviousReferenceNextNiagara
CodeFizz

A drop-in Unreal Engine 5 plugin that exposes the entire editor surface (Blueprints, Materials, Niagara, PCG, StateTree, Control Rig, Insights profiling, and more) over the Model Context Protocol. Connect Claude Code, Cursor, VS Code, or any MCP-compatible client and let your AI build inside the engine.

Product

  • Features
  • Docs
  • Tools
  • Demo
  • Roadmap
  • Changelog
  • Pricing
  • FAQ

Resources

  • Install guide
  • Discord
  • YouTube
  • Open-source edition
  • Manage subscription

Legal

  • Refund Policy
  • Privacy Policy
  • Terms of Service

© 2026 CodeFizz. All rights reserved.

CodeFizz Editor Agent is a CodeFizz product. Payments processed by Polar Software, Inc. (Polar), the Merchant of Record.

127 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.

create_control_rig

Create a new empty Control Rig Blueprint

Creates a UControlRigBlueprint at the given path via UControlRigBlueprintFactory. Works for any skeleton; import bones separately or use create_control_rig_from_skeleton.

ParameterTypeRequiredDescription
asset_pathstringYesContent path for the new asset
modularboolNoCreate as a modular Control Rig
example
cfa create_control_rig --asset-path /Game/Rigs/CR_Spider
create_control_rig_from_skeleton

Create a Control Rig and import a skeleton (any skeleton)

Creates a Control Rig then imports the whole bone hierarchy (and optionally curves) in one call. Human, quadruped, snake, vehicle, any skeleton works. REQUIRES a USkeletalMesh: a USkeleton asset is REJECTED with a clear error, because a Skeleton has no geometry and the rig would have no visible preview. To import bones from a Skeleton into an EXISTING rig, use import_rig_skeleton instead.

ParameterTypeRequiredDescription
asset_pathstringYesContent path for the new asset
skeleton_pathstringYesUSkeletalMesh to import from (a USkeleton is rejected, its icon must say 'Skeletal Mesh')
import_curvesboolNoAlso import skeleton curves
modularboolNoCreate as a modular Control Rig
example
cfa create_control_rig_from_skeleton --asset-path /Game/Rigs/CR_Wolf --skeleton-path /Game/Wolf/SKM_Wolf
import_rig_skeleton

Import a skeleton's bones into an existing rig

ParameterTypeRequiredDescription
skeleton_pathstringYesUSkeleton or USkeletalMesh to import
namespacestringNoNamespace prefix for imported bones
replace_existingboolNoReplace existing bones
remove_obsoleteboolNoRemove bones not in the skeleton
import_curvesboolNoAlso import skeleton curves
example
cfa import_rig_skeleton --asset-path /Game/Rigs/CR_Wolf --skeleton-path /Game/Wolf/SK_Wolf
add_rig_bone

Add a bone to the rig hierarchy

ParameterTypeRequiredDescription
namestringYesNew bone name
parentstringNoParent element name (empty = top-level)
parent_typestringNoParent type: bone|null|control|socket
transformjsonNo{location,rotation,scale}
spacestringNoglobal|local
bone_typestringNoimported|user
example
cfa add_rig_bone --asset-path /Game/Rigs/CR_X --name spine_01 --parent root
add_rig_null

Add a null (space) to the rig hierarchy

ParameterTypeRequiredDescription
namestringYesNew null name
parentstringNoParent element name
parent_typestringNoParent type
transformjsonNo{location,rotation,scale}
spacestringNoglobal|local
example
cfa add_rig_null --asset-path /Game/Rigs/CR_X --name hand_ik_null
add_rig_control

Add an animation control of any type

Adds a control (transform/float/bool/vector2d/position/scale/rotator/eulertransform/...). Shape/color/limits and any further FRigControlSettings fields come from cosmetic params or the settings JSON object.

ParameterTypeRequiredDescription
namestringYesNew control name
parentstringNoParent element name
parent_typestringNoParent type
control_typestringYesbool|float|integer|vector2d|position|scale|rotator|transform|eulertransform|transformnoscale|scalefloat
valuejsonNoInitial value (shape depends on control_type)
offset_from_bonestringNoPREFERRED: bone to sit on, the offset is computed in the correct parent-relative space for you
offset_transformjsonNo{location,rotation,scale}, PARENT-RELATIVE (see offset_space)
offset_spacestringNoSpace of offset_transform: parent (default) or global (converted for you)
display_namestringNoDisplay name
shape_namestringNoGizmo shape name (see list_rig_control_shapes)
shape_colorjsonNo{r,g,b,a} 0..1 (any case), array, or struct string
shape_transformjsonNoGizmo transform {location,rotation,scale}, sizes/positions the visual
settingsjsonNoExtra FRigControlSettings fields (LimitEnabled, bDrawLimits, PreferredRotationOrder...)
example
cfa add_rig_control --asset-path /Game/Rigs/CR_X --name hand_r_ctrl --control-type transform --parent hand_r
add_rig_curve

Add a named curve element

ParameterTypeRequiredDescription
namestringYesNew curve name
valuefloatNoInitial value
example
cfa add_rig_curve --asset-path /Game/Rigs/CR_X --name jaw_open
add_rig_socket

Add a socket under a parent bone/null

ParameterTypeRequiredDescription
namestringYesNew socket name
parentstringNoParent element name
parent_typestringNoParent type
transformjsonNo{location,rotation,scale}
spacestringNoglobal|local
colorjsonNo{r,g,b,a} 0..1
descriptionstringNoSocket description
example
cfa add_rig_socket --asset-path /Game/Rigs/CR_X --name weapon_socket --parent hand_r
add_rig_connector

Declare a connector on a Control Rig MODULE asset

Declares the socket a modular rig binds this module by. A module has exactly ONE primary connector; secondary ones may be optional and/or arrays. Without connection rules a connector accepts anything, so auto_connect_rig_modules cannot resolve it, add rules with add_rig_connection_rule, or pass --default-rules for the engine's Socket-only rule.

ParameterTypeRequiredDescription
namestringYesNew connector name
typestringNoprimary | secondary (default primary)
optionalboolNoMay stay unresolved. SECONDARY only, the engine rejects an optional primary
is_arrayboolNoAccepts multiple targets. SECONDARY only, force-cleared on a primary
post_constructionboolNoDefer to the post-construction event. SECONDARY only, engine 5.7+
descriptionstringNoDescription shown in the connector UI
default_rulesboolNoInstall the engine default rule set (one Type rule restricting targets to Socket)
example
cfa add_rig_connector --asset-path /Game/Rigs/CR_Module --name Root --type primary --default-rules
set_rig_connector_settings

Change an existing connector's type, flags or description

Omitted flags are left unchanged. Primary connectors cannot be optional or arrays, the command refuses rather than writing state the engine silently drops.

ParameterTypeRequiredDescription
namestringYesExisting connector name
typestringNoprimary | secondary. Omit to leave unchanged
optionalstringNotrue | false. Omit to leave unchanged
is_arraystringNotrue | false. Omit to leave unchanged
post_constructionstringNotrue | false (5.7+). Omit to leave unchanged
descriptionstringNoOmit to leave unchanged
clear_rulesboolNoDrop every connection rule before applying the rest
example
cfa set_rig_connector_settings --asset-path /Game/Rigs/CR_Module --name Parent --type secondary --optional true
add_rig_connection_rule

Add a connection rule restricting what a connector may bind to

Rules are what let the rule manager auto-resolve a connector. Rule properties are Unreal struct text. The available rule set DIFFERS BY ENGINE, run list_rig_connection_rule_types first.

ParameterTypeRequiredDescription
connectorstringYesConnector to add the rule to
rulestringYesRule struct or short name, e.g. RigTypeConnectionRule or Type
propertiesstringNoUnreal struct text, e.g. "(ElementType=Socket)" or "(Tag=\"Spine\")"
example
cfa add_rig_connection_rule --asset-path /Game/Rigs/CR_Module --connector Root --rule Type --properties "(ElementType=Socket)"
list_rig_connection_rule_types

List the connection rule types this engine ships

The set is version dependent: FRigOnChainRule exists on 5.6/5.7 only, FRigArraySizeConnectionRule on 5.8 only. Discovered by reflection, so it is always what THIS engine actually has.

ParameterTypeRequiredDescription
filterstringNoSubstring filter on struct or display name
example
cfa list_rig_connection_rule_types
create_control_rig_module

Create a Control Rig MODULE asset

Creates a building block for a Modular Rig. This is NOT create_control_rig --modular, which creates the modular rig CONTAINER. Import the skeleton via --skeleton-path in the same call: conversion rebuilds the hierarchy and a module may otherwise only hold bones, curves and connectors. When the hierarchy has no connector yet, the engine spawns a primary connector plus matching socket automatically.

ParameterTypeRequiredDescription
asset_pathstringYesContent path for the new module asset
skeleton_pathstringNoUSkeleton or USkeletalMesh the module is authored against
auto_convert_hierarchyboolNoLet the engine convert a non-conforming hierarchy instead of refusing (default true)
display_namestringNoModule name in the Module Assets browser (defaults to the asset name)
categorystringNoBrowser category, e.g. Biped or Physics
keywordsstringNoSearch keywords
descriptionstringNoTooltip description
example
cfa create_control_rig_module --asset-path /Game/Rigs/CFA_ChainLimited --skeleton-path /Game/Chars/SK_Hero --category Physics
get_rig_module_settings

Read a Control Rig's module identity and metadata

example
cfa get_rig_module_settings --asset-path /Game/Rigs/CFA_ChainLimited
set_rig_module_settings

Write a module's identity and library metadata

display_name IS the module identifier, an asset is a module precisely because that field is non-empty. Everything else is browser metadata.

ParameterTypeRequiredDescription
display_namestringNoModule identifier name
module_typestringNoModule kind, e.g. Arm
categorystringNoBrowser category
keywordsstringNoSearch keywords
descriptionstringNoTooltip description
iconstringNoContent path of a Texture2D icon
example
cfa set_rig_module_settings --asset-path /Game/Rigs/CFA_ChainLimited --category Physics --keywords "jiggle,dangle"
create_rig_variable

Add an asset-level member variable to a Control Rig

public=true is what makes the variable appear as per-instance module CONFIG in a Modular Rig: it clears CPF_DisableEditOnInstance, which is exactly what the modular rig tests for. Struct and array types need a CPP type PATH, a bare struct name asserts.

ParameterTypeRequiredDescription
namestringYesVariable name
cpp_typestringYesCPP type path, e.g. float, bool, FName, TArray</Script/ControlRig.RigElementKey>
publicboolNoInstance editable, makes it module config (default true)
read_onlyboolNoBlueprint read only. A read-only variable is rejected by the module config writer
default_valuestringNoDefault value as Unreal text
example
cfa create_rig_variable --asset-path /Game/Rigs/CFA_ChainLimited --name ConeAngle --cpp-type float --default-value 20.0
create_rig_variables

Add MANY member variables to a Control Rig with a single compile

Use this instead of calling create_rig_variable in a loop. Each singular call runs a FULL blueprint compile (class reinstancing + garbage collection), so a few in a row crash the editor. This adds every variable skeleton-only and compiles once at the end. Flags match the singular command exactly, so public=true still yields module config.

ParameterTypeRequiredDescription
variablesstringYesJSON array: [{"name":"X","cpp_type":"float","public":true,"read_only":false,"default_value":"1.0"}]
example
cfa create_rig_variables --asset-path /Game/Rigs/CFA_ChainLimited --variables '[{"name":"ConeAngleDeg","cpp_type":"float","default_value":"20.0"},{"name":"SquishCm","cpp_type":"float","default_value":"3.0"},{"name":"Bones","cpp_type":"TArray</Script/ControlRig.RigElementKey>"}]'
list_rig_variables

List a Control Rig's member variables and their config flags

ParameterTypeRequiredDescription
filterstringNoSubstring filter on the variable name
example
cfa list_rig_variables --asset-path /Game/Rigs/CFA_ChainLimited
remove_rig_variable

Remove an asset-level member variable from a Control Rig

ParameterTypeRequiredDescription
namestringYesVariable name to remove
example
cfa remove_rig_variable --asset-path /Game/Rigs/CFA_ChainLimited --name ConeAngle
add_rig_animation_channel

Add an animation channel under a control

Adds an animation channel. ALWAYS pass minimum/maximum for a scalar channel: without them the channel is created with Min=Max=0, and the details panel and Sequencer feed the spin box straight from those values with no limit check, so SSpinBox clamps every drag commit to 0, the slider looks alive and always returns 0. minimum/maximum fix the slider; limit_enabled additionally hard-clamps typed values.

ParameterTypeRequiredDescription
namestringYesNew channel name
parent_controlstringYesParent control name
control_typestringYesbool|float|integer|vector2d|position|scale|rotator
minimumfloatNoSlider minimum (scalar types), omit and the slider is stuck at 0
maximumfloatNoSlider maximum, e.g. 1 for an alpha, 50 for a multiplier
limit_enabledboolNoAlso hard-clamp values to the range, not just the slider
example
cfa add_rig_animation_channel --asset-path /Game/Rigs/CR_X --name HairGravity --parent-control root_ctrl --control-type float --minimum 0 --maximum 50
set_rig_element_parent

Reparent an element

ParameterTypeRequiredDescription
namestringYesChild element name
typestringNoChild type
parentstringYesNew parent name
parent_typestringNoNew parent type
maintain_globalboolNoKeep global transform
example
cfa set_rig_element_parent --asset-path /Game/Rigs/CR_X --name hand_ctrl --parent arm_null
set_rig_control_settings

Update a control's settings (reflection)

ParameterTypeRequiredDescription
namestringYesControl name
settingsjsonYesFRigControlSettings fields
example
cfa set_rig_control_settings --asset-path /Game/Rigs/CR_X --name hand_ctrl --settings '{"ShapeName":"Box"}'
set_rig_control_value

Set a control's initial or current value

ParameterTypeRequiredDescription
namestringYesControl name
control_typestringNoOverride type (else use declared)
valuejsonYesValue (shape depends on control type)
value_typestringNoinitial|current|minimum|maximum (min/max set the control's limits)
previewboolNoWrite to the open editor's DEBUG rig (module-spawned controls/channels like 'Simulation Mode'); not persisted, re-apply after compile
example
cfa set_rig_control_value --asset-path /Game/Rigs/CR_X --name switch_ctrl --value true
move_rig_control

Move a control like dragging its gizmo (select + SetControlGlobalTransform + evaluate), report bones moved

ParameterTypeRequiredDescription
namestringYesControl name (module-qualified on a modular rig, e.g. Root/global_ctrl)
transformjsonYesTarget GLOBAL transform {location, rotation, scale}
relativeboolNoTreat transform as a delta on the control's current global transform
selectboolNoSelect the control first, as clicking it in the Rig Hierarchy does
fix_euler_flipsboolNoCompensate Euler flips on rotation controls
report_bonesboolNoReport which bones the move actually displaced
max_bonesintNoMax bones listed, largest movement first
example
cfa move_rig_control --asset-path /Game/Rigs/CR_X --name global_ctrl --transform '{"location":{"x":0,"y":0,"z":50}}' --relative
select_rig_elements

Select/deselect rig elements through the engine controller

ParameterTypeRequiredDescription
namesstringlistYesElement names to select
typestringNobone|null|control|socket|connector|curve
selectboolNoFalse deselects instead
clear_selectionboolNoClear existing selection first
example
cfa select_rig_elements --asset-path /Game/Rigs/CR_X --names global_ctrl,hips_ctrl
set_rig_control_offset

Set a control's offset transform

ParameterTypeRequiredDescription
namestringYesControl name
transformjsonYes{location,rotation,scale}
initialboolNoApply to the initial offset
example
cfa set_rig_control_offset --asset-path /Game/Rigs/CR_X --name hand_ctrl --transform '{"location":{"x":0,"y":0,"z":10}}'
set_rig_element_transform

Set an element's transform

ParameterTypeRequiredDescription
namestringYesElement name
typestringNoElement type
transformjsonYes{location,rotation,scale}
spacestringNoglobal|local
initialboolNoSet the initial (setup) transform
example
cfa set_rig_element_transform --asset-path /Game/Rigs/CR_X --name spine_01 --transform '{"location":{"x":0,"y":0,"z":100}}'
remove_rig_element

Remove an element from the rig hierarchy

ParameterTypeRequiredDescription
namestringYesElement name
typestringNoElement type
example
cfa remove_rig_element --asset-path /Game/Rigs/CR_X --name hand_ctrl
rename_rig_element

Rename an element

ParameterTypeRequiredDescription
namestringYesCurrent element name
typestringNoElement type
new_namestringYesNew element name
example
cfa rename_rig_element --asset-path /Game/Rigs/CR_X --name ctrl_a --new-name hand_l_ctrl
build_rig_hierarchy

Atomically build a whole hierarchy

Builds bones/nulls/controls/curves/sockets from an elements[] array in one call, validated before mutation. Each element: {type,name,parent,parent_type,transform,control_type,value...}. For controls prefer "offset_from_bone":"<bone>" over a raw offset_transform, a control's offset is PARENT-RELATIVE, so feeding a bone's global transform to a parented control compounds every ancestor offset (the build refuses it and tells you the correct value).

ParameterTypeRequiredDescription
clear_existingboolNoRemove existing elements first
elementsjsonNoArray of element definitions (prefer --json)
example
cfa build_rig_hierarchy --asset-path /Game/Rigs/CR_X --json '{"elements":[...]}'
get_rig_hierarchy

Read the rig hierarchy as a tree

ParameterTypeRequiredDescription
filterstringNoSubstring filter on element name (case-insensitive). Composes with type_filter, without it a 311-bone rig returns all 311
max_resultsintNoCap returned elements; reports matched + truncated
type_filterstringNobone|null|control|curve|socket|connector
include_transformsboolNoInclude local + global transforms
liveboolNoRead the DEBUGGED instance, required to see a modular rig's construction-spawned controls (needs the asset editor open)
example
cfa get_rig_hierarchy --asset-path /Game/Rigs/CR_X --include-transforms
get_rig_element

Read one element

ParameterTypeRequiredDescription
namestringYesElement name
typestringNoElement type
example
cfa get_rig_element --asset-path /Game/Rigs/CR_X --name hand_ctrl
list_rig_control_types

List valid control + element types

ParameterTypeRequiredDescription
filterstringNoSubstring filter
example
cfa list_rig_control_types
search_rig_vm_nodes

Search RigVM graph node types

Fuzzy-searches available RigVM node types (template notations + unit structs) and returns the top-N ranked, like search_nodes for blueprints.

ParameterTypeRequiredDescription
filterstringNoFuzzy filter
max_resultsintNoMax results (1..200)
include_unitsboolNoInclude unit structs too
example
cfa search_rig_vm_nodes --filter "get transform"
list_rig_vm_node_types

List registered RigVM template notations

ParameterTypeRequiredDescription
filterstringNoSubstring filter
max_resultsintNoMax results (0 = unlimited)
example
cfa list_rig_vm_node_types --filter Math
get_rig_vm_node_type_info

Describe one or many RigVM node types' pins

Returns inputs/outputs for a node type. Single: --type-name. Batch: --type-names "A,B,C" (or a JSON array via --json) describes each in one call.

ParameterTypeRequiredDescription
type_namestringNoSingle template notation or unit struct name/path
type_namesstringNoBatch: comma-separated list (or JSON array via --json)
example
cfa get_rig_vm_node_type_info --type-names "RigVMFunction_MathFloatAdd,RigVMFunction_MathFloatMul"
get_rig_vm_graph_nodes

Read a RigVM graph's nodes

ParameterTypeRequiredDescription
verbositystringNosummary|connections|full
type_filterstringNoFilter on node class/title
example
cfa get_rig_vm_graph_nodes --asset-path /Game/Rigs/CR_X
describe_rig_vm_node

Describe one RigVM node in a graph

ParameterTypeRequiredDescription
node_namestringYesNode name
example
cfa describe_rig_vm_node --asset-path /Game/Rigs/CR_X --node-name GetTransform
add_rig_vm_node

Add a node to a RigVM graph

Adds a unit/template/variable/reroute/comment node. Unit: node_type = struct name/path. Template: node_type = notation. Variable: variable_name + cpp_type + is_getter.

ParameterTypeRequiredDescription
node_kindstringNounit|template|variable|reroute|comment|branch|if|select|invoke_entry|enum|constant
node_typestringNoUnit struct name/path or template notation
method_namestringNoUnit method name
node_namestringNoExplicit node name (empty = auto)
pos_xfloatNoEditor X position
pos_yfloatNoEditor Y position
variable_namestringNoVariable node: variable name
cpp_typestringNoCPP type for variable/reroute/if/select/constant (float, FVector, FTransform)
cpp_type_objectstringNoCPP type object path for struct/enum types (e.g. /Script/CoreUObject.Transform)
is_getterboolNoVariable node: getter vs setter
comment_textstringNoComment node text
entry_namestringNoinvoke_entry: the entry/event name to invoke
default_valuestringNoconstant: the constant's default value
defaultsjsonNoInline pin defaults {pin: value} applied at creation (dotted sub-pins ok). Pass via --json
example
cfa add_rig_vm_node --asset-path /Game/Rigs/CR_X --node-type RigVMFunction_MathFloatAdd --pos-x 100
connect_rig_vm_nodes

Connect an output pin to an input pin

ParameterTypeRequiredDescription
source_nodestringYesSource node name
source_pinstringYesSource (output) pin
target_nodestringYesTarget node name
target_pinstringYesTarget (input) pin
example
cfa connect_rig_vm_nodes --asset-path /Game/Rigs/CR_X --source-node A --source-pin Result --target-node B --target-pin Value
disconnect_rig_vm_nodes

Break a link, or all links on a pin

ParameterTypeRequiredDescription
source_nodestringNoSpecific link: source node
source_pinstringNoSpecific link: source pin
target_nodestringNoSpecific link: target node
target_pinstringNoSpecific link: target pin
nodestringNoBreak-all: node name
pinstringNoBreak-all: pin name
is_inputboolNoBreak-all: treat pin as input
example
cfa disconnect_rig_vm_nodes --asset-path /Game/Rigs/CR_X --node B --pin Value
set_rig_vm_pin_default

Set a node pin's default value

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesPin name
valuestringYesDefault value string
example
cfa set_rig_vm_pin_default --asset-path /Game/Rigs/CR_X --node Add --pin A --value 2.0
set_rig_vm_node_position

Set a RigVM node's position

ParameterTypeRequiredDescription
nodestringYesNode name
pos_xfloatYesEditor X
pos_yfloatYesEditor Y
example
cfa set_rig_vm_node_position --asset-path /Game/Rigs/CR_X --node Add --pos-x 400 --pos-y 100
remove_rig_vm_node

Remove a node from a RigVM graph

ParameterTypeRequiredDescription
nodestringYesNode name
example
cfa remove_rig_vm_node --asset-path /Game/Rigs/CR_X --node Add
build_rig_vm_graph

Atomically build a RigVM graph

Adds nodes[] and connections[] in one undo bracket, with optional auto-layout. Connection endpoints are node indices (into nodes[]) or explicit node names.

ParameterTypeRequiredDescription
auto_layoutboolNoAuto-arrange the new nodes
clear_existingboolNoRemove existing non-event nodes first (clean rebuild)
nodesjsonNoArray of node definitions (prefer --json)
connectionsjsonNoArray of connections (prefer --json)
example
cfa build_rig_vm_graph --asset-path /Game/Rigs/CR_X --json '{"nodes":[...],"connections":[...]}'
layout_rig_vm_graph

Auto-arrange a RigVM graph

ParameterTypeRequiredDescription
spacing_xfloatNoHorizontal spacing between layers
spacing_yfloatNoVertical spacing within a layer
add_reroutesboolNoRoute long/backward data wires through reroute knots
all_graphsboolNoArrange EVERY graph on the asset, local functions, collapse sub-graphs and a module's construction/forwards graphs, not just the main one. Mutually exclusive with graph_name
extract_sharedboolNoRefactor shared pure computations to their usage sites: multi-node groups become named library functions called per site, trivial getters are duplicated; reports dead_end_nodes
example
cfa layout_rig_vm_graph --asset-path /Game/Rigs/CR_X
set_rig_vm_pin_defaults

Batch-set many node pin defaults in one call

Applies an array of {node, pin, value} in one undo bracket. The efficient way to assign bones/values across many nodes (vs one set_rig_vm_pin_default per pin).

ParameterTypeRequiredDescription
pinsjsonNoArray of {node,pin,value} (prefer --json)
example
cfa set_rig_vm_pin_defaults --asset-path /Game/Rigs/CR_X --json '{"pins":[{"node":"AddNode","pin":"A","value":"5.0"}]}'
list_rig_control_shapes

List available gizmo shape names

Lists the shape names a rig can use (from its shape libraries; falls back to the engine default library). Use these for --shape-name on add_rig_control / set_rig_control_shape.

ParameterTypeRequiredDescription
asset_pathstringNoRig asset (empty = engine default library)
filterstringNoSubstring filter on shape names
example
cfa list_rig_control_shapes --asset-path /Game/Rigs/CR_X
set_rig_control_shape

Set a control's shape / color / visibility / gizmo transform

ParameterTypeRequiredDescription
namestringNoControl name (single form; omit with --controls)
typestringNoElement type
shape_namestringNoGizmo shape name (see list_rig_control_shapes)
shape_colorjsonNo{r,g,b,a} 0..1 (any case), array, or struct string
shape_visibleboolNoGizmo visibility
shape_transformjsonNoGizmo transform {location,rotation,scale} (persists: sets initial+current)
controlsjsonNoBatch: array of {name, shape_name, shape_color, shape_visible, shape_transform}, one recompile+save total
example
cfa set_rig_control_shape --asset-path /Game/Rigs/CR_X --name hand_l_ik_ctrl --shape-name Box --shape-color '{"r":1,"g":0,"b":0}'
validate_rig_gizmos

Gizmo gate, fails the rig when controls are unfitted, buried, or wrongly shaped

Owns the gizmo pass/fail verdict so callers cannot write the gate wrong. Errors: shape_transform_identity (fit_rig_control_shapes never ran), gizmo_inside_mesh (buried, unclickable). Warnings: default_shape_name, gizmo_oversized. Animation-channel and bool controls are skipped, not flagged, they cannot own a shape (FRigControlSettings::SupportsShape), and are counted in 'non_shape_controls_skipped'. Read 'verdict', pass or fail.

ParameterTypeRequiredDescription
mesh_pathstringNoSkeletal mesh to measure against (empty = the rig's preview mesh)
max_resultsintNoMaximum issues to return
liveboolNoGate the DEBUGGED instance (auto-on for modular rigs, whose blueprint holds zero controls)
example
cfa validate_rig_gizmos --asset-path /Game/Rigs/CR_X
fit_rig_control_shapes

Size/orient control gizmos from the mesh's real skinned cross-section (no guessed scales)

ParameterTypeRequiredDescription
controlsstringNoComma-separated control names (empty = every visible transform control)
marginfloatNoGizmo radius = mesh cross-section radius x margin
dry_runboolNoReport computed fits without applying
mesh_pathstringNoSkeletal mesh to measure (empty = the rig's preview mesh)
orientboolNoAlign each gizmo's plane perpendicular to the bone's long axis
liveboolNoFit the DEBUGGED instance (auto-on for modular rigs, fitting their blueprint fits nothing)
example
cfa fit_rig_control_shapes --asset-path /Game/Rigs/CR_X --margin 1.25
set_rig_vm_node_color

Set a RigVM node's tint color

ParameterTypeRequiredDescription
nodestringYesNode name
colorjsonYes{r,g,b,a} 0..1 (any case), array, or struct string
example
cfa set_rig_vm_node_color --asset-path /Game/Rigs/CR_X --node AddNode --color '{"r":0.2,"g":0.4,"b":1}'
set_rig_vm_node_size

Set a RigVM node's size (comment/collapse boxes)

ParameterTypeRequiredDescription
nodestringYesNode name
widthfloatYesNode width
heightfloatYesNode height
example
cfa set_rig_vm_node_size --asset-path /Game/Rigs/CR_X --node NoteNode --width 500 --height 300
set_rig_vm_comment

Set a comment node's text/font/bubble

ParameterTypeRequiredDescription
nodestringYesComment node name
textstringYesComment text
font_sizeintNoFont size
bubble_visibleboolNoShow the comment bubble
color_bubbleboolNoTint the bubble with the node color
example
cfa set_rig_vm_comment --asset-path /Game/Rigs/CR_X --node NoteNode --text "Leg IK" --font-size 24
rename_rig_vm_node

Rename a RigVM node

ParameterTypeRequiredDescription
nodestringYesCurrent node name
new_namestringYesNew node name
example
cfa rename_rig_vm_node --asset-path /Game/Rigs/CR_X --node RigVMFunction_MathFloatAdd --new-name LegBlend
set_rig_vm_pin_expansion

Expand/collapse a struct/array pin

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesPin name
expandedboolNoExpanded (true) or collapsed
example
cfa set_rig_vm_pin_expansion --asset-path /Game/Rigs/CR_X --node SetTransform --pin Value --expanded=true
set_rig_vm_pin_watch

Toggle a pin's debug watch

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesPin name to watch
watchedboolNoWatch (true) or unwatch
example
cfa set_rig_vm_pin_watch --asset-path /Game/Rigs/CR_X --node SetTransform --pin Value
resolve_rig_vm_wildcard_pin

Lock a wildcard/template pin to a concrete type

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesWildcard pin name
cpp_typestringYesConcrete type (float, FVector, FTransform)
cpp_type_objectstringNoType object path for struct/enum types
example
cfa resolve_rig_vm_wildcard_pin --asset-path /Game/Rigs/CR_X --node MakeArray --pin Values --cpp-type FVector
set_rig_vm_array_pin_size

Set an array pin's element count

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesArray pin name
sizeintYesElement count
default_valuestringNoDefault for new elements
example
cfa set_rig_vm_array_pin_size --asset-path /Game/Rigs/CR_X --node SelectNode --pin Values --size 3
add_rig_vm_aggregate_pin

Add exec output pin(s) to a Sequence node so the graph can fan out

ParameterTypeRequiredDescription
nodestringYesNode to grow (e.g. a Sequence)
countintNoHow many pins to add (default 1)
pin_namestringNoExplicit name; empty = engine picks the next letter
default_valuestringNoDefault value for the new pin
example
cfa add_rig_vm_aggregate_pin --asset-path /Game/Rigs/CR_X --node SequenceNode --count 3
bind_rig_vm_pin_to_variable

Bind a pin directly to a variable

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesPin name
variablestringYesVariable path to bind to
example
cfa bind_rig_vm_pin_to_variable --asset-path /Game/Rigs/CR_X --node SetTransform --pin Weight --variable IKWeight
unbind_rig_vm_pin_from_variable

Remove a pin's variable binding

ParameterTypeRequiredDescription
nodestringYesNode name
pinstringYesPin name to unbind
example
cfa unbind_rig_vm_pin_from_variable --asset-path /Game/Rigs/CR_X --node SetTransform --pin Weight
create_rig_vm_function

Define a new function in the function library

Creates a reusable function in the rig's function library. Edit its body by passing its name as graph_name to add_rig_vm_node / build_rig_vm_graph, and define its interface with add_rig_vm_exposed_pin.

ParameterTypeRequiredDescription
namestringYesFunction name (also its graph_name)
mutableboolNoHas execute pins (mutable). false = pure data function
is_publicboolNoUsable from other rigs
example
cfa create_rig_vm_function --asset-path /Game/Rigs/CR_X --name TwoBoneLeg --mutable=true
remove_rig_vm_function

Remove a library function

ParameterTypeRequiredDescription
namestringYesFunction name to remove
example
cfa remove_rig_vm_function --asset-path /Game/Rigs/CR_X --name TwoBoneLeg
rename_rig_vm_function

Rename a library function

ParameterTypeRequiredDescription
namestringYesCurrent function name
new_namestringYesNew function name
example
cfa rename_rig_vm_function --asset-path /Game/Rigs/CR_X --name TwoBoneLeg --new-name IKLeg
set_rig_vm_function_access

Set a function public/private and/or pure/mutable

Toggles a function's visibility and/or purity. is_pure requires UE 5.8+. Pass only the flags you want to change.

ParameterTypeRequiredDescription
namestringYesFunction name
is_publicstringNo'true' or 'false' (empty = unchanged)
is_purestringNo'true' = pure/no-exec (empty = unchanged). UE 5.8+
example
cfa set_rig_vm_function_access --asset-path /Game/Rigs/CR_X --name IKLeg --is-public true
list_rig_vm_functions

List library functions with their I/O

example
cfa list_rig_vm_functions --asset-path /Game/Rigs/CR_X
add_rig_vm_function_node

Place a call to a library function

ParameterTypeRequiredDescription
function_namestringYesLibrary function to call
node_namestringNoOptional explicit node name
pos_xfloatNoEditor X position
pos_yfloatNoEditor Y position
example
cfa add_rig_vm_function_node --asset-path /Game/Rigs/CR_X --function-name IKLeg
add_rig_vm_exposed_pin

Add an input/output pin to a function/collapse graph

Adds an interface pin to a function or collapse sub-graph. Pass the function name as graph_name. Direction is input|output|io. For struct/enum types set cpp_type_object to the type's object path.

ParameterTypeRequiredDescription
graph_namestringYesFunction/collapse name (its contained graph)
pin_namestringYesNew pin name
directionstringYesinput | output | io
cpp_typestringYesfloat, int32, bool, FVector, FTransform, FRigElementKey...
cpp_type_objectstringNoType object path for struct/enum types
default_valuestringNoPin default value
example
cfa add_rig_vm_exposed_pin --asset-path /Game/Rigs/CR_X --graph-name IKLeg --pin-name Weight --direction input --cpp-type float
remove_rig_vm_exposed_pin

Remove an input/output pin from a function/collapse graph

ParameterTypeRequiredDescription
graph_namestringYesFunction/collapse name
pin_namestringYesExposed pin to remove
example
cfa remove_rig_vm_exposed_pin --asset-path /Game/Rigs/CR_X --graph-name IKLeg --pin-name Weight
rename_rig_vm_exposed_pin

Rename an input/output pin on a function/collapse graph

ParameterTypeRequiredDescription
graph_namestringYesFunction/collapse name
pin_namestringYesCurrent pin name
new_namestringYesNew pin name
example
cfa rename_rig_vm_exposed_pin --asset-path /Game/Rigs/CR_X --graph-name IKLeg --pin-name Weight --new-name Alpha
collapse_rig_vm_nodes

Collapse nodes into a sub-graph

Collapses the given nodes into a single collapse node with its own contained graph. Edit that sub-graph by passing the collapse node's name as graph_name. Promote it to a reusable library function with promote_rig_vm_node.

ParameterTypeRequiredDescription
node_namesstringYesComma-separated node names (or JSON array via --json)
collapse_namestringNoName for the resulting collapse node/sub-graph
example
cfa collapse_rig_vm_nodes --asset-path /Game/Rigs/CR_X --node-names get_leg,solve_leg,set_leg --collapse-name LegBlock
expand_rig_vm_node

Expand a collapse/function node back inline

ParameterTypeRequiredDescription
nodestringYesCollapse/function node to expand
example
cfa expand_rig_vm_node --asset-path /Game/Rigs/CR_X --node LegBlock
promote_rig_vm_node

Promote collapse<->function

to_function turns a collapse node into a reusable library function (+ a reference to it). to_collapse turns a function reference back into an inline collapse node.

ParameterTypeRequiredDescription
nodestringYesCollapse or function-reference node
directionstringNoto_function | to_collapse
example
cfa promote_rig_vm_node --asset-path /Game/Rigs/CR_X --node LegBlock --direction to_function
add_rig_vm_local_variable

Add a graph-scoped local variable

ParameterTypeRequiredDescription
namestringYesVariable name
cpp_typestringYesfloat, int32, bool, FVector, FTransform...
cpp_type_objectstringNoType object path for struct/enum types
default_valuestringNoDefault value string
example
cfa add_rig_vm_local_variable --asset-path /Game/Rigs/CR_X --name IKWeight --cpp-type float --default-value 1.0
remove_rig_vm_local_variable

Remove a graph-scoped local variable

ParameterTypeRequiredDescription
namestringYesVariable name to remove
example
cfa remove_rig_vm_local_variable --asset-path /Game/Rigs/CR_X --name IKWeight
list_rig_vm_local_variables

List a graph's local variables

example
cfa list_rig_vm_local_variables --asset-path /Game/Rigs/CR_X
unresolve_rig_vm_node

Reset a template node's pins to wildcard

Inverse of resolve_rig_vm_wildcard_pin — resets one or more template nodes back to their wildcard state so their type can be re-inferred from new connections.

ParameterTypeRequiredDescription
nodestringNoSingle template node
nodesstringNoMultiple nodes: comma-separated (or JSON array via --json)
example
cfa unresolve_rig_vm_node --asset-path /Game/Rigs/CR_X --node MakeArray
add_rig_vm_event

Add a solve event node by friendly name

Adds a Control Rig solve event: construction (setup), forward (Forwards Solve, the per-frame solve), backward (Backwards Solve), preforward, postforward, or interaction.

ParameterTypeRequiredDescription
eventstringYesconstruction|forward|backward|preforward|postforward|interaction
node_namestringNoOptional explicit node name
pos_xfloatNoEditor X position
pos_yfloatNoEditor Y position
example
cfa add_rig_vm_event --asset-path /Game/Rigs/CR_X --event backward
list_rig_vm_graphs

List every graph in the rig

Lists all graphs — top models (Forwards/Construction/Backwards live here), the function library, each function, and each collapse sub-graph — with the graph_name to pass to other commands and its kind + node count.

example
cfa list_rig_vm_graphs --asset-path /Game/Rigs/CR_X
start_rig_motion_capture

Sample the live preview rig per frame

Starts capturing every rendered frame's bone transforms from the OPEN asset editor's preview rig instance. Measures what screenshots cannot: frame-to-frame jitter, oscillation, and frame-dt spikes. Fetch results with get_rig_motion_report.

ParameterTypeRequiredDescription
bonesstringlistNoBone names to sample (empty = every bone)
framesintNoFrames to capture (10-2000)
example
cfa start_rig_motion_capture --asset-path /Game/Rigs/CR_X --frames 120
get_rig_motion_report

Per-bone jitter/motion statistics

Returns the capture report: per-bone RMS frame-to-frame position delta, direction-flip ratio, amplitude, rotation deltas, and a jittering/swinging/moving/stable verdict — worst offenders first — plus frame-dt stats. Poll until complete=true.

ParameterTypeRequiredDescription
max_bonesintNoMax bones in the report (worst first)
example
cfa get_rig_motion_report
start_rig_physics_probe

THE physics alive-gate: shake a control, freeze it, measure residual jiggle

Drives one control through a sine shake on the OPEN asset editor's preview instance, freezes it, then keeps sampling. Residual bone motion AFTER the driver stops IS jiggle: a pure-FK bone stops dead with its control, a simulated bone keeps decaying. This is the only gate that separates a calm rig from a DEAD one - a body census, a solver count and a 'healthy' verdict all read identical on a rig where nothing simulates. Needs no animation asset. Fetch results with get_rig_physics_probe_report.

ParameterTypeRequiredDescription
controlstringNoControl to shake (empty = root-most control, which excites every chain). Modular rigs use module-qualified names, e.g. Root/global_ctrl
drive_bonestringNoBone to shake instead of a control - use on a physics-only rig with no controls. Takes precedence over --control
shake_cmfloatNoShake amplitude in cm
shake_framesintNoFrames to shake (one full sine period)
settle_framesintNoFrames sampled after the control freezes - the measurement window
bonesstringlistNoBone names to sample (empty = every bone)
example
cfa start_rig_physics_probe --asset-path /Game/Rigs/CR_X --shake-cm 30
get_rig_physics_probe_report

Per-bone residual jiggle after the driver stopped

Returns the probe report: per-bone LINEAR and ANGULAR residual measured only in the settle window, worst first, plus how far the shake actually moved each bone. Judge only rows with excited=true - a bone the shake never reached carries no verdict. residual_rms_deg is what catches flesh and hair, which rotate about their own origin and barely translate, so a linear-only reading calls a visibly jiggling chain dead. verdict is one of physics_alive, no_physics_response (bones moved then stopped dead) or inconclusive (the shake excited nothing). Poll until complete=true.

ParameterTypeRequiredDescription
asset_pathstringNoOptional guard: error instead of returning another asset's stored probe. The probe is global state
residual_threshold_cmfloatNoPer-frame linear residual RMS above which a bone counts as responding
residual_threshold_degfloatNoPer-frame angular residual RMS (degrees) above which a bone counts as responding - the threshold that catches flesh and hair
excitation_floor_cmfloatNoMinimum travel during the shake for a bone to be judged at all
excitation_floor_degfloatNoMinimum rotation during the shake for a bone to be judged at all
max_bonesintNoMax bones in the report (worst first)
example
cfa get_rig_physics_probe_report
set_rig_preview_mesh

Set an existing rig's preview skeletal mesh

Sets the skeletal mesh a Control Rig previews on (UControlRigBlueprint::SetPreviewMesh — the same engine path as the editor's Preview Settings mesh picker). create_control_rig_from_skeleton sets this automatically; use this to change it afterwards or on rigs created empty.

ParameterTypeRequiredDescription
mesh_pathstringYesContent path of the USkeletalMesh to preview on
example
cfa set_rig_preview_mesh --asset-path /Game/Rigs/CR_X --mesh-path /Game/Chars/SK_Hero
add_rig_module

Add a Rig Module to a Modular Rig

Adds a Rig Module instance to a Modular Rig — the same engine path as the editor's drag-and-drop Module workflow. Epic ships a module library under /ControlRigModules/Modules (Arm, Leg, Spine, Neck, Shoulder, Foot, Finger, Chain...). Returns the new module's connectors so you can bind them next.

ParameterTypeRequiredDescription
module_namestringYesName for the new module instance (e.g. Arm_l)
module_asset_pathstringYesRig Module asset path (e.g. /ControlRigModules/Modules/Arm)
parent_modulestringNoParent module to nest under (empty = root)
example
cfa add_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l --module-asset-path /ControlRigModules/Modules/Arm
connect_rig_module_connector

Bind a module connector to an element

Connects a module's connector (primary or secondary, e.g. "Arm_l/Root") to a hierarchy element. Pre-validates with the engine's CanConnectConnectorToElement so failures explain WHY; other connectors auto-resolve where possible.

ParameterTypeRequiredDescription
connectorstringYesConnector element name (Module/Connector)
target_namestringNoElement to bind to (single target)
target_namesstringlistNoMultiple targets for ARRAY connectors (e.g. Twist Bones); overrides target_name
target_typestringNobone|control|null|socket
example
cfa connect_rig_module_connector --asset-path /Game/Rigs/MR_X --connector "Arm_l/Root" --target-name upperarm_l
auto_connect_rig_modules

Auto-resolve module connectors

Runs the engine's modular-rig rule manager to auto-resolve connectors for the given modules (all modules when omitted) — the same logic as the editor's auto-resolve. Returns every connector with its resolved targets.

ParameterTypeRequiredDescription
module_namesstringlistNoModules to resolve (empty = all)
replace_existingboolNoReplace already-resolved connections
example
cfa auto_connect_rig_modules --asset-path /Game/Rigs/MR_X
get_rig_module_connector_candidates

List engine-valid targets for a module connector

Queries Unreal's Modular Rig rule manager for one connector. Returns compatible targets in engine order with default/possible state, parent and transforms; optionally includes rejected targets with the engine's reason. Use this before choosing primary sockets or correcting secondary auto-resolution on arbitrary skeletons.

ParameterTypeRequiredDescription
connectorstringYesConnector element name (Module/Connector)
filterstringNoSubstring filter for candidate target names
max_resultsintNoMaximum compatible candidates (1-200)
include_excludedboolNoInclude rejected targets and engine rejection reasons
example
cfa get_rig_module_connector_candidates --asset-path /Game/Rigs/MR_X --connector "Spine/Spine Primary"
list_rig_modules

List a Modular Rig's modules

Lists every module instance in a Modular Rig with its module class, parent module, each connector's resolved targets (plus primary/optional/array flags), warnings (required-but-unconnected connectors, outdated module assets — the editor's red triangles), and config-override/binding counts.

example
cfa list_rig_modules --asset-path /Game/Rigs/MR_X
remove_rig_module

Delete a module from a Modular Rig

Deletes a module instance (and its elements) from a Modular Rig.

ParameterTypeRequiredDescription
module_namestringYesModule instance to delete
example
cfa remove_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l
list_rig_module_assets

Query the Rig Module asset library

The editor's Module Assets browser as a command: scans the asset registry (no asset loads) for every Rig Module asset and returns name, category, connectors summary and variant tags (Epic/Physics/Stable/...). Assets whose tags mark them deprecated are excluded by default, matching the editor's 'Exclude Outdated' filter. --detailed adds keywords, description and the full connector list (the module's documentation, e.g. ChainPhysics' options).

ParameterTypeRequiredDescription
filterstringNoText matched against asset name, module name, category, keywords, description
pathstringNoScope to a content path (e.g. /ControlRigModules)
tagstringNoOnly modules carrying this variant tag (e.g. Physics)
include_outdatedboolNoInclude deprecated/outdated modules
detailedboolNoAdd description, keywords and per-connector details
max_resultsintNoMaximum modules to return after filtering (1-200)
example
cfa list_rig_module_assets --filter Chain --detailed
get_rig_module_config

Read a module instance's config

Lists a module instance's config variables: name, type, read-only flag and bindings, plus active overrides. Use --filter and --max-results for compact discovery, --include-defaults for full Unreal-text defaults, and --variable for possible binding sources.

ParameterTypeRequiredDescription
module_namestringYesModule instance name (see list_rig_modules)
variablestringNoAlso list possible binding sources for this variable
filterstringNoCase-insensitive variable name/type filter
include_defaultsboolNoInclude full Unreal-text default values
max_resultsintNoMaximum variables to return after filtering (1-200)
example
cfa get_rig_module_config --asset-path /Game/Rigs/MR_X --module-name Arm_l
set_rig_module_config

Set or reset a module config value

Sets a config value on a module instance (recorded as an override, exactly like editing the Details panel). Paths can address nested members with '->' (e.g. "Settings->Strength"). --reset clears the override so the module default applies again. Values use Unreal text syntax: 2.5, true, (X=1,Y=0,Z=0).

ParameterTypeRequiredDescription
module_namestringYesModule instance name
pathstringYesConfig variable path ('->' for nested members)
valuestringNoNew value as Unreal text (required unless --reset)
resetboolNoClear the override instead of setting a value
example
cfa set_rig_module_config --asset-path /Game/Rigs/MR_X --module-name Tail --path Control_Count --value 8
bind_rig_module_variable

Bind a module variable to another module's variable

Binds a module's variable to a source variable in another module (or the rig itself), so the value flows through at runtime. Pre-validates with the engine and, on failure, lists the valid binding sources. Empty --source-path unbinds.

ParameterTypeRequiredDescription
module_namestringYesModule instance name
variablestringYesModule variable to bind
source_pathstringNoSource variable path (empty = unbind)
example
cfa bind_rig_module_variable --asset-path /Game/Rigs/MR_X --module-name Arm_l --variable Speed --source-path "Spine.Speed"
rename_rig_module

Rename a module instance

Renames a module instance with engine validation (CanRenameModule) — all namespaced element names update automatically.

ParameterTypeRequiredDescription
module_namestringYesCurrent module instance name
new_namestringYesNew module instance name
example
cfa rename_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l --new-name LeftArm
reparent_rig_module

Reparent a module instance

Moves a module under a new parent module in the module hierarchy. Empty --new-parent-module makes it a root module.

ParameterTypeRequiredDescription
module_namestringYesModule instance name
new_parent_modulestringNoNew parent module (empty = root)
example
cfa reparent_rig_module --asset-path /Game/Rigs/MR_X --module-name Hand_l --new-parent-module Arm_l
reorder_rig_module

Reorder a module among its siblings (5.7+)

Changes a module's index among its siblings in the module hierarchy. Requires UE 5.7+ (the engine API does not exist on 5.6).

ParameterTypeRequiredDescription
module_namestringYesModule instance name
indexintYesNew 0-based sibling index
example
cfa reorder_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l --index 0
mirror_rig_module

Mirror a module (e.g. left arm to right arm)

Creates a mirrored copy of a module — the editor's Mirror action. Connector targets and config values are mirrored across the axis, with element names rewritten via search/replace (e.g. "_l" to "_r"). Returns the new module and its connectors.

ParameterTypeRequiredDescription
module_namestringYesModule instance to mirror
mirror_axisstringNoAxis to mirror against: X|Y|Z
axis_to_flipstringNoAxis to flip for rotations: X|Y|Z
searchstringNoSubstring to replace in element names (e.g. _l)
replacestringNoReplacement substring (e.g. _r)
example
cfa mirror_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l --search _l --replace _r
swap_rig_module

Swap a module's source asset

Replaces the Rig Module asset behind a module instance (e.g. upgrade a module flagged outdated by list_rig_modules), keeping connections where the connectors are compatible.

ParameterTypeRequiredDescription
module_namestringYesModule instance to swap
new_module_asset_pathstringYesReplacement Rig Module asset path
example
cfa swap_rig_module --asset-path /Game/Rigs/MR_X --module-name Arm_l --new-module-asset-path /ControlRigModules/Modules/Arm
list_rig_sockets

List rig sockets with placement hints and claimed state

Lists every socket with its parent bone, placement hint (the schematic's 'Place the leg module here' text authored by modules) and whether a module connector already claims it. With the asset editor open it reads the DEBUG hierarchy, where module-spawned placement sockets live, the workflow: query --only-empty, place the suggested module on each hinted socket, re-query (new sockets appear as modules spawn them), repeat until none are empty.

ParameterTypeRequiredDescription
only_emptyboolNoOnly sockets with no connector bound (placement hints)
filterstringNoSubstring filter on socket name/hint
example
cfa list_rig_sockets --asset-path /Game/Rigs/MR_X --only-empty
list_rig_components

List hierarchy components (physics solvers/bodies/joints)

Lists every hierarchy component with its type and owning element. Construction-spawned components (RigPhysics solver/body/joint components from ChainPhysics etc.) only exist on the DEBUG instance, open the asset editor first. An empty list with physics modules present means their construction did not build physics.

ParameterTypeRequiredDescription
filterstringNoSubstring filter on component name/type/element
example
cfa list_rig_components --asset-path /Game/Rigs/MR_X --filter Solver
get_rig_pose

Numeric live pose: current vs rest per bone, worst deviation first

Reads the LIVE debug instance's bone positions and compares each to the rest pose. A large deviation means the rig is visibly broken (fallen physics bodies, bad IK) regardless of jitter stats. Works on modular and manual-graph rigs. open_asset first so a debug instance exists.

ParameterTypeRequiredDescription
bonesstringNoComma-separated bone names (empty = all bones)
threshold_cmfloatNoOnly report bones displaced at least this far from rest
max_bonesintNoMax bones in the report
example
cfa get_rig_pose --asset-path /Game/Rigs/MR_X --threshold-cm 5
validate_rig_deformation

Detect melted / twisted / inside-out skinning on the preview mesh

Reads the real GPU skinning matrices for every bone (RefBasesInv * ComponentSpaceTransform, which is the IDENTITY at rest) and reports the three things that visibly wreck a character but are invisible to a bone-position check: non-unit scale (melted or inflated), a sheared basis (smeared skin), and a mirrored basis with negative determinant (renders inside-out). Also reports plain displacement from rest for context. Needs the asset OPEN so the debug instance exists; if component-space transforms are not ready it refuses to report rather than hand back bind-pose inverses that would make every bone look broken.

ParameterTypeRequiredDescription
scale_tolerancefloatNoAxis scale deviation from 1.0 treated as melted
shear_tolerance_degfloatNoDegrees off square between basis axes treated as shear
translation_tolerance_cmfloatNoBone displacement from rest that gets reported
max_bonesintNoMax worst-bone rows returned
example
cfa validate_rig_deformation --asset-path /Game/Rigs/CR_X
validate_rig_physics

Physics invariant checks: unjointed bodies, free joints, conflicts, drift

Validates the LIVE rig's physics: dynamic bodies without joints (they FREE-FALL and stretch their bones to the floor), joints left FULLY UNCONSTRAINED (Swing1, Swing2 and Twist all ACM_Free - the engine's default for an unedited joint, under which the Swing/Twist limit degrees are ignored entirely) WHOSE BONE POINTS ACROSS GRAVITY, reported with the roll angle each will take to hang below its pivot; free joints on bones that already hang along gravity are at equilibrium and are reported as info, not as a defect, because that is the normal and correct state of a hair chain. Also elements carrying multiple bodies (cross-module conflict that breaks joint resolution), solver count, and bones currently displaced from rest. Run after every physics change; healthy=true means no issues. If joints exist but their limits could not be read, rollover_joints is omitted and an issue says the check did not run - never read a missing field as zero.

ParameterTypeRequiredDescription
deviation_threshold_cmfloatNoBone displacement treated as broken
rollover_threshold_degfloatNoPredicted roll above which an unconstrained joint is reported - the prediction is the angle between the bone's lever and gravity
example
cfa validate_rig_physics --asset-path /Game/Rigs/MR_X
analyze_rig_module_asset

Inspect a module asset's internal graphs (any module, incl. custom)

Summarizes what a rig module actually does: per-graph node counts, node-type histogram, and the config variables its graph reads. Accepts Control Rig Blueprint modules on every version and 5.8 runtime-asset modules (ChainPhysics etc.).

ParameterTypeRequiredDescription
module_asset_pathstringYesModule asset path
graph_filterstringNoSubstring filter on graph name
include_nodesboolNoInclude the per-node list
trace_variablestringNoTrace a config variable to every pin that consumes it, what the config actually drives
include_linksboolNoInclude every link (src.pin -> dst.pin) per graph; combine with graph_filter
include_pin_defaultsboolNoAppend each node's literal pin values, e.g. [Connector=Solver Bone]. Requires include_nodes. This is what tells you WHICH connector a ResolveConnector resolves, structure alone cannot
example
cfa analyze_rig_module_asset --module-asset-path /ControlRigModules/Modules58/ChainPhysics
set_rig_autosave

Toggle per-command disk saves for rig commands (default off)

By default rig mutations only mark the asset dirty, a full disk save per command costs 2-3s on big rigs and made long build sessions crawl. Persist explicitly with save_asset/save_all at your validation gates. Pass --enabled to restore save-every-command behavior for this editor session.

ParameterTypeRequiredDescription
enabledboolYestrue = save to disk on every rig command; false = mark dirty only
example
cfa set_rig_autosave --enabled=false
fit_rig_chain_collision

Size a ChainPhysics module's collision from the real skinned mesh

Derives collision from get_skeletal_bone_bounds instead of guessing: dynamic links get ONE median-fitted shape (ChainPhysics applies the same collision to every link, the per-bone spread is reported so the compromise is visible) and every kinematic bone gets its own mesh-true capsule via ExtraCollisionSettings (indexed in Kinematic order). Requests a construction pass so the live instance picks it up. Gate after: dump_rig_components, measure_mesh_penetration, validate_rig_physics.

ParameterTypeRequiredDescription
module_namestringYesChainPhysics-style module instance to fit
margin_cmfloatNoClearance added on top of fitted radii
shapestringNoDynamic-link shape: sphere or capsule
applyboolNofalse = dry-run report only
mesh_pathstringNoExplicit skeletal mesh (default: the rig's preview mesh)
example
cfa fit_rig_chain_collision --asset-path /Game/Rigs/MR_X --module-name Braid --shape sphere --margin-cm 0.5
create_rig_body_collider_module

Generate a kinematic body-collider rig module asset

Creates a module whose config Bones[] + Colliders[] spawn one KINEMATIC physics body per bone at construction, auto-joins the solver on the root bone and collides with every chain in that solver. This solves the disjoint-bones deadlock: cover glutes/hips/thighs with mesh-true shapes WITHOUT putting colliders on any chain's Start/anchor bone. After creating: add_rig_module it, connect its Root connector to any bone, then set Bones/Colliders config sized from get_skeletal_bone_bounds.

ParameterTypeRequiredDescription
asset_pathstringYesContent path for the new module asset
example
cfa create_rig_body_collider_module --asset-path /Game/CFA_Modules/CFA_BodyColliders
measure_mesh_penetration

Mesh-vs-mesh clip depth: cloth/hair vertices inside body volume

CPU-skins the rig's preview mesh at the live (or rest) pose and reports how deep chain-side vertices (hair/braid/dress, selected by chain_filter) sit inside per-bone body volumes, worst chain-vs-body bone pairs with depth in cm. Bone motion stats CANNOT see mesh clip: a rig can be 'stable' while the braid rests inside the glutes. Gate contact quality on this command after any collision change.

ParameterTypeRequiredDescription
chain_filterstringYesComma-separated bone-name substrings for the cloth/hair side
body_filterstringNoComma-separated substrings for the body side (default: every non-chain bone)
posestringNo'current' (live debug pose) or 'rest'
mesh_pathstringNoExplicit skeletal mesh (default: the rig's preview mesh)
margin_cmfloatNoDepth beyond this counts as a clip
max_resultsintNoWorst pairs reported
example
cfa measure_mesh_penetration --asset-path /Game/Rigs/MR_X --chain-filter hair_braid,dress --body-filter pelvis,thigh,spine,butt
get_skeletal_bone_bounds

Real per-bone geometry from skinned vertices + physics asset

Computes each bone's actual geometric bounds from the mesh's skinned vertices: axis-aligned box, a fitted capsule (axis/radius/half-length), and 'fit_oriented', Epic's own primitive fit (covariance -> dominant eigenvector -> OBB in that frame, the same math Create Physics Asset uses) giving radius, CYLINDER-ONLY length and a ready-to-paste capsule TM whose rotation puts local +Z on the measured long axis. Plus the physics asset's authored shapes. weight_mode 'dominant' answers 'how thick is THIS bone's flesh'; 'any' answers 'all skin this bone can move', the right question for a collider. Size physics collision from this instead of guessing.

ParameterTypeRequiredDescription
mesh_pathstringYesSkeletal mesh content path
filterstringNoSubstring filter on bone name
max_bonesintNoMax bones in the report
include_physics_assetboolNoInclude physics asset shapes
weight_modestringNodominant | any, Epic's EVW_DominantWeight / EVW_AnyWeight
example
cfa get_skeletal_bone_bounds --mesh-path /Game/Chars/SKM_Hero --filter butt --weight-mode any
place_rig_pole_vector

Place a pole control out in the bend plane, and verify it moved

A pole control left ON its joint gives the IK solver a degenerate bend plane: it ROLLS the limb instead of bending it, and the visible symptom is the hips/shoulders twisting. This derives the bend direction from the limb's own geometry (never a hardcoded axis), pushes the control out along it, and VERIFIES the resulting world position, set_rig_control_offset takes a PARENT-RELATIVE transform, so a world position written straight into it silently leaves the control where it was. If the limb is STRAIGHT in the rest pose the bend vector is numerical noise and the command refuses to guess: supply facing_bone_a + facing_bone_b (a measured direction, e.g. ankle -> toe) or fallback_direction, and use invert for joints that bend away from it (an elbow vs a knee).

ParameterTypeRequiredDescription
asset_pathstringYesControl Rig asset path
controlstringYesPole-vector control to place
root_bonestringYesChain root bone (hip/shoulder)
mid_bonestringYesMid joint that bends (knee/elbow)
end_bonestringYesChain end bone (ankle/wrist)
offset_factorfloatNoEpic's PV Offset Factor (default 3.0) = mid + perpendicular bend * factor
distancefloatNoExplicit distance in cm (0 = use offset_factor); floored at 25% of limb length
fallback_directionstringNo'X,Y,Z' world direction, straight limbs only
facing_bone_astringNoMeasured facing pair, bone A (preferred over fallback_direction)
facing_bone_bstringNoMeasured facing pair, bone B
invertboolNoNegate the direction (elbow bends away from facing, knee toward)
dry_runboolNoReport the placement without writing it
example
cfa place_rig_pole_vector --asset-path /Game/Rigs/CR_X --control PV_leg_l_ctrl --root-bone thigh_l --mid-bone calf_l --end-bone foot_l --facing-bone-a foot_l --facing-bone-b ball_l
remove_rig_components

Purge persisted components from the blueprint hierarchy

Removes components matching a type/name substring from the BLUEPRINT hierarchy. Construction-spawned physics components must never persist in the asset, stale saved copies duplicate on every rebuild (auto-renamed) and silently break joint resolution. Run 'validate_rig_physics' after to confirm one body per bone.

ParameterTypeRequiredDescription
filterstringYesSubstring of component type/name to remove
example
cfa remove_rig_components --asset-path /Game/Rigs/MR_X --filter Physics
dump_rig_components

Full field dump of live hierarchy components via reflection

Dumps EVERY reflected field of live components (physics solver/body/joint: BodyData.MovementType, Collision shape dims, joint Parent/ChildBodyComponentKey, DriveData, KinematicTarget...) from the running debug instance. On UE 5.8 physics bodies also include live_state: the simulated transform, linear/angular velocity and speed, the direct answer to 'is this body actually moving/jiggling' and 'why does it rest offset'. Scope with --element or --fields to keep output small.

ParameterTypeRequiredDescription
filterstringNoSubstring filter on component name/type/element
elementstringNoExact owning element (bone) name to scope to
fieldsjsonNoJSON array of top-level field names to include (empty = all)
max_resultsintNoMax components dumped
example
cfa dump_rig_components --asset-path /Game/Rigs/MR_X --element butt_l --fields '["BodyData","Dynamics"]'
list_rig_channels

List animation channels with hosts and live values

Lists every animation channel (module config such as Gravity Multiplier / Simulation Mode is exposed as channels) with its host control, value type, and live current + initial values from the running instance. The live 'current' value is what the graph actually reads each frame, config variables only seed channels at first construction.

ParameterTypeRequiredDescription
filterstringNoSubstring filter on channel or host name
example
cfa list_rig_channels --asset-path /Game/Rigs/MR_X --filter Gravity
set_rig_channel_value

Write animation channel values on the running instance

Sets Bool/Float/Integer animation channel CURRENT values on the running debug instance, the sim reads them next tick, no reconstruction. This is the correct way to live-tune module physics. Pass --set-initial to also persist through re-construction. Exact or unambiguous-suffix channel names accepted. Batch: --channels '[{"channel":"butt_l/Stiffness","value":"1"},{"channel":"butt_r/Stiffness","value":"1"}]'.

ParameterTypeRequiredDescription
channelstringNoChannel name from list_rig_channels (single form)
valuestringNoNew value: '1.5', 'true', '3' (single form)
channelsjsonNoBatch form: JSON array of {channel, value}
set_initialboolNoAlso write the initial value (survives re-construction)
persistboolNoMirror into the blueprint hierarchy (initial+current) so the value survives recompiles
example
cfa set_rig_channel_value --asset-path /Game/Rigs/MR_X --channel "butt_l/GravityScale" --value 2.0
play_rig_preview_animation

Play an animation on the rig's asset-editor preview

Plays an animation asset as the preview's source pose. Default solve mode 'backwards_and_forwards' runs Backwards Solve (animation -> control values) then Forwards Solve each frame, so the animation actually DRIVES the rig and physics reacts to the motion, combine with start_rig_motion_capture to measure real jiggle amplitude headless. A rig without a Backwards Solve event gets a clear warning (module-driven bones would hold the control pose).

ParameterTypeRequiredDescription
anim_pathstringYesAnimation asset content path
solve_modestringNobackwards_and_forwards | forwards
play_ratefloatNoPlayback rate
loopboolNoLoop playback
example
cfa play_rig_preview_animation --asset-path /Game/Rigs/MR_X --anim-path /Game/Anims/Walk
stop_rig_preview_animation

Stop the preview animation and restore forwards-only solve

Stops playback, clears the preview animation, restores the Forwards Solve event queue and resets the pose to initial.

example
cfa stop_rig_preview_animation --asset-path /Game/Rigs/MR_X
add_rig_jiggle_bob

One-shot soft-tissue jiggle setup (tip bone + rebind + tune)

Jiggle amplitude comes from lever geometry, not spring values: a leaf flesh bone (butt, belly) has no swinging mass, so it reads rigid at any softness. This command adds an unskinned tip bone placed along the flesh bone's REAL skinned-vertex protrusion direction (furthest vertex + margin), rebinds the ChainPhysics module's 'End Bone' connector to it, optionally sets Strength/MinSize, reconstructs and verifies bodies exist on the tip. The tip is the pendulum bob whose momentum makes the flesh visibly wobble, the same mechanism as a breast/nipple chain.

ParameterTypeRequiredDescription
flesh_bonestringYesFlesh bone that should jiggle
module_namestringNoChainPhysics module whose End Bone gets rebound (empty = tip only)
tip_namestringNoTip bone name (default <flesh_bone>_tip)
lever_margin_cmfloatNoExtra distance past the furthest skinned vertex
strengthfloatNoAlso set module Strength config (0 = leave)
min_sizefloatNoAlso set module MinSize config (0 = leave)
mesh_pathstringNoSkeletal mesh for skin analysis (default: rig preview mesh)
example
cfa add_rig_jiggle_bob --asset-path /Game/Rigs/MR_X --flesh-bone butt_l --module-name Butt_l --strength 1.5 --min-size 5
validate_rig_controls

Flag dead controls and undriven bones from live VM truth

Uses the engine's own VM dependency map (built from the rig's actual instruction read/write records) to flag controls that influence NOTHING, no instruction reads them, no hierarchy children, no hosted channels, no proxy drives, never referenced in any graph pin, plus bones nothing animates (no VM write up the parent chain, no physics body). Every flagged control carries a CURE suggestion: 'connect' when a bone name-matches (spine_02_ctrl -> spine_02, with the exact wiring recipe), 'review' when it sits on a bone without a name match, 'delete' (with the remove_rig_element line) when nothing plausible exists. Works WITHOUT the asset editor: falls back to a private headless instance and runs the forward solve with bool channels forced true so gated branches record; with the editor open it reads the live debug instance instead (source field says which).

ParameterTypeRequiredDescription
include_bonesboolNoAlso flag undriven bones
max_resultsintNoMax flagged items per category
example
cfa validate_rig_controls --asset-path /Game/Rigs/CR_X
validate_rig_graph

Graph red-squiggle report: bad refs, missing channels, dead exec, runtime log

The CLI-side equivalent of the editor's red node errors. Static pass over every graph: FRigElementKey pins referencing bones/controls that don't exist, animation-channel units whose Control/Channel can't resolve (with the available channel list), unresolved wildcard pins (whose defaults are silently dropped), mutable nodes with no incoming execute link (dead code), If nodes whose True and False hold the same unlinked constant (the Condition changes nothing, how an IK/FK switch ships stuck at weight 0), and visible controls that no node reads (dragging them moves nothing). With the asset editor open it also reads the running instance's RigVM log and maps every runtime warning/error back to the node that raised it.

ParameterTypeRequiredDescription
graph_namestringNoRestrict to one model graph (empty = all)
include_runtime_logboolNoRead the debugged instance's RigVM runtime log
check_unused_controlsboolNoReport visible controls no node reads (whole-rig, non-modular runs only)
max_resultsintNoMax issues reported
example
cfa validate_rig_graph --asset-path /Game/Rigs/CR_X
analyze_rig_io

Ground-truth rig I/O: events, AnimBP pins, control reads, measured bone writes, safety verdict

Answers 'how will this rig behave in an AnimBP?' with hard data instead of guessing. Static pass: which solve events exist, which pins the Control Rig anim node would expose (public variables, animatable controls, animation channels with hosts), and which controls the Forwards Solve reads (pose controls vs safe channels). Measured pass: runs a PRIVATE headless instance on a perturbed pose and diffs which bones the forward solve overrides, once with channels at authored defaults and once with every bool channel forced true, so gated branches (IK weights, grounding, physics toggles) are exercised. Verdicts: pass_through | gated_writes | writes_bones | overrides_animation (the last means the rig will stomp incoming animation in an AnimBP).

ParameterTypeRequiredDescription
framesintNoForward frames per measured pass (physics needs a few ticks)
delta_timefloatNoDelta time per measured frame
max_resultsintNoMax bones listed per written-bones table
example
cfa analyze_rig_io --asset-path /Game/Rigs/CR_X_Physics
profile_rig

Headless rig performance report: solve ms, hot nodes, physics census, red flags

Answers 'why is this rig slow?' with numbers. Runs the forward solve on a PRIVATE headless instance (5-frame warmup, then N timed frames) and reports: wall-clock avg/max ms and % of a 60fps frame budget, the hottest nodes from the engine's own RigVM instruction profiling (per-node ms, module cost attributed to the invoking instruction), a physics census (solvers, bodies, joints, per-solver body distribution), and red flags with the fix spelled out, multiple solvers (the ChainPhysics 'Solver Bone' trap: every bound Solver Bone CREATES an independent Chaos sim; unbound chains auto-join the one shared solver), construction re-requested every frame, over-budget averages, excessive body counts. Bool channels are forced true by default so gated physics/IK is included in the cost.

ParameterTypeRequiredDescription
framesintNoTimed forward frames (after 5-frame warmup)
delta_timefloatNoDelta time per frame
enable_channelsboolNoForce bool channels true so gated branches are included
top_nodesintNoRows in the hot-node table
example
cfa profile_rig --asset-path /Game/Rigs/CR_X
analyze_rig_control_impact

Which controls actually MOVE bones, empirical connectivity map

Answers "if I grab this control in the viewport and move it, does anything happen?" by DOING it: every animatable control is nudged on a PRIVATE headless instance and the resulting bone movement is measured. Static checks cannot answer this, validate_rig_controls only asks whether some VM instruction READS the control, and a control can be read and still have zero effect (the IK/blend weight feeding it is 0, it sits on a branch that never executes, or a later stage overwrites those bones). Each control gets a verdict: drives_bones, weak_effect, no_effect, or undetermined (the control itself could not be moved, position-only controls cannot rotate, so nothing can be concluded). Rotation and translation are probed separately (rotation_verdict/translation_verdict) because FK controls are ROTATED while IK effectors are MOVED. Read-only: nothing is saved.

ParameterTypeRequiredDescription
controlsstringNoComma-separated control names to probe (empty = every animatable pose control)
offset_cmfloatNoHow far to nudge each control
settle_framesintNoSolve frames to settle before and after the nudge (raise for physics-heavy rigs)
max_bonesintNoMost-affected bones listed per control
bind_worldboolNoBind the editor world so ground-trace units resolve
example
cfa analyze_rig_control_impact --asset-path /Game/Rigs/CR_X
simulate_rig

Headless N-frame simulation: anim input, limb crossing, ground clipping, deviation, NaN checks

Runs the rig's forward solve on a PRIVATE instance for N frames, independent of any open editor window, feeding a real AnimSequence frame-by-frame as the input pose (bones matched by name), with real delta time so physics actually simulates. Reports: minimum segment-to-segment distance per requested bone-segment pair with a crossing flag (catches crossed/crushed legs numerically), every bone dipping below --ground-z, per-bone deviation from the input animation (what the rig changed), NaN/explosion instability, and optional per-frame trajectories for named bones. By default the rig is bound to the editor world so SphereTrace/world-collision units hit level geometry. Also reports bones_moved_by_rig, the WORLD-space displacement the rig added on top of the input pose, which is the number to read for 'did anything move' (bones_modified_by_rig counts local overrides only and collapses a driven chain onto its root). Pass --shake-bone to run the physics alive-gate: the input pose is oscillated then FROZEN, and any remaining motion is reported as residual RMS per bone with bones_responding / physics_alive.

ParameterTypeRequiredDescription
anim_sequencestringNoAnimSequence content path fed as the input pose (empty = hold initial pose)
start_timefloatNoAnimation start time in seconds
framesintNoForward-solve frames to run
delta_timefloatNoDelta time per frame (advances the anim sample time too)
channelsjsonNoChannel values applied before frame 0: {"foot_grounding":"true","leg_l_ik":"1.0"}
segment_pairsjsonNoBone-segment pairs checked for crossing: [{"a":["thigh_l","calf_l"],"b":["thigh_r","calf_r"]}]
crossing_threshold_cmfloatNoPairs closer than this are flagged as crossing
ground_zstringNoComponent-space ground plane Z in cm; bones below it are reported (omit to skip)
track_bonesstringNoComma-separated bone names to report per-frame positions for
bind_worldboolNoOuter the rig to the editor world so trace units hit level geometry
max_resultsintNoMax rows per report table
check_mobilityboolNoAfter the frame loop, offset the root control 50cm and report bones that do not follow (stuck FK/IK chains)
mobility_controlstringNoControl to offset for the mobility check (empty = auto: root-most transform control)
shake_bonestringNoPHYSICS ALIVE-GATE: oscillate this bone of the input pose, then freeze it and measure residual motion. Needs no controls and no open editor
shake_cmfloatNoShake amplitude in cm
shake_framesintNoFrames to shake before freezing the pose (default: frames/3)
residual_threshold_cmfloatNoPer-frame RMS travel above which a bone counts as responding
example
cfa simulate_rig --asset-path /Game/Rigs/CR_X_Physics --anim-sequence /Game/Anims/Walk --frames 90 --channels '{"foot_grounding":"true"}' --segment-pairs '[{"a":["thigh_l","calf_l"],"b":["thigh_r","calf_r"]}]'
disconnect_rig_module_connector

Clear a module connector's binding

Disconnects a module connector from its target(s). --disconnect-sub-modules also clears connectors of nested modules that depended on it.

ParameterTypeRequiredDescription
connectorstringYesConnector element name (Module/Connector)
disconnect_sub_modulesboolNoAlso disconnect dependent sub-module connectors
example
cfa disconnect_rig_module_connector --asset-path /Game/Rigs/MR_X --connector "Arm_l/Root"
export_control_rig

Export a complete Control Rig to JSON

Writes a complete JSON description of a Control Rig to Saved/CodeFizzEditorAgent/Exports/<name>_<stamp>/<name>.controlrig.json: every graph (models, functions, collapse sub-graphs) with full nodes/pins/defaults/links, the function library, local + blueprint variables, the compiled execution stack (VM event entries in order), the curve container, and the full hierarchy — bones/nulls/curves/sockets/connectors plus controls with reflection-complete settings, offset and shape transforms (initial + current), and initial/current/minimum/maximum values. Returns a compact summary; pass --inline to also get the document in the response.

ParameterTypeRequiredDescription
inlineboolNoAlso return the full document inline
example
cfa export_control_rig --asset-path /Game/Rigs/CR_X