Performance | Discrete Animation Previewer

Performance provides a quick way to preview animations and KeyframeSequences. It delivers precise playback controls and a diverse collection of tools to customize how animations are played.

Intricate Playback Controls:

  • Moveable progress bar
  • Back-track 10% of the track
  • Forward-track 10% of the track
  • Play/Pause the track
  • Adjustable playback speed (0.05x, 0.25x, 0.5x, 1.0x, 1.5x, 2.0x, 5.0x)
  • Track loop type (Loop, Delayed Loop, Don’t Loop)
  • View keyframes on the timeline and see their duration and when they start

Incredible Rig Customizability:

  • Anything with an Animator object is supported (R6, R15, Custom)
  • Roblox-like 360° (X and Y axis) orbital camera to view the rig
  • Axis guides to indicate camera direction
  • Rigs can be changed with the “Change” button
  • Automatic tool fitting support on R6 and R15 rig types (based on Grip property)
  • Not Officially Supported: Scenes can be added (bundled with a rig) to the viewport

Finding and Playing Animations Is Easy:

  • Animations and KeyframeSequences can be selected in the explorer and played by clicking the corresponding tile in the window
  • The “Browse” button lets you choose from a grid of animations owned by you or your groups and play them
  • The text field displays the current playing animation and lets you choose from all supported animation ID types (Animation, ClimbAnimation, DeathAnimation, FallAnimation, IdleAnimation, JumpAnimation, RunAnimation, SwimAnimation, WalkAnimation, PoseAnimation, EmoteAnimation, MoodAnimation)


  • Performance can be used to play local animations or KeyframeSequences in a play-test. Once a KeyframeSequence starts playing in the window, you can copy the ID that appears in the text field and paste it into a script that applies the ID to an Animation object and plays the animation on a rig. Once done, you can load a play-test and the animation, configured correctly, will play.
API access to Performance for playing local animations

This feature helps those who want to create animation pack plugins. It provides a platform for quickly previewing animations users are interested in and lets them easily copy the temporary ID of it into a script so they can try the animation out in a play-test.

You can check if a user has Performance enabled with:

if _G.PerformanceAPI ~= nil then
	--print("Performance is currently active.")
	--print("You do not own Performance or it is currently disabled.")

You can prompt Performance to start playing an animation with:

PerformanceAPI:InvokePreview(Instance: KeyframeSequence)

If you’re interested, you can try it out right now by selecting a KeyframeSequence in the explorer and running the following command in the command bar:


  • Performance works both in play-tests and edit mode so you can continue your development into a live environment.


CFS · UI Copilot · Performance · Swap · CS Studio

Version 1.3.0 · (9)

Thank you


That’s some quality stuff, not gonna lie. I was expecting it to cost robux, W :+1:


INSANE Plugin. As an animator lead that will really speed up my workflow.


Sheeesh. Now that is, one very clean plugin. Good job on it!

1 Like

Another amazing plugin from you. Can’t wait to see whats next :blush:

1 Like


A couple of changes have been made in the background to how Performance works.

Among others, this allows messages to be displayed in the output whenever a new update is available so you can get new content, updates, and bug fixes right when they release.

Thank you.

How do you view R6 anims with it?
Also you should make it so animations aren’t looped on the character because it is hard to see short animations like punches

1 Like

Thanks for the suggestion! You can change rigs with the “Change” button (top-left of the window). If you don’t have an R6 rig in a project already, you can insert one with the Rig Builder widget under the Avatar tab.


Awesome plugin! Simplifies my workflow by a lot, though some suggestions:

  • Visual feedback for whenever the animation is paused/playing (the buttons don’t change colors/image on hover & press)
  • Ability to slow down and speed up animations
  • Visually show which animation is being played out of the list of selections (like with the explorer highlighting equipped instances as blue)
1 Like

I’ll look into some kind of visible touch targets or indicator for the playback buttons. I figured the progress bar and time indicator clearly indicated if the animation was playing or not but if you have a use case where that is not the case I’d be happy to hear!

Playback speed was added in today’s update. (Just after your reply)

The animation object would likely be difficult to track considering every situation. I’ve thought about something similar though, which entailed displaying the name of the animation that’s playing.

Looks great! Very high quality, premium UI as well. Amazing work!

1 Like

Bit confused regarding what you mean by difficulty - what I had in mind was highlighting the animation you clicked from the list of animations in the plugin, to display which one you selected:

1 Like

Performance works in edit mode and in play-tests. I meant difficult by a possible situation where a user closes a place file and opens it at a later time. There would be no non-hacky way to identify the object they had selected once the game loads up. I hope this clears up any confusion you had!

1 Like

that’s understandable - if possible, the ability to highlight within the same session would still be useful, even in spite of the limitations when it comes to not saving across contexts.

1 Like


This update includes a few visual changes and additions to reduce confusion during use and to build out the capabilities of Performance.


  • New Icons
  • The background of the tiles for selected animations are now constantly visible


  • Icons would not correctly display if Performance could not fetch the ID for them
  • Viewport rig camera would not save its position for new users


  • Cursor tracking to rotate the viewport camera
  • Cursor changes depending on what UI element it is hovering over/interacting with it


  • XYZ viewport camera rotation guides
  • API so developers can integrate Performance into their animation pack plugins (see topic)

Thank you.

Hey, for a while now I haven’t been able to open the plugin window; disabling & re-enabling the plugin does nothing.

Sorry about that. It shouldn’t be happening. The widget might be opening, but off-screen where it cannot be seen.

Could you try right-clicking the blank space where there are no plugin buttons and look to see if there is a checkmark next to where it says “Performance” on the list, so we can establish whether Roblox Studio thinks the widget is open or closed. Next, click the plugin button to open/close the widget and right-click to open that list again to see if there is any change.

If there is any change it’s either a Roblox problem or the widget is being hidden somehow. In this case, try restarting Roblox Studio or your computer.

If there is not, could you disable all other plugins enabled, re-open the place file and try opening the widget again? If this solves the problem, there is likely another plugin interfering with Performance. It would be very helpful to have a list of the plugins that were enabled when you were having problems. You can leave them here or PM them to me, whatever you are comfortable with.

The plugin does not appear in the list, and clicking the plugin has no effect on the list.

I have disabled all plugins, with no effect on the issue - the plugin remains unopened & toggling it does not update the list.

I usually only work in one development place, and have noticed that opening it in an empty baseplate place allows me to open the plugin fine - so presumably something in the place itself is preventing opening of the plugin.

Upon further debugging & removing everything from my place file piece by piece, I have found the culprit: the beta feature workspace.SignalBehavior breaks the plugin when it’s mode is set to Deferred. My guesses are the plugin relies on some intricate behavior with event order execution, which is altered due to the change in signal firing behavior.

1 Like