8 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

Animation Graph Editor

The Animation Graph Editor is a visual, node-based tool that empowers technical artists and animators to build complex animation logic directly within Roblox Studio. By providing a streamlined interface for creating behaviors like blend trees, it removes the traditional dependency on manual scripting for character motion.

This system works in tandem with your existing animation workflow:

Designed to enhance collaboration, the visual graph allows developers to quickly inspect, debug, and understand the logic created by animators. While artists focus on refining interactive motion, developers can still access animation graph nodes programmatically for direct control over blended animations and states.

Build a graph


To begin building logic for an animatable character, access the Animation Graph editor via the Avatar tab in the Studio ribbon. The following steps demonstrate how to initialize a rig and construct a basic node network using default walking and waving animations.

For a deeper dive into practical applications, you can explore the Animation Graph Reference File, which contains both foundational and complex implementation examples.

To create your own animation graph, similar to the basic example provided in the reference, use the following steps:

  1. In Studio, add an animatable rig by navigating to the Avatar tab and selecting Character ⟩ My Avatar.

    Character button highlighted in Studio's toolbar.
  2. Open the Animation Graph Editor by navigating to Graph Editor in the Avatar tab.

    Animation Graph Editor indicated in Studio's toolbar.
  3. Select the animatable rig in the 3D viewport and select Create Graph.

  4. In the Graph Editor, right-click and select Clip.

    List of nodes in a right-click menu
  5. In the new Clip node, set the Animation ID.

    1. Select the Animation ID dropdown.

    2. To submit a specific animation asset ID, click Import.

      Indicated a field on the animation import module to add Animation ID
    3. In the Animation ID field, add the default Walk animation: 507777826.

    4. Select Import.

  6. Add another clip node by repeating steps 4-5 using the default Wave animation: 507770239.

    Two clip nodes with a populated Animation ID
  7. In the Graph Editor, right-click and select Add.

    Add node
  8. Connect the Clip nodes to the Add node by dragging the top-right output connector to the appropriate port:

    1. Connect the Clip node with the Walking animation to the Base port.
    2. Connect the Clip node with the Waving animation to the Additive port.
    Both clip nodes attached to add node
  9. From the Add node, connect the top-right output connector to the Graph Output Pose port.

    All nodes connected to a final output node

Assign a parameter to your Speed variable.

1. Click and drag the green Speed port to an empty area. A new parameter node displays.
   <img src="https://prod.docsiteassets.roblox.com/assets/animation/graph-editor/Parameter-Noodle.png" width="80%" alt="Click and dragging connector from Speed port of Clip node." />

2. In the top left of the graph editor, use the parameter pane to quickly modify parameters in your nodes. You can also access this [programmatically](#api-integration).
   <img src="https://prod.docsiteassets.roblox.com/assets/animation/graph-editor/Parameter-Pane.png" width="80%" alt="Parameter pane, parameter node, and clip node showing shared values." />
  1. Test the animation by pressing the play button.

    Play button icon for previewing animations
  2. Try testing various weights, speeds, playmodes, and other animations. For more information on individual nodes, see the Node reference.

Note

Check out the reference place for different examples of various animation graph configurations.

API integration

Creating and deploying an Animation Graph follows the standard Roblox animation pipeline. After selecting a rig in the Animation Graph Editor, a new AnimationGraphDefinition asset is created. This asset serves as the container for your nodes, connections, and parameters. Once your logic is finalized, you publish the graph to receive a standard Asset ID.

In your scripts, you interact with these graphs by loading them onto an Animator as you would a traditional animation. To drive the graph's internal logic, use AnimationTrack:SetParameter to pass real-time values—such as movement speed or state booleans—directly into the graph's variables.

local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Your Published Graph ID

local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()

-- Dynamic parameter updates via RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
    local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
    animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)

Node reference

Note

For details about each node type, see AnimationNodeType.

Global event rules

For all nodes and transitions, the following rules apply by default:

Transitions

Several nodes in the Animation Graph (such as Select, Priority Select, Sequence, and Random Sequence) manage how animations blend when switching between active inputs. To prevent redundancy in the node reference, these behaviors are defined by standardized transition property groups.

Default transition

Default Transition

The baseline blending behavior applied to the node whenever it switches to a new active input.

Transition override

Transition Override

Input-specific link properties that supersede the default transition. These are applied when the node transitions to that specific input.

Replication

Animation graph parameters and internal node state replicate automatically. The replication mode is determined by Workspace.AuthorityMode at the time the Animate script is created:

Sample Animate Scripts

To generate example scripts to drive an animation graph for a rig, use Graph -> Create Animate script in the Animation Graph Editor. This produces a script hierarchy placed under StarterCharacterScripts (for player characters) or directly on the rig (for NPCs):

Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)

The Animate ModuleScript contains the graph-loading logic. The RunClient and RunServer scripts invoke it in the appropriate context. Which scripts are included depends on the use case:

Use Case Scripts Included Behavior
**NPC** (any mode) RunServer Server loads and plays the graph. State replicates to all clients automatically.
**Player + [`AuthorityMode.Server`](/docs/enum-authoritymode#server)** RunServer + RunClient Server drives the graph authoritatively. The owning client enables [`PredictionMode`](/docs/enum-predictionmode) for rollback-based local prediction.
**Player + [`AuthorityMode.Automatic`](/docs/enum-authoritymode#automatic)** RunClient Owning client loads and plays the graph. Parameters replicate automatically to the server and other clients.

The following attributes are stored on the Animate script and configure its behavior:

Attribute Type Description
**GraphName** String Name of the animation graph asset.
**CharacterName** String Name of the rig the graph targets.
**SourceAssetId** String The published Asset ID of the graph. Used at runtime in published games.
**IsServerAuthority** Boolean Whether the script was created with [`Workspace.AuthorityMode`](/docs/workspace#workspace-authoritymode) set to **Server**. Determines the replication strategy.
**PreviewInStudio** Boolean When true (default), Studio play-testing loads the unpublished graph locally so you can iterate without publishing. Set to false to test the published asset in Studio. Note that this is currently not supported in [`AuthorityMode.Server`](/docs/enum-authoritymode#server).

Parameter replication in Automatic mode

When Workspace.AuthorityMode is Automatic:

Server authority

When Workspace.AuthorityMode is Server:

Driving parameters

Use AnimationTrack:SetParameter from every script that runs the graph:

The generated Animate script includes a commented-out SetParameter block as a starting point. Uncomment and modify it to drive parameters from gameplay state (movement speed, humanoid state, input direction, etc.).