꧁⎝ 𓆩Sticker System𓆪 ⎠꧂
☆⸻˗ˏˋ⚡︎ˎˊ˗⸻☆
Imagine a Twitch or Youtube livestream chat, full of funny memes and reactions
Place stickers on surfaces, NPCs, or your head with different placement modes!
Sticker popups also play music, effects & animations (Emotes)

or see the "Read_Me" script then manually set things up (Optional)
New Script Capabilities might require setting the model’s property to Sandboxed = false
Open and edit the Test Place if the model is unavailable!
Everything is inside Sticker System folder -> ServerScriptService,
Click to see older videos:
Tons of stickers being used in a server with over 100 players
(Footage taken on PC when there were 899 stickers)
Click to watch in higher quality:
Showing tons of stickers in multiplayers, in the Test Place
(Footage taken on PC when there were 727 stickers)
Showcase in an actual game - MEGA Boss Survival
(Footage taken on MOBILE when there were 111 stickers)
Introduction 
Introduction ![]()
Hi everyone!
Roblox made a great decision by adding chat age groups.
We don’t deserve such a masterpiece of a decision
That’s why I decided to make this system for free
I’ll continue to provide updates to add new stickers, fix bugs or improve the system
Any help and feedback would be appreciated!
API | Functions, Methods, Events 
API | Functions, Methods, Events ![]()
Show all:
- This is more advanced uses only, like selling stickers in a shop, awarding stickers for doing something, strict server controlling in specific situations
- There are also more local functions but they are only used in the same script
Functions:
Server
local Manager = require(game:GetService("ServerScriptService").StickerHandler.Manager)
Requires the module responsible for server sided controls
SetStickersEnabled
Manager.SetStickersEnabled(Enabled: boolean)
When set to false players outside of the bypass list cannot use stickers
GetStickersEnabled
Manager.GetStickersEnabled(): boolean
Returns whether sticker usage is allowed or not
SendNotification
Manager.SendNotification(Player: Player, ErrorType: string, Extra: any, Name: any)
Send a notification to any player with StarterGui:Setcore()
SendNotificationToAll
Manager.SendNotificationToAll(ErrorType: string, Extra: any, Name: any)
Same as above but to all players
ClearCooldowns
Manager.ClearCooldowns(Player: Player)
Clears all cooldowns currently restricting a player
ClearAllStickers
Manager.ClearAllStickers(TargetPlayer: Player?)
Clears all active stickers and sticker weight limits from a player
GetStats
Manager.GetStats(Player: Player): {}?
Returns all saved stat values of a player: StickersUsed, FirstUse, LastUse, Favorites, Unlocked (All are numbers)
UnlockSticker
Manager.UnlockSticker(Player: Player, StickerName: string): boolean
Awards a sticker with Locked = true (Hidden if not unlocked) to a player and then saves the data
RemoveSticker
Manager.RemoveSticker(Player: Player, StickerName: string): boolean
Removes a saved sticker given by the function above, revoking the usage of this one and then saves the data
CheckUnlocked
Manager.CheckUnlocked(Player: Player, StickerName: string): boolean
Returns whether the current sticker is unlocked or not
CheckOwnership
Manager.CheckOwnership(Player: Player)
Returns whether the player meets the requirements for using stickers like owning a Badge, Gamepass, Asset, or by being in a Group at certain GroupRank
Customized in settings. The condition can be All or Any. Also used for individual sticker requirements
ProcessAction
Manager.ProcessAction(Player: Player, Action: string, ReceivedData: any, PlacementData: any)
The main function responsible for doing all server-sided checks, cooldowns, requirements, in order for players to use stickers. Called everytime a signal is fired from the client
All Actions are:
RequestInit- Initiates the data loading and returns itRequestStats- Returns the saved dataRemove- Clears all active stickersToggleSetting- Updates a setting optionFavorite- Updates the ordered list of saved favorite stickersUse- Uses a sticker if all conditions are met
Client:
local ClientFunctionBank = require(game:GetService("ReplicatedStorage").Modules.ClientFunctionBank)
This module can also be required and used from the Server
This is a shared library for many useful functions for me, but I mostly just use the one below for this system
VisualizeEffect
Module.VisualizeEffect(Effect, ...)
If called from the Server: Fires an event then requires the matching module
If called from the Client: Requires the matching module
Requires the requested module matching the name of Effect argument, then passes any arguments (…) and runs it
Responsibles for showing the stickers and any other effects like explosions, lightnings, indicators, etc…
This is how advanced Combat Systems handle the client-sided effects to reduce lag
Methods:
Empty
Cricket noises ![]()
Events:
Server:
local VisualRequest = game:GetService("ReplicatedStorage"):WaitForChild("Events", 10):WaitForChild("VisualRequest", 10)
VisualRequest.OnServerEvent
VisualRequest.OnServerEvent:Connect(function(Player, Action, ReceivedData, PlacementData)
Listens to the signal sent from the Client and then calls this function
Manager.ProcessAction(Player, Action, ReceivedData, PlacementData)
Example
VisualRequest:FireClient(Player, "UpdateStats", {Stats = Data.Stats})
Client:
local VisualRequest = game:GetService("ReplicatedStorage"):WaitForChild("Events", 10):WaitForChild("VisualRequest", 10)
VisualRequest.OnClientEvent
VisualRequest.OnClientEvent:Connect(function(Action: string, Data: {})
Listens to the signal sent from the Server and then performs an action
All Actions are:
InitData- Initiates by requesting data from the ServerUpdateSettings- Updates the GUI behaviors based on changesUpdateStats- Updates the current stats and checks for possible newly available stickerUpdateUnlocked- Updates unlocked sticker list and show themUpdateFavorites- Updates the list of saved favorite stickers and display in the right orderNotification- Shows a notification with info from the Server
Example
VisualRequest:FireServer("Use", StickerName, {
Mode = PlacementMode,
CFrame = PlacementPreview.CFrame,
Instance = Result.Instance,
})
How To Use | For All Questions 
How To Use | For All Questions ![]()
Show all:
How this system works:
- Players can select a sticker from the selection GUI, which sends a signal to the server to check.
- After checking the cooldown, the server will send a signal back to all clients to play the visuals
- Then a bubble popup will appear on the user's head, swinging for a short moment before going away. A sticker frame will also show up on the screen to show who and which sticker they used, just like a livestream emote chat
- Players are able to hide stickers, save favorite stickers in an order, change sticker location with different placement modes, and way more features...
How to award/remove a locked sticker:
- Used for selling stickers in a shop or awarding to players for doing something. Unlocked stickers will auto save
-- Only stickers with Locked = true in the settings can be given
-- Server script. Assuming you already have the Player variable
-- There is a better example in Bocchi The Block model in the Test Place
local Manager = require(game.ServerScriptService.StickerHandler.Manager)
-- Awarding
Manager.UnlockSticker(Player, "Amogus Blue")
-- Removing
Manager.RemoveSticker(Player, "Amogus Blue")
How to make an NPC or anything use a sticker:
-- Server/Local script inside a part in a model
-- There is a better example in Bocchi The Block model in the Test Place
local ClientFunctionBank = require(game:GetService("ReplicatedStorage").Modules.ClientFunctionBank)
ClientFunctionBank.VisualizeEffect(
"Sticker", -- Don't change
StickerName, -- Put the sticker name
script.Parent, -- The target part
--{Color = script.Parent.Color, PositionOffset = Vector3.new(0, 0, 0), SpeedMultiplier = 1, DelayTime = 0} -- Extra but not needed
)
Tutorial on how to set up model OR what to bring over from the Test Place to your game:
Starting from 24/05/2026 update, you don’t need to move the folders anymore if you keep the “Read_Me” script and place the system in somewhere that can run scripts, since it will set up everything automatically
-
Insert the model and move these folders into the correct locations according to their names, respectively and then ungroup them
-
Open this Stickers ModuleScript to change settings or add your own stickers
How to turn a GIF image into an animated sticker:

-
Upload the GIF file to a website like Ezgif to convert the GIF into a Png file with frames (Aka sprite sheets)
-
Pick a number of columns so that the the number of columns and number of rows are close or equal. Example: 5 columns, 4 rows / 20 columns, 20 rows / 1 column, 2 row
If the result comes out as a square then it’s perfect
Why? Roblox can distort uploaded decals if they are too thin, too wide or too long
And then convert it
Keep track of the number of frames and its length (You can go back after the final step or open a new tab)
- In my example, there were 10 frames so I decided to split into 4 columns and 3 rows
Look at the width and height. If any of them is over 1024px then you need to resize the image (Step 4)
In some cases, you need to add a tiny bit of margin space between cells so they don’t look weird with clipping errors
- (Skip this step if both dimensions of the image is under 1024px)
Adjust the percentage and scale the image down until its size is smaller than 1024x1024
- Download the result and upload it to Roblox
-
Open this module and scroll down to find the list of stickers
-
Copy any premade sticker settings and change things up
Remember the number of frames and original GIF length from step 1? Number of frames / Length and you should know how many FPS you need to play the animated sticker at the same speed
- Don’t want to type all of that? Scroll down and use the extension script mentioned below to speed up by like 10x
["Cat Dance"] = {
Type = "Animated",
Color = Color3.fromRGB(255, 0, 255),
ImageId = 78156591234395, -- Remember, ImageId, NOT Decal Id or it won't show up
SpriteSettings = {
ImageSize = Vector2.new(448, 336), -- Width, Height
CellSize = Vector2.new(448/4, 336/3), -- Width/Number of columns, Height/Number of rows
Display = 1, -- What to display if the sticker is not looped
FPS = 20, -- Frames Per Second, aka speed, more = faster
End = 10, -- How many frames the image has
Looped = true -- Animation plays forever or only once
},
},
- Voilà!
How to add sounds to a sticker:
-
Open this module and scroll down to find the list of stickers
-
Copy any existing sticker and change the settings
["GOAT"] = {
Type = "Static",
Color = Color3.fromRGB(85, 0, 255), -- Color of the sticker name
ImageId = 14396413470, -- TextureId, remember to convert if it's a decal Id by pasting it into any decal or image label, then copying the AssetId if it changes into a new number
Cooldown = 15, -- I recommend giving stickers with sounds a longer cooldown to avoid trolling
Duration = 10, -- Some stickers are up to a minute in length or even longer, literally music player, a walking boombox!
PlayRandomSound = false, -- Set to true if you want it to pick a random sound from all SoundSettings. Make sure to check the DelayTime
Description = "Art: @simla1239", -- Optional, you can delete this and the description will not show up
SoundSettings = { -- You can remove this entire block for no sounds
SoundId = 133573554622776,
Volume = 0.2, -- I suggest keeping it small to prevent trolling
DelayTime = 0, -- Time to wait before the sound plays
PlaybackSpeed = 1, -- Literally
TimePosition = 0, -- Sound starts at this second
Looped = false
},
-- Want multiple sounds?
-- Add an incremental number after the string.
-- Ex: SoundSettings -> SoundSettings2 -> SoundSettings3 -> SoundSettingsX...
-- DelayTime should be used to separate the sounds
SoundSettings2 = {
SoundId = 137612233332702,
Volume = 0.3,
DelayTime = 0,
PlaybackSpeed = 1,
TimePosition = 0,
Looped = false
},
},
How to add an explosion effect:
-
Open this module and scroll down to find the list of stickers
-
Use Ctrl + F to search for “EffectSettings”
-
Copy a premade one, paste it in your sticker info and change it to however you like
-- Example
-- It's also possible to add more effects, just add a number after the string like how you add more sounds
-- Ex: EffectSettings -> EffectSettings2 -> EffectSettings3 -> EffectSettingsX...
-- And use DelayTime for the timing
EffectSettings = {
Effect = "Explosion",
Type = "Realistic", -- Look below to see other types of effect
PositionOffset = Vector3.new(0, 0.75, 0), -- By default it will be right at the sticker position (Before the sticker moves up)
Radius = 15, -- Size of the explosion
OuterColor = Color3.fromRGB(255, 204, 117), -- Some explosions might have 2 colors
InnerColor = Color3.fromRGB(255, 170, 0),
DelayTime = 9.8, -- Time to wait before the effect appears
}
Check here to see every possible explosion types: Default, Lightning, Doom, Realistic, Ice, Inferno, Firework, etc…
Where are settings like hotkey/keybind, Gui color, tween time, animation speed, global volume control, default cooldown, amount of stickers used before closing the Gui, etc...:
-
Open this module in ReplicatedStorage → Stickers
-
Change them however you want. I have explanations next to each of them
Is this free? Yes. Can I use it for my game? Yes. Can I sell your default stickers for real money? Not really, read this and the notes below the post as some assets are from the toolbox or other places:
Lol no problem! This is in Resources > Community Resources of course you can use it in your game for free
No credits needed, it’s already great if you keep the default stickers, and perhaps lemme know about your game so I can try it out
A lot of stickers are from various amazing artists, so you should not sell those default ones for robux. I’m still trying to credits as many people as I could
Extension Scripts To Help With Adding New Stickers & Speed Up The Process
Use something like the Tampermonkey extension to run these scripts, they automate things to save time
Cut down from ~1-2 minutes per animated sticker to just under 20 seconds
Features 
Features ![]()
Show all:
-
Supports
Mobile,
PC,
Console with keybinds & buttons -
Even NPCs, models or parts can use stickers (Check the example script in Bocchi The Block from the Test Place, it is a part that uses stickers)
-
Many types of stickers like
Text (Emojis like
or “strings”),
Static (Still images), &
Animated (GIF-like). Their usage can be restricted to owners of a badge/gamepass/asset only -
Auto saves your favorite stickers in a chosen order and simple settings. Datastore also includes saving unlocked stickers (You can award locked stickers from quests, missions, etc…)
-
Can be used like an Emote wheel! Add any animations to any stickers you want in order to play them on both R6 & R15
-
Add any amount of sounds, animations, and effects like explosions. With good timing, you can make very cool stuff. All of them are client sided for optimizations
-
No spamming! Server sanity check with cooldowns & weight limits for individual or different stickers. Set maximum selections before the GUI auto closes and so on
-
Place stickers as overhead bubbles or on various surfaces by changing placement modes
-
Live sticker GUI that appears on the screen like a livestream chat. Text color matches with the player’s name color in the Roblox chat
-
Wheel selection and tween animation for the GUI. PC device can use scroll button to scroll through pages without clicking
-
A search bar to easily find matching names, descriptions, tagged stickers or navigate through pages by typing numbers
Limitations 
Limitations ![]()
Show all:
-
Some sounds might not work because I cannot share
-
Please don’t add individual numbers and letters. They can be combined to form full sentences, personal info or used for a bad purpose because there is no filtering unlike the chat system
-
Please don’t put the premade stickers on sales for Robux since they might be copyrighted. All the rights belong to the original creators
Update Logs 
Update Logs ![]()
Show all:
Click on the arrow to read in details!
Credits 
Credits ![]()
Massive thanks to them for making this possible!
- @ForeverHD - TopbarPlus - Very cool topbar buttons
- @arbitiu - EasySprite - Spritesheet handler for animated GIFs
- @verret001 - DebrisGobbler - Replacement for Roblox’s outdated Debris service which stops working at 1k objects limit
- @loleris - ProfileService - Datastore for saving favorite stickers, stats and other settings
- @ThunderDaNub - Creator, made basically everything else - Please credit me if possible or let me know about your game when using this so I can try it out :D
Honorable mentions:
- Various artists, musicians, creators, memers for making this possible (Credits in each sticker’s description, I’m still adding more as I learn about their origins)
- Toolbox - Effects, sounds and images
Support Me - Check out my game!
Mega Boss Battles | Clothing Store |
Youtube Channel | Discord Server
Support Me - Check out my game!
Model and uncopylocked place link at the top so scroll up lmao
























