ShinyEffectModule – Customizable Shiny Gradient Effect for GUI Elements


:star2: ShinyEffectModule – Customizable Shiny Gradient Effect for GUI Elements

Hello fellow developers,

I’m excited to share ShinyEffectModule, a flexible module that lets you add a dynamic, shiny gradient effect to any GUI element! Whether you’re designing buttons, frames, or other UI elements, this module allows you to customize the effect with a variety of parameters.

:fire: Features

:white_check_mark: Customizable Direction"leftToRight" or "rightToLeft"
:white_check_mark: Looping Animation – Enable or disable infinite looping
:white_check_mark: Adjustable Shiny Color & Brightness – Set your preferred shiny color and brightness
:white_check_mark: Smooth Transitions – Control gradient width, center position, and blending
:white_check_mark: Custom FPS Option – Use a manual update loop for smoother control
:white_check_mark: TweenService Support – Automatically animates with TweenService


:inbox_tray: Download

:point_right: Get the module here: ShinyEffectModule


:video_game: How to Use

  1. Insert the module into ReplicatedStorage or any preferred location.
  2. Require the module in a LocalScript.
  3. Apply the effect to any GUI element.

:pushpin: Example Code:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ShinyEffect = require(ReplicatedStorage.ShinyEffectModule)

ShinyEffect.Apply(script.Parent, 2, {
	direction = "leftToRight",
	loop = true,
	shinyColor = Color3.new(1, 1, 1),
	rotation = 10,
	shinyWidth = 0.15,
	brightnessScale = 1.5,
	centerPosition = 0.5,
	transitionFactor = 0.2,
	tweenDelay = 0,
	tweenEasingStyle = Enum.EasingStyle.Linear,
	tweenEasingDirection = Enum.EasingDirection.Out,
	customFPS = 60
})

:gear: Configuration Options

Option Description
direction "leftToRight" (default) or "rightToLeft"
loop true (default) for infinite looping, false for one-time effect
shinyColor Color of the shiny streak (default: white)
rotation Rotation angle of the gradient (default: 45°)
shinyWidth Width of the shiny streak as a fraction (default: 0.1)
brightnessScale Adjusts brightness of the shine (default: 1)
centerPosition Controls where the shine appears along the gradient (default: 0.5)
transitionFactor Smoothens edges of the shiny streak (default: 0.2)
tweenDelay Delay before starting animation (default: 0)
tweenEasingStyle Tween easing style (Enum.EasingStyle.Linear default)
tweenEasingDirection Tween easing direction (Enum.EasingDirection.Out default)
customFPS If set, overrides TweenService with a custom FPS update loop

:rocket: How It Works

  • The module retrieves the GUI’s BackgroundColor3 and creates a UIGradient.
  • A shiny streak is added to the gradient with calculated keypoints.
  • Animation is handled by TweenService or RunService (if using customFPS).

Example use case:

Note: The button in the video is using tweening by Auto Tween Pro.


:speech_balloon: Feedback & Support

If you have any questions, suggestions, or improvements, feel free to comment below! Hope this helps you add some extra flair to your UI. :rocket:

Happy developing! :art::sparkles:


Can this work on a decal that is on a part? (or somehow on a part with something…)

Also can you provide a working .rbxl example ?

I am playing with it, with a part and an imagelable, but

  1. I can only get it to work as a script (for localscript might need to move it and reference the imagelable in the workspace I guess)

  2. it change how the source imagelable looks, which is a red fireball, in non play mode / studio…

but when I do Play , it changes the color of the imagelable image to green and then the gradient is the color of the image / redish orange

why is that?

note for the imagelable I have the background to green, and set to trans 1 because I do not want to see the background

Also I am using your code, and the shinycolor is set to white, which it does not seem to be doing white…

In run mode, it looks like your UIgradient , is overriding the imagelable image color…

Thanks

Actually, if there’s a better module available, I think I’ll stop supporting this one. I didn’t know one already existed, so I really appreciate you providing it. I think I’m going to use that instead. Thank you!