[Full Release] Animation Graphs: Create Complex Character Motion Visually


Hi Creators,

Today, we’re moving Animation Graphs out of beta and into full release. You can now build and play complex character motion directly in your live games.

Before this update, getting animations to blend smoothly together required writing custom Luau code. Animation behavior was implemented in code rather than authored visually, making iteration slower and limiting how much animators could work independently. The Animation Graph Editor changes this by letting creators build and connect animation logic in a visual workspace, giving artists direct control over how characters move and respond to gameplay.

Visual Logic Without the Code

You can construct motion trees using nodes to define exactly how your animations interact.

  • Unified Assets: Both clips and graphs share the same animation asset definition. You can swap a clip and a graph in your code, and they will function identically in the engine.
  • In-Game Playback: With this release, animation graphs run live in your active games. This removes the beta limitation that restricted playback to local testing in Studio.
  • Real-Time Debugging: Watch your graph light up in Studio during testing to see active nodes and parameters at a glance.


Image and graph courtesy of @MaximumADHD.

What’s New Since Beta

Based on your beta feedback, we fixed over 280 bugs and added several improvements. Here’s what changed:

  • Debug Graphs in More Places: Debug graphs you haven’t loaded, debug directly in server mode, and use the new rig picker to preview any character.
  • Edit Faster: Opening the editor no longer requires a rig. Copy, paste, duplicate, resize, and rename nodes directly, and drag from a pin to insert a new node in one step.
  • More Expressive Nodes: Blend1D now extrapolates beyond its coordinate bounds. Blend1D and Blend2D support phase sync, and Over, Add, and Subtract nodes have weight sliders.
  • Reliable Team Create: Pins now replicate correctly, publishing no longer produces conflicting data, and multiple collaborators can have the editor open at once without laggy animation resets.
  • Replication Support: Graphs and their parameters replicate automatically in both Server and non-Server Authority modes. See replication documentation for more information here.

We also fixed several community-reported bugs:

  • Fixed masks erroring on rigs with joints or parts that have spaces in their names (such as “Right Shoulder”).
  • Fixed Sequence nodes breaking when fed clips with certain trim configurations (equal TrimStart/TrimEnd, or values exceeding the animation length).
  • Fixed the Sequence node’s Override WaitFor field being ignored when the default transition isn’t set to “wait for trigger.”
  • Fixed AnimationTrack:GetMarkerReachedSignal() not firing when a marker is on the last keyframe of an animation.
  • Fixed a crash when setting NaN on a numeric graph parameter or property.

Get Started in Studio

  1. Select a rig with an Animator in your workspace.
  2. Open the editor via the Avatar tab in the toolbar.
  3. Click Create Graph to initialize your asset.
  4. Open the Parameters panel to add variables that control your logic.
  5. Right-click the canvas to add nodes, connect a Clip node to your Graph Output, and play your game

Update Motion in Real Time with Parameters

Parameters are the variables of your graph. They connect your gameplay scripts and the animation logic, letting you control motion using real-time game data.

local animation = Instance.new("Animation")
animation.AnimationId = "rbxasset://11269236573731"

local animationTrack = script.Parent.Humanoid:LoadAnimation(animation)
animationTrack:Play()

-- Pass parameters directly to the playing track
animationTrack:SetParameter("WalkSpeed", 16)

You can define variables like WalkSpeed, IsCrouching, or MoveDirection directly in your graph. Once set up, you update them using a simple API on your AnimationTrack. This setup removes the need to write complex script transitions for every state change. The animator can change the parameters, and the graph handles the visual blending automatically.

A Comprehensive Node Library

To support a wide range of motion designs, we built a standard set of nodes for common animation tasks:

  • Clip and Sequence: These nodes handle basic playback.
  • Blend1D and Blend2D: These nodes blend smoothly across one or two coordinate dimensions.
  • Select and Priority Select: These switch states based on your parameter values.
  • Mask: This node isolates joints to specific bones (for example, waving only the upper body).
  • Over, Add, and Subtract: These let you layer poses and create mathematical offsets.

List of Features and Bug Fixes since Beta

Over 280 features and bugs have shipped since the beta launch.

Click to see the list of features:

