Animation Graph API Reference#

This page lists the Python API for the Animation Graph extension. You use it to query and control characters at runtime (get/set variables, play animations, read transforms). All commands live in the omni.anim.graph.core module. Many operations are also available as nodes in the Action Graph node catalog.

get_characters#

Returns a list of active character instances. Must be called in Play mode.

Example

import omni.anim.graph.core as ag
chars = ag.get_characters()

get_character_count#

Returns the number of active character instances. Must be called in Play mode.

Example

import omni.anim.graph.core as ag
char_count = ag.get_character_count()

get_character#

Returns the active character instance for the specified USD Path string. Must be called in Play mode.

Arguments

  • arg0 (str): The USD path to the SkelRoot with an Animation Graph applied.

Example

import omni.anim.graph.core as ag
ag.get_character("/World/MyCharacter")

character.set_variable#

Sets a variable in a character’s applied Animation Graph. The variable can be a value or array. Must be called in Play mode.

Arguments

  • arg0 (str): The variable’s node name.
  • arg1 (value): The value to be applied that matches the variable type.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
char.set_variable("MyBoolean", True)

character.get_variable#

Returns a variable in a character’s applied Animation Graph. Returns a list. For a single-value variable, the list has one element.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
char.get_variable("MyBoolean")

character.is_node_active#

Returns a boolean indicating whether the given Animation Graph node is active. Must be called in Play mode.

Arguments

  • arg0 (str): The node name as a relative path from the Animation Graph root.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
char.is_node_active("/MyAnimGraphNode")

character.get_world_transform#

Gets the root World Transform of a character. Must be called in Play mode.

Also available as an Action Graph node.

Arguments

  • arg0 (carb::Float3): The translation
  • arg1 (carb::Float4): The rotation

Example

import omni.anim.graph.core as ag
import carb
char = ag.get_character("/World/MyCharacter")
pos = carb.Float3(0, 0, 0)
rot = carb.Float4(0, 0, 0, 0)
char.get_world_transform(pos, rot)

character.set_world_transform#

Sets the root World Transform on a character. Must be called in Play mode.

Also available as an Action Graph node.

Arguments

  • arg0 (carb::Float3): The translation
  • arg1 (carb::Float4): The rotation

Example

import omni.anim.graph.core as ag
import carb
char = ag.get_character("/World/MyCharacter")
pos = carb.Float3(20, 0, 100)
rot = carb.Float4(0, 0, 0, 0)
char.set_world_transform(pos, rot)

character.get_joint_transform#

Gets the joint’s transform in world space. Must be called in Play mode.

Also available as an Action Graph node.

Arguments

  • arg0 (str): The joint name, not joint path.
  • arg1 (carb::Float3): The translation
  • arg2 (carb::Float4): The rotation

Example

import omni.anim.graph.core as ag
import carb
char = ag.get_character("/World/MyCharacter")
pos = carb.Float3(20, 0, 100)
rot = carb.Float4(0, 0, 0, 0)
char.get_joint_transform("Pelvis", pos, rot)

character.update#

Manually update/tick a character. Must be called in Play mode.

Arguments

  • arg0 (float): The delta time in seconds.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
char.update(1.0)

character.get_joint_count#

Returns the number of joints. Must be called in Play mode.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
n = char.get_joint_count()

character.get_joint_local_transforms#

Gets the joint transforms in local space. Must be called in Play mode.

Two overloads: pass in ag.vector_float3() and ag.vector_float4() to fill in-place, or call with no arguments to get (positions, rotations) as returned lists.

Arguments (in-place overload)

  • arg0 (vector_float3): List of translations (filled in-place).
  • arg1 (vector_float4): List of rotations (filled in-place).

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
pos, rot = char.get_joint_local_transforms()

character.get_blend_shape_count#

Returns the number of blend shapes. Must be called in Play mode.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
n = char.get_blend_shape_count()

character.get_blend_shape_weights#

Gets all blend shape weights. Must be called in Play mode.

Two overloads: pass ag.vector_float() to fill in-place, or call with no arguments to get a list of floats.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
weights = char.get_blend_shape_weights()

character.get_blend_shape_weight#

Gets the weight of a single blend shape by name. Must be called in Play mode.

Arguments

  • arg0 (str): The name of the blend shape.

Example

import omni.anim.graph.core as ag
char = ag.get_character("/World/MyCharacter")
w = char.get_blend_shape_weight("Key_1")

load_animation#

Loads an animation from the specified USD path and returns an Animation (direct-mode) object. Use with get_character_animator and CharacterAnimator.play_animation to play it.

Arguments

  • arg0 (str): The USD path of the animation to load.

Keyword arguments

  • blend_in (float): Blend-in time in seconds (default 0.0).
  • blend_out (float): Blend-out time in seconds (default 0.0).
  • opacity (float): Opacity in [0.0, 1.0] (default 1.0).
  • layer (float): Blend order; lower values are blended first (default 0.0).
  • looping (bool): Whether the animation loops (default False).
  • paused (bool): Whether the animation starts paused (default False).

Example

import omni.anim.graph.core as ag
anim = ag.load_animation("/World/Animations/Walk", looping=True, blend_in=0.2)

get_character_animator#

Returns the active CharacterAnimator instance for the given SkelRoot USD path, or None. Must be called in Play mode. Use this to play and control direct-mode animations.

Arguments

  • arg0 (str): The USD path to the SkelRoot with an Animation Graph applied.

Example

import omni.anim.graph.core as ag
animator = ag.get_character_animator("/World/MyCharacter")
if animator:
    anim = ag.load_animation("/World/Animations/Walk", looping=True)
    anim_id = animator.play_animation(anim)

CharacterAnimator#

Obtained via get_character_animator(path). Controls direct-mode playback for a character. All methods require Play mode unless noted.

Playback

  • play_animation(animation) — Adds a direct-mode animation; returns unique animation ID.

  • stop_animation(animation_id) — Blends out then removes the animation.

  • pause_animation(animation_id) — Pauses the animation.

  • delete_animation(animation_id) — Removes the animation immediately (no blend-out).

  • seek_animation(animation_id, time_seconds) — Sets current time (seconds).

Query

  • is_animation_playing(animation_id) — True if the animation is active.

  • is_animation_looping(animation_id) — True if looping.

  • is_animation_paused(animation_id) — True if paused.

  • animation_duration(animation_id) — Duration in seconds (or 0).

  • current_animation_time(animation_id) — Current time in seconds (or 0).

Layer and blend

  • animation_layer(animation_id) / set_animation_layer(animation_id, layer)

  • animation_opacity(animation_id) / set_animation_opacity(animation_id, opacity)

  • animation_blend_in(animation_id) / set_animation_blend_in(animation_id, seconds)

  • animation_blend_out(animation_id) / set_animation_blend_out(animation_id, seconds)

Helper types (vector_float, vector_float3, vector_float4)#

Use these when calling overloads that fill lists in-place (for example, get_joint_local_transforms, get_blend_shape_weights): ag.vector_float(), ag.vector_float3(), ag.vector_float4().