Maya source functions
1091 definitions in the current source checkout. This source map includes internal helpers and class methods. It is not a supported API contract or a promise that a function can be called through a bridge. For supported entry points use the Python API reference or bundled DCC wrapper pages.
Type to search all API references.
maya_tools.Animation.anim_export.anim_export
export_animation
def export_animation(maya_file, export_path, namespace, start_frame, end_frame, nodes=None, reference_paths=None, changelist=None)module function · public name · maya_tools/Animation/anim_export/anim_export.py:16
Opens Maya file and exports animation to FBX using `mayapy`. :param maya_file: (str): Path to the Maya scene file. :param export_path: (str): Path where the FBX should be saved. :param namespace: (str): Namespace of the skeleton. :param sta
get_all_joint_children
def get_all_joint_children(root_joint)module function · public name · maya_tools/Animation/anim_export/anim_export.py:141
Returns a list of all child joints (recursively) under the given root joint.
bake_all_keyable_attributes
def bake_all_keyable_attributes(nodes, start_frame, end_frame)module function · public name · maya_tools/Animation/anim_export/anim_export.py:151
:param nodes: nodes to bake :param start_frame: start of range to bake :param end_frame: end of range to bake :return:
export_metahuman_sliders_as_fbx
def export_metahuman_sliders_as_fbx(slider_set='FacialControls', fbx_path='', start_frame=None, end_frame=None)module function · public name · maya_tools/Animation/anim_export/anim_export.py:171
Bakes facial slider animation and exports it as an FBX. :param slider_set: Name of the set containing facial sliders. :param fbx_path: Full file path for the FBX export. :param start_frame: Start frame of baking range. Defaults to timeline
update_joint_setup_for_import
def update_joint_setup_for_import(facial_joints)module function · public name · maya_tools/Animation/anim_export/anim_export.py:215
Sets up hierachy to match the Face Archetype Skeleton :param facial_joints: list of facial joints :return:
import_reference_and_strip_namespace_test
def import_reference_and_strip_namespace_test(namespace, root)module function · public name · maya_tools/Animation/anim_export/anim_export.py:256
Imports objects from a reference associated with the given namespace, imports any nested references, strips all namespaces, renames duplicates, and returns a list of renamed transform nodes. :param namespace: The namespace of the reference.
add_missing_parents_with_long_names
def add_missing_parents_with_long_names(joint_list)module function · public name · maya_tools/Animation/anim_export/anim_export.py:326
Given a list of joints, return the full DAG paths including all parent joints. Ensures all names are long paths to avoid ambiguity. :param joint_list: List of joint names (can be short or long) :return: List of joints including all parents,
sort_reverse_hierarchy
def sort_reverse_hierarchy(node_list)module function · public name · maya_tools/Animation/anim_export/anim_export.py:349
Sorts DAG nodes in reverse hierarchy order (children before parents). Assumes all nodes are given as full paths or unique enough to convert to full paths.
maya_tools.Animation.anim_export.anim_export_command
export_animation_to_fbx
def export_animation_to_fbx(export_path, namespace, start_frame, end_frame, nodes=None, reference_paths=None, changelist=None)module function · public name · maya_tools/Animation/anim_export/anim_export_command.py:8
Subprocess command function which calls the actual export function, to make scene state unchanged :param export_path: full path for fbx animation to be exported :param namespace: namespace to be exported in the data :param start_frame: star
run_export
def run_export(cmd, maya_env, export_path)module function · public name · maya_tools/Animation/anim_export/anim_export_command.py:67
exports using subprocess to keep maya scene unchanged / non-destructive :param cmd: subprocess command string for export :param maya_env: maya env settings from os.environ.copy() :param export_path: actual fbx export location :return:
export_animation_async
def export_animation_async(cmd, maya_env, export_path)module function · public name · maya_tools/Animation/anim_export/anim_export_command.py:93
exports on separate thread so maya session isn't locked up during export :param cmd: subprocess command string for export :param maya_env: maya env settings from os.environ.copy() :param export_path: actual fbx export location :return:
maya_tools.Animation.anim_export.anim_export_utils
get_facial_sliders
def get_facial_sliders(namespace=None)module function · public name · maya_tools/Animation/anim_export/anim_export_utils.py:4
Detects the 'FacialControls' set under any namespace (including nested ones) and returns the slider nodes and the actual namespace they belong to. :param namespace: (optional) A base namespace to filter by. :return: Tuple (slider_nodes, act
get_facial_joints
def get_facial_joints(namespace)module function · public name · maya_tools/Animation/anim_export/anim_export_utils.py:28
Detects joints with 'FACIAL_' in their name within the given namespace (including nested ones). Returns the list of joints and the actual namespace. :param namespace: Base namespace to filter by (e.g., 'MyChar') :return: Tuple (facial_joint
open_scene_with_specific_references
def open_scene_with_specific_references(maya_file, reference_list)module function · public name · maya_tools/Animation/anim_export/anim_export_utils.py:55
Opens a Maya scene and loads only the specified references, ignoring any others. :param maya_file: Full path to the .ma or .mb file :param reference_list: List of dictionaries [{"path": "...", "namespace": "..."}, ...]
find_references_from_namespace
def find_references_from_namespace(namespace)module function · public name · maya_tools/Animation/anim_export/anim_export_utils.py:81
Find all reference nodes (including sub-references and constraint dependencies) associated with a given namespace. :param namespace: The namespace you want to check, e.g., 'Test:sub_rig'. :return: List of [ref_path, ref_node] pairs.
maya_tools.Animation.anim_export.bridge_export
export_fbx
def export_fbx(export_path: str, start_frame: int=1, end_frame: int=120, selected_only: bool=True, nodes: Iterable[str] | None=None, bake_animation: bool=True, use_animation_range: bool=False) -> dict[str, Any]module function · public name · maya_tools/Animation/anim_export/bridge_export.py:12
maya_tools.Animation.anim_export.clean_skeleton_export
_joint_order
def _joint_order(joints: dict[str, str], parent_of) -> list[str]module function · internal · maya_tools/Animation/anim_export/clean_skeleton_export.py:16
Return parent-first order; reject partial or disconnected skeletons.
export_control_rig_skeleton
def export_control_rig_skeleton(scene_path: str | Path, output_fbx: str | Path, *, start_frame: int, end_frame: int, rig_namespace: str='CharacterRig', solved_namespace: str='RetargetSolved', mapping_profile: str | Path | None=None, overwrite: bool=False) -> dictmodule function · public name · maya_tools/Animation/anim_export/clean_skeleton_export.py:47
Open a baked-control scene, export its clean deform skeleton, reopen-audit it. The solved skeleton identifies the intended deform-joint subset, not the motion to export: the referenced control rig is sampled after any edits. Requires mayapy
maya_tools.Animation.anim_export.fbx_export_core
export_fbx_with_settings
def export_fbx_with_settings(filepath: str | Path, *, settings: Iterable[str], selected_only: bool=True, cmds_module=None, mel_module=None) -> Pathmodule function · public name · maya_tools/Animation/anim_export/fbx_export_core.py:9
maya_tools.Animation.bridge_import
import_fbx
def import_fbx(filepath: str, namespace: str='') -> dict[str, Any]module function · public name · maya_tools/Animation/bridge_import.py:9
translate_imported_meshes
def translate_imported_meshes(objects: list[str], translation: list[float], relative: bool=True) -> dict[str, Any]module function · public name · maya_tools/Animation/bridge_import.py:55
Move only visible meshes supplied by the preceding Maya import stage.
maya_tools.Animation.bridge_keyframe
set_keyframe
def set_keyframe(object_name: str, attribute: str, value: float, frame: int | float | str) -> dict[str, Any]module function · public name · maya_tools/Animation/bridge_keyframe.py:16
maya_tools.Animation.bridge_timeline
inspect_animation_range
def inspect_animation_range(objects: Iterable[str] | None=None) -> dict[str, Any]module function · public name · maya_tools/Animation/bridge_timeline.py:7
maya_tools.Cinematics.SequenceUI.sequence_ui
_maya_qt_major_version
def _maya_qt_major_version()module function · internal · maya_tools/Cinematics/SequenceUI/sequence_ui.py:5
Return the Qt binding Maya was built with, or ``None`` outside Maya.
_stored_qcolor
def _stored_qcolor(value)module function · internal · maya_tools/Cinematics/SequenceUI/sequence_ui.py:63
Parses a QColor representation without executing persisted code. :param value: stored QColor string or QColor instance :return: QColor value
is_maya
def is_maya()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:90
is_motionbuilder
def is_motionbuilder()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:97
AnimationManagerUI.__init__
def AnimationManagerUI.__init__(self, parent=None)class method · internal · maya_tools/Cinematics/SequenceUI/sequence_ui.py:137
AnimationManagerUI.init_ui
def AnimationManagerUI.init_ui(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:200
Initializes the UI layout and widgets. :return:
AnimationManagerUI.on_item_changed
def AnimationManagerUI.on_item_changed(self, item)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:336
AnimationManagerUI.closeEvent
def AnimationManagerUI.closeEvent(self, event)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:339
Called when the window is closing. Used to clean up callbacks.
AnimationManagerUI.eventFilter
def AnimationManagerUI.eventFilter(self, obj, event)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:346
AnimationManagerUI.set_table_background_scaled
def AnimationManagerUI.set_table_background_scaled(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:352
Loads the Icon as the background after converting to grayscale :return:
AnimationManagerUI.filter_skeletons
def AnimationManagerUI.filter_skeletons(self, text)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:374
Filters list of skeletons in the group box :param text: Text to filter by :return:
AnimationManagerUI._update_engine_state
def AnimationManagerUI._update_engine_state(self)class method · internal · maya_tools/Cinematics/SequenceUI/sequence_ui.py:388
AnimationManagerUI._on_file_open_completed
def AnimationManagerUI._on_file_open_completed(self, *args)class method · internal · maya_tools/Cinematics/SequenceUI/sequence_ui.py:404
Internal method triggered when a new scene is opened.
AnimationManagerUI.update_export_directory_for_row
def AnimationManagerUI.update_export_directory_for_row(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:479
Function updates the export directory for any number of selected rows :return:
AnimationManagerUI.update_skeleton_list
def AnimationManagerUI.update_skeleton_list(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:500
Function to reload the skeleton list from the uproject without having to reselect project :return:
AnimationManagerUI.update_project
def AnimationManagerUI.update_project(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:525
Function to reload the skeleton list after selecting the uproject :return:
AnimationManagerUI.update_selected_column
def AnimationManagerUI.update_selected_column(self, column, value)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:550
Updates selected column with specific value (usually run on selected rows) :param column: Column to be updated :param value: Value to update in column :return:
AnimationManagerUI.add_animation
def AnimationManagerUI.add_animation(self, anim=None, directory=None, start=None, end=None, namespace=None, skeleton=None, color=None, nodes=None)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:571
Adds a new row using the right-side input fields with validation and an error pop-up. :param anim: Animation Name to be added to row :param directory: Export Directory for the animation, uses the directory widget input otherwise :param star
AnimationManagerUI.add_animations_for_selection
def AnimationManagerUI.add_animations_for_selection(self, selection=False)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:653
Adds animation entries for selected, including camera and character tracks. :return:
AnimationManagerUI.add_animations_for_shots
def AnimationManagerUI.add_animations_for_shots(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:699
Adds animation entries for shots, including camera and character tracks. :return:
AnimationManagerUI.delete_animation
def AnimationManagerUI.delete_animation(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:747
Deletes the selected rows from the QTableWidget. Handles multiple row selections and reorders correctly to prevent index shifting. :return:
AnimationManagerUI.duplicate_animation
def AnimationManagerUI.duplicate_animation(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:773
Duplicates the selected row, inserting the duplicate directly below it. Handles shifting indices due to insertions.
AnimationManagerUI.add_facial_export_row_for_selected
def AnimationManagerUI.add_facial_export_row_for_selected(self, joints=False)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:815
Adds Facial Sliders or joints for Namespace of selected row, including nested namespaces in case of sub references Defaults to Face Archetype for skeleton otherwise uses the default skeleton if doesn't exist :return:
AnimationManagerUI.select_all_with_namespace
def AnimationManagerUI.select_all_with_namespace(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:890
Selects all rows in the table that match the namespace of the currently selected row.
AnimationManagerUI.open_color_picker
def AnimationManagerUI.open_color_picker(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:914
Opens a QColorDialog and ensures it stays on top of Maya's UI. :return:
AnimationManagerUI.update_color_button
def AnimationManagerUI.update_color_button(self, color)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:935
Updates Choose Color button to display the selected color. :param color: Color to be updated, example formatting : QtGui.QColor(255, 255, 255) :return:
AnimationManagerUI.apply_row_colors
def AnimationManagerUI.apply_row_colors(self, color=None)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:957
Applies the chosen color to all selected rows in the QTableWidget. :param color: Color to be updated, example formatting : QtGui.QColor(255, 255, 255) :return:
AnimationManagerUI.set_scene_range
def AnimationManagerUI.set_scene_range(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:997
Sets the Maya timeline to match the selected animation's frame range. :return:
AnimationManagerUI.copy_selected_filenames
def AnimationManagerUI.copy_selected_filenames(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1020
Copies selected Export Locations to clipboard. :return:
AnimationManagerUI.populate_right_side_from_selected_row
def AnimationManagerUI.populate_right_side_from_selected_row(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1031
Copies values from the selected row and pastes them into the right-side layout widgets. :return:
AnimationManagerUI.export_cinematic
def AnimationManagerUI.export_cinematic(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1077
Exports the selected animations and imports the data into Unreal. :return:
AnimationManagerUI.export_animation
def AnimationManagerUI.export_animation(self, cinematic=False, publish=None)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1084
Exports the selected animations and imports the data into Unreal. :return:
AnimationManagerUI.load_data
def AnimationManagerUI.load_data(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1252
Loads the data from the ExportData node to populate the UI widgets :return: list with anim_dict
AnimationManagerUI.store_data
def AnimationManagerUI.store_data(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1306
Stores the data for exports to the attributes on the ExportData node :return:
AnimationManagerUI.export_data
def AnimationManagerUI.export_data(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1344
Exports the UI Animations for loading into another file or package :return:
AnimationManagerUI.import_data
def AnimationManagerUI.import_data(self)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1370
Imports Data from exported json (using the Export Data File Menu option, not the Export Animation option) :return:
AnimationManagerUI.get_uproject
def AnimationManagerUI.get_uproject(self, directory)class method · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1399
show_animation_manager
def show_animation_manager()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_ui.py:1410
Launches the Animation Manager UI in Maya. :return:
maya_tools.Cinematics.SequenceUI.sequence_utils
add_file_open_callback
def add_file_open_callback(widget)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:13
remove_file_open_callback
def remove_file_open_callback()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:24
Removes all previously registered Maya scene callbacks.
get_main_window_pointer
def get_main_window_pointer()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:36
Get the Maya main window pointer :return:
get_camera_sequencer_data
def get_camera_sequencer_data()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:45
Retrieves all shots, shot ranges, and corresponding shot cameras from Maya's Camera Sequencer. :return: List of tuples (shot_number, start_frame, end_frame, camera)
export_node_exists
def export_node_exists()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:62
get_display_range
def get_display_range()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:66
:return: start and end frames of the time slider
set_display_range
def set_display_range(start_frame, end_frame)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:76
:param start_frame: :param end_frame: :return:
display_warning
def display_warning(warning)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:88
:param warning: Warning to display :return:
get_cameras_from_selection
def get_cameras_from_selection()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:97
get_scene_path
def get_scene_path()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:108
get_rig_namespaces
def get_rig_namespaces(selection=True)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:114
Detects namespaces of selected rigs that contain joints with 'origin' as the top joint. :return: Set of valid namespaces
generate_sequence_dict_from_anim_dict
def generate_sequence_dict_from_anim_dict(anim_dict)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:148
Generates a new dictionary with shot_number as the key, and a list of animations as the value. Each animation has export path, skeleton, blueprint (default to None), nodes, start frame, and end frame. :param anim_dict: The original animatio
get_maya_fps
def get_maya_fps()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:185
create_and_populate_export_node
def create_and_populate_export_node(anim_dict, skeletons, uproject, log_path, cmd_path, export_directory, namespace_skeleton_map)module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:224
Data is passed from the UI, likely wont need to call from Maya directly (just separating out cmds calls into this file) :param anim_dict: :param skeletons: :param uproject: :param log_path: :param cmd_path: :param export_directory: :param n
get_export_node_data
def get_export_node_data()module function · public name · maya_tools/Cinematics/SequenceUI/sequence_utils.py:254
maya_tools.maya_menu
maya_tools.maya_setup
update_maya_script_path
def update_maya_script_path(new_path)module function · public name · maya_tools/maya_setup.py:10
Update MAYA_SCRIPT_PATH environment variable for the current Windows user.
find_or_create_user_setup
def find_or_create_user_setup()module function · public name · maya_tools/maya_setup.py:32
Create or refresh the current profile's authenticated Maya startup.
add_tools_to_user_setup
def add_tools_to_user_setup(tools_dir)module function · public name · maya_tools/maya_setup.py:61
Add sys.path.append for tools_dir into userSetup.py if not present.
setup_maya_livelink
def setup_maya_livelink()module function · public name · maya_tools/maya_setup.py:89
Refresh the one managed, authenticated bridge block in userSetup.py.
install_current_maya_tools
def install_current_maya_tools()module function · public name · maya_tools/maya_setup.py:94
Install the current checkout into Maya; never runs merely on import.
maya_tools.Rigging.auto_skinner
_as_mesh_transform
def _as_mesh_transform(node: str) -> strmodule function · internal · maya_tools/Rigging/auto_skinner.py:45
find_skin_cluster
def find_skin_cluster(mesh: str) -> Optional[str]module function · public name · maya_tools/Rigging/auto_skinner.py:62
get_joint_position
def get_joint_position(joint: str) -> om.MVectormodule function · public name · maya_tools/Rigging/auto_skinner.py:69
_short_name
def _short_name(node: str) -> strmodule function · internal · maya_tools/Rigging/auto_skinner.py:73
_find_joint_by_terms
def _find_joint_by_terms(joints: Sequence[str], terms: Sequence[str]) -> Optional[str]module function · internal · maya_tools/Rigging/auto_skinner.py:77
_find_first_existing_joint
def _find_first_existing_joint(joints: Sequence[str], term_sets: Sequence[Sequence[str]]) -> Optional[str]module function · internal · maya_tools/Rigging/auto_skinner.py:85
get_skin_joints
def get_skin_joints(root_joint: str, include_ignored: bool=False) -> List[str]module function · public name · maya_tools/Rigging/auto_skinner.py:93
build_bone_segments
def build_bone_segments(joints: Sequence[str]) -> List[Tuple[str, str]]module function · public name · maya_tools/Rigging/auto_skinner.py:114
build_cached_bone_segments
def build_cached_bone_segments(joints: Sequence[str]) -> List[BindSegment]module function · public name · maya_tools/Rigging/auto_skinner.py:127
closest_point_on_segment
def closest_point_on_segment(point: om.MVector, a: om.MVector, b: om.MVector) -> Tuple[om.MVector, float]module function · public name · maya_tools/Rigging/auto_skinner.py:135
get_mesh_vertices
def get_mesh_vertices(mesh: str) -> List[str]module function · public name · maya_tools/Rigging/auto_skinner.py:147
normalize_and_limit_weights
def normalize_and_limit_weights(weights: WeightList, max_influences: int=DEFAULT_MAX_INFLUENCES) -> WeightListmodule function · public name · maya_tools/Rigging/auto_skinner.py:152
build_default_shoulder_profile
def build_default_shoulder_profile(joints: Sequence[str]) -> dictmodule function · public name · maya_tools/Rigging/auto_skinner.py:164
save_shoulder_profile
def save_shoulder_profile(profile: dict, path: str) -> strmodule function · public name · maya_tools/Rigging/auto_skinner.py:204
load_shoulder_profile
def load_shoulder_profile(path: str) -> dictmodule function · public name · maya_tools/Rigging/auto_skinner.py:213
_vertex_weight_for_joint
def _vertex_weight_for_joint(skin: str, vertex: str, joint: str) -> floatmodule function · internal · maya_tools/Rigging/auto_skinner.py:218
learn_shoulder_profile_from_skin
def learn_shoulder_profile_from_skin(mesh: str, root_joint: str='origin', radius_scale: float=0.45, min_vertices: int=6) -> dictmodule function · public name · maya_tools/Rigging/auto_skinner.py:228
learn_shoulder_profile_from_selected
def learn_shoulder_profile_from_selected(root_joint: str='origin', output_path: Optional[str]=None, radius_scale: float=0.45) -> dictmodule function · public name · maya_tools/Rigging/auto_skinner.py:277
apply_shoulder_profile_to_weights
def apply_shoulder_profile_to_weights(pos: om.MVector, weights: WeightList, shoulder_profile: Optional[dict], blend_strength: float, max_influences: int) -> WeightListmodule function · public name · maya_tools/Rigging/auto_skinner.py:296
apply_shoulder_profile_to_skin
def apply_shoulder_profile_to_skin(mesh: str, skin: str, shoulder_profile: Optional[dict], blend_strength: float=0.35, max_influences: int=DEFAULT_MAX_INFLUENCES) -> Nonemodule function · public name · maya_tools/Rigging/auto_skinner.py:329
resolve_shoulder_profile
def resolve_shoulder_profile(shoulder_profile: Optional[object], joints: Sequence[str]) -> Optional[dict]module function · public name · maya_tools/Rigging/auto_skinner.py:359
bind_mesh
def bind_mesh(mesh: str, joints: Sequence[str], max_influences: int=DEFAULT_MAX_INFLUENCES, replace_existing: bool=False, bind_method: int=DEFAULT_BIND_METHOD) -> strmodule function · public name · maya_tools/Rigging/auto_skinner.py:375
run_geodesic_voxel_bind
def run_geodesic_voxel_bind(skin_cluster: str, max_influences: int=DEFAULT_MAX_INFLUENCES, falloff: float=0.0, voxel_resolution: int=256, validate_voxels: bool=True) -> boolmodule function · public name · maya_tools/Rigging/auto_skinner.py:409
solve_vertex_weights
def solve_vertex_weights(vertex: str, segments: Sequence[Tuple[str, str]], max_influences: int=DEFAULT_MAX_INFLUENCES, falloff_power: float=2.0) -> List[Tuple[str, float]]module function · public name · maya_tools/Rigging/auto_skinner.py:433
solve_vertex_weights_from_position
def solve_vertex_weights_from_position(pos: om.MVector, segments: Sequence[BindSegment], max_influences: int=DEFAULT_MAX_INFLUENCES, falloff_power: float=2.0) -> List[Tuple[str, float]]module function · public name · maya_tools/Rigging/auto_skinner.py:451
apply_auto_weights
def apply_auto_weights(mesh: str, root_joint: str, max_influences: int=DEFAULT_MAX_INFLUENCES, replace_existing_skin: bool=False, falloff_power: float=2.0, bind_method: int=DEFAULT_BIND_METHOD, custom_distance_weights: bool=True, geodesic_voxel_falloff: float=0.0, geodesic_voxel_resolution: int=256, shoulder_profile: Optional[object]=None, shoulder_blend_strength: float=0.0) -> strmodule function · public name · maya_tools/Rigging/auto_skinner.py:475
smooth_skin_weights
def smooth_skin_weights(mesh: str, iterations: int=2) -> Optional[str]module function · public name · maya_tools/Rigging/auto_skinner.py:570
auto_skin_mesh
def auto_skin_mesh(mesh: str, root_joint: str='origin', max_influences: int=DEFAULT_MAX_INFLUENCES, smooth_iterations: int=2, replace_existing_skin: bool=False, falloff_power: float=2.0, bind_method: int=DEFAULT_BIND_METHOD, custom_distance_weights: bool=True, geodesic_voxel_falloff: float=0.0, geodesic_voxel_resolution: int=256, shoulder_profile: Optional[object]=None, shoulder_blend_strength: float=0.0) -> strmodule function · public name · maya_tools/Rigging/auto_skinner.py:588
auto_skin_selected
def auto_skin_selected(root_joint: str='origin', max_influences: int=DEFAULT_MAX_INFLUENCES, smooth_iterations: int=2, replace_existing_skin: bool=False, falloff_power: float=2.0, bind_method: int=DEFAULT_BIND_METHOD, custom_distance_weights: bool=True, geodesic_voxel_falloff: float=0.0, geodesic_voxel_resolution: int=256, shoulder_profile: Optional[object]=None, shoulder_blend_strength: float=0.0) -> strmodule function · public name · maya_tools/Rigging/auto_skinner.py:622
maya_tools.Rigging.build_vehicle_rig_template
_string_attr
def _string_attr(node: str, name: str, value: str) -> Nonemodule function · internal · maya_tools/Rigging/build_vehicle_rig_template.py:29
_double_attr
def _double_attr(node: str, name: str, value: float, *, minimum: float=0.0) -> Nonemodule function · internal · maya_tools/Rigging/build_vehicle_rig_template.py:34
_bool_attr
def _bool_attr(node: str, name: str, value: bool) -> Nonemodule function · internal · maya_tools/Rigging/build_vehicle_rig_template.py:39
_role
def _role(node: str, value: str) -> Nonemodule function · internal · maya_tools/Rigging/build_vehicle_rig_template.py:44
build
def build(output_path: Path=OUTPUT_PATH) -> Pathmodule function · public name · maya_tools/Rigging/build_vehicle_rig_template.py:48
maya_tools.Rigging.create_rig
_mapped_existing_joint
def _mapped_existing_joint(mapping, slot)module function · internal · maya_tools/Rigging/create_rig.py:107
Return a mapped joint only when it exists in the Maya scene. :param mapping: mapping for mapping :param slot: slot :return: result
_mapped_existing_joints
def _mapped_existing_joints(mapping, slot)module function · internal · maya_tools/Rigging/create_rig.py:128
Return only existing joints from a mapped multi-joint slot. :param mapping: mapping for mapping :param slot: slot :return: result
_filter_existing_face_joint_map
def _filter_existing_face_joint_map(face_joint_map)module function · internal · maya_tools/Rigging/create_rig.py:149
Copy a face mapping while removing joints that do not exist. Missing single-joint slots become None. Missing joints are removed from multi-joint slots so modules never receive invalid scene nodes. :param face_joint_map: mapping for face joi
hik_map_to_rig_args
def hik_map_to_rig_args(body_joint_map, face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:188
Translate body and face mappings into rig arguments. Only joints that exist in the scene are included. Face slots are read from face_joint_map rather than body_joint_map. :param body_joint_map: mapping for body joint map :param face_joint_m
create_brow_main_setup
def create_brow_main_setup(side, root_parent='head1_ctrl')module function · public name · maya_tools/Rigging/create_rig.py:319
Creates the main eyebrows setup, snapping it to the middle brow control. :param side: Left or right side (l/r) :param root_parent: Parent control node name :return: dict
_safe_rename_hierarchy_tokens
def _safe_rename_hierarchy_tokens(root_node, replacements, delete_shapes_on_driver=True)module function · internal · maya_tools/Rigging/create_rig.py:403
Rename an entire hierarchy by applying ordered token replacements to every node name, leaf-to-root. :param root_node: Root transform of hierarchy :param replacements: Ordered string replacements list of tuples :param delete_shapes_on_driver
rename_brow_pad_hierarchies
def rename_brow_pad_hierarchies(side)module function · public name · maya_tools/Rigging/create_rig.py:461
Rename these hierarchies for the given side: 1. side_browX_ctrl_pad -> side_browX_driver_pad and rename entire hierarchy ctrl -> driver 2. side_browX_main_ctrl_pad -> side_browX_ctrl_pad and rename entire hierarchy main_ctrl -> ctrl Also de
setup_secondary_face_constraints
def setup_secondary_face_constraints(face_joint_map=None, head_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:513
Setup secondary face constraints. :param face_joint_map: mapping for face joint map :param head_ctrl: head ctrl :return:
safe_constrain_two_parents
def safe_constrain_two_parents(controls, parent1, parent2, **kwargs)module function · public name · maya_tools/Rigging/create_rig.py:569
Safe constrain two parents. :param controls: list of controls :param parent1: parent1 :param parent2: parent2 :param kwargs: list of kwargs :return:
hide_post_build_face_nodes
def hide_post_build_face_nodes(node_names=POST_BUILD_HIDDEN_FACE_NODES)module function · public name · maya_tools/Rigging/create_rig.py:634
Hide the internal face joints that should not remain visible to animators.
create_full_rig
def create_full_rig(arm_joints=None, leg_joints=None, spine_joints=None, neck_joints=None, root_joints=None, hip_swing='hipswing', face_joint_map=None, face_joints=None, snap_rfl=True, shoe_meshes=None)module function · public name · maya_tools/Rigging/create_rig.py:688
Builds the entire character rig by coordinating modular setup builders. :param arm_joints: list of mapped arm joints :param leg_joints: list or dict of mapped leg joints :param spine_joints: list of mapped spine joints :param neck_joints: l
set_all_limb_ik_fk_switches
def set_all_limb_ik_fk_switches(value=1.0)module function · public name · maya_tools/Rigging/create_rig.py:929
Set every constructed arm/leg IK/FK switch to the build default.
_short_scene_name
def _short_scene_name(node)module function · internal · maya_tools/Rigging/create_rig.py:946
_extension_base_name
def _extension_base_name(node)module function · internal · maya_tools/Rigging/create_rig.py:950
Return the authored system stem for a joint/control hierarchy node.
_is_builder_owned_extension_root
def _is_builder_owned_extension_root(node, owned, known_bases)module function · internal · maya_tools/Rigging/create_rig.py:981
Return whether an apparent extension root belongs to a fixed module. Old extension manifests can outlive the metadata bug that originally misclassified a face control. Match generated control-root naming only; custom systems with unrelated
_set_store_json
def _set_store_json(attribute, value)module function · internal · maya_tools/Rigging/create_rig.py:999
_get_store_json
def _get_store_json(attribute, default=None)module function · internal · maya_tools/Rigging/create_rig.py:1011
_node_reference
def _node_reference(node)module function · internal · maya_tools/Rigging/create_rig.py:1024
Return a rename-tolerant scene reference with a readable fallback.
_resolve_node_reference
def _resolve_node_reference(reference)module function · internal · maya_tools/Rigging/create_rig.py:1034
Resolve a stored node reference by UUID first and name second.
get_dynamic_rig_modules
def get_dynamic_rig_modules()module function · public name · maya_tools/Rigging/create_rig.py:1053
Return ordered tool-authored module build records stored in the scene.
_save_dynamic_rig_modules
def _save_dynamic_rig_modules(records)module function · internal · maya_tools/Rigging/create_rig.py:1062
_capture_new_nodes
def _capture_new_nodes(before_uuids)module function · internal · maya_tools/Rigging/create_rig.py:1066
Capture all nodes created since a UUID snapshot.
_scene_node_uuids
def _scene_node_uuids()module function · internal · maya_tools/Rigging/create_rig.py:1076
Return all scene UUIDs without relying on Maya's argument-less ls mode.
_dynamic_build_inputs
def _dynamic_build_inputs(spec)module function · internal · maya_tools/Rigging/create_rig.py:1086
_build_dynamic_module_record
def _build_dynamic_module_record(record)module function · internal · maya_tools/Rigging/create_rig.py:1097
Build one registered module and refresh its generated-node ownership.
register_dynamic_rig_module
def register_dynamic_rig_module(module_id, module_type, build_spec, build_now=True)module function · public name · maya_tools/Rigging/create_rig.py:1160
Register a tool-authored module and optionally build it immediately.
remove_dynamic_rig_modules_for_rebuild
def remove_dynamic_rig_modules_for_rebuild()module function · public name · maya_tools/Rigging/create_rig.py:1196
Remove generated nodes while retaining every registered build recipe.
rebuild_dynamic_rig_modules
def rebuild_dynamic_rig_modules()module function · public name · maya_tools/Rigging/create_rig.py:1216
Rebuild all enabled dynamic modules in their original creation order.
set_dynamic_rig_module_active
def set_dynamic_rig_module_active(module_id, active)module function · public name · maya_tools/Rigging/create_rig.py:1236
Remove or rebuild one registered module while retaining its recipe.
dynamic_module_spec
def dynamic_module_spec(joints, parent=None, **settings)module function · public name · maya_tools/Rigging/create_rig.py:1264
Create the persistent input specification used by rigging UI widgets.
repair_preserved_extension_body_mapping
def repair_preserved_extension_body_mapping(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:1274
Keep preserved user systems out of fixed HumanIK body module slots. Auto-detection can map a later user joint branch (for example baby_neck) into the standard Neck/Head slots. During rebuild that would create a second control with the same
_metadata_rig_ownership
def _metadata_rig_ownership()module function · internal · maya_tools/Rigging/create_rig.py:1343
Return builder-owned nodes, base joints, and known authored stems.
record_rig_owned_nodes
def record_rig_owned_nodes()module function · public name · maya_tools/Rigging/create_rig.py:1400
Record the exact builder-owned scene nodes before extensions reattach.
_current_rig_ownership
def _current_rig_ownership()module function · internal · maya_tools/Rigging/create_rig.py:1456
Resolve the latest exact ownership snapshot, with legacy fallback.
_extension_boundary_roots
def _extension_boundary_roots(owned, base_joints, known_bases)module function · internal · maya_tools/Rigging/create_rig.py:1483
Find unowned control branches attached to the generated rig. Extra deformation joints remain safe beneath the source skeleton during teardown. Only control DAG branches must be detached from control parents that the builder replaces.
_constraint_record
def _constraint_record(node)module function · internal · maya_tools/Rigging/create_rig.py:1521
_node_from_plug
def _node_from_plug(plug)module function · internal · maya_tools/Rigging/create_rig.py:1555
_cross_boundary_connections
def _cross_boundary_connections(extension_nodes, owned, constraint_nodes)module function · internal · maya_tools/Rigging/create_rig.py:1559
preserve_post_build_extensions
def preserve_post_build_extensions()module function · public name · maya_tools/Rigging/create_rig.py:1595
Detach and store every post-build system crossing the rig boundary.
_resolve_unique_node
def _resolve_unique_node(name)module function · internal · maya_tools/Rigging/create_rig.py:1730
_additional_system_display_name
def _additional_system_display_name(name)module function · internal · maya_tools/Rigging/create_rig.py:1735
Return a concise animator-facing label for an authored system root.
_normalize_extension_manifest_state
def _normalize_extension_manifest_state(manifest)module function · internal · maya_tools/Rigging/create_rig.py:1745
Clear a stale preserved flag once every saved root is reattached.
get_external_rig_systems
def get_external_rig_systems(discover_live=True)module function · public name · maya_tools/Rigging/create_rig.py:1765
Return user-authored control systems attached around the generated rig. Saved manifest roots remain an inventory after restoration. A live scan also exposes newly-authored systems before the first Remove/Rebuild cycle. Builder-owned systems
get_embedded_secondary_arm_systems
def get_embedded_secondary_arm_systems()module function · public name · maya_tools/Rigging/create_rig.py:1832
Discover complete secondary arm modules embedded in the core rig. Divine Being's extra arms are authored beneath the main control hierarchy, so the general external-extension scanner correctly treats them as owned core nodes. Expose their c
_short_plug
def _short_plug(plug)module function · internal · maya_tools/Rigging/create_rig.py:1924
_system_hierarchy_nodes
def _system_hierarchy_nodes(root)module function · internal · maya_tools/Rigging/create_rig.py:1929
_boundary_constraint_records
def _boundary_constraint_records(system_nodes)module function · internal · maya_tools/Rigging/create_rig.py:1941
_all_boundary_connections
def _all_boundary_connections(system_nodes, constraint_nodes=(), include_internal=False)module function · internal · maya_tools/Rigging/create_rig.py:1958
Capture non-message DG links touching a system hierarchy.
inspect_external_rig_system
def inspect_external_rig_system(root, manifest=None)module function · public name · maya_tools/Rigging/create_rig.py:1998
Return every saved/live connection that crosses one system boundary.
inspect_dynamic_rig_module
def inspect_dynamic_rig_module(record)module function · public name · maya_tools/Rigging/create_rig.py:2039
Return live boundary details for one recipe-backed added module.
set_external_rig_system_active
def set_external_rig_system_active(root, active)module function · public name · maya_tools/Rigging/create_rig.py:2068
Reversibly attach or detach one user-authored system.
_restore_constraint
def _restore_constraint(record)module function · internal · maya_tools/Rigging/create_rig.py:2172
restore_post_build_extensions
def restore_post_build_extensions()module function · public name · maya_tools/Rigging/create_rig.py:2200
Reattach preserved extension systems to the newly generated rig.
remove_full_rig
def remove_full_rig(body_joint_map, face_joint_map=None)module function · public name · maya_tools/Rigging/create_rig.py:2295
Removes all controls, rig nodes, and clears the Do_Not_Touch group. :param body_joint_map: body joint mapping dictionary :param face_joint_map: face joint mapping dictionary :return: None
create_rig_from_mapping
def create_rig_from_mapping(body_joint_map, face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:2373
Runs create_full_rig using the mapped joints from HIK/Face mappings. :param body_joint_map: body joint mapping dictionary :param face_joint_map: face joint mapping dictionary :return: None
query_space_switches
def query_space_switches(driven)module function · public name · maya_tools/Rigging/create_rig.py:2444
Queries and returns any space switches driving 'driven' checking control and pad levels. :param driven: control node to query :return: list[dict]
delete_unused_scaffold_nodes
def delete_unused_scaffold_nodes()module function · public name · maya_tools/Rigging/create_rig.py:2545
Delete unused scaffold and temporary nodes without removing rig drivers. A ``*_main`` joint with a matching control (or parented beneath a control) is a persistent surface driver used by the lips, brows, and eyelids. It must survive even if
rig_brows_module
def rig_brows_module(side, face_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:2606
Builds the eyebrows setup with lofted surfaces and driver controls. :param side: left or right side (l/r) :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_brows_module
def remove_brows_module(side, face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:2642
Removes all controls and constraints built for eyebrows. :param side: left or right side (l/r) :param face_joint_map: face joint mapping dictionary :return: int
rig_eyelids_module
def rig_eyelids_module(side, face_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:2669
Builds the eyelids setup with lofted surfaces and driver controls. :param side: left or right side (l/r) :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :return: None
get_ordered_hierarchy
def get_ordered_hierarchy(root)module function · public name · maya_tools/Rigging/create_rig.py:2739
Gets ordered hierarchy. :param root: root :return: result
duplicate_static_hierarchy
def duplicate_static_hierarchy(root, suffix='static')module function · public name · maya_tools/Rigging/create_rig.py:2762
Duplicate static hierarchy. :param root: root :param suffix: suffix :return: result
remove_eyelids_module
def remove_eyelids_module(side, face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:2805
Removes all controls and constraints built for eyelids. :param side: left or right side (l/r) :param face_joint_map: face joint mapping dictionary :return: int
rig_mouth_module
def rig_mouth_module(face_joint_map, parent_ctrl=None, jaw_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:2876
Builds the mouth setup with lofted surfaces, follicle controls, and jaw drivers. :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :param jaw_ctrl: jaw control node name :return: None
remove_mouth_module
def remove_mouth_module(face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:2955
Removes all controls and constraints built for the mouth. :param face_joint_map: face joint mapping dictionary :return: int
rig_eyes_module
def rig_eyes_module(face_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:3025
Builds the eye aim control setup. :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_eyes_module
def remove_eyes_module(face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:3064
Removes all controls built for the eyes. :param face_joint_map: face joint mapping dictionary :return: int
rig_tongue_module
def rig_tongue_module(face_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:3099
Builds the tongue controls setup. :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_tongue_module
def remove_tongue_module(face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:3128
Removes all controls built for the tongue. :param face_joint_map: face joint mapping dictionary :return: int
rig_teeth_module
def rig_teeth_module(face_joint_map, parent_ctrl=None, jaw_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:3147
Builds the upper and lower teeth controls setup. :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :param jaw_ctrl: jaw control node name :return: None
remove_teeth_module
def remove_teeth_module(face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:3182
Removes all controls built for the teeth. :param face_joint_map: face joint mapping dictionary :return: int
rig_other_face_module
def rig_other_face_module(face_joint_map, parent_ctrl=None, jaw_ctrl=None, jaw_joint=None)module function · public name · maya_tools/Rigging/create_rig.py:3202
Rig other face module. :param face_joint_map: mapping for face joint map :param parent_ctrl: parent ctrl :param jaw_ctrl: jaw ctrl :param jaw_joint: jaw joint :return:
remove_other_face_module
def remove_other_face_module(face_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:3337
Removes all secondary controls built for other face joints. :param face_joint_map: face joint mapping dictionary :return: int
rig_arm_module
def rig_arm_module(side, body_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:3353
Rigs the Arm (IK/FK limb, Fingers, and Twist surface rigs). :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
_find_parent_joint_control
def _find_parent_joint_control(joint)module function · internal · maya_tools/Rigging/create_rig.py:3556
Walk up the joint hierarchy from joint and return the first ancestor control. :param joint: joint name to search from :return: str or None
_capture_orphaned_space_switch_roles
def _capture_orphaned_space_switch_roles(module_controls, module_name)module function · internal · maya_tools/Rigging/create_rig.py:3581
Before removing a module, scan every OTHER control in the scene for space switches that list any of module_controls as a target. The original ordered (target, display_name) pairs are stored inside GLOBAL_RIG_STORE[module_name]["orphaned_rol
_restore_orphaned_space_switch_roles
def _restore_orphaned_space_switch_roles(module_name, rebuilt_ctrl_map=None)module function · internal · maya_tools/Rigging/create_rig.py:3645
After a module is rebuilt, re-insert its controls into every space switch that previously referenced them, restoring the original enum index order. :param module_name: name of the module being restored :param rebuilt_ctrl_map: optional dict
_delete_space_switch_for_ctrl
def _delete_space_switch_for_ctrl(ctrl, attr_name='space')module function · internal · maya_tools/Rigging/create_rig.py:3694
Remove all space-switch scaffolding for ctrl by traversing the scene graph. :param ctrl: control node name :param attr_name: name of the enum attribute to delete :return: None
_short_node_name
def _short_node_name(node)module function · internal · maya_tools/Rigging/create_rig.py:3761
Short node name. :param node: node :return: result
_base_from_joint
def _base_from_joint(joint)module function · internal · maya_tools/Rigging/create_rig.py:3772
Base from joint. :param joint: joint :return: result
_unique_existing_nodes
def _unique_existing_nodes(nodes, include_missing=False)module function · internal · maya_tools/Rigging/create_rig.py:3782
Unique existing nodes. :param nodes: list of nodes :param include_missing: include missing :return: result
_pad_for_ctrl
def _pad_for_ctrl(ctrl)module function · internal · maya_tools/Rigging/create_rig.py:3803
Pad for ctrl. :param ctrl: ctrl :return: result
_safe_delete_nodes
def _safe_delete_nodes(nodes)module function · internal · maya_tools/Rigging/create_rig.py:3815
Safe delete nodes. :param nodes: list of nodes :return: result
_controls_from_joint_controls
def _controls_from_joint_controls(joints)module function · internal · maya_tools/Rigging/create_rig.py:3829
Controls from joint controls. :param joints: list of joints :return: result
_is_rfl_pivot_joint
def _is_rfl_pivot_joint(node)module function · internal · maya_tools/Rigging/create_rig.py:3844
Is rfl pivot joint. :param node: node :return: result
_rfl_pivot_joints
def _rfl_pivot_joints(side=None)module function · internal · maya_tools/Rigging/create_rig.py:3863
Rfl pivot joints. :param side: side :return: result
preserve_rfl_pivot_joints
def preserve_rfl_pivot_joints(side=None)module function · public name · maya_tools/Rigging/create_rig.py:3881
Preserve rfl pivot joints. :param side: side :return: result
_metadata_joint_nodes
def _metadata_joint_nodes(metadata)module function · internal · maya_tools/Rigging/create_rig.py:3911
Metadata joint nodes. :param metadata: metadata :return: result
_safe_scene_nodes_by_prefix
def _safe_scene_nodes_by_prefix(prefixes)module function · internal · maya_tools/Rigging/create_rig.py:3973
Safe scene nodes by prefix. :param prefixes: list of prefixes :return: result
_module_prefixes
def _module_prefixes(module_id, metadata)module function · internal · maya_tools/Rigging/create_rig.py:3995
Module prefixes. :param module_id: module id :param metadata: metadata :return: result
_connected_module_nodes
def _connected_module_nodes(seed_nodes, prefixes=None)module function · internal · maya_tools/Rigging/create_rig.py:4047
Connected module nodes. :param seed_nodes: list of seed nodes :param prefixes: list of prefixes :return: result
_discover_module_controls
def _discover_module_controls(module_id, metadata)module function · internal · maya_tools/Rigging/create_rig.py:4099
Discover module controls. :param module_id: module id :param metadata: metadata :return: result
_discover_module_cleanup_nodes
def _discover_module_cleanup_nodes(module_id, metadata)module function · internal · maya_tools/Rigging/create_rig.py:4155
Discover module cleanup nodes. :param module_id: module id :param metadata: metadata :return: result
_prepare_module_metadata_for_save
def _prepare_module_metadata_for_save(module_id, data_dict)module function · internal · maya_tools/Rigging/create_rig.py:4187
Prepares module metadata for save. :param module_id: module id :param data_dict: mapping for data dict :return: result
_get_module_controls_for_removal
def _get_module_controls_for_removal(module_id, fallback_controls=None)module function · internal · maya_tools/Rigging/create_rig.py:4212
Gets module controls for removal. :param module_id: module id :param fallback_controls: list of fallback controls :return: result
get_module_controls
def get_module_controls(module_id, existing_only=True)module function · public name · maya_tools/Rigging/create_rig.py:4226
Return controls recorded/discovered for a stored rig module. :param module_id: unique module identifier :param existing_only: only return controls that exist in the current scene :return: list[str]
_rebuild_identity_key
def _rebuild_identity_key(node_name)module function · internal · maya_tools/Rigging/create_rig.py:4238
Return a conservative role key for matching controls across rebuilds.
_capture_control_shape_snapshot
def _capture_control_shape_snapshot(ctrl)module function · internal · maya_tools/Rigging/create_rig.py:4251
Capture editable NURBS control CVs without depending on shape names.
_capture_control_shape_holder
def _capture_control_shape_holder(ctrl)module function · internal · maya_tools/Rigging/create_rig.py:4266
Instance a control's exact curve shapes into a hidden rebuild holder.
_restore_control_shape_holder
def _restore_control_shape_holder(ctrl, holder, shape_snapshot=None)module function · internal · maya_tools/Rigging/create_rig.py:4289
Replace rebuilt curves with the exact instanced shapes saved pre-removal.
_control_pad_hierarchy
def _control_pad_hierarchy(ctrl)module function · internal · maya_tools/Rigging/create_rig.py:4326
Return only the conventional SDK/pad parents for a control.
_restore_control_shape_snapshot
def _restore_control_shape_snapshot(ctrl, shape_snapshot)module function · internal · maya_tools/Rigging/create_rig.py:4344
Restore captured CVs when the rebuilt curve topology is unambiguous.
capture_module_rebuild_identity
def capture_module_rebuild_identity(module_id, controls=None)module function · public name · maya_tools/Rigging/create_rig.py:4388
Persist live control/space names and control shapes before module removal.
_unique_rebuild_role_map
def _unique_rebuild_role_map(records)module function · internal · maya_tools/Rigging/create_rig.py:4440
Return role -> record only for roles that occur exactly once.
_rename_rebuilt_node
def _rename_rebuilt_node(node, desired_name)module function · internal · maya_tools/Rigging/create_rig.py:4450
Rename one rebuilt node without overwriting a live scene node.
restore_module_rebuild_identity
def restore_module_rebuild_identity(module_id)module function · public name · maya_tools/Rigging/create_rig.py:4466
Restore uniquely matched legacy names, spaces, and control CV shapes.
_delete_module_from_metadata
def _delete_module_from_metadata(module_id, fallback_nodes=None, fallback_controls=None, protected_nodes=None, prefer_fallback=False)module function · internal · maya_tools/Rigging/create_rig.py:4593
Deletes module from metadata. :param module_id: module id :param fallback_nodes: list of fallback nodes :param fallback_controls: list of fallback controls :return: result
remove_arm_module
def remove_arm_module(side, body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:4646
Remove rig nodes and space switches for the given arm side. :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :return: int
resolve_rfl_joints
def resolve_rfl_joints(side)module function · public name · maya_tools/Rigging/create_rig.py:4680
Resolve an existing reverse-foot hierarchy. Supports both the newer toe pivot name and older/manual ball pivot name: <side>_toe_RFL <side>_ball_RFL Returns joints in the order expected by build_rfl_ik_and_constraints: heel, outerBank, inner
create_rfl_joints_template
def create_rfl_joints_template(side, ankle_jnt, toe_jnt, toe_tip_jnt)module function · public name · maya_tools/Rigging/create_rig.py:4745
Creates RFL template joints heel > outerBank > innerBank > toeTip > toe > ankle. :param side: side :param ankle_jnt: ankle jnt :param toe_jnt: toe jnt :param toe_tip_jnt: toe tip jnt :return: result
rig_leg_module
def rig_leg_module(side, body_joint_map, parent_ctrl=None, snap_rfl=True, shoe_meshes=None)module function · public name · maya_tools/Rigging/create_rig.py:4788
Rigs the Leg (IK/FK limb, Twist surface rigs, foot roll RFL, and switches). :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_leg_module
def remove_leg_module(side, body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5128
Remove rig nodes and RFL setups for the given leg side. :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :return: int
rig_root_module
def rig_root_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5174
Builds the root origin control setup. :param body_joint_map: body joint mapping dictionary :return: None
remove_root_module
def remove_root_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5196
Removes the root origin control setup. :param body_joint_map: body joint mapping dictionary :return: int
rig_pelvis_module
def rig_pelvis_module(body_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:5208
Builds the pelvis and hipswing control setup. :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_pelvis_module
def remove_pelvis_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5251
Removes the pelvis and hipswing control setup. :param body_joint_map: body joint mapping dictionary :return: int
rig_spine_module
def rig_spine_module(body_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:5270
Builds the spine control setup. :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_spine_module
def remove_spine_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5359
Removes the spine control setup. :param body_joint_map: body joint mapping dictionary :return: int
rig_neck_module
def rig_neck_module(body_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:5379
Builds the neck control setup and space switches. :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_neck_module
def remove_neck_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5441
Removes the neck control setup. :param body_joint_map: body joint mapping dictionary :return: int
rig_head_module
def rig_head_module(body_joint_map, face_joint_map=None, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:5461
Builds the head control setup and space switches. :param body_joint_map: body joint mapping dictionary :param face_joint_map: face joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_head_module
def remove_head_module(body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5501
Removes the head control setup. :param body_joint_map: body joint mapping dictionary :return: int
_module_attr_name
def _module_attr_name(module_id)module function · internal · maya_tools/Rigging/create_rig.py:5511
Normalise a module ID to a valid Maya attribute name. :param module_id: unique module identifier :return: str
save_module_metadata
def save_module_metadata(module_id, data_dict)module function · public name · maya_tools/Rigging/create_rig.py:5523
Persist data_dict for module_id on the scene-level store node. :param module_id: unique module identifier :param data_dict: dictionary containing module properties :return: None
load_module_metadata
def load_module_metadata(module_id)module function · public name · maya_tools/Rigging/create_rig.py:5549
Return the stored dict for module_id, or {} if not found. :param module_id: unique module identifier :return: dict
get_all_module_metadata
def get_all_module_metadata()module function · public name · maya_tools/Rigging/create_rig.py:5568
Return {module_id: data_dict} for every stored module. :return: dict
clear_module_metadata
def clear_module_metadata(module_id)module function · public name · maya_tools/Rigging/create_rig.py:5587
Mark a module as not built while keeping its joint/parent info. :param module_id: unique module identifier :return: None
store_rig_connections
def store_rig_connections(controls_list, module_name)module function · public name · maya_tools/Rigging/create_rig.py:5598
Queries space switches, external constraints, and output connections for controls_list and stores them in GLOBAL_RIG_STORE[module_name]. :param controls_list: list of control nodes to query :param module_name: name of the module :return: No
rebuild_all_space_switches
def rebuild_all_space_switches()module function · public name · maya_tools/Rigging/create_rig.py:5673
Rebuilds all space switches in the scene using stored connections to ensure they are perfectly aligned with newly oriented controls.
_space_switch_targets_from_record
def _space_switch_targets_from_record(sw)module function · internal · maya_tools/Rigging/create_rig.py:5682
Space switch targets from record. :param sw: sw :return: result
_space_switch_exists_in_scene
def _space_switch_exists_in_scene(sw)module function · internal · maya_tools/Rigging/create_rig.py:5698
Space switch exists in scene. :param sw: sw :return: result
_constraint_exists
def _constraint_exists(driver, driven, constraint_type)module function · internal · maya_tools/Rigging/create_rig.py:5719
Constraint exists. :param driver: driver :param driven: driven :param constraint_type: constraint type :return: result
restore_rig_connections
def restore_rig_connections(module_name)module function · public name · maya_tools/Rigging/create_rig.py:5751
Restores space switches, constraints, and output connections stored for module_name. :param module_name: name of the module :return: int
rig_clavicle_module
def rig_clavicle_module(side, body_joint_map, parent_ctrl=None)module function · public name · maya_tools/Rigging/create_rig.py:5848
Builds the Clavicle control setup. :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :param parent_ctrl: parent control node name :return: None
remove_clavicle_module
def remove_clavicle_module(side, body_joint_map)module function · public name · maya_tools/Rigging/create_rig.py:5891
Removes the Clavicle control setup. :param side: left or right side (l/r) :param body_joint_map: body joint mapping dictionary :return: int
maya_tools.Rigging.create_rig_core
normalize_rfl_joint_suffixes
def normalize_rfl_joint_suffixes(side=None, namespace=None)module function · public name · maya_tools/Rigging/create_rig_core.py:61
Normalize existing reverse-foot joint suffixes to uppercase ``_RFL``. This is a rename-only migration: authored pivots, hierarchy, orientation, and node identity are retained. Ambiguous or occupied destinations are refused rather than guess
_get_joint
def _get_joint(body_joint_map, slot, default=None)module function · internal · maya_tools/Rigging/create_rig_core.py:152
Gets joint. :param body_joint_map: mapping for body joint map :param slot: slot :param default: default :return: result
create_diamond_ctrl
def create_diamond_ctrl(name, size=1.0, normal=(0, 1, 0))module function · public name · maya_tools/Rigging/create_rig_core.py:172
Creates a diamond-shaped nurbsCurve control. :param name: ctrl_name :param size: local size mult :param normal: relative direction :return:
create_prism_ctrl
def create_prism_ctrl(name, size=1.0, depth=0.5, normal=(0, 1, 0))module function · public name · maya_tools/Rigging/create_rig_core.py:203
Creates a prism-shaped nurbsCurve control. :param name: control name :param size: horizontal/vertical scale of diamond :param depth: prism depth along Y-axis :param normal: vector to orient the prism along (default Y-up) :return:
create_cube_ctrl
def create_cube_ctrl(name, size=1.5)module function · public name · maya_tools/Rigging/create_rig_core.py:251
Wireframe cube control :param name: control name :param size: local size mult :return:
snap_ctrl_cvs_to_child
def snap_ctrl_cvs_to_child(ctrl, child_joint, axis='x', flip_direction=False)module function · public name · maya_tools/Rigging/create_rig_core.py:271
Snaps control CVs toward the child joint along a local axis. :param ctrl: control transform :param child_joint: child joint or pad :param axis: 'x', 'y', or 'z' (local axis to operate on) :param flip_direction: reverse child-facing side
create_sphere_ctrl
def create_sphere_ctrl(name, radius=1.5)module function · public name · maya_tools/Rigging/create_rig_core.py:326
Creates a sphere-like control made of 3 rotated circles with proper shape parenting :param name: ctrl name :param radius: relative radius of sphere :return:
create_bi_arrow_ctrl
def create_bi_arrow_ctrl(name, size=1.2)module function · public name · maya_tools/Rigging/create_rig_core.py:363
Two arrows pointing in opposite directions, rotated 90° around X-axis :param name: ctrl name :param size: relative size mult :return:
setup_show_twist_ctrls
def setup_show_twist_ctrls(side, limb, twist_joints=None, attr_nice_name='Show Twist Ctrls')module function · public name · maya_tools/Rigging/create_rig_core.py:393
Setup show twist ctrls. :param side: side :param limb: limb :param twist_joints: list of twist joints :param attr_nice_name: attr nice name :return: result
_stretch_node_token
def _stretch_node_token(node)module function · internal · maya_tools/Rigging/create_rig_core.py:461
Return a short Maya-safe token for stretch helper-node names.
_ensure_stretch_attr
def _ensure_stretch_attr(control, attr_name='stretch')module function · internal · maya_tools/Rigging/create_rig_core.py:467
Create and return a keyable 0-1 stretch blend on ``control``.
_create_volume_stretch_network
def _create_volume_stretch_network(prefix, ratio_attr, volume_attr, driven_node, length_axis)module function · internal · maya_tools/Rigging/create_rig_core.py:488
Preserve approximate volume by scaling axes perpendicular to length. Constant volume requires cross-sectional area to change by the inverse of the length ratio. Applying ``ratio ** -0.5`` to both perpendicular axes produces that area change
_joint_segment_axis
def _joint_segment_axis(joint)module function · internal · maya_tools/Rigging/create_rig_core.py:525
Return the dominant local translate axis and its signed rest value.
_isolate_joint_from_parent_volume_scale
def _isolate_joint_from_parent_volume_scale(joint)module function · internal · maya_tools/Rigging/create_rig_core.py:532
Prevent a rigid extremity joint from inheriting limb volume scaling.
_drive_fleshy_twist_joints_volume_scale
def _drive_fleshy_twist_joints_volume_scale(segment_joints, segment_length_axes, volume_scale_outputs)module function · internal · maya_tools/Rigging/create_rig_core.py:557
Drive skinning twist influences with their segment's transverse scale.
_create_stretch_ratio_network
def _create_stretch_ratio_network(prefix, current_distance_attr, rest_length, stretch_attr, scale_reference=None, rest_length_attr=None, minimum_ratio=None)module function · internal · maya_tools/Rigging/create_rig_core.py:592
Create a scale-aware stretch/compression ratio and return its output.
_create_distance_dimension
def _create_distance_dimension(prefix, start_position, end_position, start_parent=None, end_parent=None)module function · internal · maya_tools/Rigging/create_rig_core.py:656
Create a hidden distanceDimension and return all nodes it owns.
_ensure_distance_nodes_group
def _ensure_distance_nodes_group()module function · internal · maya_tools/Rigging/create_rig_core.py:694
Return the hidden ``Do_Not_Touch|distance_nodes`` DAG group.
_curve_world_up_vector
def _curve_world_up_vector(curve_shape)module function · internal · maya_tools/Rigging/create_rig_core.py:725
Return a stable world-space normal for motion paths on a curve. Closed facial loops are especially prone to a single motionPath roll when Maya has to infer an up vector. A Newell-style normal computed from the curve CVs gives every sample t
create_joints_along_curve
def create_joints_along_curve(curve, joint_count=5, keep_attached=True, name_prefix=None)module function · public name · maya_tools/Rigging/create_rig_core.py:764
Create evenly spaced independent joints along a NURBS curve. When ``keep_attached`` is true, each joint is placed below a transform driven by its own fraction-mode motionPath node. Otherwise the evaluated world transforms are baked onto the
setup_spine_segment_stretch
def setup_spine_segment_stretch(spine_joints, control_data, pelvis_ctrl, scale_reference=None)module function · public name · maya_tools/Rigging/create_rig_core.py:860
Add per-bone distance stretch without replacing the existing FK spine.
_drive_stretch_segments
def _drive_stretch_segments(prefix, segment_joints, ratio_attr)module function · internal · maya_tools/Rigging/create_rig_core.py:967
Drive signed local joint translations from a shared stretch ratio.
setup_ik_limb_stretch
def setup_ik_limb_stretch(ik_joints, ik_ctrl, switch_ctrl, scale_reference=None, setup_positions=None)module function · public name · maya_tools/Rigging/create_rig_core.py:990
Add bend-preserving stretch to a two-bone IK chain. The enabled ratio is measured against the chain's original root-to-end chord, not the sum of its two bone lengths. Dividing by the length sum makes the scaled bones exactly equal the targe
create_ik_fk_limb
def create_ik_fk_limb(sel, root_parent)module function · public name · maya_tools/Rigging/create_rig_core.py:1107
Creates an IK/FK limb from either: - 3 joints (arm) - 4+ joints (leg with extra joints) Behavior is determined purely by joint count. :param sel: list of joints in the limb chain (top -> mid -> end -> optional extras) :param root_parent: tr
get_nose_joints
def get_nose_joints(face_joint_map=None)module function · public name · maya_tools/Rigging/create_rig_core.py:1676
Gets nose joints. :param face_joint_map: mapping for face joint map :return: result
set_sdk
def set_sdk(driver, driven_attr, keys)module function · public name · maya_tools/Rigging/create_rig_core.py:1711
set driven key function :param driver: 'ctrl.attr' :param driven_attr: 'node.attr' :param keys: list of tuples [(driver_value, driven_value)] :return:
_connect_attr_once
def _connect_attr_once(source_attr, dest_attr, force=False)module function · internal · maya_tools/Rigging/create_rig_core.py:1728
Connect source_attr to dest_attr only when that exact connection is missing. :param source_attr: source attr :param dest_attr: dest attr :param force: force :return: result
_clear_sdk_anim_curves
def _clear_sdk_anim_curves(driven_attrs)module function · internal · maya_tools/Rigging/create_rig_core.py:1750
Clear sdk anim curves. :param driven_attrs: list of driven attrs :return:
ensure_rfl_attrs
def ensure_rfl_attrs(ik_leg_ctrl)module function · public name · maya_tools/Rigging/create_rig_core.py:1765
Ensures the reverse foot setup attributes exist on the IK leg control. :param ik_leg_ctrl: name of the IK leg control node :return: None
ensure_world_aligned_bank_sdk
def ensure_world_aligned_bank_sdk(joint)module function · public name · maya_tools/Rigging/create_rig_core.py:1801
Insert a world-aligned rotation group below an RFL bank joint. RFL joints can carry arbitrary joint orientation from skeleton placement. Driving their ordinary control SDK's local Z therefore banks around a diagonal axis. This group parents
setup_rfl_sdks
def setup_rfl_sdks(ik_leg_ctrl, rfl_joints, rfl_control_map=None)module function · public name · maya_tools/Rigging/create_rig_core.py:1932
Connect the reverse-foot attributes to the RFL control SDK groups. RFL joints may be resolved as long DAG paths, but generated controls use short names. Always strip the joint path before constructing control names. :param ik_leg_ctrl: ik l
build_rfl_ik_and_constraints
def build_rfl_ik_and_constraints(side, ik_leg_ctrl, ik_leg_joints, rfl_joints)module function · public name · maya_tools/Rigging/create_rig_core.py:2011
creates full reverse foot setup from existing joints :param side: l or r :param ik_leg_ctrl: actual leg ik ctrl :param ik_leg_joints: list of ['ankle', 'toe', 'toeTip'] joints :param rfl_joints: list of ['heel', 'outerBank', 'innerBank', 't
find_ik_handle_constrained_by_ctrl
def find_ik_handle_constrained_by_ctrl(ctrl)module function · public name · maya_tools/Rigging/create_rig_core.py:2099
Finds the IK handle currently constrained by the given control. :param ctrl: actual ik ctrl :return: Returns the ikHandle or None.
snap_to_joint_matrix
def snap_to_joint_matrix(jnt, node)module function · public name · maya_tools/Rigging/create_rig_core.py:2116
snaps node to the joint using world matrix :param jnt: joint to snap to :param node: node to snap :return:
orient_control_pad_to_world_safely
def orient_control_pad_to_world_safely(ctrl, jnt)module function · public name · maya_tools/Rigging/create_rig_core.py:2127
Safely orients the control's pad to world coordinate space without moving the joint, unparenting children first, resetting world rotation on the pad, recreating parent/scale constraints, and then reparenting the children back under the cont
apply_side_color_override
def apply_side_color_override(node)module function · public name · maya_tools/Rigging/create_rig_core.py:2190
Auto-detect side from name and apply viewport override color to the SHAPE. l_ -> blue (6) r_ -> red (13) center -> yellow (17) :param node: ctrl to edit :return:
create_joint_controls
def create_joint_controls(joint_list=None, control_shape='sphere', root_parent=None, sub_ctrls=False, keep_constraint=True, sub_ctrl_shape_rotation_x=0.0, sub_ctrl_shape_rotation_z=0.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2222
Creates a control hierarchy for the joints :param joint_list: list of joints to create , accepts hierarchy or single item list :param control_shape: shape type, can be circle, diamond, prism, arrow, cube or sphere :param root_parent: what t
get_side_prefix
def get_side_prefix(name)module function · public name · maya_tools/Rigging/create_rig_core.py:2381
gets side if it exists for node :param name: node to check :return: Returns 'l', 'r', or None based on joint naming.
scale_ctrl_cvs_local
def scale_ctrl_cvs_local(ctrl, scale=(1.0, 1.0, 1.0))module function · public name · maya_tools/Rigging/create_rig_core.py:2396
Scales CVs of a NURBS curve or surface relative to the control's local space. :param ctrl: transform of the control :param scale: (sx, sy, sz) local scale multiplier :return:
rotate_ctrl_cvs_object_x
def rotate_ctrl_cvs_object_x(ctrl, degrees=90.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2424
Rotate a control's shape CVs around its local X axis. The transform itself is not rotated, so its zero channels, constraints, and animation behavior remain unchanged.
rotate_ctrl_cvs_object_z
def rotate_ctrl_cvs_object_z(ctrl, degrees=90.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2476
Rotate a control's shape CVs around local Z without rotating its transform.
rotate_ctrl_cvs_object_y
def rotate_ctrl_cvs_object_y(ctrl, degrees=90.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2523
Rotate a control's shape CVs around local Y without rotating its transform.
get_region_size_from_joints
def get_region_size_from_joints(joints)module function · public name · maya_tools/Rigging/create_rig_core.py:2571
Returns average spatial size of a joint region. Useful for auto-scaling controls (mouth, eyelids, brows). :param joints: list of joints :return: Average of results
scale_ctrl_to_region
def scale_ctrl_to_region(ctrl, region_joints, base_size=1.0, multiplier=1.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2601
Scales control CVs based on the size of a joint region. :param ctrl: ctrl to scale :param region_joints: list of joints :param base_size: reference size (tweak once per rig) :param multiplier: artistic tuning knob :return:
offset_pv_pad
def offset_pv_pad(pad, side, amount=5.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2630
:param pad: pad to offset :param side: side of ctrl :param amount: offset amount :return:
position_finger_pv_above_knuckle
def position_finger_pv_above_knuckle(pad, knuckle_joint, distance=5.0)module function · public name · maya_tools/Rigging/create_rig_core.py:2645
Place a finger PV above the knuckle on its signed local-Z axis. The project finger frame has local Y pointing sideways. Local Z is the knuckle-up axis; choose its sign against scene up so mirrored hands both place the PV above rather than b
normalize
def normalize(v)module function · public name · maya_tools/Rigging/create_rig_core.py:2674
Normalises a 3D vector. :param v: input 3D vector :return: list[float]
cross
def cross(a, b)module function · public name · maya_tools/Rigging/create_rig_core.py:2684
Computes the cross product of two 3D vectors. :param a: first 3D vector :param b: second 3D vector :return: list[float]
create_surface_from_joints_original
def create_surface_from_joints_original(joint_chain, name='surface')module function · public name · maya_tools/Rigging/create_rig_core.py:2698
Stable surface builder using nurbsPlane + CV positioning. - Offsets using joint local Z axis - Supports closed loops - Creates follicles + follicle joints :param joint_chain: list of joints :param name: surface name :return: surface, follic
create_loft_surface_with_follicle_joints
def create_loft_surface_with_follicle_joints(joint_chain, name='surface', offset=0.5)module function · public name · maya_tools/Rigging/create_rig_core.py:2828
Create a lofted surface along a joint chain. Creates: - Lofted NURBS surface - Follicles attached to the surface - Follicle joints parented to the follicles (to drive controls) :param joint_chain: list of joints :param name: surface name :p
_compensate_twist_control_pad_volume_scale
def _compensate_twist_control_pad_volume_scale(ctrl_pad, parent_driver)module function · internal · maya_tools/Rigging/create_rig_core.py:2916
Keep twist control pads at a stable world size under limb volume scale.
setup_surface_rig
def setup_surface_rig(joint_chain, loft_name='eyelid', offset=0.5, region='eyelid', root_parent=None, create_controls=True)module function · public name · maya_tools/Rigging/create_rig_core.py:2946
Sets up the eyelid rig: - Duplicates first joint to close the chain - Creates loft + follicles + follicle joints - Deletes temp joint - Creates controls and aims them at follicle joints :param joint_chain: list of joints :param loft_name: s
_bind_surface_to_joints
def _bind_surface_to_joints(surface, influences, **skin_options)module function · internal · maya_tools/Rigging/create_rig_core.py:3114
Bind a NURBS surface in place using an explicit transform DAG path.
refresh_skin_bind_matrices_for_current_pose
def refresh_skin_bind_matrices_for_current_pose(influences)module function · public name · maya_tools/Rigging/create_rig_core.py:3144
Make the current rigged pose the skin rest pose for selected influences. Rig construction reparents and constrains the bind joints to their driver chains. Some production scenes also arrive with joints that have already been repositioned re
_face_surface_weight_role
def _face_surface_weight_role(influence, region)module function · internal · maya_tools/Rigging/create_rig_core.py:3191
Normalize a surface driver name to the anatomical role in the template.
_apply_reference_face_surface_weights
def _apply_reference_face_surface_weights(skin, surface, region, side=None)module function · internal · maya_tools/Rigging/create_rig_core.py:3210
Apply the studio Lost Soul Kid mouth/eyelid CV weight profile by role.
_group_center_surface_controls
def _group_center_surface_controls(loft_name, root_parent, driver_data, joint_to_ctrl)module function · internal · maya_tools/Rigging/create_rig_core.py:3321
Group centered main controls and share their scale with joint controls.
_configure_twist_control_orientation_distribution
def _configure_twist_control_orientation_distribution(joint_chain, follicle_joints, joint_to_ctrl, neutral_frame, full_twist_frame)module function · internal · maya_tools/Rigging/create_rig_core.py:3369
Blend twist controls from a neutral proximal frame to full distal roll.
setup_surface_rig_with_drivers
def setup_surface_rig_with_drivers(joint_list, loft_name='eyelid', offset=0.5, driver_follicle_indices=None, side='r', region='eyelid', root_parent=None, face_joint_map=None)module function · public name · maya_tools/Rigging/create_rig_core.py:3483
Sets up a driver based surface rig (great for Mouth and eyelid setups) :param joint_list: list of joints :param loft_name: surface name :param offset: amount to offset curves to loft from joints :param driver_follicle_indices: mapping indic
constrain_controls_to_two_parents
def constrain_controls_to_two_parents(controls, parent1, parent2, parent1_value=1.0, parent2_value=0.0, maintain_offset=True)module function · public name · maya_tools/Rigging/create_rig_core.py:3899
Apply a parentConstraint to each control in the list using parent1 and parent2 as drivers. :param controls: Controls to constrain :param parent1: First parent/driver :param parent2: Second parent/driver :param parent1_value: Weight value fo
bake_joint_orient_to_rotate
def bake_joint_orient_to_rotate(joints=None)module function · public name · maya_tools/Rigging/create_rig_core.py:3966
Moves jointOrient values into rotate channels while preserving world-space pose. :param joints: list of joints to bake; all joints if None :return: None
_zero_joint_orient_preserve_world
def _zero_joint_orient_preserve_world(joints)module function · internal · maya_tools/Rigging/create_rig_core.py:4000
Bake jointOrient into rotate while keeping each joint's world matrix.
_seed_finger_ik_preferred_angles
def _seed_finger_ik_preferred_angles(ik_chain, curl_degrees=9.0, pole_world_position=None, target_joints=None, capture_from_pose=False, base_rotate_values=None, preferred_angle_values=None)module function · internal · maya_tools/Rigging/create_rig_core.py:4013
Choose a local curl axis from the finger plane and prefer curling away from PV. For each bend joint, test all three local axes against the world-space direction a positive rotation would move the next joint. The axis whose bend direction be
_connect_ik_finger_channels_to_ctrl_pad
def _connect_ik_finger_channels_to_ctrl_pad(ik_joint, ctrl_pad)module function · internal · maya_tools/Rigging/create_rig_core.py:4199
Replace finger-pad constraints with direct IK translate/rotate channels.
create_finger_rigs
def create_finger_rigs(finger_joints, hand_driver=None)module function · public name · maya_tools/Rigging/create_rig_core.py:4237
Creates IK driven FK system for finger joints :param finger_joints: finger joints :param hand_driver: parent transform/joint name to parent finger rigs under :return:
mirror_face_joints
def mirror_face_joints(joints, search_replace=('l_', 'r_'), mirror_axis='YZ', rotate_z_180=True)module function · public name · maya_tools/Rigging/create_rig_core.py:4868
Mirrors face joints and optionally rotates them 180 degrees in Z (object space). :param joints: list of joint names to mirror :param search_replace: tuple (search, replace) for naming :param mirror_axis: 'YZ', 'XZ', or 'XY' :param rotate_z_
create_composite_space
def create_composite_space(name, parents, match_to, parent_node=None)module function · public name · maya_tools/Rigging/create_rig_core.py:4928
Creates a transform constrained to multiple parents, matched to the driven group. :param name: name of the composite space node to create :param parents: list of parent control nodes :param match_to: node to match position/orientation to :p
create_space_switch
def create_space_switch(driven, targets, attr_name='space', dup_suffix='_spaceTarget', constraint_type='parent', enum_names=None)module function · public name · maya_tools/Rigging/create_rig_core.py:4970
Builds a space switch where each target gets a matched child transform, and those children are the actual constraint drivers. Constraint is applied to the driven control's parent group. :param driven: control name that drives space switchin
build_enum_names_for_space_targets
def build_enum_names_for_space_targets(targets, side=None)module function · public name · maya_tools/Rigging/create_rig_core.py:5104
Build enum display names in the SAME ORDER as the incoming targets. Do not reorder here. Target order must drive enum order. :param targets: list of targets :param side: side :return: result
_swap_first_lr_character
def _swap_first_lr_character(name)module function · internal · maya_tools/Rigging/create_rig_core.py:5180
Swaps the first character of the name if it is l, r, L, or R. :param name: joint or node name :return: str
get_ctrl_shape_cvs
def get_ctrl_shape_cvs(ctrl)module function · public name · maya_tools/Rigging/create_rig_core.py:5202
Gets ctrl shape cvs. :param ctrl: ctrl :return: result
store_all_control_cv_positions
def store_all_control_cv_positions(store_node=MODULE_STORE_NODE)module function · public name · maya_tools/Rigging/create_rig_core.py:5226
Store all control cv positions. :param store_node: store node :return: result
restore_all_control_cv_positions
def restore_all_control_cv_positions(store_node=MODULE_STORE_NODE)module function · public name · maya_tools/Rigging/create_rig_core.py:5293
Restore all control cv positions. :param store_node: store node :return: result
_get_side_enum_map
def _get_side_enum_map(joint)module function · internal · maya_tools/Rigging/create_rig_core.py:5408
Gets a name-to-index mapping dictionary for the 'side' attribute enum. :param joint: joint name to query :return: dict
_flip_joint_label_side
def _flip_joint_label_side(joint)module function · internal · maya_tools/Rigging/create_rig_core.py:5422
Flips the joint label side attribute value from Left to Right or vice versa. :param joint: joint name to flip :return: None
_get_joint_hierarchy
def _get_joint_hierarchy(root_joint)module function · internal · maya_tools/Rigging/create_rig_core.py:5448
Returns all child joints under root_joint in hierarchical order. :param root_joint: root joint name :return: list[str]
mirror_joint_yz_behavior_with_label_flip
def mirror_joint_yz_behavior_with_label_flip(root_joint=None, rename_first_char=True)module function · public name · maya_tools/Rigging/create_rig_core.py:5460
Mirror a joint chain across YZ using behavior mirroring. Then flip joint label Side from Left<->Right on the mirrored chain. Optionally swaps first character of the mirrored names: l/r/L/R. :param root_joint: root joint name to mirror; sl=T
create_leg_space_switches
def create_leg_space_switches(side, body_joint_map=None)module function · public name · maya_tools/Rigging/create_rig_core.py:5516
Builds space switches (including composite spaces) for the Leg module. :param side: left or right side (l/r) :param body_joint_map: optional body joint mapping dictionary :return: None
create_arm_space_switches
def create_arm_space_switches(side, body_joint_map=None)module function · public name · maya_tools/Rigging/create_rig_core.py:5650
Builds space switches (including composite spaces) for the Arm module. :param side: left or right side (l/r) :param body_joint_map: optional body joint mapping dictionary :return: None
create_rig_space_switches
def create_rig_space_switches(side)module function · public name · maya_tools/Rigging/create_rig_core.py:5802
Builds the base space switches for both Leg and Arm modules on this side. :param side: left or right side (l/r) :return: None
create_eye_aim_setup
def create_eye_aim_setup(left_eye_joint='l_eye', right_eye_joint='r_eye', aim_distance=25, head_ctrl='head1_ctrl')module function · public name · maya_tools/Rigging/create_rig_core.py:5812
Creates a standard left/right eye aim setup with a shared center aim control. :param left_eye_joint: left eye joint name :param right_eye_joint: right eye joint name :param aim_distance: local aim control distance offset :param head_ctrl: h
strip_ctrl_shape_and_rename
def strip_ctrl_shape_and_rename(ctrl)module function · public name · maya_tools/Rigging/create_rig_core.py:5912
Delete all shapes under the transform and rename it. Args: ctrl (str): Control node name to process. Returns: str: The new node name. :param ctrl: ctrl :return: result
setup_jaw_lip_driver
def setup_jaw_lip_driver(jaw_ctrl, lip_driver_ctrls, lip_ctrl_dict, head_ctrl='head1_ctrl')module function · public name · maya_tools/Rigging/create_rig_core.py:5942
Initial setup for driving mouth and lips via the jaw control. Args: jaw_ctrl (str): Name of the jaw control. lip_driver_ctrls (list[str]): List of driver controls for the lips. lip_ctrl_dict (dict): Dictionary mapping joints to lip controls
create_twist_driver
def create_twist_driver(driver_bone='l_thigh_driver', child_bone='l_knee_driver', parent='hipswing_ctrl', surface='l_thigh_surface', constraint_settings=None)module function · public name · maya_tools/Rigging/create_rig_core.py:6137
Creates a twist driver setup for a limb segment. Args: driver_bone (str): Name of the driver bone. child_bone (str): Name of the child bone. parent (str): Parent control or group name. surface (str): Name of the lofted surface. Returns: str
maya_tools.Rigging.create_rig_modules
bind_runtime
def bind_runtime(namespace)module function · public name · maya_tools/Rigging/create_rig_modules.py:18
Binds facade helpers used by the modular rig implementations. :param namespace: globals from the public ``create_rig`` facade. :return: None.
maya_tools.Rigging.enum_attrs
get_side_from_node
def get_side_from_node(node)module function · public name · maya_tools/Rigging/enum_attrs.py:23
resolve_space_target
def resolve_space_target(label, node=None, side=None)module function · public name · maya_tools/Rigging/enum_attrs.py:32
resolve_space_targets_from_labels
def resolve_space_targets_from_labels(labels, node=None, side=None, require_existing=True)module function · public name · maya_tools/Rigging/enum_attrs.py:46
get_enum_labels
def get_enum_labels(node, attr)module function · public name · maya_tools/Rigging/enum_attrs.py:66
get_enum_attrs
def get_enum_attrs(node)module function · public name · maya_tools/Rigging/enum_attrs.py:73
collect_enum_data
def collect_enum_data(nodes=None, attr_filter=None, strip_namespaces=True)module function · public name · maya_tools/Rigging/enum_attrs.py:86
Collect enum definitions from nodes. Parameters ---------- nodes : list[str] or None Nodes to inspect. If None, uses selection. attr_filter : list[str] or None If provided, only these enum attrs are exported. strip_namespaces : bool If True
save_enum_data_to_json
def save_enum_data_to_json(filepath, nodes=None, attr_filter=None, strip_namespaces=True)module function · public name · maya_tools/Rigging/enum_attrs.py:150
load_enum_data_from_json
def load_enum_data_from_json(filepath)module function · public name · maya_tools/Rigging/enum_attrs.py:168
get_attr_connections
def get_attr_connections(plug)module function · public name · maya_tools/Rigging/enum_attrs.py:176
Returns incoming and outgoing connections for an attribute plug.
disconnect_attr_connections
def disconnect_attr_connections(plug)module function · public name · maya_tools/Rigging/enum_attrs.py:185
reconnect_attr_connections
def reconnect_attr_connections(plug, incoming, outgoing)module function · public name · maya_tools/Rigging/enum_attrs.py:198
rebuild_enum_attr_with_order
def rebuild_enum_attr_with_order(node, attr, new_labels, preserve_value_by_label=True, stored_label=None, stored_value=None, verbose=True)module function · public name · maya_tools/Rigging/enum_attrs.py:212
Rebuild enum order on an existing attr while preserving connections. Notes ----- - This preserves raw connections by disconnecting and reconnecting them. - It remaps the attr's local current value by label when possible. - If stored_label i
build_node_lookup
def build_node_lookup(strip_namespaces=True)module function · public name · maya_tools/Rigging/enum_attrs.py:328
Build a lookup of scene nodes by short name.
apply_enum_data
def apply_enum_data(data, prefer_first_match=True, strip_namespaces=True, verbose=True)module function · public name · maya_tools/Rigging/enum_attrs.py:348
Apply stored enum data to matching nodes in the current scene.
export_selected_enum_orders
def export_selected_enum_orders(filepath, attr_filter=None)module function · public name · maya_tools/Rigging/enum_attrs.py:427
Export enum label orders from selected nodes to JSON.
import_enum_orders
def import_enum_orders(filepath)module function · public name · maya_tools/Rigging/enum_attrs.py:439
Import enum label orders from JSON and apply them to matching nodes in the currently opened scene.
maya_tools.Rigging.joint_placement_ml
_quantile
def _quantile(values, q)module function · internal · maya_tools/Rigging/joint_placement_ml.py:56
mesh_profile_features
def mesh_profile_features(mesh)module function · public name · maya_tools/Rigging/joint_placement_ml.py:67
Return a normalized 32-slice silhouette profile for a Maya mesh.
_solve_multi_rhs
def _solve_multi_rhs(matrix, values)module function · internal · maya_tools/Rigging/joint_placement_ml.py:106
Solve a small dense system by pivoted Gauss-Jordan elimination.
_fit
def _fit(rows, alpha=RIDGE_ALPHA, output_names=None)module function · internal · maya_tools/Rigging/joint_placement_ml.py:134
_predict
def _predict(model, features)module function · internal · maya_tools/Rigging/joint_placement_ml.py:188
_profile_support_distance
def _profile_support_distance(model, features)module function · internal · maya_tools/Rigging/joint_placement_ml.py:212
Nearest approved profile distance in standardized feature space.
_point_error
def _point_error(prediction, truth, names)module function · internal · maya_tools/Rigging/joint_placement_ml.py:229
_region_error
def _region_error(prediction, truth, names)module function · internal · maya_tools/Rigging/joint_placement_ml.py:241
Return the mean normalized point error for one independently gated region.
_shape_neighbor_prediction
def _shape_neighbor_prediction(rows, target, names)module function · internal · maya_tools/Rigging/joint_placement_ml.py:247
train_model
def train_model(example_directory, registry_path, output_path)module function · public name · maya_tools/Rigging/joint_placement_ml.py:271
Train and save a model; activate it only when grouped holdout passes.
predict_mesh
def predict_mesh(mesh, model_path='')module function · public name · maya_tools/Rigging/joint_placement_ml.py:456
Return supported normalized landmarks for independently active regions.
record_approved_scene
def record_approved_scene(case_id, family, atlas_directory='')module function · public name · maya_tools/Rigging/joint_placement_ml.py:490
Add an artist-approved live Maya placement and train with regional gates. The active model is replaced only if grouped holdout improves over the shape-neighbor baseline and no previously active region regresses. Every attempt is recorded in
maya_tools.Rigging.joint_placement_reference_builder
_short_name
def _short_name(node: str) -> strmodule function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:34
_studio_root
def _studio_root() -> strmodule function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:38
_largest_body_mesh
def _largest_body_mesh() -> strmodule function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:51
_normalized_point
def _normalized_point(point, origin, height)module function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:71
_mesh_points
def _mesh_points(mesh: str)module function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:79
_mesh_profile_features
def _mesh_profile_features(mesh_points, bounds, height: float)module function · internal · maya_tools/Rigging/joint_placement_reference_builder.py:95
Build the shared normalized silhouette descriptor used by the learner.
capture_scene
def capture_scene(scene: str, case_id: str, output_directory: str) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_reference_builder.py:132
Capture every uniquely named deform joint from a file or current scene. Pass an empty ``scene`` to capture the active Maya scene without opening, saving, or otherwise modifying it. This is used when an artist marks the current joint placeme
build_atlas
def build_atlas(cases: Iterable[Tuple[str, str]], output_directory: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_reference_builder.py:248
maya_tools.Rigging.joint_placement_regression
_utc_now
def _utc_now() -> strmodule function · internal · maya_tools/Rigging/joint_placement_regression.py:42
_distance
def _distance(a, b) -> floatmodule function · internal · maya_tools/Rigging/joint_placement_regression.py:46
_mesh_frame
def _mesh_frame(mesh: str) -> Dict[str, object]module function · internal · maya_tools/Rigging/joint_placement_regression.py:50
_normalize_point
def _normalize_point(point, frame: Dict[str, object])module function · internal · maya_tools/Rigging/joint_placement_regression.py:67
_normalized_points
def _normalized_points(points: Dict[str, Tuple[float, float, float]], frame)module function · internal · maya_tools/Rigging/joint_placement_regression.py:77
_normalized_bone_lengths
def _normalized_bone_lengths(points: Dict[str, object]) -> Dict[str, float]module function · internal · maya_tools/Rigging/joint_placement_regression.py:81
_studio_root
def _studio_root(namespace: str='') -> Optional[str]module function · internal · maya_tools/Rigging/joint_placement_regression.py:89
_template_anchor_points
def _template_anchor_points(namespace: str='', root: Optional[str]=None) -> Dict[str, Tuple[float, float, float]]module function · internal · maya_tools/Rigging/joint_placement_regression.py:105
capture_baseline
def capture_baseline(mesh: str, path: str, case_id: str='', namespace: str='', notes: str='', thresholds: Optional[Dict[str, object]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:126
Capture the currently approved fitted skeleton as a golden baseline.
capture_mapped_baseline
def capture_mapped_baseline(mesh: str, path: str, target_to_source_joint: Dict[str, str], case_id: str='', notes: str='', thresholds: Optional[Dict[str, object]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:184
Capture joints from an external approved rig under studio target names.
capture_anchor_baseline
def capture_anchor_baseline(mesh: str, path: str, canonical_to_source_joint: Dict[str, str], case_id: str='', notes: str='', thresholds: Optional[Dict[str, object]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:239
Capture approved core anchors from an older or differently named rig.
load_baseline
def load_baseline(path: str) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:296
evaluate_points
def evaluate_points(mesh: str, points: Dict[str, Tuple[float, float, float]], baseline: Dict[str, object], preview: Optional[joint_placer.PlacementPreview]=None, template_joint_count: int=0, reverse_foot_joint_count: int=0, fitted_points: Optional[Dict[str, Tuple[float, float, float]]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:308
Compare a placement result with one approved normalized baseline.
evaluate_mesh_against_baseline
def evaluate_mesh_against_baseline(mesh: str, baseline_path: str, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, build_skeleton: bool=False, use_topology_reference: bool=False) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:438
evaluate_studio_foot_contract
def evaluate_studio_foot_contract(namespace: str='', mesh: str='', require_mirror: bool=True) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:497
Validate the animator-facing foot result on a fitted studio skeleton.
evaluate_studio_pelvis_contract
def evaluate_studio_pelvis_contract(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placement_regression.py:652
Validate the shared pelvis-ridge lift on a fitted studio skeleton.
write_report
def write_report(report: Dict[str, object], path: str) -> strmodule function · public name · maya_tools/Rigging/joint_placement_regression.py:754
capture_selected_baseline
def capture_selected_baseline(path: str, case_id: str='', namespace: str='')module function · public name · maya_tools/Rigging/joint_placement_regression.py:761
evaluate_selected_mesh
def evaluate_selected_mesh(baseline_path: str, template_path: str=DEFAULT_PLACEMENT_TEMPLATE)module function · public name · maya_tools/Rigging/joint_placement_regression.py:768
maya_tools.Rigging.joint_placement_regression_runner
_resolve
def _resolve(value: str, base: Path) -> strmodule function · internal · maya_tools/Rigging/joint_placement_regression_runner.py:18
_resolve_scene_mesh
def _resolve_scene_mesh(cmds, requested: str) -> strmodule function · internal · maya_tools/Rigging/joint_placement_regression_runner.py:25
Resolve a recorded mesh path without silently choosing ambiguity.
_import_fbx_in_namespace
def _import_fbx_in_namespace(cmds, scene: str, namespace: str) -> Nonemodule function · internal · maya_tools/Rigging/joint_placement_regression_runner.py:53
Import FBX DAG nodes into a predictable namespace. Maya 2023's FBX plug-in can ignore the ``cmds.file(namespace=...)`` flag. Capture the imported nodes and namespace their transforms/joints explicitly so source skeleton names cannot collide
run_manifest
def run_manifest(manifest_path: str)module function · public name · maya_tools/Rigging/joint_placement_regression_runner.py:83
main
def main(argv=None) -> intmodule function · public name · maya_tools/Rigging/joint_placement_regression_runner.py:326
maya_tools.Rigging.joint_placer
PlacementFrame.world_to_logical
def PlacementFrame.world_to_logical(self, point: Vector3) -> Vector3class method · public name · maya_tools/Rigging/joint_placer.py:94
PlacementFrame.logical_to_world
def PlacementFrame.logical_to_world(self, point: Vector3) -> Vector3class method · public name · maya_tools/Rigging/joint_placer.py:101
PlacementFrame.world_axis
def PlacementFrame.world_axis(self, logical_axis: str) -> strclass method · public name · maya_tools/Rigging/joint_placer.py:108
PlacementFrame.world_index
def PlacementFrame.world_index(self, logical_axis: str) -> intclass method · public name · maya_tools/Rigging/joint_placer.py:112
PlacementFrame.world_normal
def PlacementFrame.world_normal(self, logical_axis: str) -> Vector3class method · public name · maya_tools/Rigging/joint_placer.py:115
MeshPlacementReport.is_closed_manifold
def MeshPlacementReport.is_closed_manifold(self) -> boolclass method · public name · maya_tools/Rigging/joint_placer.py:174
MeshPlacementReport.as_dict
def MeshPlacementReport.as_dict(self) -> Dict[str, object]class method · public name · maya_tools/Rigging/joint_placer.py:182
_short_name
def _short_name(node: str) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:453
_point_vector
def _point_vector(points: Dict[str, Vector3], name: str) -> Optional[om.MVector]module function · internal · maya_tools/Rigging/joint_placer.py:457
classify_arm_pose
def classify_arm_pose(points: Dict[str, Vector3], frame: Optional[PlacementFrame]=None) -> Tuple[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:464
Classify generated arm placement as T-pose or A-pose from shoulder-to-hand slope. Returns: tuple[str, float]: pose label and absolute arm-down angle from horizontal.
_line_value_at
def _line_value_at(start: Vector3, end: Vector3, sample: Vector3, parameter_axis: int, value_axis: int) -> floatmodule function · internal · maya_tools/Rigging/joint_placer.py:502
enforce_limb_planarity
def enforce_limb_planarity(points: Dict[str, Vector3], minimum_bend: float=0.0, inside_query: Optional['MeshInteriorQuery']=None, frame: Optional[PlacementFrame]=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:516
Put the primary IK chains on explicit anatomical planes. Arms use the template's side/up bend plane: depth is the outward hinge axis (local Y), so the elbow prebend must be vertical rather than drifting toward character-front/back. Legs and
refine_shoulder_landmarks
def refine_shoulder_landmarks(points: Dict[str, Vector3], query: 'MeshInteriorQuery', frame: Optional[PlacementFrame]=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:735
Move each arm root from the torso seed to the humeral-head section. A globally scaled template commonly leaves the upper-arm pivot inside the chest. In a T/A pose, the torso-to-arm transition is measurable: the very tall torso section colla
refine_leg_landmarks
def refine_leg_landmarks(points: Dict[str, Vector3], query: 'MeshInteriorQuery', frame: Optional[PlacementFrame]=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:837
Solve hip height, knee line, and ankle line from limb morphology. Template ratios put the sample character's knees too high and its ankles down in the foot. The knee is the compact section between the thigh and calf, while the ankle is the
refine_foot_landmarks
def refine_foot_landmarks(points: Dict[str, Vector3], query: 'MeshInteriorQuery', frame: Optional[PlacementFrame]=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:936
Place toe base and tip in the local foot volume after ankle solving.
_sanitize_studio_template_core_points
def _sanitize_studio_template_core_points(points: Dict[str, Vector3]) -> Dict[str, Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:1004
Repair known-invalid bind-pose landmarks without editing the source rig. The current studio template contains a right-hand-tip bind matrix copied from the left side and an effectively coincident chest-tip/neck pair. These values corrupt the
measure_planar_deviation
def measure_planar_deviation(points: Dict[str, Vector3], frame: Optional[PlacementFrame]=None) -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:1045
_as_mesh_transform
def _as_mesh_transform(node: str) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:1094
Return a mesh transform from a selected transform or mesh shape.
get_mesh_bounds
def get_mesh_bounds(mesh: str) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:1112
_mesh_dag_path
def _mesh_dag_path(mesh: str) -> om.MDagPathmodule function · internal · maya_tools/Rigging/joint_placer.py:1130
analyze_mesh_for_joint_placement
def analyze_mesh_for_joint_placement(mesh: str) -> MeshPlacementReportmodule function · public name · maya_tools/Rigging/joint_placer.py:1140
Return topology facts that determine how trustworthy volume tests are.
_deduplicate_sorted
def _deduplicate_sorted(values: Iterable[float], tolerance: float) -> List[float]module function · internal · maya_tools/Rigging/joint_placer.py:1170
_pair_intersection_intervals
def _pair_intersection_intervals(values: Iterable[float], tolerance: float) -> List[Tuple[float, float]]module function · internal · maya_tools/Rigging/joint_placer.py:1178
Pair ordered surface crossings into solid intervals for a closed mesh.
_choose_interval
def _choose_interval(intervals: Iterable[Tuple[float, float]], preferred_value: float) -> Optional[Tuple[float, float]]module function · internal · maya_tools/Rigging/joint_placer.py:1188
_recenter_along_direction
def _recenter_along_direction(query: 'MeshInteriorQuery', point: Vector3, direction: om.MVector) -> Tuple[Vector3, float, bool]module function · internal · maya_tools/Rigging/joint_placer.py:1200
Center a point through the mesh along an arbitrary world direction.
_place_along_direction_fraction
def _place_along_direction_fraction(query: 'MeshInteriorQuery', point: Vector3, direction: om.MVector, fraction: float) -> Tuple[Vector3, float, bool]module function · internal · maya_tools/Rigging/joint_placer.py:1236
Place a point at a chosen fraction through an arbitrary mesh section.
MeshInteriorQuery.__init__
def MeshInteriorQuery.__init__(self, mesh: str)class method · internal · maya_tools/Rigging/joint_placer.py:1280
MeshInteriorQuery._components
def MeshInteriorQuery._components(point: Vector3) -> List[float]class method · internal · maya_tools/Rigging/joint_placer.py:1295
MeshInteriorQuery._ray_hits
def MeshInteriorQuery._ray_hits(self, source: Vector3, direction: om.MFloatVector, max_distance: float) -> List[om.MFloatPoint]class method · internal · maya_tools/Rigging/joint_placer.py:1298
MeshInteriorQuery.axis_intervals
def MeshInteriorQuery.axis_intervals(self, point: Vector3, axis: str) -> List[Tuple[float, float]]class method · public name · maya_tools/Rigging/joint_placer.py:1319
MeshInteriorQuery.point_inside
def MeshInteriorQuery.point_inside(self, point: Vector3) -> boolclass method · public name · maya_tools/Rigging/joint_placer.py:1330
MeshInteriorQuery.recenter_axis
def MeshInteriorQuery.recenter_axis(self, point: Vector3, axis: str) -> Tuple[Vector3, float, bool]class method · public name · maya_tools/Rigging/joint_placer.py:1354
MeshInteriorQuery.move_inside
def MeshInteriorQuery.move_inside(self, point: Vector3) -> Tuple[Vector3, bool]class method · public name · maya_tools/Rigging/joint_placer.py:1364
Move an outside proposal just inside its closest local surface.
MeshInteriorQuery.move_inside_preserving_plane
def MeshInteriorQuery.move_inside_preserving_plane(self, point: Vector3, fixed_axis: str) -> Tuple[Vector3, bool]class method · public name · maya_tools/Rigging/joint_placer.py:1388
Move a point into the mesh without leaving its solved IK plane.
_cached_mesh_interior_query
def _cached_mesh_interior_query(mesh: str) -> MeshInteriorQuerymodule function · internal · maya_tools/Rigging/joint_placer.py:1423
Reuse acceleration structures throughout one placement run.
clear_mesh_query_cache
def clear_mesh_query_cache() -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:1434
Release placement acceleration structures before a new mesh solve.
point_from_normalized_bounds
def point_from_normalized_bounds(bounds: Dict[str, object], xyz: Vector3) -> Vector3module function · public name · maya_tools/Rigging/joint_placer.py:1438
extract_studio_template_core_points
def extract_studio_template_core_points(template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:1449
Read authored bind-pose world positions directly from a Maya ASCII template.
extract_studio_template_joint_axes
def extract_studio_template_joint_axes(template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Dict[str, Dict[str, Vector3]]module function · public name · maya_tools/Rigging/joint_placer.py:1510
Read each joint's authored world-space XYZ basis from its bind matrix.
solve_studio_template_points
def solve_studio_template_points(mesh: str, template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Tuple[Dict[str, Vector3], Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:1577
Scale the authored studio skeleton into the target mesh as the proposal.
_load_reference_placement_corpus
def _load_reference_placement_corpus() -> List[Dict[str, object]]module function · internal · maya_tools/Rigging/joint_placer.py:1613
_reference_shape_distance
def _reference_shape_distance(entry: Dict[str, object], width_ratio: float, depth_ratio: float, vertex_count: int) -> floatmodule function · internal · maya_tools/Rigging/joint_placer.py:1691
_rank_reference_entries
def _rank_reference_entries(mesh: str, require_detail: bool=False) -> List[Tuple[float, Dict[str, object]]]module function · internal · maya_tools/Rigging/joint_placer.py:1706
_solve_linear_system_4x4
def _solve_linear_system_4x4(matrix, vector) -> Optional[List[float]]module function · internal · maya_tools/Rigging/joint_placer.py:1733
_affine_transfer_point
def _affine_transfer_point(source_points: List[Vector3], target_points: List[Vector3], source_point: Vector3) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:1756
solve_topology_reference_points
def solve_topology_reference_points(mesh: str) -> Tuple[Dict[str, Vector3], List[str]]module function · public name · maya_tools/Rigging/joint_placer.py:1786
Transfer an approved skeleton through identical production topology.
solve_reference_thumb_dorsal_vectors
def solve_reference_thumb_dorsal_vectors(mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:1950
Transfer approved thumb roll vectors through matching mesh topology.
solve_reference_thumb_knuckle_z_vectors
def solve_reference_thumb_knuckle_z_vectors(mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2052
Transfer the approved local-Z thumb direction through mesh topology. A shortest-arc bone aim preserves the reference roll approximately, but it cannot account for character-specific deformation around the thumb mound. Exact-topology affine
solve_reference_eyelid_tip_points
def solve_reference_eyelid_tip_points(mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2163
Transfer eyelid tips by weighted exact-topology vertex correspondence. Eyelid surface patches are nearly planar, so a free affine fit can produce a valid mathematical transform with a wildly incorrect ray direction. Inverse-distance interpo
solve_reference_eye_centers
def solve_reference_eye_centers(mesh: str, eyelid_tip_points: Optional[Dict[str, Vector3]]=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2250
Infer eye pivots from the eyelid ring when no eyeball mesh exists. The approved rigs encode a stable relationship between each eye pivot and its visible eyelid loop. Reconstructing that relationship in lid-local units is more reliable than
_scene_mesh_vertices
def _scene_mesh_vertices(meshes: Iterable[str]) -> List[om.MPoint]module function · internal · maya_tools/Rigging/joint_placer.py:2338
Return world-space vertices for non-intermediate scene meshes.
_scene_feature_meshes
def _scene_feature_meshes(include_tokens: Iterable[str], exclude_tokens: Iterable[str]=(), anchor_mesh: str='') -> List[str]module function · internal · maya_tools/Rigging/joint_placer.py:2353
Find mesh transforms by semantic name tokens, regardless of hierarchy.
_point_cloud_bounds_center
def _point_cloud_bounds_center(points: Iterable[om.MPoint]) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:2399
solve_scene_eye_mesh_centers
def solve_scene_eye_mesh_centers(body_mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2410
Use actual eyeball geometry, including a single combined two-eye mesh.
solve_scene_oral_mesh_points
def solve_scene_oral_mesh_points(body_mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2431
Place teeth and tongue joints from separate feature meshes when present.
solve_scene_brow_mesh_points
def solve_scene_brow_mesh_points(body_mesh: str) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:2474
Sample separate eyebrow meshes into smooth medial-to-lateral joint arcs.
fit_studio_scene_feature_joints
def fit_studio_scene_feature_joints(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:2524
Reapply authoritative eye, teeth, and tongue mesh centers after volume fitting.
fit_studio_face_pivots_to_mesh
def fit_studio_face_pivots_to_mesh(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:2541
Finish internal face pivots from this character's face and throat mesh. These anchors are especially vulnerable to atlas transfer: a nose root can collapse onto the head pivot, a tongue can drift away from its separate tongue surface, and a
smooth_reference_eyelid_tip_points
def smooth_reference_eyelid_tip_points(points: Dict[str, Vector3], iterations: int=4, strength: float=0.4) -> Tuple[Dict[str, Vector3], Dict[str, object]]module function · public name · maya_tools/Rigging/joint_placer.py:2734
Regularize each authored eyelid arc while preserving both corners. Upper and lower lids are smoothed independently so the inner and outer canthi remain exact. The caller projects the resulting proposals back to the mesh, making this a curve
solve_reference_detail_points
def solve_reference_detail_points(mesh: str, reference_count: int=3) -> Tuple[Dict[str, Vector3], List[str]]module function · public name · maya_tools/Rigging/joint_placer.py:2806
Blend the closest approved full skeletons into target mesh space. The atlas supplies anatomical proportions for fingers, thumbs, feet, correctives, and facial branches. Mesh-volume fitting is intentionally a secondary local correction so it
_solve_reference_proportional_joint_points
def _solve_reference_proportional_joint_points(mesh: str, joint_names: Iterable[str], reference_count: int=5, excluded_case_ids: Iterable[str]=()) -> Tuple[Dict[str, Vector3], List[str]]module function · internal · maya_tools/Rigging/joint_placer.py:2856
solve_reference_internal_head_points
def solve_reference_internal_head_points(mesh: str, reference_count: int=5, excluded_case_ids: Iterable[str]=()) -> Tuple[Dict[str, Vector3], List[str]]module function · public name · maya_tools/Rigging/joint_placer.py:2904
Fit neck, skull, jaw, teeth, and tongue without surface extrapolation. These pivots sit inside the skull or oral cavity, where nearest-surface patches are frequently close to planar. A local affine solve can then become ill-conditioned and
solve_reference_toe_points
def solve_reference_toe_points(mesh: str, reference_count: int=5, excluded_case_ids: Iterable[str]=()) -> Tuple[Dict[str, Vector3], List[str]]module function · public name · maya_tools/Rigging/joint_placer.py:2926
Fit toe bases at the authored ball pivots and tips inside the mesh end.
solve_reference_corpus_points
def solve_reference_corpus_points(mesh: str, template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Tuple[Dict[str, Vector3], Dict[str, float], List[str], str]module function · public name · maya_tools/Rigging/joint_placer.py:2940
Seed placement from the closest approved normalized character.
solve_mapped_hierarchy_points
def solve_mapped_hierarchy_points(mesh: str, joint_map: dict, template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Tuple[Dict[str, Vector3], Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:3009
Use the active rig mapping as the proportion and hierarchy proposal.
solve_basic_biped_points
def solve_basic_biped_points(mesh: str) -> Tuple[Dict[str, Vector3], Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:3121
Return first-pass biped joint positions. The current implementation is proportional, with confidence set low/medium. This gives a stable baseline that can later be refined by landmark or mesh cross-section solvers without changing the downs
validate_points_inside_mesh
def validate_points_inside_mesh(mesh: str, points: Dict[str, Vector3], query: Optional[MeshInteriorQuery]=None) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:3145
Return deform landmarks whose positions cannot be verified in the mesh.
straighten_core_spine_points
def straighten_core_spine_points(points: Dict[str, Vector3], query: Optional['MeshInteriorQuery']=None) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:3177
Keep the fitted spine on one straight pelvis-to-neck centerline. Preserve the target mesh's fitted vertebral heights and end pivots; remove independent depth/lateral recentering from intermediate vertebrae, which otherwise produces a visibl
validate_anatomical_layout
def validate_anatomical_layout(points: Dict[str, Vector3], bounds: Dict[str, object], frame: Optional[PlacementFrame]=None) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:3207
Return actionable hierarchy/order problems in an otherwise valid volume solution.
solve_production_biped_points
def solve_production_biped_points(mesh: str, landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, joint_map: Optional[dict]=None) -> Tuple[Dict[str, Vector3], Dict[str, float], MeshPlacementReport, List[str], Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:3359
Place a biped template using proposals plus mesh-volume verification. ``landmark_points`` is the integration seam for an ML or vision provider. Known joint names override the proportional proposal, but every override is still recentered and
_is_generated_joint
def _is_generated_joint(joint: str) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:3649
_tag_generated_joint
def _tag_generated_joint(joint: str) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:3660
_set_string_attr
def _set_string_attr(node: str, attr: str, value: str) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:3668
_set_float_attr
def _set_float_attr(node: str, attr: str, value: float) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:3676
_connect_placement_mesh
def _connect_placement_mesh(root: str, mesh: str) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:3684
Keep a rename-safe mesh link, readable path, and geometry signature.
_placement_mesh_signature
def _placement_mesh_signature(mesh: str) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:3708
Hash a mesh's world-space topology and points for safe approved reruns.
_approved_placement_matches_mesh
def _approved_placement_matches_mesh(root: str, mesh: str) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:3727
Return whether the existing approved pose belongs to this mesh.
_legacy_studio_pose_matches_mesh
def _legacy_studio_pose_matches_mesh(root: str, mesh: str, anchor_names: Optional[Iterable[str]]=None, allow_mapped_hierarchy: bool=False) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:3771
Recognize an untagged, already-fitted studio pose on its body mesh. Older joint-placer scenes have no geometry signature. Preserve their scene-authored placement on first use only when the mapped/core anchors already occupy the selected mes
tag_pose_metadata
def tag_pose_metadata(root_joint: str, pose_type: str, pose_angle_degrees: float) -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:3827
delete_existing_generated_skeleton
def delete_existing_generated_skeleton(root_name: str='origin') -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:3832
create_joint
def create_joint(name: str, position: Vector3, parent: Optional[str]=None, radius: float=1.0) -> strmodule function · public name · maya_tools/Rigging/joint_placer.py:3842
orient_skeleton
def orient_skeleton(root_joint: str) -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:3861
_world_align_joint_preserving_children
def _world_align_joint_preserving_children(joint: str) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:3878
world_align_origin_and_pelvis
def world_align_origin_and_pelvis(root_joint: str) -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:3906
zero_origin_translation_preserving_children
def zero_origin_translation_preserving_children(root_joint: str) -> Nonemodule function · public name · maya_tools/Rigging/joint_placer.py:3915
Put the rig-space origin at world zero without moving the skeleton.
build_skeleton_from_points
def build_skeleton_from_points(points: Dict[str, Vector3], root_name: str='origin', orient: bool=True, replace_existing: bool=True, pose_type: str='unknown', pose_angle_degrees: float=0.0) -> strmodule function · public name · maya_tools/Rigging/joint_placer.py:3929
make_hik_maps_from_root
def make_hik_maps_from_root(root_joint: str) -> Tuple[dict, dict]module function · public name · maya_tools/Rigging/joint_placer.py:3961
validate_body_joint_map
def validate_body_joint_map(body_joint_map: dict, required_slots: Iterable[str]=CORE_HIK_SLOTS) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:3995
create_guides_from_points
def create_guides_from_points(points: Dict[str, Vector3], group_name: str='auto_joint_guides_grp', confidence: Optional[Dict[str, float]]=None, outside_joints: Optional[Iterable[str]]=None) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:4004
Create or update color-coded guides without rebuilding the DAG.
delete_auto_joint_guides
def delete_auto_joint_guides() -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:4090
Delete only the temporary guide hierarchy owned by joint placement.
_template_namespace_prefix
def _template_namespace_prefix(namespace: str) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:4099
_find_template_joint
def _find_template_joint(template_name: str, namespace: str='') -> Optional[str]module function · internal · maya_tools/Rigging/joint_placer.py:4104
is_studio_template_skeleton
def is_studio_template_skeleton(root_joint: str, namespace: str='') -> boolmodule function · public name · maya_tools/Rigging/joint_placer.py:4113
_mapped_joint
def _mapped_joint(joint_map: Optional[dict], slot: str) -> Optional[str]module function · internal · maya_tools/Rigging/joint_placer.py:4129
placement_frame_from_mapping
def placement_frame_from_mapping(joint_map: Optional[dict]) -> PlacementFramemodule function · public name · maya_tools/Rigging/joint_placer.py:4140
Infer character axes from mapped hips/head and left/right limbs.
_logical_mesh_bounds
def _logical_mesh_bounds(mesh: str, frame: PlacementFrame) -> Dict[str, object]module function · internal · maya_tools/Rigging/joint_placer.py:4168
mapped_anatomical_joints
def mapped_anatomical_joints(joint_map: Optional[dict]) -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:4191
Resolve the active HIK mapping into placement roles. Spine roles are distributed across the available HIK spine slots, allowing a user hierarchy to contain one through four mapped spine joints.
mapped_hierarchy_missing_slots
def mapped_hierarchy_missing_slots(joint_map: Optional[dict]) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:4219
mapped_hierarchy_requested
def mapped_hierarchy_requested(joint_map: Optional[dict]) -> boolmodule function · public name · maya_tools/Rigging/joint_placer.py:4223
_common_mapped_root
def _common_mapped_root(joints: Iterable[str]) -> Optional[str]module function · internal · maya_tools/Rigging/joint_placer.py:4227
mapped_studio_template_namespace
def mapped_studio_template_namespace(joint_map: Optional[dict]) -> Optional[str]module function · public name · maya_tools/Rigging/joint_placer.py:4256
Return the namespace when a mapping points at the studio template. The UI auto-populates its HIK mapping from any skeleton in the scene. A loaded studio template must still use the specialized studio fitting pass; treating it as an arbitrar
_mapped_finger_chains
def _mapped_finger_chains(joint_map: Optional[dict]) -> List[List[str]]module function · internal · maya_tools/Rigging/joint_placer.py:4273
_multiply_joint_local_translations
def _multiply_joint_local_translations(joints: Iterable[str], multiplier: float) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:4287
_orient_reverse_foot_ik_chain
def _orient_reverse_foot_ik_chain(side: str, namespace: str) -> Dict[str, Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:4307
Make the distal RFL IK offsets signed local-X only and coplanar.
_fit_reverse_foot_chain
def _fit_reverse_foot_chain(side: str, namespace: str, points: Dict[str, Vector3], desired_scale: float, ground_pivots: Optional[Dict[str, Vector3]]=None) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:4344
Snap one reverse-foot helper chain after the deformation T-pose is final.
_reverse_foot_source_mesh
def _reverse_foot_source_mesh(root: str, points: Dict[str, Vector3], preferred_mesh: Optional[str]=None) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:4422
Resolve an optional footwear mesh or Joint Placer's body-mesh fallback.
_mesh_candidate_for_foot
def _mesh_candidate_for_foot(meshes: Sequence[str], points: Dict[str, Vector3], side: str, fallback: str) -> strmodule function · internal · maya_tools/Rigging/joint_placer.py:4477
Choose selected footwear nearest this side's ankle-to-toe footprint.
_solve_reverse_foot_ground_pivots
def _solve_reverse_foot_ground_pivots(query: 'MeshInteriorQuery', side: str, ankle: Vector3, toe: Vector3, toe_tip: Vector3, ground_y: float=0.0) -> Dict[str, Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:4522
Fit heel and bank pivots to the actual local sole footprint. The solve uses a horizontal foot basis rather than template offsets or channel values. It therefore remains stable after T-pose rotations and on characters with different foot siz
_mirror_reverse_foot_ground_pivots_if_symmetric
def _mirror_reverse_foot_ground_pivots_if_symmetric(ground_pivots: Dict[str, Dict[str, Vector3]], center_x: float) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:4664
Mirror the left footprint unless the measured right mesh differs materially.
snap_reverse_foot_helpers_to_deformation_skeleton
def snap_reverse_foot_helpers_to_deformation_skeleton(namespace: str='', sides: Optional[Iterable[str]]=None, shoe_meshes: Optional[Iterable[str]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:4703
Snap RFL helpers to the finalized deformation-leg T-pose. Initial anatomical placement and skin import deliberately leave the detached reverse-foot helpers untouched. The T-pose pass first straightens the legs in front view and grounds the
snap_all_reverse_foot_helpers_after_t_pose
def snap_all_reverse_foot_helpers_after_t_pose(shoe_meshes: Optional[Iterable[str]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:4829
Run post-T-pose RFL fitting, optionally using selected footwear meshes.
_joint_world_axes
def _joint_world_axes(joint: str) -> Dict[str, om.MVector]module function · internal · maya_tools/Rigging/joint_placer.py:4855
_rotate_vector_between_directions
def _rotate_vector_between_directions(vector: om.MVector, source_direction: om.MVector, target_direction: om.MVector) -> om.MVectormodule function · internal · maya_tools/Rigging/joint_placer.py:4864
Shortest-arc transport of a vector from one aim direction to another.
solve_reference_joint_roll_vectors
def solve_reference_joint_roll_vectors(mesh: str, desired_x_by_name: Dict[str, om.MVector]) -> Tuple[Dict[str, om.MVector], List[str]]module function · public name · maya_tools/Rigging/joint_placer.py:4894
Transfer approved local-Y roll while retaining target positions/X aims. The production rigs agree on a relative arm and digit frame. Positions may differ substantially between characters, so copying Euler values is not a valid comparison. I
solve_template_joint_roll_vectors
def solve_template_joint_roll_vectors(desired_x_by_name: Dict[str, om.MVector], template_path: str=DEFAULT_PLACEMENT_TEMPLATE) -> Dict[str, om.MVector]module function · public name · maya_tools/Rigging/joint_placer.py:4988
Transport each named joint's authored rig-template roll to its fitted X.
_reference_roll_basis
def _reference_roll_basis(x_axis: om.MVector, reference_y: om.MVector) -> Tuple[om.MVector, om.MVector, om.MVector]module function · internal · maya_tools/Rigging/joint_placer.py:5014
Build a right-handed Maya basis from an exact aim and approved roll.
_reference_z_basis
def _reference_z_basis(x_axis: om.MVector, reference_z: om.MVector) -> Tuple[om.MVector, om.MVector, om.MVector]module function · internal · maya_tools/Rigging/joint_placer.py:5032
Build a right-handed Maya basis from an exact aim and approved Z.
_configure_preferred_bend_axis
def _configure_preferred_bend_axis(joint: str, world_plane_normal: Vector3, plane_label: str) -> Optional[str]module function · internal · maya_tools/Rigging/joint_placer.py:5050
Record hinge metadata without inventing a preferred-angle pose.
capture_current_pose_as_preferred_angles
def capture_current_pose_as_preferred_angles(root: str) -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:5072
Store the completed placed pose as every joint's preferred angles. This must run after all placement and orientation cleanup. Preferred angles are pose data, so deriving them from nominal prebend constants can disagree with the skeleton the
import_matching_skin_weights
def import_matching_skin_weights(mesh: str, export_dir: str=DEFAULT_SKIN_WEIGHT_DIR) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:5105
Import exported weights when both files exactly match the mesh name.
_finger_plane_normal
def _finger_plane_normal(joint: str, fallback: Vector3) -> Vector3module function · internal · maya_tools/Rigging/joint_placer.py:5158
_finger_chain
def _finger_chain(root_joint: str) -> List[str]module function · internal · maya_tools/Rigging/joint_placer.py:5176
_project_joint_chain_to_plane
def _project_joint_chain_to_plane(chain: List[str]) -> floatmodule function · internal · maya_tools/Rigging/joint_placer.py:5192
Project a chain onto its strongest authored plane and return prior deviation.
_projected_chain_plane_deviation
def _projected_chain_plane_deviation(chain: List[str]) -> floatmodule function · internal · maya_tools/Rigging/joint_placer.py:5218
Return maximum deviation from a chain's strongest plane, without edits.
_project_finger_chain_to_tip_plane
def _project_finger_chain_to_tip_plane(chain: List[str], query: Optional['MeshInteriorQuery']=None) -> Dict[str, float]module function · internal · maya_tools/Rigging/joint_placer.py:5243
Keep a centered terminal fixed while flattening its 02-to-tip chain. A generic best-fit plane can pull a fingertip away from the actual mesh cap. Instead, the plane is constrained to pass through joints 02 and the already-centered terminal;
_studio_fingertip_center_offsets
def _studio_fingertip_center_offsets(mesh: str, namespace: str='') -> Dict[str, Tuple[float, float]]module function · internal · maya_tools/Rigging/joint_placer.py:5302
Measure terminal offsets from their local mesh-section centers.
_enforce_no_reverse_finger_bend
def _enforce_no_reverse_finger_bend(chain: List[str], query: Optional['MeshInteriorQuery']=None, dorsal_hint: Vector3=(0.0, 1.0, 0.0)) -> floatmodule function · internal · maya_tools/Rigging/joint_placer.py:5352
Remove distal hyperextension without erasing a mesh-authored curl. ``chain`` is the articulated 02-terminal chain. Heights along the dorsal axis are expressed as slopes along the finger, then projected onto a monotonically decreasing sequen
enforce_studio_finger_planarity
def enforce_studio_finger_planarity(root: str, namespace: str='', mesh: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:5462
Make joints 02 through the terminal of each digit one bend plane. Joint 01 is the metacarpal fan/root and may approach joint 02 from outside that plane. The articulated finger starts at 02; projecting only that subchain preserves the approv
_align_mild_studio_digit_bend
def _align_mild_studio_digit_bend(chain: List[str], query: Optional['MeshInteriorQuery']=None, obvious_bend_ratio: float=0.08) -> Dict[str, object]module function · internal · maya_tools/Rigging/joint_placer.py:5533
Put 03/04 on the 02-to-tip line unless the mesh shows a clear bend.
_studio_finger_chains
def _studio_finger_chains(namespace: str='') -> Dict[str, List[str]]module function · internal · maya_tools/Rigging/joint_placer.py:5591
Return the authored high-resolution digit chains by stable template name.
_depth_centered_inside_point
def _depth_centered_inside_point(query: MeshInteriorQuery, point: Vector3) -> Tuple[Vector3, bool]module function · internal · maya_tools/Rigging/joint_placer.py:5609
Center a hand proposal through palm/finger thickness. In the studio T/A pose the hand spreads across XZ and its thickness is Y. Recentring Z can silently jump between adjacent fingers, producing crossed chains that are technically inside th
_bounded_move_inside
def _bounded_move_inside(query: MeshInteriorQuery, point: Vector3, maximum_distance: float) -> Tuple[Vector3, bool]module function · internal · maya_tools/Rigging/joint_placer.py:5627
Accept a closest-surface repair only when it remains anatomically local. Hands and facial features contain several nearby disconnected volumes. An unconstrained closest-point repair can therefore move a thumb tip into the index finger, or a
_fit_studio_wrist
def _fit_studio_wrist(query: MeshInteriorQuery, side: str, namespace: str) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:5648
Place a wrist at the narrow arm-to-palm section and center it in 3D.
_studio_digit_surface_rows
def _studio_digit_surface_rows(query: MeshInteriorQuery, side: str, chains: Dict[str, List[str]], namespace: str) -> Dict[str, float]module function · internal · maya_tools/Rigging/joint_placer.py:5703
Detect the four separate non-thumb finger rows from mesh sections.
_studio_thumb_tip_from_sections
def _studio_thumb_tip_from_sections(query: MeshInteriorQuery, side: str, wrist: om.MVector, source: List[om.MVector]) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:5757
Find the distal thumb volume independently of the neighboring fingers.
_studio_digit_tip_from_row
def _studio_digit_tip_from_row(query: MeshInteriorQuery, side: str, wrist: om.MVector, row_z: float, preferred_y: float) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:5808
Resolve one fingertip from its isolated top-view digit row.
_fit_studio_hand_from_reference
def _fit_studio_hand_from_reference(query: MeshInteriorQuery, root: str, chains: Dict[str, List[str]], namespace: str='') -> Dict[str, object]module function · internal · maya_tools/Rigging/joint_placer.py:5840
Locally conform an atlas-seeded hand without rebuilding its anatomy.
fit_studio_hand_joints
def fit_studio_hand_joints(mesh: str, root: str, namespace: str='', preserve_reference_layout: bool=False) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:5957
Fit detailed studio fingers to the actual hand volume. The template supplies digit spread, proportions, and bend planes. Each chain is kept as long as the mesh allows and is centered through the local mesh thickness, so placement is not mer
fit_studio_distal_thumb_joints
def fit_studio_distal_thumb_joints(mesh: str, namespace: str='', smoothing: float=0.0, minimum_bend_degrees: float=4.0) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6232
Restore the topology-authored distal thumb pivots and rest bend. The topology/reference solve already owns the longitudinal knuckle and fingertip locations. ``smoothing`` is retained as an explicit opt-in for legacy data, but defaults to ze
fit_studio_thumb_root_depth
def fit_studio_thumb_root_depth(mesh: str, namespace: str='', dorsal_fraction: float=0.45) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6393
Seat thumb_01 slightly palmar of center without moving its children. A world-axis hand-depth solve is unreliable where the thumb mound turns away from the palm. Use the topology-transferred thumb dorsal vector (or the joint's local Y fallba
fit_studio_finger_knuckle_height
def fit_studio_finger_knuckle_height(mesh: str, namespace: str='', upper_fraction: float=2.0 / 3.0) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6445
Seat each finger joint 02 two thirds toward the dorsal surface. Joints 03-04 retain their mesh-derived pose and joint 05 remains centered in the fingertip. The later planar pass makes that 02-05 chain a stable single-axis curl plane without
fit_studio_arm_red_dot_refinement
def fit_studio_arm_red_dot_refinement(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6496
Audit the topology-fitted shoulder, elbow, and wrist landmarks. The approved topology transfer already places these pivots from the source rigs. A former post-pass recentered the chain independently and then projected the wrist onto a synth
fit_studio_arm_hand_from_reference
def fit_studio_arm_hand_from_reference(mesh: str, namespace: str='', reference_targets: Optional[Dict[str, Vector3]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6533
Restore approved mesh-relative arm and hand landmarks exactly. Topology transfer from the approved rig corpus owns elbow, wrist, and digit anatomy. No independent per-joint section-centering is allowed here: that post-process bent otherwise
_find_studio_elbow_section
def _find_studio_elbow_section(query: 'MeshInteriorQuery', shoulder: Vector3, wrist: Vector3) -> Optional[Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:6583
Find the compact elbow section along a posed shoulder-to-wrist span.
fit_studio_elbow_pivots_to_mesh
def fit_studio_elbow_pivots_to_mesh(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6647
Fit both elbow pivots consistently at the approved arm-chain fraction.
fit_studio_arm_hinge_plane_to_mesh
def fit_studio_arm_hinge_plane_to_mesh(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6690
Conform arm pivots without flattening an authored A-pose into a T-pose. Atlas transfer supplies stable longitudinal landmarks, while the target mesh owns each pivot's through-volume depth. Shoulder, elbow, and wrist must *not* share one wor
_fit_studio_twist_segments
def _fit_studio_twist_segments(namespace: str='') -> List[str]module function · internal · maya_tools/Rigging/joint_placer.py:6837
Place studio twist joints at deterministic fractions of their segment.
mirror_studio_right_leg_from_left
def mirror_studio_right_leg_from_left(namespace: str='') -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:6868
Make the right leg an exact world-X reflection of the authored left leg.
_same_side_interval
def _same_side_interval(intervals: Iterable[Tuple[float, float]], side: str, center_x: float, seed_x: float) -> Optional[Tuple[float, float]]module function · internal · maya_tools/Rigging/joint_placer.py:6894
Choose the local shell interval belonging to one anatomical side.
refine_studio_core_targets_for_mesh
def refine_studio_core_targets_for_mesh(targets: Dict[str, Vector3], mesh: str) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:6925
Refine torso, A-stance legs, feet, and neck from local mesh sections. Unlike a whole-mesh inside test, every leg point must use the interval on its own side. This prevents the opposite leg or pelvis shell from falsely validating a joint in
_fit_studio_feet_to_volume
def _fit_studio_feet_to_volume(query: MeshInteriorQuery, namespace: str='') -> Dict[str, Dict[str, Vector3]]module function · internal · maya_tools/Rigging/joint_placer.py:7246
Derive toe base and tip from each foot's longitudinal mesh interval.
fit_studio_foot_front_flare
def fit_studio_foot_front_flare(mesh: str, namespace: str='') -> Dict[str, Dict[str, Vector3]]module function · public name · maya_tools/Rigging/joint_placer.py:7287
Recenter each foot joint in its own same-side mesh section. Reference toe tips can initially sit beyond the mesh end. Applying this correction after containment lets the final foot use the actual local footprint instead of a fixed character
fit_studio_toe_pivots_to_volume
def fit_studio_toe_pivots_to_volume(mesh: str, namespace: str='') -> Dict[str, Dict[str, Vector3]]module function · public name · maya_tools/Rigging/joint_placer.py:7334
Center toe pivots on the full forefoot and toe-end centerline. The toe base uses the center of the complete same-side forefoot width, not one digit's interval. The terminal helper sits at the center of the toe-end line, just inside the long
align_studio_thigh_roots_to_pelvis_depth
def align_studio_thigh_roots_to_pelvis_depth(namespace: str='') -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:7523
Align both femoral roots with the pelvis in side view.
fit_studio_toe_tips_to_ground
def fit_studio_toe_tips_to_ground(namespace: str='', ground_y: float=0.0) -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:7547
Put terminal toe pivots on the supplied mesh ground without lateral drift. The old extrapolation * (toe_depth / foot_depth) amplified any ankle to toe X mismatch and pulled tips across the character centerline. The local foot section pass n
fit_studio_pelvis_ridge
def fit_studio_pelvis_ridge(mesh: str, namespace: str='') -> Dict[str, Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:7586
Raise the pelvis branch toward the visible pelvic ridge. Pelvis, hipswing, and both femoral roots move by one shared scale-relative amount. Every other joint is restored to its original world position so the correction does not translate th
fit_studio_detail_joints_to_volume
def fit_studio_detail_joints_to_volume(mesh: str, root: str, namespace: str='', preserve_reference_layout: bool=False) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:7684
Conform every non-root studio joint to the character volume.
fit_studio_brow_end_joints_to_surface
def fit_studio_brow_end_joints_to_surface(mesh: str, root: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:7768
Continue each outer brow arc using the approved rig proportions. Brow landmarks are independent children of the head, so a generic local surface transfer can accidentally fold ``brow_end`` back toward the eye. Approved rigs consistently con
fit_studio_brows_from_left_profile
def fit_studio_brows_from_left_profile(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:7876
Transfer the approved left-brow spacing and surface proximity.
fit_studio_brow_arcs_to_surface
def fit_studio_brow_arcs_to_surface(mesh: str, root: str, namespace: str='', iterations: int=4, strength: float=0.35) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:7929
Fair each complete brow row into one smooth surface-following arc.
fit_studio_lip_joints_to_surface
def fit_studio_lip_joints_to_surface(mesh: str, namespace: str='', iterations: int=8, strength: float=1.0) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:8260
Author two clean, symmetric lip arcs from mesh-fitted face anchors. The approved center and commissure pivots are anchors. Only the four intermediate pivots on each half are faired; this prevents the upper and lower passes from fighting ove
fit_studio_eyelid_joints_to_surface
def fit_studio_eyelid_joints_to_surface(mesh: str, root: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:8465
Collapse eyelid roots to each eye and ray their tips onto the lid skin.
orient_studio_single_child_chains
def orient_studio_single_child_chains(root: str, namespace: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:8592
Aim local X down every unambiguous one-child studio bone. Branch joints retain their authored basis because no single child defines a unique aim direction. The origin is also preserved as a world-space reference. Every oriented joint is mea
orient_studio_eyelid_chains_to_tips
def orient_studio_eyelid_chains_to_tips(root: str) -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:8635
Aim each eyelid segment's local +X toward its mesh-fitted tip child. The saved Lost Soul Kid rig authors every eyelid tip at positive local X. Preserve that convention for both template and mapped fits, after their mesh-dependent tip locati
orient_studio_digit_chains
def orient_studio_digit_chains(mesh: str='', namespace: str='', preserve_positions: bool=False, preserve_knuckle_positions: bool=False) -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:8696
Center fingertips and author straight, animator-facing digit channels. Joint 01 aims at joint 02. Every joint from 02 onward uses signed Translate X only (+X left, -X right), and the articulated chain shares one bend plane. From joint 02 on
configure_studio_bend_axes
def configure_studio_bend_axes(root: str, namespace: str='') -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:9262
Author one preferred bend axis while leaving all channels editable.
configure_studio_elbow_bend_axes_from_channels
def configure_studio_elbow_bend_axes_from_channels(namespace: str='') -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:9314
Bias elbow IK to local Z while keeping every rotate channel editable.
zero_studio_elbow_bind_rotations
def zero_studio_elbow_bind_rotations(namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:9345
Keep fitted lowerarm bind orientation on rotate, never jointOrient. The fitted world frame is preserved exactly while its Euler values are stored in the animator-facing rotate channels. Joint Orient and Rotate Axis remain zero, and every ch
enforce_studio_joint_dof_policy
def enforce_studio_joint_dof_policy(namespace: str='') -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:9369
Set animator-facing hinge axes without locking transform channels.
zero_studio_digit_non_curl_rotations
def zero_studio_digit_non_curl_rotations(namespace: str='') -> Dict[str, int]module function · public name · maya_tools/Rigging/joint_placer.py:9403
Bake digit rest frames into jointOrient so only curl is in rotateZ.
enforce_studio_thumb_z_only_rotates
def enforce_studio_thumb_z_only_rotates(namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:9437
Keep thumb 02-terminal animator rotations on the curl channel only. Approved thumb pivots can require a multi-axis rest frame under a lowered, scaled hand. Store that fitted rest frame in jointOrient, leaving rotate channels neutral and loc
capture_studio_template_knee_bend_axes
def capture_studio_template_knee_bend_axes(namespace: str='') -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:9487
Tag knees with the studio template's authored local-Y hinge.
_studio_knee_hinge_direction
def _studio_knee_hinge_direction(side: str, namespace: str='') -> om.MVectormodule function · internal · maya_tools/Rigging/joint_placer.py:9502
Return the normal of one fitted hip-knee-ankle plane.
align_studio_leg_front_projection
def align_studio_leg_front_projection(mesh: str='', namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:9552
Place each knee on its hip-to-ankle line in front view only. Knee Y (height) and Z (sagittal depth) remain mesh-fitted. Only lateral X is corrected. Front-plane continuity is authoritative even when imperfect or asymmetric geometry means th
align_studio_knees_to_final_mesh_line
def align_studio_knees_to_final_mesh_line(mesh: str, namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:9592
Place knee pivots on the final guided hip-to-ankle line in the mesh. The mesh core pass runs before optional scene guides are restored. A later thigh guide can therefore move the femoral root while leaving its knee at the pre-guide position
finalize_studio_core_positions_from_mesh
def finalize_studio_core_positions_from_mesh(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:9675
Re-fit the central spine and leg pivots after orientation restores. Preserve the fitted spine heights from the selected mesh/reference solve, recenter each vertebra in its own torso section, and center each ankle in its own side's mesh sect
fit_studio_wrist_pivots_to_mesh
def fit_studio_wrist_pivots_to_mesh(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:9877
Re-seat wrist pivots in the hand volume after all reference restores. Later approved-frame restores can put the wrist back on the dorsal edge after the earlier arm fit. Reapply the established 60-percent section placement as the last positi
finalize_studio_spine_neck_head
def finalize_studio_spine_neck_head(mesh: str, namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:9956
Reassert the central torso/head line after all detail volume fitting.
enforce_studio_neck2_midpoint
def enforce_studio_neck2_midpoint(namespace: str='') -> Optional[Vector3]module function · public name · maya_tools/Rigging/joint_placer.py:9996
Keep neck2 exactly halfway between the final neck1 and head1 pivots.
enforce_studio_neck2_head1_local_x_plane
def enforce_studio_neck2_head1_local_x_plane(namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:10019
Keep neck2->head1 on the joint's local X axis after final restores. The head pivot remains at its fitted mesh-relative location to within the tiny off-plane correction required to put the segment in a single plane.
align_studio_center_face_positions
def align_studio_center_face_positions(mesh: str, namespace: str='') -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:10063
Place central body and face anchors on the mesh front-view midline. Capture targets before moving parents and preserve child world matrices.
enforce_studio_center_face_local_zeroes
def enforce_studio_center_face_local_zeroes(namespace: str='', preserve_nose_root_depth: bool=False) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:10106
Enforce studio nose local-channel zeroes without moving child branches.
configure_mapped_bend_axes
def configure_mapped_bend_axes(root: str, joint_map: dict) -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:10149
Apply the same hinge policy through user-defined HIK joint mappings.
_joint_translation_is_editable
def _joint_translation_is_editable(joint: str) -> boolmodule function · internal · maya_tools/Rigging/joint_placer.py:10209
_set_joint_world_translation
def _set_joint_world_translation(joint: str, position: Vector3) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10219
Set a joint pivot in world space without changing its world orientation.
_set_joint_world_translation_preserving_children
def _set_joint_world_translation_preserving_children(joint: str, position: Vector3) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10227
Move one joint pivot while leaving every child subtree in world space.
_set_joint_world_basis_preserving_children
def _set_joint_world_basis_preserving_children(joint: str, basis: Sequence[float]) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10246
Apply an exact world basis without disturbing any child world pose.
_set_joint_local_rotation_preserving_children
def _set_joint_local_rotation_preserving_children(joint: str, rotation: Vector3) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10289
Set exact rotate channels without moving any child branches.
_orient_joint_x_to_child
def _orient_joint_x_to_child(joint: str, child: str, world_up: Vector3=(0.0, 1.0, 0.0), aim_sign: float=1.0) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10321
Aim signed local X at one child without moving its branches. Studio arm joints own twist/helper branches in addition to the primary chain. Maya's generic hierarchy orient can choose one of those branches as its aim target. Detaching every d
_orient_joint_x_to_world_direction
def _orient_joint_x_to_world_direction(joint: str, direction: Vector3, world_up: Vector3=(0.0, 1.0, 0.0)) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10400
Aim local X at an explicit world vector while preserving child poses.
_orient_joint_with_world_z_hinge
def _orient_joint_with_world_z_hinge(joint: str, direction: Vector3, world_z: Vector3) -> Nonemodule function · internal · maya_tools/Rigging/joint_placer.py:10465
Aim X as closely as possible down-bone while keeping an exact Z hinge.
_move_joint_orientation_to_rotate
def _move_joint_orientation_to_rotate(joint: str) -> Tuple[float, float, float]module function · internal · maya_tools/Rigging/joint_placer.py:10514
Preserve a joint's world basis while moving jointOrient onto rotate.
move_all_studio_joint_orientation_to_rotate
def move_all_studio_joint_orientation_to_rotate(root: str, namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:10592
Zero jointOrient/rotateAxis everywhere without changing world poses.
_capture_studio_joint_positions
def _capture_studio_joint_positions(root: str) -> Dict[str, Vector3]module function · internal · maya_tools/Rigging/joint_placer.py:10630
Capture one stable world-space position per studio joint.
_capture_studio_joint_world_matrices
def _capture_studio_joint_world_matrices(root: str) -> Dict[str, Sequence[float]]module function · internal · maya_tools/Rigging/joint_placer.py:10644
Capture complete approved joint frames for a deterministic rerun.
_restore_studio_joint_world_matrices
def _restore_studio_joint_world_matrices(root: str, matrices: Dict[str, Sequence[float]]) -> intmodule function · internal · maya_tools/Rigging/joint_placer.py:10661
Restore full frames parent-first after a clean template rebuild.
_restore_studio_joint_world_positions
def _restore_studio_joint_world_positions(root: str, positions: Dict[str, Vector3]) -> Dict[str, float]module function · internal · maya_tools/Rigging/joint_placer.py:10682
Restore approved pivots without replacing newly authored orientations. Existing studio skeletons are an artist-approved placement source. A joint-placer rerun may standardize their axes, but it must not reinterpret their anatomy from the me
validate_studio_final_joint_placement
def validate_studio_final_joint_placement(mesh: str, root: str, fitted_positions: Optional[Dict[str, Vector3]]=None, stage: str='final', validate_orientations: bool=False, validate_center_face_alignment: bool=True, validate_fingertip_centering: bool=True, validate_neck2_midpoint: bool=True, validate_nose_root_local_zero: bool=True) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:10721
Reject post-fit hierarchy drift and grossly displaced joint pivots.
orient_studio_arm_chains
def orient_studio_arm_chains(mesh: str='', namespace: str='', only_joints: Optional[Sequence[str]]=None) -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:11537
Aim arm X axes at placed children and transfer approved template roll. Joint placement owns every pivot. The atlas owns only the relative frame: left +X runs down the arm and right -X runs down it, while Y/Z retain the same roll used by app
orient_studio_leg_reference_frames
def orient_studio_leg_reference_frames(mesh: str='', namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:11634
Transfer approved leg roll without changing fitted leg/foot pivots.
enforce_studio_elbow_z_hinges
def enforce_studio_elbow_z_hinges(namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:11700
Preserve the authored arm frame and identify its local bend axis. Arm roll is already transferred from approved production rigs by :func:`orient_studio_arm_chains`. Do not rebuild that frame from the shoulder/elbow/wrist triangle here: on r
orient_studio_elbow_z_hinge_frames
def orient_studio_elbow_z_hinge_frames(namespace: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:11733
Align upperarm/lowerarm frames to their bend plane for rotateZ curl. The two segment X axes are aimed at their placed children. Their shared Z axis is the shoulder-elbow-wrist plane normal, so the lowerarm's fitted rest bend is representabl
enforce_studio_knee_y_hinges
def enforce_studio_knee_y_hinges(namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:11809
Express each fitted knee pose exclusively on local rotateY. The thigh frame comes from the hip-knee-ankle plane, with local Y normal to that plane. Mesh-relative pivots stay fixed while the knee and every child through toeTip use signed loc
orient_studio_spine_vertical
def orient_studio_spine_vertical(namespace: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:11937
Give every spine pivot one identical scene-vertical world basis.
orient_studio_root_pelvis_hipswing_y_up
def orient_studio_root_pelvis_hipswing_y_up(namespace: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:11981
Give origin, pelvis, and hipswing a shared world-Y-up basis.
orient_studio_head_chains
def orient_studio_head_chains(namespace: str='', include_oral: bool=True) -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:12037
Aim the central neck, skull, jaw, and tongue joints down-bone. These joints own facial and oral branches, so the generic one-child pass deliberately skips several of them. Explicit primary-child pairs keep local X anatomical while preservin
orient_studio_neck1_grid_standard
def orient_studio_neck1_grid_standard(namespace: str='') -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12113
Keep neck1 aimed at neck2 with the same forward-Y axis as the spine.
orient_studio_center_face_grid_axes
def orient_studio_center_face_grid_axes(namespace: str='') -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12154
World-align center facial anchors to the scene grid axes exactly.
fit_studio_neck_head_jaw_relative
def fit_studio_neck_head_jaw_relative(mesh: str, namespace: str='', placement_names: Optional[Iterable[str]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:12182
Transfer approved neck/head/jaw pivots by mesh-relative proportions.
orient_studio_teeth_scene_y_up
def orient_studio_teeth_scene_y_up(namespace: str='') -> Dict[str, float]module function · public name · maya_tools/Rigging/joint_placer.py:12389
World-align teeth joints with scene Y up and zero jointOrient. Teeth are rigid oral anchors rather than down-bone chain joints. Keeping their basis scene-aligned makes dental controls predictable even when the head and jaw parents carry cha
orient_studio_brow_joints
def orient_studio_brow_joints(mesh: str='', namespace: str='') -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12442
Aim X at the next brow and keep Y tangent to the facial surface.
zero_studio_eyelid_tip_rotates
def zero_studio_eyelid_tip_rotates(root: str) -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12529
Zero terminal eyelid rotate channels after all orientation passes.
orient_studio_surface_face_joints
def orient_studio_surface_face_joints(mesh: str, root: str) -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12561
Keep cheek and under-eye X axes tangent to the facial surface.
orient_studio_face_local_y_up
def orient_studio_face_local_y_up(root: str) -> Dict[str, Dict[str, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12663
Orient side facial joints to the studio's mirrored X/Y/Z convention. The lateral axis is derived from the eye landmarks so this remains aligned to the character when the mesh is rotated in the scene. Left-side joints use outward lateral X,
orient_studio_leg_chains
def orient_studio_leg_chains(namespace: str='', only_joints: Optional[Sequence[str]]=None) -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:12787
Author studio-mirrored signed-X frames for both leg chains.
orient_studio_twist_joints_like_parents
def orient_studio_twist_joints_like_parents(root: str, namespace: str='') -> Dict[str, str]module function · public name · maya_tools/Rigging/joint_placer.py:13006
Match every studio twist joint's world basis exactly to its parent bone.
enforce_studio_twist_translate_x
def enforce_studio_twist_translate_x(root: str) -> Dict[str, Tuple[float, float, float]]module function · public name · maya_tools/Rigging/joint_placer.py:13057
Put every deformation twist joint solely on its parent's local X axis. Twist pivots are fitted along their parent segment and inherit that segment's basis. Final elbow/leg orientation cleanup can nevertheless leave stale local Y/Z offsets.
unlock_studio_joint_channels
def unlock_studio_joint_channels(root: str, namespace: str='') -> intmodule function · public name · maya_tools/Rigging/joint_placer.py:13116
Leave every studio joint transform channel unlocked and keyable.
_capture_mapped_twist_fractions
def _capture_mapped_twist_fractions(joint_map: dict) -> Dict[str, Tuple[str, str, float]]module function · internal · maya_tools/Rigging/joint_placer.py:13156
Remember authored twist spacing before the core hierarchy is resized.
mapped_detail_editability_issues
def mapped_detail_editability_issues(root: str) -> List[str]module function · public name · maya_tools/Rigging/joint_placer.py:13195
Return driven/locked body detail joints that make a fit unsafe. MetaHuman body helpers must be editable in neutral-pose editing mode before their core skeleton is repositioned. Detect this before any scale or joint move so a live RigLogic/R
place_mapped_detail_joints
def place_mapped_detail_joints(mesh: str, root: str, joint_map: dict, twist_fractions: Optional[Dict[str, Tuple[str, str, float]]]=None) -> Dict[str, object]module function · public name · maya_tools/Rigging/joint_placer.py:13235
Place and verify MetaHuman-style twist and corrective joints. Facial DNA joints and driver duplicates are deliberately untouched. Their neutral transforms belong to RigLogic/DNA and require the face mesh/DNA update workflow rather than a bo
fit_mapped_skeleton
def fit_mapped_skeleton(mesh: str, points: Dict[str, Vector3], joint_map: dict) -> Tuple[str, int, int, Dict[str, object]]module function · public name · maya_tools/Rigging/joint_placer.py:13512
Fit solved anatomical roles onto an existing user-defined hierarchy.
fit_studio_template_skeleton
def fit_studio_template_skeleton(points: Dict[str, Vector3], mesh: str='', template_path: str=DEFAULT_PLACEMENT_TEMPLATE, namespace: str='', replace_existing: bool=True, approved_world_matrices: Optional[Dict[str, Sequence[float]]]=None) -> Tuple[str, int, int]module function · public name · maya_tools/Rigging/joint_placer.py:13733
Load or reuse the complete studio skeleton and fit it to solved anchors.
preview_biped_joint_placement
def preview_biped_joint_placement(mesh: str, solver: str='production', landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, create_guides: bool=True, joint_map: Optional[dict]=None) -> PlacementPreviewmodule function · public name · maya_tools/Rigging/joint_placer.py:15072
Solve and validate placement without creating or replacing a skeleton.
build_basic_biped_skeleton
def build_basic_biped_skeleton(mesh: str, orient: bool=True, replace_existing: bool=True, create_guides: bool=False, solver: str='production', landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, template_namespace: str='', require_interior: bool=False, joint_map: Optional[dict]=None, import_skin_weights: bool=False) -> PlacementResultmodule function · public name · maya_tools/Rigging/joint_placer.py:15146
create_auto_joints_for_mesh
def create_auto_joints_for_mesh(mesh: str, orient: bool=True, replace_existing: bool=True, create_guides: bool=False, solver: str='production', landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, template_namespace: str='', require_interior: bool=False, joint_map: Optional[dict]=None, import_skin_weights: bool=False) -> Tuple[dict, dict]module function · public name · maya_tools/Rigging/joint_placer.py:15431
preview_selected_mesh_joint_placement
def preview_selected_mesh_joint_placement(solver: str='production', landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, create_guides: bool=True, joint_map: Optional[dict]=None) -> PlacementPreviewmodule function · public name · maya_tools/Rigging/joint_placer.py:15460
Preview the selected mesh without creating or replacing rig joints.
create_auto_joints_for_selected_mesh
def create_auto_joints_for_selected_mesh(orient: bool=True, replace_existing: bool=True, create_guides: bool=False, solver: str='production', landmark_points: Optional[Dict[str, Vector3]]=None, template_path: str=DEFAULT_PLACEMENT_TEMPLATE, template_namespace: str='', require_interior: bool=False, joint_map: Optional[dict]=None) -> Tuple[dict, dict]module function · public name · maya_tools/Rigging/joint_placer.py:15481
maya_tools.Rigging.metahuman_utils
rebind_metahuman_face_to_body
def rebind_metahuman_face_to_body(face_mesh, face_joints, body_joints, skin_weights_path, dna_file_path)module function · public name · maya_tools/Rigging/metahuman_utils.py:7
Rebind MetaHuman head mesh to a different body rig, transfer skin weights, and update the DNA. :param face_mesh: Name of the MetaHuman face mesh (e.g. "Face_Mesh") :param face_joints: List of face rig joints to snap (e.g. ["root", "pelvis",
maya_tools.Rigging.mocap.control_identity
is_animator_control_identity
def is_animator_control_identity(node: str, object_sets: Iterable[str]=()) -> boolmodule function · public name · maya_tools/Rigging/mocap/control_identity.py:8
Use a naming contract or an explicit Maya control set membership.
maya_tools.Rigging.mocap.fbx_to_control_rig
_input_file
def _input_file(value: str | Path, suffixes: set[str], role: str) -> Pathmodule function · internal · maya_tools/Rigging/mocap/fbx_to_control_rig.py:16
_require_compatible_maya_scene
def _require_compatible_maya_scene(rig_scene: Path, running_version: str) -> Nonemodule function · internal · maya_tools/Rigging/mocap/fbx_to_control_rig.py:25
Refuse a newer Maya ASCII rig before any retarget output is written. Maya may open a newer scene while dropping unsupported nodes and still report a successful reference. That is not a trustworthy control bake. Maya binary files cannot be i
transfer_fbx_animation_to_control_rig
def transfer_fbx_animation_to_control_rig(*, animation_fbx: str | Path, rig_scene: str | Path, target_hik_fbx: str | Path, output_scene: str | Path, mapping_profile: str | Path | None=None, solved_fbx: str | Path | None=None, source_mapping: dict[str, dict[str, Any]] | None=None, source_hik_fbx: str | Path | None=None, source_tpose_frame: float | None=None, target_character: str | None=None, rig_namespace: str='CharacterRig', solved_namespace: str='RetargetSolved', overwrite: bool=False, force_discard_scene: bool=False) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/fbx_to_control_rig.py:49
Transfer a selected animation FBX onto a selected Maya control rig. The animation FBX's embedded locked HIK character is preferred. An uncharacterized source uses a selected sister ``source_hik_fbx`` or, when omitted, tries the selected tar
transfer_fbx_animation_dialog
def transfer_fbx_animation_dialog(**kwargs: Any) -> dict[str, Any] | Nonemodule function · public name · maya_tools/Rigging/mocap/fbx_to_control_rig.py:195
Pick the source FBX, Maya rig, companion HIK FBX, and output scene. Cancellation leaves the scene unchanged. The dialog offers the selected target's companion HIK FBX or a separately selected characterized sister FBX for the animation skele
maya_tools.Rigging.mocap.fbx_to_engine
transfer_fbx_to_engine
def transfer_fbx_to_engine(*, animation_fbx: str | Path, rig_scene: str | Path, target_hik_fbx: str | Path, output_scene: str | Path, output_fbx: str | Path, source_hik_fbx: str | Path | None=None, source_mapping: dict[str, dict[str, Any]] | None=None, source_tpose_frame: float | None=None, mapping_profile: str | Path | None=None, target_character: str | None=None, overwrite: bool=False, force_discard_scene: bool=False) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/fbx_to_engine.py:9
Retarget, bake animator controls, then export only target deform joints. All inputs and both user-facing outputs are preflighted before Maya changes scenes. The companion/slot checks and clean-FBX reopen audit are delegated to their validat
maya_tools.Rigging.mocap.hik_mapping
unqualified_name
def unqualified_name(node)module function · public name · maya_tools/Rigging/mocap/hik_mapping.py:29
Return a DAG and namespace independent Maya node name.
stable_node_name
def stable_node_name(node)module function · public name · maya_tools/Rigging/mocap/hik_mapping.py:35
Return the shortest namespace-qualified name stable under reparenting.
load_profile
def load_profile(json_path, base_joint_map=None)module function · public name · maya_tools/Rigging/mocap/hik_mapping.py:41
Load a serialized HumanIK map without modifying the shared default.
from_character_definition
def from_character_definition(character, base_joint_map=None)module function · public name · maya_tools/Rigging/mocap/hik_mapping.py:69
Read slot connections supported by the active Maya HIK node version.
_hierarchy
def _hierarchy(root_joint)module function · internal · maya_tools/Rigging/mocap/hik_mapping.py:87
_resolve_unique
def _resolve_unique(name, hierarchy)module function · internal · maya_tools/Rigging/mocap/hik_mapping.py:97
_between
def _between(ancestor, descendant)module function · internal · maya_tools/Rigging/mocap/hik_mapping.py:104
resolve_to_scene
def resolve_to_scene(joint_map, root_joint, repair_required=True)module function · public name · maya_tools/Rigging/mocap/hik_mapping.py:119
Resolve one mapping to one hierarchy and return validation provenance.
maya_tools.Rigging.mocap.hik_retarget
_source_scripts
def _source_scripts() -> Nonemodule function · internal · maya_tools/Rigging/mocap/hik_retarget.py:11
_import_fbx
def _import_fbx(path: Path, namespace: str | None=None) -> Nonemodule function · internal · maya_tools/Rigging/mocap/hik_retarget.py:22
_source_joint
def _source_joint(bone_name: str, imported_joints: set[str]) -> strmodule function · internal · maya_tools/Rigging/mocap/hik_retarget.py:38
_character_slots
def _character_slots(character: str) -> dict[str, str]module function · internal · maya_tools/Rigging/mocap/hik_retarget.py:49
Read the imported HIK definition, retaining only unambiguous joint links.
_imported_character
def _imported_character(before: set[str], imported_joints: set[str], role: str) -> tuple[str, dict[str, str]]module function · internal · maya_tools/Rigging/mocap/hik_retarget.py:65
_character_joint
def _character_joint(character: str, attribute: str) -> strmodule function · internal · maya_tools/Rigging/mocap/hik_retarget.py:89
_position
def _position(node: str, frame: float) -> list[float]module function · internal · maya_tools/Rigging/mocap/hik_retarget.py:98
_bare
def _bare(node: str) -> strmodule function · internal · maya_tools/Rigging/mocap/hik_retarget.py:103
_copy_matching_animation
def _copy_matching_animation(animated_joints: set[str], characterized_joints: set[str], slots: dict[str, str]) -> dict[str, Any]module function · internal · maya_tools/Rigging/mocap/hik_retarget.py:107
Apply a clip to its separately characterized sister skeleton. Match the full joint-parent lineage, not only the leaf name. Real face rigs can repeat a leaf joint name in separate branches; those names are not ambiguous when their ancestry i
retarget_fbx_hik
def retarget_fbx_hik(target_rig: str, source_fbx: str, output_fbx: str, source_mapping: dict[str, dict[str, Any]] | None=None, target_character: str | None='Character1', source_character: str='AIStudioSourceCharacter', source_namespace: str='AIStudioSource', target_namespace: str='MannyRig_v01_retarget', reset_scene: bool=True, source_tpose_frame: float | None=None, source_hik_fbx: str | None=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/hik_retarget.py:156
Retarget from an imported HIK character or an explicit slot/bone map. An animation-only FBX can use ``source_hik_fbx`` when it has the same skeleton as a separately characterized sister FBX. Otherwise a mapped, uncharacterized FBX needs ``s
maya_tools.Rigging.mocap.hik_ui
_maya_major_version
def _maya_major_version()module function · internal · maya_tools/Rigging/mocap/hik_ui.py:18
_rig_stack_source_signature
def _rig_stack_source_signature()module function · internal · maya_tools/Rigging/mocap/hik_ui.py:64
Return a cheap signature that changes when a rig module changes on disk.
reload_rig_function_stack
def reload_rig_function_stack(force=False)module function · public name · maya_tools/Rigging/mocap/hik_ui.py:93
Reload changed Maya rig modules; skip the expensive no-change path.
get_default_export_path
def get_default_export_path()module function · public name · maya_tools/Rigging/mocap/hik_ui.py:148
get_main_window_pointer
def get_main_window_pointer()module function · public name · maya_tools/Rigging/mocap/hik_ui.py:159
Get the Maya main window pointer :return:
ParentSelectionDialog.__init__
def ParentSelectionDialog.__init__(self, msg, parent=None)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:169
ControlRigPopup.__init__
def ControlRigPopup.__init__(self, skeletal_meshes, joint_map, uproject, parent=None)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:201
ControlRigPopup.filter_meshes
def ControlRigPopup.filter_meshes(self, text)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:241
ControlRigPopup.create_control_rig
def ControlRigPopup.create_control_rig(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:246
UnrealSkeletalExportDialog.__init__
def UnrealSkeletalExportDialog.__init__(self, rig_name, output_directory, asset_data, maya_meshes=None, selected_meshes=None, parent=None)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:263
UnrealSkeletalExportDialog._browse_output
def UnrealSkeletalExportDialog._browse_output(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:371
UnrealSkeletalExportDialog._set_all_export_meshes
def UnrealSkeletalExportDialog._set_all_export_meshes(self, checked)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:376
UnrealSkeletalExportDialog._checked_export_meshes
def UnrealSkeletalExportDialog._checked_export_meshes(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:381
UnrealSkeletalExportDialog._mesh_changed
def UnrealSkeletalExportDialog._mesh_changed(self, *_args)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:388
UnrealSkeletalExportDialog._update_preview
def UnrealSkeletalExportDialog._update_preview(self, *_args)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:406
UnrealSkeletalExportDialog._character_folder
def UnrealSkeletalExportDialog._character_folder(parent, clean_name)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:426
UnrealSkeletalExportDialog._validate_and_accept
def UnrealSkeletalExportDialog._validate_and_accept(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:430
UnrealSkeletalExportDialog.values
def UnrealSkeletalExportDialog.values(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:444
HIKDefinitionUI.__init__
def HIKDefinitionUI.__init__(self, parent=None, *, host_mode='maya')class method · internal · maya_tools/Rigging/mocap/hik_ui.py:458
HIKDefinitionUI._install_missing_tooltips
def HIKDefinitionUI._install_missing_tooltips(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:546
Fill tooltip gaps for interactive controls across every UI tab.
HIKDefinitionUI._notify_operation
def HIKDefinitionUI._notify_operation(self, title, message, severity='info')class method · internal · maya_tools/Rigging/mocap/hik_ui.py:611
Report an operation result without creating a top-level window.
HIKDefinitionUI._vehicle_live_tick
def HIKDefinitionUI._vehicle_live_tick(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:639
HIKDefinitionUI._build_hik_tab
def HIKDefinitionUI._build_hik_tab(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:649
HIKDefinitionUI._build_rigging_tab
def HIKDefinitionUI._build_rigging_tab(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:851
HIKDefinitionUI._build_skinning_tab
def HIKDefinitionUI._build_skinning_tab(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1646
Move all skinning tools into a dedicated, scrollable tab.
HIKDefinitionUI._build_mesh_tab
def HIKDefinitionUI._build_mesh_tab(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1662
Build the persistent Maya-to-Unreal mesh definition surface.
HIKDefinitionUI._sync_mesh_export_rig_name
def HIKDefinitionUI._sync_mesh_export_rig_name(self, value)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1781
HIKDefinitionUI.browse_mesh_export_directory
def HIKDefinitionUI.browse_mesh_export_directory(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:1785
HIKDefinitionUI._set_all_mesh_export_items
def HIKDefinitionUI._set_all_mesh_export_items(self, checked)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1792
HIKDefinitionUI._checked_mesh_export_items
def HIKDefinitionUI._checked_mesh_export_items(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1797
HIKDefinitionUI.refresh_mesh_export_scene_meshes
def HIKDefinitionUI.refresh_mesh_export_scene_meshes(self, *_args)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:1804
HIKDefinitionUI.use_selected_meshes_for_export
def HIKDefinitionUI.use_selected_meshes_for_export(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:1825
HIKDefinitionUI.refresh_mesh_export_unreal_assets
def HIKDefinitionUI.refresh_mesh_export_unreal_assets(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:1838
HIKDefinitionUI._mesh_export_target_changed
def HIKDefinitionUI._mesh_export_target_changed(self, *_args)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1875
HIKDefinitionUI._mesh_export_skeleton_policy_changed
def HIKDefinitionUI._mesh_export_skeleton_policy_changed(self, *_args)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1893
HIKDefinitionUI._update_mesh_export_preview
def HIKDefinitionUI._update_mesh_export_preview(self, *_args)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1898
HIKDefinitionUI._mesh_export_character_folder
def HIKDefinitionUI._mesh_export_character_folder(parent, clean_name)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1932
HIKDefinitionUI._mesh_export_settings
def HIKDefinitionUI._mesh_export_settings(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1936
HIKDefinitionUI._build_vehicle_tab
def HIKDefinitionUI._build_vehicle_tab(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:1960
HIKDefinitionUI.pick_vehicle_template_path
def HIKDefinitionUI.pick_vehicle_template_path(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2091
HIKDefinitionUI.load_vehicle_joint_template
def HIKDefinitionUI.load_vehicle_joint_template(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2101
HIKDefinitionUI.build_vehicle_rig_from_template
def HIKDefinitionUI.build_vehicle_rig_from_template(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2117
HIKDefinitionUI.assign_vehicle_ground
def HIKDefinitionUI.assign_vehicle_ground(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2138
HIKDefinitionUI.update_vehicle_ground
def HIKDefinitionUI.update_vehicle_ground(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2149
HIKDefinitionUI.enable_vehicle_live_ground
def HIKDefinitionUI.enable_vehicle_live_ground(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2160
HIKDefinitionUI.reset_vehicle_wheel_roll
def HIKDefinitionUI.reset_vehicle_wheel_roll(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2173
HIKDefinitionUI.set_vehicle_auto_steering
def HIKDefinitionUI.set_vehicle_auto_steering(self, enabled)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2182
HIKDefinitionUI.set_vehicle_steering_drive
def HIKDefinitionUI.set_vehicle_steering_drive(self, enabled)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2200
HIKDefinitionUI.set_vehicle_chassis_ground_follow
def HIKDefinitionUI.set_vehicle_chassis_ground_follow(self, enabled)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2219
HIKDefinitionUI.set_vehicle_chassis_follow_value
def HIKDefinitionUI.set_vehicle_chassis_follow_value(self, attribute, value)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2229
HIKDefinitionUI.bake_vehicle_ground
def HIKDefinitionUI.bake_vehicle_ground(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2239
HIKDefinitionUI.save_vehicle_rig_file
def HIKDefinitionUI.save_vehicle_rig_file(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2252
HIKDefinitionUI.get_space_switch_mode
def HIKDefinitionUI.get_space_switch_mode(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2267
HIKDefinitionUI._get_joint_status_display
def HIKDefinitionUI._get_joint_status_display(self, jnt)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:2270
HIKDefinitionUI._update_list_widget
def HIKDefinitionUI._update_list_widget(self, list_widget, items)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:2304
Replace all items in a QListWidget with the given items, appending status color cues.
HIKDefinitionUI.create_space_switch
def HIKDefinitionUI.create_space_switch(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2323
HIKDefinitionUI.create_joints_from_selected_curve
def HIKDefinitionUI.create_joints_from_selected_curve(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2337
HIKDefinitionUI.populate_default_face_map_from_scene
def HIKDefinitionUI.populate_default_face_map_from_scene(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2385
Fill default_face_map with scene joints under HIK head reference.
HIKDefinitionUI.assign_face_from_selection
def HIKDefinitionUI.assign_face_from_selection(self, list_widget)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2389
HIKDefinitionUI.pick_rig_template_path
def HIKDefinitionUI.pick_rig_template_path(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2403
HIKDefinitionUI.load_biped_rig_template
def HIKDefinitionUI.load_biped_rig_template(self, reference=False)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2418
HIKDefinitionUI.preview_selected_joint_placement
def HIKDefinitionUI.preview_selected_joint_placement(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2465
Create confidence-colored guides without modifying the skeleton.
HIKDefinitionUI.fit_template_to_selected_mesh
def HIKDefinitionUI.fit_template_to_selected_mesh(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2521
Fit the active mapped hierarchy, or the studio template as fallback.
HIKDefinitionUI.capture_joint_placement_baseline
def HIKDefinitionUI.capture_joint_placement_baseline(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2726
Save the selected approved mesh/skeleton pair as normalized golden data.
HIKDefinitionUI.validate_joint_placement_baseline
def HIKDefinitionUI.validate_joint_placement_baseline(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2804
Run non-destructive placement QA against one approved baseline.
HIKDefinitionUI.run_joint_placement_regression_suite
def HIKDefinitionUI.run_joint_placement_regression_suite(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2844
Launch the manifest suite in mayapy so the artist scene is untouched.
HIKDefinitionUI.create_rig_mapping
def HIKDefinitionUI.create_rig_mapping(self, refresh_details=True)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2899
HIKDefinitionUI._rfl_shoe_meshes_from_ui
def HIKDefinitionUI._rfl_shoe_meshes_from_ui(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:2940
HIKDefinitionUI.set_rfl_shoe_mesh_from_selection
def HIKDefinitionUI.set_rfl_shoe_mesh_from_selection(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2949
Store selected mesh transforms for footwear-aware RFL fitting.
HIKDefinitionUI.set_t_pose_from_mapping
def HIKDefinitionUI.set_t_pose_from_mapping(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:2972
Set the mapped deformation skeleton to T-pose as one undoable action.
HIKDefinitionUI.build_full_rig
def HIKDefinitionUI.build_full_rig(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3072
HIKDefinitionUI.remove_full_rig
def HIKDefinitionUI.remove_full_rig(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3353
HIKDefinitionUI._sync_export_joint_maps
def HIKDefinitionUI._sync_export_joint_maps(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:3387
HIKDefinitionUI.send_skeletal_mesh_to_unreal
def HIKDefinitionUI.send_skeletal_mesh_to_unreal(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3399
Run the Maya-to-Unreal workflow from the persistent Mesh tab definition.
HIKDefinitionUI.auto_detect_face_joints
def HIKDefinitionUI.auto_detect_face_joints(self, key_path, list_widget)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3462
HIKDefinitionUI.create_single_control
def HIKDefinitionUI.create_single_control(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3503
HIKDefinitionUI.create_additional_limb_module
def HIKDefinitionUI.create_additional_limb_module(self, module_type)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3537
Build and register an arbitrary additional arm or leg chain.
HIKDefinitionUI.export_skin_weights
def HIKDefinitionUI.export_skin_weights(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3584
HIKDefinitionUI.import_skin_weights
def HIKDefinitionUI.import_skin_weights(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3599
HIKDefinitionUI._confirm_skin_influence_renames
def HIKDefinitionUI._confirm_skin_influence_renames(self, mesh, proposals, unresolved, ambiguous)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:3702
Ask before applying safe, formatting-only influence renames.
HIKDefinitionUI.auto_hammer_weight_spikes
def HIKDefinitionUI.auto_hammer_weight_spikes(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3777
Repair isolated whole-mesh weight outliers without softening valid gradients.
HIKDefinitionUI.smooth_skin_weights_spatially
def HIKDefinitionUI.smooth_skin_weights_spatially(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3837
Smooth a selected mesh, or restrict diffusion to selected vertices.
HIKDefinitionUI.activate_spatial_skin_smooth_brush
def HIKDefinitionUI.activate_spatial_skin_smooth_brush(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3882
HIKDefinitionUI.deactivate_spatial_skin_smooth_brush
def HIKDefinitionUI.deactivate_spatial_skin_smooth_brush(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3904
HIKDefinitionUI.transfer_skin_weights_from_selection
def HIKDefinitionUI.transfer_skin_weights_from_selection(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3908
HIKDefinitionUI.create_surface_rig_with_drivers
def HIKDefinitionUI.create_surface_rig_with_drivers(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3936
HIKDefinitionUI.sort_joints_by_bounding_box
def HIKDefinitionUI.sort_joints_by_bounding_box(self, joints)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:3983
HIKDefinitionUI.auto_detect_indices
def HIKDefinitionUI.auto_detect_indices(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4014
HIKDefinitionUI._pick_parent
def HIKDefinitionUI._pick_parent(self, field)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4074
HIKDefinitionUI.make_selector_callback
def HIKDefinitionUI.make_selector_callback(self, slot)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4079
HIKDefinitionUI.update_button_color
def HIKDefinitionUI.update_button_color(self, slot)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4088
HIKDefinitionUI.get_opposite_slot
def HIKDefinitionUI.get_opposite_slot(self, slot)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4099
HIKDefinitionUI.mirror_joint_name
def HIKDefinitionUI.mirror_joint_name(self, name: str) -> strclass method · public name · maya_tools/Rigging/mocap/hik_ui.py:4106
HIKDefinitionUI.pick_selected_joint
def HIKDefinitionUI.pick_selected_joint(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4141
HIKDefinitionUI.load_definition
def HIKDefinitionUI.load_definition(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4155
HIKDefinitionUI.save_definition
def HIKDefinitionUI.save_definition(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4168
HIKDefinitionUI.auto_detect
def HIKDefinitionUI.auto_detect(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4175
HIKDefinitionUI.get_uproject
def HIKDefinitionUI.get_uproject(self, directory)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4205
HIKDefinitionUI.guess_joint_map_from_root
def HIKDefinitionUI.guess_joint_map_from_root(self, root_joint)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4212
HIKDefinitionUI.create_hik_character
def HIKDefinitionUI.create_hik_character(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4218
HIKDefinitionUI.store_all_face_connections
def HIKDefinitionUI.store_all_face_connections(self, silent=False)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4275
HIKDefinitionUI._get_module_joints
def HIKDefinitionUI._get_module_joints(self, module)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4301
HIKDefinitionUI._get_face_module_joints
def HIKDefinitionUI._get_face_module_joints(self, module)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4328
HIKDefinitionUI.create_body_module_setup
def HIKDefinitionUI.create_body_module_setup(self, module, silent=False)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4350
HIKDefinitionUI.remove_body_module_setup
def HIKDefinitionUI.remove_body_module_setup(self, module)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4517
HIKDefinitionUI.create_face_module_setup
def HIKDefinitionUI.create_face_module_setup(self, module, silent=False, parent_override=None, jaw_ctrl_override=None, jaw_joint_override=None)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4568
HIKDefinitionUI.remove_face_module_setup
def HIKDefinitionUI.remove_face_module_setup(self, module)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4755
HIKDefinitionUI.load_settings_from_selection
def HIKDefinitionUI.load_settings_from_selection(self)class method · public name · maya_tools/Rigging/mocap/hik_ui.py:4805
HIKDefinitionUI._create_joint_slots_group
def HIKDefinitionUI._create_joint_slots_group(self, title, slots, module_id)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4920
HIKDefinitionUI._assign_joint_to_slot
def HIKDefinitionUI._assign_joint_to_slot(self, slot_key, line_edit)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4943
HIKDefinitionUI._update_edit_view_slot_ui
def HIKDefinitionUI._update_edit_view_slot_ui(self, slot_key, joint_name)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4963
HIKDefinitionUI._create_space_switch_edit_row
def HIKDefinitionUI._create_space_switch_edit_row(self, ctrl_name, default_targets, module_id)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4968
HIKDefinitionUI._save_custom_space_switches
def HIKDefinitionUI._save_custom_space_switches(self, module_id, ctrl_name, targets)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:4998
HIKDefinitionUI._create_face_list_block
def HIKDefinitionUI._create_face_list_block(self, label, key_path)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5005
HIKDefinitionUI._make_module_detail_widget
def HIKDefinitionUI._make_module_detail_widget(self, module_id, status_lbl)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5056
Create a collapsible detail widget for a module grid row.
HIKDefinitionUI._refresh_module_detail_widget
def HIKDefinitionUI._refresh_module_detail_widget(self, module_id)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5373
Query live scene state and update the detail widget for one module.
HIKDefinitionUI._module_exists
def HIKDefinitionUI._module_exists(self, module_id, was_built, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5397
HIKDefinitionUI._set_module_view_state
def HIKDefinitionUI._set_module_view_state(self, module_widgets, module_exists)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5407
HIKDefinitionUI._refresh_module_edit_fields
def HIKDefinitionUI._refresh_module_edit_fields(self, module_id, module_widgets, metadata)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5411
HIKDefinitionUI._refresh_create_remove_buttons
def HIKDefinitionUI._refresh_create_remove_buttons(self, module_id, module_exists)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5448
HIKDefinitionUI._refresh_module_status_label
def HIKDefinitionUI._refresh_module_status_label(self, status_label, was_built, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5482
HIKDefinitionUI._refresh_parent_button
def HIKDefinitionUI._refresh_parent_button(self, parent_button, was_built, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5493
HIKDefinitionUI._refresh_jaw_buttons
def HIKDefinitionUI._refresh_jaw_buttons(self, module_id, module_widgets, metadata, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5524
HIKDefinitionUI._refresh_mapped_joints_label
def HIKDefinitionUI._refresh_mapped_joints_label(self, module_id, module_widgets, metadata)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5544
HIKDefinitionUI._refresh_spaces_and_connections
def HIKDefinitionUI._refresh_spaces_and_connections(self, module_id, module_widgets, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5569
HIKDefinitionUI._get_module_space_controls
def HIKDefinitionUI._get_module_space_controls(self, module_id, main_control)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5604
HIKDefinitionUI._space_control_label
def HIKDefinitionUI._space_control_label(self, ctrl_name)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5631
HIKDefinitionUI._add_spaces_section
def HIKDefinitionUI._add_spaces_section(self, layout, control_label, space_targets, add_separator=False)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5641
HIKDefinitionUI._add_driven_by_section
def HIKDefinitionUI._add_driven_by_section(self, layout, driven_by_nodes, add_separator=False)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5681
HIKDefinitionUI._set_scene_node_button
def HIKDefinitionUI._set_scene_node_button(self, button, node_name, missing_text='—', valid_color='#6699cc')class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5714
HIKDefinitionUI._safe_reconnect_button
def HIKDefinitionUI._safe_reconnect_button(self, button, callback)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5737
HIKDefinitionUI._short_node_list
def HIKDefinitionUI._short_node_list(self, node_names)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5747
HIKDefinitionUI._refresh_all_module_details
def HIKDefinitionUI._refresh_all_module_details(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5750
Refresh the detail widget for every registered module.
HIKDefinitionUI._refresh_additional_systems
def HIKDefinitionUI._refresh_additional_systems(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5760
Render registered and external additions below the body modules.
HIKDefinitionUI._set_additional_system_active
def HIKDefinitionUI._set_additional_system_active(self, system_id, managed, active)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5931
Add/remove an extra system, preserving its recipe or live graph.
HIKDefinitionUI._get_registered_module_ids
def HIKDefinitionUI._get_registered_module_ids(self)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5954
HIKDefinitionUI._populate_fields_from_metadata
def HIKDefinitionUI._populate_fields_from_metadata(self, module_id, metadata)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:5961
HIKDefinitionUI._get_first_existing_ctrl
def HIKDefinitionUI._get_first_existing_ctrl(self, module_id, meta=None)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6066
Return the first scene-existing control for a module (candidates + metadata fallback).
HIKDefinitionUI._select_module_root
def HIKDefinitionUI._select_module_root(self, module_name)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6089
Select the first existing control for a module.
HIKDefinitionUI._get_ctrl_scene_parent
def HIKDefinitionUI._get_ctrl_scene_parent(self, ctrl)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6097
Traverse up the DAG hierarchy to find the first ancestor ending with '_ctrl'.
HIKDefinitionUI._get_space_targets
def HIKDefinitionUI._get_space_targets(self, ctrl)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6111
Return the list of (display_name, actual_node_name) space switch option names for *ctrl*, if any.
HIKDefinitionUI._get_incoming_connections
def HIKDefinitionUI._get_incoming_connections(self, ctrl)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6182
Return external nodes driving *ctrl* via connections or constraints (excluding its own pad/sdk chain).
HIKDefinitionUI._clear_widget_layout
def HIKDefinitionUI._clear_widget_layout(self, layout)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6236
Remove and delete all widgets from a QLayout.
HIKDefinitionUI._select_node
def HIKDefinitionUI._select_node(self, node)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6246
Select *node* in the Maya scene if it exists.
HIKDefinitionUI._on_tab_changed
def HIKDefinitionUI._on_tab_changed(self, index)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6251
Handle lightweight tab activation without rescanning the scene. Module status already refreshes after build/remove operations and via the explicit Refresh Module Details button. A tab click must remain a pure UI operation; live extension di
HIKDefinitionUI._load_module_metadata_from_scene
def HIKDefinitionUI._load_module_metadata_from_scene(self, report_missing=True, refresh_details=True)class method · internal · maya_tools/Rigging/mocap/hik_ui.py:6261
Read rig_module_store and refresh all detail widgets. When report_missing is False, stale saved-joint references are ignored silently. This is used during initial UI startup.
launch_hik_ui
def launch_hik_ui(parent=None, *, graph=None, selection_provider=None, undo_callback=None, refresh_callback=None)module function · public name · maya_tools/Rigging/mocap/hik_ui.py:6346
maya_tools.Rigging.mocap.referenced_animation_scene
_leaf
def _leaf(node: str) -> strmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:17
_bare
def _bare(node: str) -> strmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:21
_import_fbx
def _import_fbx(path: Path, namespace: str) -> list[str]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:25
reference_rig
def reference_rig(rig_scene: str | Path, namespace: str) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/referenced_animation_scene.py:42
_source_joint_map
def _source_joint_map(namespace: str) -> dict[str, str]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:70
_driven_joint
def _driven_joint(control: str) -> str | Nonemodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:91
_driven_parent_constraint_offset
def _driven_parent_constraint_offset(control: str, driven: str) -> dict[str, Any]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:117
_referenced_rig_transforms
def _referenced_rig_transforms(rig_namespace: str) -> list[str]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:150
_referenced_rig_joint_map
def _referenced_rig_joint_map(rig_namespace: str) -> dict[str, str]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:159
_is_animator_control
def _is_animator_control(node: str) -> boolmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:171
Accept named controls or explicitly marked controls, never internal IK nodes.
_world_pose
def _world_pose(node: str, frame: float) -> dict[str, list[float]]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:176
_vector_error
def _vector_error(left: list[float], right: list[float]) -> floatmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:184
_angular_error
def _angular_error(left: list[float], right: list[float]) -> floatmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:188
_world_quaternion
def _world_quaternion(node: str) -> OpenMaya.MQuaternionmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:193
_quaternion_error
def _quaternion_error(left_rotation: OpenMaya.MQuaternion, right_rotation: OpenMaya.MQuaternion) -> floatmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:198
_world_rotation_error
def _world_rotation_error(left_node: str, right_node: str) -> floatmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:211
_world_rotation_offset
def _world_rotation_offset(source_node: str, target_node: str) -> OpenMaya.MQuaternionmodule function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:215
discover_create_rig_bindings
def discover_create_rig_bindings(rig_namespace: str, solved_namespace: str, allowed_bones: set[str] | None=None) -> list[dict[str, str]]module function · public name · maya_tools/Rigging/mocap/referenced_animation_scene.py:219
Discover controls by their joint-driving graph, including non-``_ctrl`` rigs.
_preflight_bake_controls
def _preflight_bake_controls(controls: list[str]) -> dict[str, Any]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:261
_select_fk_and_spine_targets
def _select_fk_and_spine_targets(rig_namespace: str) -> dict[str, Any]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:304
Put known rig variants in a single-target pose-solve mode. Current create-rig limbs use ``ikFkBlend=0`` for FK. The older Juice rig connects ``IkFk`` directly to FK weights and therefore needs 1 instead. Its deform spine also blends an IK j
_solve_offset_delta
def _solve_offset_delta(columns: list[list[float]], delta: list[float]) -> list[float]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:348
Invert the measured world-position response to three offset channels.
_calibrate_single_ribbon_spines
def _calibrate_single_ribbon_spines(bindings: list[dict[str, str]], rig_joints: dict[str, str], start: float, end: float) -> list[dict[str, Any]]module function · internal · maya_tools/Rigging/mocap/referenced_animation_scene.py:367
Correct a static ribbon rest offset without changing animator keys. Legacy rigs may drive a mapped deform spine joint from one ribbon target whose authored rest position differs from the characterized FBX. Measure the constraint's own offse
bake_solved_skeleton_to_create_rig_controls
def bake_solved_skeleton_to_create_rig_controls(rig_namespace: str, solved_namespace: str, *, mapping_profile: str | Path, start_frame: float | None=None, end_frame: float | None=None, sample_subdivisions: int=4) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/referenced_animation_scene.py:446
build_referenced_animation_scene
def build_referenced_animation_scene(*, rig_scene: str | Path, solved_animation_fbx: str | Path, output_scene: str | Path, rig_namespace: str='CharacterRig', solved_namespace: str='RetargetSolved', rig_adapter: str='create_rig', mapping_profile: str | Path | None=None, start_frame: float | None=None, end_frame: float | None=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/referenced_animation_scene.py:718
publish_referenced_animation_source
def publish_referenced_animation_source(*, work_scene: str | Path, published_rig_scene: str | Path, output_scene: str | Path) -> dict[str, Any]module function · public name · maya_tools/Rigging/mocap/referenced_animation_scene.py:772
Publish a portable review scene and prove its rig reference and keys survive reload.
maya_tools.Rigging.mocap.setup_hik
get_descendant_joints
def get_descendant_joints(root_joint)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:198
Returns all descendant joints of root_joint (including root).
find_face_joints
def find_face_joints(pattern, face_joints)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:205
Return joints in the scene matching the pattern that are descendants of the face root.
_exists
def _exists(j)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:211
get_world_position
def get_world_position(obj)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:215
Gets the world position :param obj: name of object :return:
align_clavicle_Y_by_rotateY
def align_clavicle_Y_by_rotateY(clavicle_joint, sample_range=30.0, step=0.1)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:225
Level the first clavicle child by changing only rotateY.
_best_oriented_rotation_axis
def _best_oriented_rotation_axis(joint, world_direction=(0.0, 0.0, 1.0), candidates=('X', 'Y', 'Z'))module function · internal · maya_tools/Rigging/mocap/setup_hik.py:247
Return the local rotate axis most parallel to a world-space direction.
align_clavicle_to_upperarm_height
def align_clavicle_to_upperarm_height(clavicle_joint, upperarm_joint, sample_range=30.0, step=0.1)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:269
Level clavicle local X in front view with a pure world-Z rotation. The studio clavicle frame uses local Y for its authored forward/back roll and local Z close to world vertical. Rotating whichever local axis merely happens to be closest to
_aim_frame_preserving_roll
def _aim_frame_preserving_roll(world_matrix, target_x)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:361
Aim a world frame's X axis by shortest arc without changing its roll.
_canonical_t_pose_arm_frame
def _canonical_t_pose_arm_frame(target_x, side)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:380
Return a mirrored T-pose frame with local Z as the elbow hinge axis.
aim_joint_x_axis_to_world_x
def aim_joint_x_axis_to_world_x(joint_name, side=None)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:404
Aim local +X at world +X and normalize mirrored arm roll for T-pose.
_set_oriented_elbow_prebend
def _set_oriented_elbow_prebend(elbow, hand, degrees=3.0)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:505
Aim the forearm in depth while retaining its placed roll frame.
_toe_tip_from_chain
def _toe_tip_from_chain(toe, side)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:550
_rotation_value
def _rotation_value(joint, axis)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:568
_set_rotation_value
def _set_rotation_value(joint, axis, value)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:572
Set one rotate channel without touching translate or jointOrient.
_nearest_right_angle
def _nearest_right_angle(value)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:581
Return the closest 90-degree Euler value with a clean zero.
_sample_rotation_axis
def _sample_rotation_axis(joint, axis, objective, sample_range=90.0, absolute_min=None, absolute_max=None)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:587
Minimize an objective on one rotate channel with bounded evaluations. The previous four dense sweeps evaluated Maya's dependency graph about 330 times per axis. A coarse global pass followed by golden-section refinement preserves the same d
_front_leg_line_error
def _front_leg_line_error(thigh, knee, ankle)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:660
Normalized front-view error for thigh, knee, and ankle collinearity.
_front_vertical_segment_error
def _front_vertical_segment_error(start_joint, end_joint)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:676
World-X difference for a segment that must be vertical in front view.
_flat_segment_error
def _flat_segment_error(start_joint, end_joint)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:681
World-height difference for a segment that should rest flat.
_flatten_segment_with_rotation
def _flatten_segment_with_rotation(start_joint, end_joint, sample_range=120.0, hinge_axis='Z')module function · internal · maya_tools/Rigging/mocap/setup_hik.py:686
Flatten a foot segment using only its authored hinge channel. Searching every Euler channel can find a numerically flat result by rolling the foot or twisting the toe sideways. Studio leg placement authors Z as the knee/ankle/toe pitch hing
_skin_mesh_for_joints
def _skin_mesh_for_joints(joints)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:708
Return the largest skinned mesh influenced by the supplied joints.
_foot_mesh_contact_regions
def _foot_mesh_contact_regions(mesh, ankle, tip, sample_count=12)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:734
Find longitudinal landmarks and a mesh-relative lower-envelope grid.
_mesh_contact_height
def _mesh_contact_height(components)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:833
Return a trimmed-mean height for a fixed low mesh contact patch.
_mesh_contact_heights
def _mesh_contact_heights(regions)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:844
Evaluate every fixed contact patch from one deformed mesh point read.
_align_foot_front_projection_with_rotation
def _align_foot_front_projection_with_rotation(ankle, toe, tip, ankle_y_limits=None)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:878
Put the whole foot on one front-view line without twisting the toe.
_foot_pose_metrics
def _foot_pose_metrics(regions, ankle, toe, tip)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:909
Measure anatomical foot placement without relying on rotate values.
_foot_pose_is_grounded
def _foot_pose_is_grounded(metrics)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:957
Return whether an existing anatomical pose is already a valid T-pose.
_flatten_foot_mesh_with_rotation
def _flatten_foot_mesh_with_rotation(ankle, toe, tip)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:973
Align the front projection and level sole contacts using rotations only.
_mirror_right_foot_pose_from_left
def _mirror_right_foot_pose_from_left(leg_chains, side_reports)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1131
Use the solved left foot pose on a geometrically symmetric right foot. Studio template joints use mirrored joint orientation, so equal ankle and toe rotate channels produce reflected world-space endpoints. Independently optimizing both side
_ground_flattened_feet_with_pelvis
def _ground_flattened_feet_with_pelvis(pelvis, side_reports)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1225
Report foot contact heights without moving the pelvis. Footwear may extend below or outside the skinned body mesh, so sampled body-mesh contacts are not a reliable ground-plane reference. Keep the authored pelvis height and leave ground pla
_prepare_legs_for_t_pose
def _prepare_legs_for_t_pose(leg_chains, pelvis=None)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1278
Flatten each leg in front view using only the thigh rotate channel. Rotating the complete fitted chain at the thigh preserves its authored segment lengths, depth prebend, foot pose, and jointOrient values. After flattening, translate the pe
_t_pose_snapshot_joints
def _t_pose_snapshot_joints(joint_map, fallback_joints=())module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1387
Return the unique mapped joints whose world pose defines the T-pose.
_capture_t_pose_world_matrices
def _capture_t_pose_world_matrices(joints)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1419
Capture stable world matrices for idempotence detection.
_capture_t_pose_authored_channels
def _capture_t_pose_authored_channels(joints)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1428
Capture placement-owned channels that T-pose is forbidden to rewrite.
_validate_t_pose_authored_channels
def _validate_t_pose_authored_channels(before, pelvis=None)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1443
Reject any T-pose edit to placement-owned orientation or offsets.
_read_t_pose_snapshot
def _read_t_pose_snapshot(holder)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1477
_matches_t_pose_snapshot
def _matches_t_pose_snapshot(holder, joints)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1496
_store_t_pose_snapshot
def _store_t_pose_snapshot(holder, joints)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1511
_t_pose_rotation_blockers
def _t_pose_rotation_blockers(joint_channels)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1531
Return locked or driven rotate plugs that T-pose cannot author safely.
_require_editable_t_pose_channels
def _require_editable_t_pose_channels(joint_channels)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1562
Fail before posing when a built rig already owns required channels.
validate_t_pose_channels
def validate_t_pose_channels(joint_map)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:1582
Validate mapped channels before the UI opens its pose undo transaction.
set_t_pose
def set_t_pose(l_upperarm=None, r_upperarm=None, l_clav=None, r_clav=None, l_elbow=None, r_elbow=None, l_hand=None, r_hand=None, joint_map=None, pelvis=None, snap_rfl=True, shoe_meshes=None)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:1615
T-pose the arms and legs before snapping reverse-foot helpers. Arm and thigh rotate channels are changed on the deformation skeleton. The pelvis translation and all jointOrient values remain untouched. Arms extend along world X while each f
_joint_map_entry
def _joint_map_entry(value)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1821
Return the joint name and HIK index from either supported map format.
_is_joint_descendant
def _is_joint_descendant(joint, ancestor)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1830
Return True when *joint* is below *ancestor* in the Maya joint hierarchy.
_validate_hik_mapping
def _validate_hik_mapping(joint_map)module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1839
Validate mapped nodes and complete arm chains before modifying the scene.
_hik_definition_ui_exists
def _hik_definition_ui_exists()module function · internal · maya_tools/Rigging/mocap/setup_hik.py:1882
The definition update MEL is unsafe unless its contextual tab was built.
setup_hik_character
def setup_hik_character(character_name, joint_map, fbx_export_path, namespace)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:1893
Setup a HIK character definition and export to FBX for MotionBuilder. :param character_name: Name of the HIK character to create. :param joint_map: Mapping of HIK slots to joint names. :param fbx_export_path: Full path to export the FBX fil
populate_default_face_map_from_scene
def populate_default_face_map_from_scene(base_face_map=None)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:2021
Fill face map with default scene joints under HIK head reference.
guess_joint_map_from_root
def guess_joint_map_from_root(root_joint, base_joint_map=None)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:2105
Guesses HIK joint slots from a root joint based on name matching. :param root_joint: The root joint of the skeleton. :param base_joint_map: Optional dict to write results into (e.g. self.default_map). If None, a deep copy of setup_hik.DEFAU
create_rig_mapping
def create_rig_mapping(root_joint=None)module function · public name · maya_tools/Rigging/mocap/setup_hik.py:2338
Standalone HIK mapping function. Auto-detects the skeleton root if none is provided, then runs guess_joint_map_from_root and populate_default_face_map_from_scene. Returns a tuple of (body_joint_map, face_joint_map) suitable for passing to c
maya_tools.Rigging.rig_template
_short_name
def _short_name(node: str) -> strmodule function · internal · maya_tools/Rigging/rig_template.py:19
_is_rfl_joint
def _is_rfl_joint(node: str) -> boolmodule function · internal · maya_tools/Rigging/rig_template.py:23
_top_level_anim_bot_containers
def _top_level_anim_bot_containers()module function · internal · maya_tools/Rigging/rig_template.py:27
_remove_duplicate_anim_bot_containers
def _remove_duplicate_anim_bot_containers()module function · internal · maya_tools/Rigging/rig_template.py:42
_top_level_display_point_helpers
def _top_level_display_point_helpers()module function · internal · maya_tools/Rigging/rig_template.py:59
_remove_duplicate_display_point_helpers
def _remove_duplicate_display_point_helpers()module function · internal · maya_tools/Rigging/rig_template.py:73
Keep one disconnected template displayPoints helper across imports.
_template_display_layer_role
def _template_display_layer_role(node: str) -> strmodule function · internal · maya_tools/Rigging/rig_template.py:101
Return the template role for Maya's collision-renamed display layers.
_make_display_layer_editable
def _make_display_layer_editable(layer: str) -> Nonemodule function · internal · maya_tools/Rigging/rig_template.py:112
Leave placement layers visible and selectable after template import.
_consolidate_template_display_layers
def _consolidate_template_display_layers()module function · internal · maya_tools/Rigging/rig_template.py:130
Merge repeated template-import layers into one geo/joints layer pair. Maya does not merge display layers during scene import. When _geo and _joints already exist, it creates rig_template__geo, then rig_template__geo1 and so on. Move every m
load_biped_rig_template
def load_biped_rig_template(template_path: str=DEFAULT_BIPED_RIG_TEMPLATE, namespace: str='', reference: bool=False, merge_namespaces_on_clash: bool=False) -> dictmodule function · public name · maya_tools/Rigging/rig_template.py:168
Import or reference the biped rig template and report skeleton/RFL joints.
load_default_biped_rig_template
def load_default_biped_rig_template(reference: bool=False, namespace: str='') -> dictmodule function · public name · maya_tools/Rigging/rig_template.py:264
_vehicle_role
def _vehicle_role(node: str) -> strmodule function · internal · maya_tools/Rigging/rig_template.py:272
load_vehicle_rig_template
def load_vehicle_rig_template(template_path: str=DEFAULT_VEHICLE_RIG_TEMPLATE, namespace: str='', reference: bool=False, merge_namespaces_on_clash: bool=False) -> dictmodule function · public name · maya_tools/Rigging/rig_template.py:282
Import the joint-only vehicle template and report its portable roles. SI-unit configuration is stored as attributes on the joints. Controls, geometry, constraints, and ground-query nodes are created later by the host vehicle-rig builder.
load_default_vehicle_rig_template
def load_default_vehicle_rig_template(reference: bool=False, namespace: str='') -> dictmodule function · public name · maya_tools/Rigging/rig_template.py:359
maya_tools.Rigging.rigging_host_adapter
reload_dependencies
def reload_dependencies() -> strmodule function · public name · maya_tools/Rigging/rigging_host_adapter.py:30
Refresh the complete Maya rig stack for bridge-driven operations.
_result
def _result(ok: bool, capability: str, message: str='', **kwargs: Any) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:80
scene_joints
def scene_joints() -> dict[str, Any]module function · public name · maya_tools/Rigging/rigging_host_adapter.py:84
selection
def selection() -> dict[str, Any]module function · public name · maya_tools/Rigging/rigging_host_adapter.py:101
execute
def execute(capability: str, payload: dict[str, Any]) -> dict[str, Any]module function · public name · maya_tools/Rigging/rigging_host_adapter.py:105
_definition
def _definition(value: Any) -> CharacterDefinitionmodule function · internal · maya_tools/Rigging/rigging_host_adapter.py:118
_maya_maps
def _maya_maps(definition: CharacterDefinition) -> tuple[dict[str, Any], dict[str, Any]]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:128
_op_definition_auto_map
def _op_definition_auto_map(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:142
_op_definition_assign_slot
def _op_definition_assign_slot(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:154
_op_definition_clear_slot
def _op_definition_clear_slot(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:163
_op_definition_mirror_slots
def _op_definition_mirror_slots(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:169
_op_definition_validate
def _op_definition_validate(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:174
_op_definition_set_reference_pose
def _op_definition_set_reference_pose(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:181
_op_definition_import
def _op_definition_import(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:191
_op_definition_export
def _op_definition_export(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:196
_op_rig_place_joints
def _op_rig_place_joints(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:205
_op_rig_set_t_pose
def _op_rig_set_t_pose(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:289
_op_rig_build_full
def _op_rig_build_full(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:299
_op_rig_build_module
def _op_rig_build_module(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:321
_op_rig_remove_module
def _op_rig_remove_module(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:352
_op_rig_rebuild_module
def _op_rig_rebuild_module(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:372
_op_rig_create_control
def _op_rig_create_control(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:379
_op_rig_create_constraint
def _op_rig_create_constraint(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:390
_op_rig_create_ik_fk_limb
def _op_rig_create_ik_fk_limb(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:407
_op_rig_create_space_switch
def _op_rig_create_space_switch(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:412
_op_rig_create_ribbon
def _op_rig_create_ribbon(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:421
_op_skin_surface_spatial_smooth_brush
def _op_skin_surface_spatial_smooth_brush(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:434
_op_rig_create_twist
def _op_rig_create_twist(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:449
_op_rig_create_motion_path
def _op_rig_create_motion_path(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:469
_op_rig_create_curve_joints
def _op_rig_create_curve_joints(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:474
_op_rig_create_reverse_foot
def _op_rig_create_reverse_foot(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:490
_op_rig_store_connections
def _op_rig_store_connections(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:495
_op_rig_restore_connections
def _op_rig_restore_connections(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:501
_op_rig_create_face_module
def _op_rig_create_face_module(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:506
_op_retarget_solve_pose
def _op_retarget_solve_pose(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:510
_op_retarget_bake
def _op_retarget_bake(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:525
_op_retarget_transfer_take
def _op_retarget_transfer_take(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:533
_op_rig_set_ik_fk_blend
def _op_rig_set_ik_fk_blend(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:537
_op_rig_set_space
def _op_rig_set_space(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:545
_op_rig_create_mesh_attachment
def _op_rig_create_mesh_attachment(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:553
_op_rig_create_pose_reader
def _op_rig_create_pose_reader(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:558
_op_rig_edit_control_shape
def _op_rig_edit_control_shape(payload: dict[str, Any]) -> dict[str, Any]module function · internal · maya_tools/Rigging/rigging_host_adapter.py:563
maya_tools.Rigging.skinning_utils
_SurfaceSmoothBrushOverlay.__init__
def _SurfaceSmoothBrushOverlay.__init__(self, parent=None)class method · internal · maya_tools/Rigging/skinning_utils.py:47
_SurfaceSmoothBrushOverlay.set_circle
def _SurfaceSmoothBrushOverlay.set_circle(self, center, radius)class method · internal · maya_tools/Rigging/skinning_utils.py:56
_SurfaceSmoothBrushOverlay.clear_circle
def _SurfaceSmoothBrushOverlay.clear_circle(self)class method · internal · maya_tools/Rigging/skinning_utils.py:63
_SurfaceSmoothBrushOverlay.paintEvent
def _SurfaceSmoothBrushOverlay.paintEvent(self, _event)class method · internal · maya_tools/Rigging/skinning_utils.py:67
transfer_skin_weights_from_selection
def transfer_skin_weights_from_selection(remove_unused_influences=True)module function · public name · maya_tools/Rigging/skinning_utils.py:80
Transfer skin weights from selected source meshes to the last selected mesh.
transfer_skin_weights
def transfer_skin_weights(source_meshes, target_mesh)module function · public name · maya_tools/Rigging/skinning_utils.py:96
Transfer skin weights from source meshes to a target mesh. Args: source_meshes (list[str]) target_mesh (str) Returns: dict | bool
_has_skin_cluster
def _has_skin_cluster(mesh)module function · internal · maya_tools/Rigging/skinning_utils.py:143
_find_skin_cluster
def _find_skin_cluster(mesh)module function · internal · maya_tools/Rigging/skinning_utils.py:147
_mesh_shape
def _mesh_shape(mesh)module function · internal · maya_tools/Rigging/skinning_utils.py:158
Resolve a polygon transform or shape to its visible mesh shape.
_selected_mesh_and_vertices
def _selected_mesh_and_vertices()module function · internal · maya_tools/Rigging/skinning_utils.py:172
Return one selected mesh and optional explicitly selected vertices.
_vertex_surface_area_weights
def _vertex_surface_area_weights(mesh_path)module function · internal · maya_tools/Rigging/skinning_utils.py:200
Return per-vertex world-space area weights for irregular meshes. Plain vertex averaging heavily favors densely tessellated patches. That can make a spatial brush appear to do nothing when the nearby surface on the other side of a bad topolo
_pre_skin_surface_points
def _pre_skin_surface_points(transform, visible_shape, vertex_count)module function · internal · maya_tools/Rigging/skinning_utils.py:224
Return the undeformed sibling mesh points when Maya exposes a shapeOrig.
smooth_skin_weights_spatial_from_selection
def smooth_skin_weights_spatial_from_selection(radius=1.0, iterations=4, strength=0.5, max_influences=4, normal_angle=75.0, max_neighbors=48, cross_region_share=0.1, entire_mesh=False, automatic_radius=False, artifact_only=False)module function · public name · maya_tools/Rigging/skinning_utils.py:243
Smooth the selected skin using surface position instead of edge topology. The automatic batch path intentionally ignores a component subset. It is the one-click alternative to painting and should repair the full selected skinned surface, in
smooth_skin_weights_spatial
def smooth_skin_weights_spatial(mesh, vertex_indices=None, radius=1.0, iterations=4, strength=0.5, max_influences=4, normal_angle=75.0, max_neighbors=48, sample_weights=None, adaptive_radius=False, cross_region_share=0.45, automatic_radius=False, topology_share=0.0, artifact_only=False, outlier_threshold=0.06)module function · public name · maya_tools/Rigging/skinning_utils.py:271
Diffuse weights through world-space neighborhoods, ignoring mesh edges. The normal-angle gate reduces bleeding between nearby opposing surfaces. Locked influences retain their exact input weights.
SurfaceSpatialSmoothBrush.__init__
def SurfaceSpatialSmoothBrush.__init__(self, mesh, radius, strength, iterations, max_influences, normal_angle, max_neighbors, cross_region_share)class method · internal · maya_tools/Rigging/skinning_utils.py:777
SurfaceSpatialSmoothBrush._create_outline
def SurfaceSpatialSmoothBrush._create_outline(self)class method · internal · maya_tools/Rigging/skinning_utils.py:810
SurfaceSpatialSmoothBrush.hide_outline
def SurfaceSpatialSmoothBrush.hide_outline(self)class method · public name · maya_tools/Rigging/skinning_utils.py:832
SurfaceSpatialSmoothBrush.delete_outline
def SurfaceSpatialSmoothBrush.delete_outline(self)class method · public name · maya_tools/Rigging/skinning_utils.py:838
SurfaceSpatialSmoothBrush._world_to_view
def SurfaceSpatialSmoothBrush._world_to_view(view, point)class method · internal · maya_tools/Rigging/skinning_utils.py:848
SurfaceSpatialSmoothBrush._ensure_overlay
def SurfaceSpatialSmoothBrush._ensure_overlay(self, panel, widget)class method · internal · maya_tools/Rigging/skinning_utils.py:865
SurfaceSpatialSmoothBrush._update_overlay
def SurfaceSpatialSmoothBrush._update_overlay(self, hit_data, view, panel, widget)class method · internal · maya_tools/Rigging/skinning_utils.py:875
SurfaceSpatialSmoothBrush._update_outline
def SurfaceSpatialSmoothBrush._update_outline(self, hit_data)class method · internal · maya_tools/Rigging/skinning_utils.py:896
SurfaceSpatialSmoothBrush._rebuild_buckets
def SurfaceSpatialSmoothBrush._rebuild_buckets(self)class method · internal · maya_tools/Rigging/skinning_utils.py:921
SurfaceSpatialSmoothBrush._cell
def SurfaceSpatialSmoothBrush._cell(self, point)class method · internal · maya_tools/Rigging/skinning_utils.py:928
SurfaceSpatialSmoothBrush._hit_from_screen
def SurfaceSpatialSmoothBrush._hit_from_screen(self, screen_point, view=None)class method · internal · maya_tools/Rigging/skinning_utils.py:935
SurfaceSpatialSmoothBrush._collect_at_hit
def SurfaceSpatialSmoothBrush._collect_at_hit(self, hit_data)class method · internal · maya_tools/Rigging/skinning_utils.py:958
SurfaceSpatialSmoothBrush.press
def SurfaceSpatialSmoothBrush.press(self)class method · public name · maya_tools/Rigging/skinning_utils.py:974
SurfaceSpatialSmoothBrush.drag
def SurfaceSpatialSmoothBrush.drag(self)class method · public name · maya_tools/Rigging/skinning_utils.py:983
SurfaceSpatialSmoothBrush._component_and_weights
def SurfaceSpatialSmoothBrush._component_and_weights(self, indices)class method · internal · maya_tools/Rigging/skinning_utils.py:1002
SurfaceSpatialSmoothBrush.release
def SurfaceSpatialSmoothBrush.release(self)class method · public name · maya_tools/Rigging/skinning_utils.py:1012
SurfaceSpatialSmoothBrush.hover_from_cursor
def SurfaceSpatialSmoothBrush.hover_from_cursor(self, force=False)class method · public name · maya_tools/Rigging/skinning_utils.py:1079
SurfaceSpatialSmoothBrush.begin_viewport_stroke
def SurfaceSpatialSmoothBrush.begin_viewport_stroke(self)class method · public name · maya_tools/Rigging/skinning_utils.py:1102
SurfaceSpatialSmoothBrush.continue_viewport_stroke
def SurfaceSpatialSmoothBrush.continue_viewport_stroke(self)class method · public name · maya_tools/Rigging/skinning_utils.py:1112
SurfaceSpatialSmoothBrush.finish_viewport_stroke
def SurfaceSpatialSmoothBrush.finish_viewport_stroke(self)class method · public name · maya_tools/Rigging/skinning_utils.py:1120
SurfaceSpatialSmoothBrush.resize_from_pixels
def SurfaceSpatialSmoothBrush.resize_from_pixels(self, pixel_delta)class method · public name · maya_tools/Rigging/skinning_utils.py:1127
_SurfaceSmoothBrushKeyFilter.eventFilter
def _SurfaceSmoothBrushKeyFilter.eventFilter(self, watched, event)class method · internal · maya_tools/Rigging/skinning_utils.py:1141
_surface_smooth_brush_press
def _surface_smooth_brush_press()module function · internal · maya_tools/Rigging/skinning_utils.py:1186
_surface_smooth_brush_drag
def _surface_smooth_brush_drag()module function · internal · maya_tools/Rigging/skinning_utils.py:1191
_surface_smooth_brush_release
def _surface_smooth_brush_release()module function · internal · maya_tools/Rigging/skinning_utils.py:1196
_surface_smooth_brush_tool_changed
def _surface_smooth_brush_tool_changed()module function · internal · maya_tools/Rigging/skinning_utils.py:1201
_cleanup_surface_spatial_smooth_brush
def _cleanup_surface_spatial_smooth_brush()module function · internal · maya_tools/Rigging/skinning_utils.py:1213
activate_surface_spatial_smooth_brush
def activate_surface_spatial_smooth_brush(radius=1.0, iterations=1, strength=0.35, max_influences=8, normal_angle=120.0, max_neighbors=96, cross_region_share=0.45)module function · public name · maya_tools/Rigging/skinning_utils.py:1228
Activate the topology-independent Maya skin smoothing brush.
deactivate_surface_spatial_smooth_brush
def deactivate_surface_spatial_smooth_brush()module function · public name · maya_tools/Rigging/skinning_utils.py:1271
Exit the spatial skin brush and return to Maya's selection context.
_collect_skin_data
def _collect_skin_data(meshes)module function · internal · maya_tools/Rigging/skinning_utils.py:1277
_create_target_skin
def _create_target_skin(target_mesh, skin_data)module function · internal · maya_tools/Rigging/skinning_utils.py:1309
_copy_weights
def _copy_weights(source_meshes, target_mesh)module function · internal · maya_tools/Rigging/skinning_utils.py:1338
_run_weight_hammer
def _run_weight_hammer(mesh)module function · internal · maya_tools/Rigging/skinning_utils.py:1348
_canonical_skin_meshes
def _canonical_skin_meshes(meshes)module function · internal · maya_tools/Rigging/skinning_utils.py:1367
Return unique long transform paths for mesh shapes or transforms.
export_skin_weights
def export_skin_weights(meshes, export_dir='C:/temp/weights')module function · public name · maya_tools/Rigging/skinning_utils.py:1389
Exports skin weights for a list of meshes to XML using deformerWeights. Saves influence order in individual JSON sidecar files. :param meshes: list of mesh names to export :param export_dir: target directory to save all files
_influence_leaf_name
def _influence_leaf_name(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1447
Return an influence name without its DAG path or Maya namespace.
_influence_node_name
def _influence_node_name(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1453
Return an influence leaf name while retaining its Maya namespace.
_influence_match_key
def _influence_match_key(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1458
Normalize harmless punctuation differences for influence-name matching.
_find_similar_scene_influences
def _find_similar_scene_influences(missing_influences, scene_influences, limit=3, cutoff=0.6, short_names=True)module function · internal · maya_tools/Rigging/skinning_utils.py:1463
Return likely scene-name matches without silently remapping influences.
_twist_influence_match_key
def _twist_influence_match_key(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1496
Canonicalize the two supported limb-twist ordinal conventions.
_resolve_scene_influences
def _resolve_scene_influences(saved_influences, scene_influences)module function · internal · maya_tools/Rigging/skinning_utils.py:1513
Resolve saved influences to scene joints without renaming any nodes. Matching is deliberately conservative. Full paths and namespaced leaf names win first, followed by unique namespace-free leaf names. The only fuzzy rule accepted is the st
_influence_requires_remap
def _influence_requires_remap(saved_influence, scene_influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1573
Return whether Maya's XML source name actually needs remapping.
_prepare_deformer_weights_xml
def _prepare_deformer_weights_xml(source_path, influence_mapping, target_deformer, target_shape)module function · internal · maya_tools/Rigging/skinning_utils.py:1581
Create a temporary XML copy addressed directly to the target skin.
_deformer_weights_vertex_count
def _deformer_weights_vertex_count(source_path)module function · internal · maya_tools/Rigging/skinning_utils.py:1626
Read the exported point count used by Maya's index mapping method.
_influence_alias_keys
def _influence_alias_keys(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1636
Return conservative keys for common exported-joint name variants.
_influence_side
def _influence_side(influence)module function · internal · maya_tools/Rigging/skinning_utils.py:1652
Return l/r for explicitly sided influences, otherwise None.
_propose_safe_influence_renames
def _propose_safe_influence_renames(missing_influences, scene_joints)module function · internal · maya_tools/Rigging/skinning_utils.py:1658
Propose unique formatting-only joint renames for user confirmation.
_rename_scene_influences
def _rename_scene_influences(rename_requests)module function · internal · maya_tools/Rigging/skinning_utils.py:1690
Atomically rename confirmed scene joints while retaining namespaces.
_format_missing_influence_failure
def _format_missing_influence_failure(mesh, missing_influences, suggestions)module function · internal · maya_tools/Rigging/skinning_utils.py:1731
import_skin_weights
def import_skin_weights(meshes, export_dir='C:/temp/weights', missing_influence_resolver=None)module function · public name · maya_tools/Rigging/skinning_utils.py:1756
Import skin weights without rebuilding an existing skinCluster. Existing influences and dagPose membership are preserved. Influences present in the saved data but missing from the cluster are added at zero weight before the weights are load
maya_tools.Rigging.temp_cleanup
_is_temp_bone
def _is_temp_bone(node)module function · internal · maya_tools/Rigging/temp_cleanup.py:14
delete_temp_bones
def delete_temp_bones(exclude=())module function · public name · maya_tools/Rigging/temp_cleanup.py:19
Delete newly created construction joints with a distinct ``temp`` token. Non-temporary children are first reparented beside the temporary joint so cleanup cannot accidentally remove a persistent skeleton branch. Referenced and explicitly ex
cleanup_temp_bones
def cleanup_temp_bones(function)module function · public name · maya_tools/Rigging/temp_cleanup.py:73
Clean up only temporary joints created by this operation. Existing scene joints are treated as user data, even when their names contain ``temp``. Sweeping the entire scene before a fit could otherwise delete authored helpers such as hair, e
maya_tools.Rigging.undo_utils
undo_chunk
def undo_chunk(name: str) -> Iterator[None]module function · public name · maya_tools/Rigging/undo_utils.py:17
Group nested rig edits into one Maya undo step.
undoable
def undoable(name: str) -> Callable[[_F], _F]module function · public name · maya_tools/Rigging/undo_utils.py:34
Decorate a public Maya operation with a nested-safe undo chunk.
maya_tools.Rigging.unreal_skeletal_export
_mesh_transforms
def _mesh_transforms(values: list[str] | tuple[str, ...] | None=None) -> list[str]module function · internal · maya_tools/Rigging/unreal_skeletal_export.py:17
list_skinned_meshes
def list_skinned_meshes() -> list[str]module function · public name · maya_tools/Rigging/unreal_skeletal_export.py:41
Return exportable, non-intermediate skinned mesh transforms in the scene.
_skin_clusters
def _skin_clusters(meshes: list[str]) -> list[str]module function · internal · maya_tools/Rigging/unreal_skeletal_export.py:57
_influences
def _influences(clusters: list[str]) -> list[str]module function · internal · maya_tools/Rigging/unreal_skeletal_export.py:68
_root_joints
def _root_joints(joints: list[str]) -> list[str]module function · internal · maya_tools/Rigging/unreal_skeletal_export.py:79
restore_skin_bind_pose
def restore_skin_bind_pose(meshes: list[str] | tuple[str, ...] | None=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/unreal_skeletal_export.py:94
export_skeletal_fbx
def export_skeletal_fbx(rig_name: str, output_directory: str, *, meshes: list[str] | tuple[str, ...] | None=None, skeletal_mesh_name: str='') -> dict[str, Any]module function · public name · maya_tools/Rigging/unreal_skeletal_export.py:118
remove_rig_restore_bind_pose_and_export
def remove_rig_restore_bind_pose_and_export(body_joint_map: dict[str, Any], face_joint_map: dict[str, Any] | None, rig_name: str, output_directory: str, *, meshes: list[str] | tuple[str, ...] | None=None, skeletal_mesh_name: str='') -> dict[str, Any]module function · public name · maya_tools/Rigging/unreal_skeletal_export.py:170
Remove generated controls, restore skin bind pose, and export Unreal FBX.
maya_tools.Rigging.validation_proxy
create_rigged_proxy
def create_rigged_proxy(name_prefix: str='AIStudio_Proxy', start_frame: int=1, end_frame: int=24, travel_distance: float=100.0) -> dict[str, Any]module function · public name · maya_tools/Rigging/validation_proxy.py:8
inspect_rigged_proxy
def inspect_rigged_proxy(name_prefix: str='AIStudio_Proxy', start_frame: int=1, end_frame: int=24) -> dict[str, Any]module function · public name · maya_tools/Rigging/validation_proxy.py:78
maya_tools.Rigging.vehicle_rig
_short_name
def _short_name(node: str) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:37
_nodes_with_attr_value
def _nodes_with_attr_value(attribute: str, value: str, *, node_type: str='') -> list[str]module function · internal · maya_tools/Rigging/vehicle_rig.py:41
find_template_roots
def find_template_roots() -> list[str]module function · public name · maya_tools/Rigging/vehicle_rig.py:56
find_rig_roots
def find_rig_roots() -> list[str]module function · public name · maya_tools/Rigging/vehicle_rig.py:60
_resolve_template_root
def _resolve_template_root(root_joint: Optional[str]=None) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:64
_role_nodes
def _role_nodes(root_joint: str) -> dict[str, list[str]]module function · internal · maya_tools/Rigging/vehicle_rig.py:79
_add_string
def _add_string(node: str, name: str, value: str) -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:92
_add_float
def _add_float(node: str, name: str, value: float, *, minimum: Optional[float]=None, maximum: Optional[float]=None, keyable: bool=True) -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:98
_add_bool
def _add_bool(node: str, name: str, value: bool, *, keyable: bool=True) -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:112
_set_color
def _set_color(control: str, color: int) -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:118
_curve
def _curve(name: str, points, color: int) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:124
_box_control
def _box_control(name: str, dimensions: tuple[float, float, float]) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:130
_world_position
def _world_position(node: str) -> tuple[float, float, float]module function · internal · maya_tools/Rigging/vehicle_rig.py:140
_scene_units_per_meter
def _scene_units_per_meter() -> floatmodule function · internal · maya_tools/Rigging/vehicle_rig.py:145
_json_attr
def _json_attr(node: str, name: str, default)module function · internal · maya_tools/Rigging/vehicle_rig.py:153
_find_rig_root
def _find_rig_root(node: Optional[str]=None) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:163
_unique_name
def _unique_name(base: str) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:178
build_vehicle_rig
def build_vehicle_rig(root_joint: Optional[str]=None, *, ground_meshes: Optional[Iterable[str]]=None, create_preview_geometry: bool=True) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:188
_mesh_shape
def _mesh_shape(node: str) -> strmodule function · internal · maya_tools/Rigging/vehicle_rig.py:380
attach_ground
def attach_ground(meshes: Iterable[str], *, rig_root: Optional[str]=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:390
attach_selected_ground
def attach_selected_ground(rig_root: Optional[str]=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:405
_mesh_intersection
def _mesh_intersection(mesh: str, origin: om.MFloatPoint, direction: om.MFloatVector, maximum: float)module function · internal · maya_tools/Rigging/vehicle_rig.py:410
_normalize
def _normalize(value: om.MVector, fallback: om.MVector) -> om.MVectormodule function · internal · maya_tools/Rigging/vehicle_rig.py:427
_orientation_matrix
def _orientation_matrix(position, up: om.MVector, forward_hint: om.MVector) -> list[float]module function · internal · maya_tools/Rigging/vehicle_rig.py:431
_steering_angles
def _steering_angles(rows: list[dict[str, Any]], steering_degrees: float, maximum_degrees: float, blend: float) -> dict[str, float]module function · internal · maya_tools/Rigging/vehicle_rig.py:445
_ensure_auto_steer_attributes
def _ensure_auto_steer_attributes(rig_root: str, chassis_control: str) -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:476
Upgrade previously saved vehicle rigs without resetting animator values.
_apply_bicycle_motion
def _apply_bicycle_motion(rig_root: str, global_control: str, rows: list[dict[str, Any]], steering_degrees: float) -> dict[str, float | bool]module function · internal · maya_tools/Rigging/vehicle_rig.py:525
Make forward/reverse translation follow the steered front axle. This is the kinematic bicycle model: curvature is tan(steer) / wheelbase. The signed travel distance makes reversing rotate the chassis in the opposite direction without any sp
_wheelbase
def _wheelbase(rows: list[dict[str, Any]]) -> floatmodule function · internal · maya_tools/Rigging/vehicle_rig.py:603
_automatic_steer_angle
def _automatic_steer_angle(rig_root: str, chassis_control: str, rows: list[dict[str, Any]], maximum_degrees: float) -> floatmodule function · internal · maya_tools/Rigging/vehicle_rig.py:619
Derive front-wheel steering from chassis yaw or animated path curvature.
_suspension_contact
def _suspension_contact(rig_root: str, mount: str, meshes: list[str], up: om.MVector, down: om.MVector, units: float) -> dict[str, Any]module function · internal · maya_tools/Rigging/vehicle_rig.py:683
Query one sprung wheel from maximum compression to maximum droop.
_average
def _average(values: list[float]) -> floatmodule function · internal · maya_tools/Rigging/vehicle_rig.py:762
_solve_chassis_ground_driver
def _solve_chassis_ground_driver(rig_root: str, chassis_control: str, global_control: str, rows: list[dict[str, Any]], meshes: list[str], units: float) -> dict[str, float | int | bool]module function · internal · maya_tools/Rigging/vehicle_rig.py:766
Fit the sprung chassis to wheel contacts without touching animator channels.
_wheel_roll
def _wheel_roll(rig_root: str, control: str, spin_driver: str, steer_driver: str, center: om.MVector, radius: float) -> floatmodule function · internal · maya_tools/Rigging/vehicle_rig.py:863
reset_wheel_roll
def reset_wheel_roll(rig_root: Optional[str]=None, *, preserve_rotation: bool=False) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:924
update_ground
def update_ground(rig_root: Optional[str]=None) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:960
_callback_attributes
def _callback_attributes(rig_root: str) -> list[str]module function · internal · maya_tools/Rigging/vehicle_rig.py:1079
remove_ground_callback
def remove_ground_callback(rig_root: Optional[str]=None) -> Nonemodule function · public name · maya_tools/Rigging/vehicle_rig.py:1129
Remove every live evaluator registered for one vehicle rig.
remove_all_ground_callbacks
def remove_all_ground_callbacks() -> Nonemodule function · public name · maya_tools/Rigging/vehicle_rig.py:1143
Remove live callbacks, including entries whose scene nodes were deleted.
_refresh_active_viewport
def _refresh_active_viewport() -> Nonemodule function · internal · maya_tools/Rigging/vehicle_rig.py:1160
Refresh at display cadence without stalling manipulator mouse events.
_live_refresh
def _live_refresh(rig_root: str, *, refresh_viewport: bool=True) -> boolmodule function · internal · maya_tools/Rigging/vehicle_rig.py:1173
update_registered_live_rigs
def update_registered_live_rigs(*, refresh_viewport: bool=True) -> intmodule function · public name · maya_tools/Rigging/vehicle_rig.py:1184
Evaluate registered rigs now; intended for a Qt viewport heartbeat.
install_ground_callback
def install_ground_callback(rig_root: Optional[str]=None) -> list[int]module function · public name · maya_tools/Rigging/vehicle_rig.py:1199
Install native DG/time callbacks for immediate drag and playback updates. ``scriptJob(attributeChange=...)`` can be coalesced until a Maya manipulator releases the mouse. MNodeMessage is delivered for every channel edit, while MEventMessage
install_ground_callbacks
def install_ground_callbacks() -> list[int]module function · public name · maya_tools/Rigging/vehicle_rig.py:1248
install_scene_callbacks
def install_scene_callbacks() -> list[int]module function · public name · maya_tools/Rigging/vehicle_rig.py:1256
Restore live vehicle evaluation whenever a scene is opened or imported.
bake_ground
def bake_ground(rig_root: Optional[str]=None, *, start: Optional[float]=None, end: Optional[float]=None, step: float=1.0) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:1277
save_vehicle_rig
def save_vehicle_rig(path: str=DEFAULT_RIG_PATH) -> strmodule function · public name · maya_tools/Rigging/vehicle_rig.py:1316
build_example_scene
def build_example_scene(path: str=DEFAULT_RIG_PATH) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:1326
build_demo_scene
def build_demo_scene(path: str=DEFAULT_DEMO_PATH) -> dict[str, Any]module function · public name · maya_tools/Rigging/vehicle_rig.py:1343
Build and bake a short uneven-ground validation scene.
maya_tools.Utilities.dag
disable_evaluation
def disable_evaluation()module function · public name · maya_tools/Utilities/dag.py:3
Equivalent to Evaluation > Evaluation Mode > Off
enable_evaluation
def enable_evaluation()module function · public name · maya_tools/Utilities/dag.py:11
Restore normal evaluation (Parallel).
rename_duplicates
def rename_duplicates()module function · public name · maya_tools/Utilities/dag.py:24
Renames duplicate DAG nodes by appending an incrementing number. Example: cube -> cube1 cube -> cube2 cube -> cube3
maya_tools.Utilities.joints
find_skinned_or_top_joints
def find_skinned_or_top_joints(namespace='')module function · public name · maya_tools/Utilities/joints.py:4
Finds the topmost joint in the skinned joint hierarchy. If no skinClusters exist, walks up from any joint in the namespace and returns the highest ancestor. :param namespace: Namespace string with colon suffix (e.g., 'MyChar:') :return: Nam