Hi everyone!
I wanted to share a quick and easy-to-use module I made to add a clean Shine effect to your UI elements.
Under the hood, the module works by creating a temporary child Frame inside your UI element and tweening a UIGradient across it. The tricky part with adding child frames is that if your parent button uses a UIPadding, the child frame gets pushed inward and doesn’t cover the full area.
This module fixes that by mathematically calculating the exact size and position needed to counter the padding, ensuring the shine covers the entire button flawlessly. It also automatically detects and clones any UICorner, keeping the animation neatly inside the borders without any weird bleeding.
Installation
Get the model from the Creator Store here:
https://create.roblox.com/store/asset/137611664334015/UI-Shine
API Documentation
UIShine.StartShine(...)
Parameters:
-
GUI(GuiObject) : The UI element you want to apply the shine to. [Required] -
Speed(number) : Animation speed. Defaults to1. -
Rotation(number) : Gradient rotation angle. Defaults to45.
-
AlwaysOnTop(boolean) : Iftrue, it calculates the highest ZIndex inside the GUI so the shine appears above text/icons. Defaults totrue. -

-
PresetName(string) : The visual style of the shine. Can be"DEFAULT","SOFT", or"SHARP". (Not case-sensitive). -

Feel free to tweak the brightness for any of the built-in presets (DEFAULT, SOFT, SHARP) directly inside the ModuleScript settings -
Color(Color3) : The color of the shine. Defaults to White. -
CustomShape(UIGradient): (Optional) If you want to use your own custom transparency sequence, you can pass a custom UIGradient here.
UIShine.StopShine(GUI)
Stops the shine effect on the specified UI element. It performs a 0.3-second fade-out before destroying the shine frame.
Quick Usage Example
local Button = script.Parent
local UIShine = require(game.ReplicatedStorage.UISHINE)
Button.MouseEnter:Connect(function()
-- Using custom parameters: Speed 2, Rotation 0, AlwaysOnTop true, "soft" preset
UIShine.StartShine(Button, 2, 0, true, "soft")
--Or just do this:
--UIShine.StartShine(Button)
end)
Button.MouseLeave:Connect(function()
UIShine.StopShine(Button)
end)
Since this is my first ever public module, any feedback, bug reports, or suggestions to improve the code are highly appreciated.
I hope this helps you add some extra polish to your UI. ![]()