Publishing & Saving

  • “Save to Roblox As” lets you publish a copy under a new name
  • Saving automatically updates the Animate script’s asset reference
  • Renaming and re-saving properly renames your local version too
  • Unsaved graph warnings now appear on publish (not every save)
  • Auto-publish your graph assets when you publish the game
  • Dedicated graph reference per Animate script

Playback & Preview

  • Real-time preview: see which nodes are actively playing during Play Solo
  • Play mode starts by default — no need to manually unpause
  • Preview chooser to pick which rig to observe
  • Toggle preview on/off button
  • Debug and swap between multiple active graphs during runtime
  • Preview graphs that aren’t loaded in runtime
  • Debug animation graphs during server mode
  • Playback speed control with a type-in combo box
  • Single clip playback from the node title bar
  • Playback state indicators on nodes

Nodes & Graph Editing

  • New Over node for layering animations on top of each other
  • Sequence and Random Sequence work out of the box with different looping behaviors
  • Blend1D now extrapolates beyond coordinate bounds
  • Phase sync support on Blend1D/Blend2D
  • Over, Add, and Subtract nodes now have a weight slider
  • Copy, paste, and duplicate operations for nodes
  • Drag from a pin to open the Insert Node menu directly
  • Nodes can be resized horizontally
  • Collapsed nodes show their type clearly
  • Rename nodes by double-clicking the header
  • Allow spaces in node names
  • Clip nodes automatically inherit their clip name
  • Input reordering via drag-and-drop
  • Insert Node sub-menu on right-click canvas menu
  • Node list is now grouped and sorted properly

Parameters

  • Parameters are fully supported (Number, String, Boolean, Enum types)
  • Add parameters via toolbar button or right-click menu
  • Parameters can override node properties with green pins
  • Parameter pane redesign with improved layout
  • Insert Parameter section in the right-click context menu
  • Improved parameter right-click options
  • Parameters work in Input Panels
  • Sequence “Trigger” conditions work with parameters

Transitions

  • Transitions store and apply custom timing/easing data
  • Transition icon only shows when a transition is overridden
  • Transition arrow appears on input hover

Masks

  • Create and edit animation masks from the editor
  • Mask weight UX improvements
  • Masks properly replicate across the network

Blending Maps (Blend1D/Blend2D)

  • Interactive blend coordinate maps — click or drag to set the position
  • Blend2D graph with pin state indicators
  • Coordinate input pin tooltips
  • Grid and coordinate styling improvements
  • Magnitude clamped to non-negative for Blend2D

Rig & Animation Targets

  • Rig picker for choosing which character to preview
  • Support for AnimationController targets (same as Animation Clip Editor)
  • Republishing a clip automatically updates the graph
  • Permissions are granted automatically when a clip is picked

Canvas & Navigation

  • Zoom around your cursor instead of center of screen
  • Middle-mouse and Alt+MMB panning support
  • Box selection for selecting multiple nodes at once
  • Dragging a multi-selection of nodes works properly
  • Frame Selection / Frame All via menu
  • Selection outline renders in screen space (consistent at any zoom)
  • Grid spacing doubled for better readability
  • Graph launches in the left pane of Studio

UI & Usability

  • Light mode support
  • Menus open on hover as a group
  • Right-click context menu is contextual to your selection
  • Clip Selector truncates long names
  • Input weights displayed next to animation pins
  • Animate Script banner prompts you if your graph isn’t hooked up (only shows once)
  • Boolean properties display with a left-aligned checkbox
  • Render “infinity” symbol for loop count of 0
  • Improved node resize hover indicator
  • Node minimum width enforced
  • Input pins always align to the first line of their input (not Y-centered)
  • Clip Timeline at full width with background pane
  • Unsaved graph shows a styling indicator in the graph chooser
  • Paste an animation URL directly into the asset picker to import it
  • Graph dropdown properly shows “New” and “Open” options
  • Import button in asset picker only shows animation clips (not graphs)
  • Input panel property names show clip name if connected

Keyboard & Shortcuts

  • Hotkeys work properly even when Script Editor is open
  • Delete/Backspace works for parameters
Click to see the list of bug fixes:

Stability & Crashes

  • Fixed a crash when loading an animation clip without permission
  • Fixed a crash caused by attribute deserialization errors
  • Fixed an infinite loop when assigning Select node attributes
  • Fixed a coroutine error that could crash the editor
  • Empty animation sequences no longer break the graph

