Animify - An easy to use Animation GUI

Preview

Visit the preview place to try it out.

Installation Guide

To begin, get the model here

Installation is straight forward. Place the model under StarterGui

How to start the service

Animify will initialize itself. If you don’t want it to, simply destroy the ‘Init’ LocalScript.
To manually require service here is an example:

local Animify = require(script.Parent:WaitForChild('AnimifyClient'))

Note: You will have to require it again when the player respawns

How to add animations and sections

To create a section, create a ModuleScript under the Sections folder.
The Name of this module script will be the name of the section.

To add animations to your new section, make a list like this

-- inside the module script
return {
    ['My Animation'] = 123456
}

The name of the animation and the ID of the animation (number).
Please only enter number values


Alternativley, you can add animations with the API using Controller.AddAnimation() (See API)
This is useful if you want to add a custom animation that may not be accessible by all players. Eg, a vip animation

:computer: The Controller (API)

Please note that the AnimifyClient module is referred to as “Controller” in this section.

Controller.AddAnimation(sectionName, animationTitle, animationId)

Adds an animation to the GUI under a specified section.

  • Arguments:
    • sectionName: Name of the section to place the animation under. If no section exists, it will create one.
    • animationTitle: The display name of the animation.
    • animationId: The number ID used to load the animation.

Controller.Query(text)

Searches through button attributes for a section name and disables buttons that don’t match.

  • Arguments:
    • text: The string to search for in section names.

Helper GUI Functions

Here are some functions to help integrate Animify to your game. (if you’re using TopBar+ you may use these functions)

Controller.ToggleState()

Toggles the visibility of the main GUI and the side button.

Controller.OpenGui()

Opens the main GUI. Useful for custom open/close button implementations.

Controller.CloseGui()

Closes the main GUI.

Controller.Refresh()

Deletes all buttons in the GUI and creates new ones from the sections list.

Controller.EnableToggle()

Makes the default toggle button visible.

Controller.DisableToggle()

Hides the default toggle button, useful if you want to implement your own button.

Controller.Frame

Returns the MainFrame of the GUI.


:hammer_and_wrench: Configuration

The settings are located under “AnimifyClient” module, it’s called “Configuration”

Configuration.UsePlayerCharacter (bool)

Determines wether the gui will use dummies or the player character to preview animations
Set to true by default.’

You can change how these dummies look, or even use your own custom rigs by changing the “TemplateR15” and “TemplateR6” models.

Screenshot 2025-04-09 at 19.40.43

:warning: If the player’s character is R6 then make sure you only add R6 animations. Same goes to R15. Other wise the animation won’t play.

Configuration.LoadOnRequire (bool)

If set to true, Animify will load when required. If you disable this, you can use Controller.Refresh() to load the gui manually.

Configuration.DefaultAvatarType (string)

Determines wether an R6 template Rig or R15 template Rig is used ,if an invalid type is set. The controller will warn and not display your animations.

:warning: DefaultAvatarType must match Animations, If your animations are not the same type, they will appear frozen. Ex, Adding an R15 animation when the AnimationType is set to R6 won’t work.

Configuration.SectionsEnabled (bool)

Enables or disables the top section bar in the GUI.

Configuration.HideUiOnSelect (bool)

Determines whether the UI should automatically close after an animation is selected

Configuration.ToggleButton (bool)

The default toggle button visibility, Set this to false if you implement KeyBinds.

Configuration.ViewDistance (number)

Sets the distance from which the camera will focus on the avatar in the viewport.

Configuration.KeyBind (Enum.KeyCode)

Defines the keybind for toggling Animify. Set this to nil to disable keybinding entirely. Animify will throw a warning if it isn’t an Enum.

Configuration.Positioning (string)

Options are ‘Right’ ‘Left’ & ‘Center’
These are preset Udims that can help position the gui. By default it is to the right.

Configuration.CustomPosition (Udim2)

This positions the gui at the udim2 you input. You can also change this via script by doing:

Animify.Frame.Position = Udim2.new(0,0,0,0)

:star: You can also add a UiDragDetector instance.

18 Likes

In Animify’s description you never actually link the DevForum topic.

Other than that it looks like a nice resource.

