Cascade UI Animator

A high-performance animation engine and visual editor for Roblox UI. Cascade lets you animate any UI property with keyframes, easing curves, and sub-property control — then play those animations at runtime with a single function call.

Architecture

Cascade uses a dual-paradigm design:

Service Mode

Fire-and-forget. Call AnimationService.Play() and the engine handles everything. Best for hovers, clicks, simple transitions.

Track Mode

Full manual control. Call AnimationService.CreateTrack() to get an AnimTrack object you can play, pause, scrub, and speed-shift. Best for cutscenes, complex HUDs, synced sequences.

Quick Start

-- Require the service from your saved animation module
local AnimationService = require(game.ReplicatedStorage.CascadeAnimations.AnimationService)

-- Load an animation config (exported from the editor)
local HoverAnim = require(game.ReplicatedStorage.CascadeAnimations.MyHoverAnim)

-- Service mode: fire and forget
local signal = AnimationService.Play(button, HoverAnim, { Reset = true })
signal:Connect(function(event, ...)
    if event == "Completed" then
        print("Animation finished!")
    elseif event == "MarkerReached" then
        local name, data = ...
        print("Event:", name, data)
    end
end)

-- Track mode: manual control
local track = AnimationService.CreateTrack(button, HoverAnim)
track.MarkerReached:Connect(function(name, data)
    print("Marker:", name)
end)
track:Play()
task.wait(0.3)
track:Pause()
track:Scrub(0) -- jump to start

How It Works

Cascade blends multiple animations on the same instance additively — a hover, a click, and a shake can all run simultaneously without flickering or overwriting each other. Use Reset = true to automatically restore properties to their original values when an animation ends.