Playback & Preview Bugs

  • Closing the editor now properly stops playback and resets the rig
  • Blend1D weights properly display debug data (no longer stuck at 100%)
  • Add node weight no longer always shows 0%
  • “Over” slider works correctly
  • Noodles (connections) now fade properly instead of jumping between 100% and 0% opacity
  • Node fading uses a smooth weight instead of a harsh on/off state
  • Changing property values no longer resets graph playback
  • Moving a node no longer resets playback
  • Sparse clips no longer hold onto old poses — joints reset properly in preview
  • Preview debug data now shows during Play Test mode
  • Controls are disabled during runtime to avoid confusion

Team Create & Collaboration

  • Pins now properly replicate in Team Create
  • Publish flow works correctly in Team Create (no more conflicting data)
  • Two people having the plugin open no longer causes laggy animation resets
  • Multiple users no longer override each other’s keyframe sequence registration

Connections & Wiring

  • Deleting a connected node now properly removes the associated pin
  • Disconnecting by drag now happens at drag start (feels more natural)
  • Changing connections no longer renames the pin
  • Noodles render correctly when switching between graphs
  • Noodles no longer render in the wrong place on initial node creation
  • Pin color is no longer affected by the connection’s weight value

Saving & Publishing

  • Save to Roblox now defaults to “Animation” type (not “Model”)
  • Saving now defaults to your current group (preventing permission errors)
  • Dirty graph warning no longer shows on every save
  • Publish flow only tries to play published assets on the client
  • Copied asset ID is now in the correct format

Input & Interaction

  • Zooming is no longer too sensitive
  • Zooming no longer breaks on trackpad (two-finger navigation fixed)
  • Scrolling in the Explorer or Asset window no longer zooms the graph
  • Pan/zoom performance improved significantly
  • Panning on larger graphs is no longer extremely laggy
  • Laggy pins fixed
  • Box selection performance improved significantly
  • Dragging nodes no longer flickers or jumps on first drag
  • Hitting Enter now properly commits values (even when typing fast)
  • It no longer takes 3-4 clicks to select a property value
  • Scrubbing (dragging number values) no longer floods the undo stack
  • Double-click to rename only triggers on the header (not the whole node)
  • Pin click radius expanded — easier to connect wires
  • Pin sloppy selection (forgiving click targets)
  • Dragging from Blend1D/2D no longer floods the undo stack

Nodes & Properties

  • Random Sequence “Weight” property can now be assigned
  • Random Sequence weight actually has an effect
  • Select node no longer freezes when changing Selection
  • Select node transitions now fire correctly (not only through parameters)
  • “State” properly grays out on RandomSequence and PrioritySelect nodes
  • Cannot assign “Condition” on PrioritySelect — fixed
  • Clip Node parameters (pins) display correctly
  • Enum dropdowns (PlayMode/InputMode) now show a proper dropdown UI
  • Transition Cubic curve corrected to CubicV2
  • Transition length restricted to positive numbers only
  • Number input precision defaults to 0.001 across the editor
  • Transition properties no longer display green parameter pins
  • State properties no longer display green parameter pins
  • Removed redundant transition attributes
  • Clip TrimStart/TrimEnd properly clamped
  • Clip trims switched to absolute values (no longer relative)
  • Can’t double-click on parameters to rename — fixed
  • Enum parameters work correctly when created by dragging from a pin
  • Trigger fields now work with boolean parameters
  • Parameter config instances now have unique names
  • Setting parameters via the pane properly creates attributes on the graph instance
  • Pulling a pin out of a parameter no longer shows broken UI
  • Sequence loop count defaults to 0 (infinite)
  • Inputs no longer gain a random number suffix or get removed unexpectedly
  • Blend1D no longer speeds up remaining clips when blending with a 1-frame clip

Layout & Visuals

  • Transition panel is now the correct size
  • Mask Editor scrollbar no longer overlaps weights
  • Number slider has a proper light theme
  • Graph dropdown is no longer too narrow (asterisk visible for unsaved graphs)
  • Node min width prevents text from being cut off
  • Transition layout fixed on Sequence and Select nodes
  • Expanding a collapsed node now renders it on top of nearby nodes (not underneath)
  • Clip names show correctly in node names
  • Input list weight formatting fixed
  • Input names use the display name (not the internal instance name)
  • Framing function (fit-to-view) works correctly
  • New graphs reset pan/zoom properly
  • Parameters display type label removed (cleaner look)
  • Trash can icon only reacts to clicks on the icon itself (not the whole row)
  • Node creation from a pin now places the node in the correct position
  • Parameters created via drag now appear near the drop point
  • Rig preview dropdown no longer shows StarterCharacter
  • Animate Script banner no longer shows all the time
  • Graph editor no longer reads/updates Selection when it’s not the active tool

