[2.1.3] Cascade UI Animator - Now with Animation Events

Cascade UI Animator

Full Documentation | Store Link | Show case | Feedback/Bugs


Is a keyframe based UI Animator Plugin that easily handles complex UI animations.

Cascade blends animations with an Additive Accumulator using a custom runtime engine. This means you can play a Hover scale, a Click punch, and a Damage Shake all on the same button at the same time, and they blend perfectly.

trainbtn_anim

Why use this over standard Tweening?

I wanted to work more effeciently with UI animations. Because honestly UI code and animations are tedious to write, so I created this plugin as a way to create reusable animations. Cascade UI holds the animator for you, as a developer you don’t need to keep track of any objects created by the runtime engine.

  • No Property Fighting: Multiple animations can influence the same property (like Scale or Position) simultaneously.
  • Hybrid Track Modes: Unlike other animators that lock you into one workflow, Cascade allows you to toggle between Absolute and Relative modes on a per-track basis.
  • Highly Optimized: Designed to handle thousands of animated objects with a built-in preprocessing system to minimize runtime overhead.

Absolute vs. Relative Tracks

  • Absolute Tracks: These define a specific target (e.g., “Move to Position 0.5, 0”). This is perfect for entrance animations where an element must land in a exact spot.
  • Relative Tracks (Delta): These define an offset (e.g., “Add 10 pixels to current Width”). By activating relative mode on specific tracks, your animations become resolution-independent and stackable. You can have a button that “pops” (+0.1 Scale) regardless of whether its base scale is 1.0 or 2.0.

Example Animations

Isolated Size Axis with Staggered frames

axis_isolation_staggered_items

1500 frames animating as a batch with Stagger

benchmark_test_1500_frames

Key Editor Features

  • Animation Events Create markers on the events track and set the data type with a value to use for triggering sound or any other logic that needs to react to the animation.

  • Set Frames and Length: Set the number of frames the animations should have, and set length in seconds for the animation.

  • Axis Isolation: Animate Size.X independently of Size.Y for more fluid, organic motion.

  • Smart Inspector: Input values using loose syntax; the inspector automatically formats them to Roblox standards.

  • Multi-Select & Drag: Box-select keyframes across different tracks to retime complex animations in seconds.

  • Auto-Record: Capture motion naturally by moving elements in the viewport while the editor logs the changes.

  • Non-Destructive Editing: Full support for Undo, Redo, Cut, Copy, and Paste

  • Keybind Settings -Change plugin keybinds to match your own flow.

Easy-To-Learn API

The AnimationService is a robust runtime engine that is easy to integrate into your scripts:

Service-Only

local MyFrame = script.Parent.Frame
local Config = require(config)

-- Play using the service. The service manages the track internally.
AnimationService.Play(MyFrame, Config, { Reset = true })

task.wait(1)
-- New Feature: Pause via the service without needing a track variable
AnimationService.Pause(MyFrame, Config)

task.wait(1)
-- Cleanup: Stops animations and resets ALL properties defined in 'Config' 
-- (e.g., Rotation, Size, Transparency) back to their original state.
AnimationService.ClearInstance(MyFrame)

Track-Based

local MyFrame = script.Parent.Frame
local Config = require(config)

-- Create the track manually
local track = AnimationService.CreateTrack(MyFrame, Config)

-- Connect to track events
local con = track.Completed:Connect(function()
    print("UI Transition Finished")
end)

con:Disconnect()

track:Play()

task.wait(0.5)
track:SetSpeed(2) -- Speed up the UI animation dynamically
track:Scrub(0)    -- Instant rewind to the start

-- Cleanup: The Service automatically detects destruction and performs cleanup
track:Destroy()

Support

Cascade UI Animator is a paid plugin. Developing this complex system has taken a lot of time and testing. By purchasing this plugin, you are directly supporting me as a developer, allowing me to continue updating the system, adding features like Animation Events (syncing sound/logic to the timeline), and expanding component support and properties, and more see Roadmap in docs). I’m very passionate about this project and I want to make this plugin the go to for UI Animations!