Maybe provide a test place so we can test the built in animations without having to open Roblox Studio?

1 Like

Actually you have miss in Functions.
getting state function is not
animify.getState()
it was
animify.getGuiState()
when i took a look

1 Like

Hello! Thank you for this improved version, However it seems that is not working for me.

I have the “AnimationGui” in StarterGui and im requring it on StarterPlayer

image
image

The next image is a Module script being required by a local script inside of StarterPlayer:

This is what it looks like in game:
image

Hey, thanks for using.
Could you send me the console?

The issue should be fixed now, get the model and let me know.

Unfortunatly, Its still happening.

image
Its yielding for the character, Warning only happens when the animfyclient is required

Edit: Issue is fixed, Your Waiting for the character without checking any folders in workspace, Going to add compability for this and send it to you so this doesnt happen again.

1 Like

Thanks for the update, I will credit you for it too.

Ok so, It actually still isnt working. No Errors No WaitForChilds.

This is the problem:
image

The WorldModel will cycle the idle animation, I updated and spoofed all the animations but its not doing anything.

I Strongly suggest releasing an uncopylocked place for this.

The preview place is uncopylocked. Are you sure the animations are in numbers and that you own them? Animify only supports R15 Btw

Oh that might be why lol, Ill work on getting it to support r6.
Also, the roblox model comes as a scrippt only. Make sure to put it in a ScreenGui.

Update, If the player is r6 everything works fine but if you use the players avatar instead of a default rig. The position the rig is facing will be wrong, otherwise its looking good.

Going to add r6 support soon

Thanks for bringing to notice. I will add support for R6.

Animify V2.2

  • Added support for R6 Default rigs
  • Some bug fixes

Sorry about this :sweat_smile: I keep saying im going to add something and you do it before me lol

To make up for this, Going to add random features which I WONT tell you about because I want to do it for you.

Edit: Reorganized MainFunctions, Going to add FastSignal for more performance for what im doing.
Might use fusion to spice things up

Edit2: Found Some bugs concerning “UsePlayerCharacter”. If the Player is r6 any animations regardless of emote or other system, will be bugged out and randomly stop.

Edit3: The reason this bug is happening is because your also cloning any scripts inside of the character which come from StarterCharacter scripts. Going to try to find a solution to this.

Edit4:This is kinda hard, The problem is we need the humanoid description of the character but we simply cant get that without cloning

Edit5: There is a solution but its not very convenient for plug n play

Edit6: Performance Optimizations here we go!

Edit7: Like 5 New Settings Added

Animify V2.3

  • Fixed Bug Where WorldModel Would Have Replicated Scripts From StarterCharacter (Therefore Causing Bugs)

  • Added Extra Settings

  • Cleaned Up Common Functions Into a Module

  • Added Option To Toggle Ui Using Key

  • Light Optimizations

Emotes.rbxm (60.6 KB)

Is there anyway I can utilize this with TopbarPlus v3? for the toggle button…

Yea!

Here are the steps:

  1. Make a Icon and use bindEvent:Selected() as a event callback.
  2. depending on the state, fire a bindable
  3. do bindable.OnInvoke:Connect(function()
  4. use the internal method to toggle the emote Ui

Thankyou for supporting Animify for over a year. :confetti_ball:

New update (v2.5)

see original post

  • 2 new settings (see API)
  • Added extensive comments to help those customizing the code
  • Removed position tweens (because of the new settings)

If you have any suggestions or concerns please feel free to PM or reply here. I will try my best to get back to you.

Here is an example:

local Animify = require(script.Parent:WaitForChild('AnimifyClient'))

-- TopBar+
local Icon = require(game.ReplicatedStorage:WaitForChild('Icon')) -- Change the path to TopBar+ here


-- Disable animify's default button
Animify.DisableToggle()

-- Create an Icon for activation
local AnimifyIcon = Icon.new()

-- Set data
AnimifyIcon:setLabel("Animations")

-- Connect
AnimifyIcon.selected:Connect(function()
	
	-- open the animify gui
	Animify.OpenGui()
end)

AnimifyIcon.deselected:Connect(function()
	
	-- close animify gui
	Animify.CloseGui()
end)