What’s Next

Animation Graphs establish the foundation for advanced character movement. We’re continuing to build out our motion tools by adding more nodes and expanding features. Stay tuned for more animation tooling updates this year!

For more details on implementation, see the Animation Graph Documentation.

Let us know if you have any questions or feedback. Thank you.

FAQs

Can I still use my existing Luau animation scripts?

  • Yes. Your existing LoadAnimation scripts will continue to function. The Graph Editor is an optional, more efficient way to handle complex blending logic.

Do I need to be a programmer to use this?

  • No. You’ll still use scripts to set parameters (such as “Speed”) on the graph, but the actual logic of how animations blend and sequence is handled entirely in the visual editor.

Does this support custom rigs?

  • Yes. Animation Graphs work custom humanoid rigs with works alongside Adaptive Animation, letting you use graphs with custom rigs and standard characters.
198 Likes

This topic was automatically opened after 10 minutes.

Originally you folks mentioned that you planned on adding IK / procedural nodes. Are those still planned?

61 Likes

Yes! Finally, I’ve been waiting for this for so long, goated update, really glad that the parameters were set to replicate, it was a big worry of mine

16 Likes

Time to recode my current animation system. I’ve been holding off from using this until it released officially, really look forward to using this.

14 Likes

Let’s gooooo! can’t wait to see what I can do with this, I have yet to even look at it in beta, and now is the best time to just mess around with it!

Seen a ton of great examples though, so this will be a ton of fun!

7 Likes

Will we ever be able to load arbitrary animations by ID in clip nodes rather than requiring them to be in the authored graph?

9 Likes

I’ve been waiting for ages!
We were using a script to do some movement related stuff suck as look angles and foot locking, it took a chunk of CPU time to do it. Hopefully we can move it over in TC2 soon!

6 Likes

I love you for this feature :heart:

6 Likes

I’d really love to see a node for mirroring animations. One of my most common animation workflows is using a plugin to create a flipped version to play under different circumstances.

Also, I think a way to allow animation markers to influence graph logic would be really cool.

Awesome update!

7 Likes

Please add this feature to materials and adio emitters

4 Likes

If this is live as of announcing, I have some fairly serious bugs to report which have not been patched.

  • Blend2D allows points at negative X, but not at negative Y. You can have -1, 0 but not -1, -1
  • Loading a clip forces the clip name through localization whether I like it or not
  • Sometimes studio simply forgets animation graphs I made exist. It no longer allows me to make or edit animations. Such as right now. Totally broken, suddenly. Maybe a server problem.

Features I want are custom labels to organize large graphs

8 Likes

I love the lists and communication. Nice to see animation feature improvements :D.

6 Likes

-- glad this is finally released! are there still no plans to add any way to directly access clips within a graph (I mainly need a way to restart a PlayOnce animation, and detect when certain animation clips have ended)

5 Likes

For rollback and resimulation to work with the animation graph under server authority, do we need to load the animation graph onto the animator on both server and client? Or do we only load it on the server, then fetch it through an API on the client?

2 Likes

хахахахах можно идти делать CS2 в роблокс, жаль еще нету инструмента который позволяет в редакторе анимаций добавить звук на кадр или эфект на кадр без скриптов

3 Likes

Adding look directions to an idle animation has never been easier.

2 Likes

I wonder if Roblox’s default Animate script will also be recoded to utilize this new feature.

We know that the character controller library is being developed specifically to support strafing animations in the future. Animation graphs seem to be the best way to achieve this.

2 Likes

Inertialization when?
Would be a cool feature.

And also splitting anim graphs into sub-animgraphs and then combining them into one big final and organized animgraph would be cool.
Cuz ion like the fact that I gotta put my movement, gun, melees, emotes and basically everything into one big anim graph. Which would make it quite laggy and uncomfy to work with.

4 Likes

PLS Allow for nested animation graphs

8 Likes