If you decide to give it a go, please give it a review on the store page!

Thank you for checking out Cascade UI Animator. I can’t wait to see the animations you create with it!

46 Likes

WHAT!!! I’ve never seen anything of the sorts but I’ve always wondered who would be the first person to make a keyframe based UI animation plugin!

3 Likes

Yeah, I’m glad you noticed! That was actually one of the reasons I even created this plugin. Animating without keyframes in actual frames felt weird to me.

1 Like

I’m pretty sure “Visulie” supported it but the downside is that the plugin doesn’t have undo redo. but hey, i might as well try this one out!

1 Like

Cool! Please if you find any bugs or anything let me know! Hope you find the plugin useful!

Pro tip! If any of the keybinding are duplicates of studio shortcuts you already use, you’re going to need to change either the plugins or the studio shortcut or else the action won’t work.

looking sharp, can you put the AnimationService on GitHub and release it to wally?

1 Like

Thanks! Maybe in the future. I have a couple of pretty big updates I want to make to the system.

I don’t really have anything to say besides that this looks awesome. Great work!

1 Like

Thank you! I appreciate the comment!

1 Like

This is game changer! roblox could never… Unless in the far far far far far far future

1 Like

Hope you like the plugin, if you have any feedback please post it here. Tnank you!

After testing it myself I have a few suggestions in mind:

Make creating an animation to be more similar to Roblox’s workflow.
Here’s proposed API change to make things consistent.

--- Created only once
local animTrack = CascadeService.CreateAnimation(GuiObject, AnimationOrPreProcessed)
local batchedAnimTrack = CascadeService.CreateAnimationBatch(GuiObjects: {}, AnimationOrPreProcessed)

--- Read only or mutable properties and Methods can be accessed like this
print(animTrack.State) --- Reads current state of the animation
animTrack:Play(Config) --- Playing the animation with exisiting optional configs
batchedAnimTrack:Play(Config) --- Playing the animation batch with exisiting optional configs

--- Optional config when stopping the animation
animTrack:Stop({
	Reset = true, --- when the animation stops its either stops at the current frame or resets to the first frame.
})

animTrack:Destroy() --- For cleanup / stops animation if playing and remove from memory

--- Connects to state changes
local conn = animTrack.StateChanged:Connect(function(state)
	print(state) --- "Started" | "Looped" | "Completed" | "Stopped"
end)
conn:Disconnect()

if conn.Connected then
	--- logic here
end

And to top it all of implement type annotations for easier use with auto-complete.
overall amazing plugin! can’t wait for the upcoming roadmap on animation events!

1 Like

Thank you for the feedback! I can add type annotations and optional config to Stop as a small patch, I think those are good additions to the API.

Changing the API to return a track instead of just playing a track is a shift in mindset, it’s a bigger change. I have to think about that one.

Right now the AnimatioService takes care of cleanup if you destroy an gui object, and the assumption that is built-in the system right now is that if you don’t destroy an object that means you will probably play an animation again on that object. That’s why the animator for that instance is kept in cache. What I could do is to update ClearBaseState to ClearInstance and remove everything for that instance.

1 Like

Could we possibly get a video? I don’t want to purchase this without a clear understanding of how to use it, even with the documentation provided.

I’ve never been a fan of animation, but I am looking for a UI keyframe based plugin. I just need to ensure that my money is being spent wisely.

1 Like

There is a link to a showcase I made a while ago under the store link. Have you seen that one? It would be ccol to get some feedback if it is missing something because I’m new to making tutorials and showcases.

1 Like

You’re right, appreciate you for letting me know.

1 Like


I’ve created a new logo for my plugin but I can’t decide which one to use. Red or Blue Scrubber? Voting ends 3 Jan 2026.

  • Red Scrubber
  • Blue Scrubber
0 voters

Hey, is there UIScale in this?

that would be amazing to use

1 Like

Just bought the plugin, I’ll try it out and give my feedbacks

1 Like