Emote System Updates!

PNG Support for user uploaded emotes.

This update would bring PNG support for all community uploaded emotes. This would replace the current SVG support at this time

All SVGs which have currently been uploaded by the community will continue to work as normal, going forward the only option will be for PNG.

The why:

  • A complete overhaul of the emote system is planned to bring both stickers (higher resolution images) and emotes (lower resolution images such as PNG) in the future, this helps lay the framework for making this possible.

  • Many users convert PNG to SVG which is thus not a true SVG and against the idea of supporting SVG therefore the intention is to make things easier for the community through PNG support (something which has been widely asked for)

  • In opening up PNG support we are now able to support up to 10 emotes per user (combination of PNG or GIF)

More info:

  • Emotes will continue to work as they always have, only difference is now they will be PNG which you select to upload

  • Prefixes, how you select them etc will remain unchanged

More updates to come, as I get time to work on things including sub only and global options - no timescale is offered, please just keep checking back here for updates.

Personal note:

Thank you for all the support as I have been exploring coding on Glimesh. I hope that by bringing small changes I can help improve things for everyone. This is the start of a much longer road ahead, and while things may slow from time to time, I hope to continue improving this system and bringing updates as regularly as I can, whether it be a PR or just updates on how things are progressing.

Thanks all!


:clap: KUDOS :clap:

This actually gets me really excited for when we can eventually get our channel emotes global

1 Like

The thing I am dredding most, well not dredding, but know will be the trickiest thing, is coding the capacity to have global sub only emotes. I have the theory in my head down for it, whether its the most efficent i dont know but its likely that the check against all the global emotes to see if the user is subbed to use them will be cached to prevent it running that check every time a user loads a page, but its not something I have done before, so it will be very much a learning curve, how steep that curve is, time will tell :smiley:

1 Like

Appreciate you taking this on. As you said it’s a widely suggestion/requested feature so making any progress on it is great.


I’ve given some thought to the emote stuff too and these are just some suggestions on a possible way to do it but not necessarily the right way to do it.

I believe we retrieve the user’s emotes as json that is put onto the chat panel. My guess is you could store that json in the browser’s localStorage like we do with the volume settings here. Then it would be a matter of creating a PubSub channel similar to the “channel” channel that listens for changes to the emotes the user has access to and will only update the json in the localStorage when a signal is sent over that channel (example). You’ll have to add code to the emote approvals and new subscriptions to send a signal over the new channel to update the user’s cached emotes.

Beyond that it’s just SQL to get the emotes the user has access to like the following (this doesn’t take into account subscribers banned in chat only eliminates platform banned users or users without a channel or a disabled channel):

select * from emotes
inner join channels on emotes.channel_id = channels.id
inner join users on channels.user_id = users.id
where emotes.approved_at is not null
and emotes.is_subscriber_emote = true
and channels.inaccessible = false
and users.is_banned = false
and users.can_stream = true
and users.id in (select streamer_id from subscriptions where user_id = ^logged_in_user_id)

"is_subscriber_emote" would be a new database field, and "^logged_in_user_id" would be the logged in user

Again this is only a possible way to tackle it and it doesn’t cover edge cases – I thought I’d just share some of the initial design thoughts I had in case it would be helpful.


To be honest this is literally me with most projects I submit. If it works ill put it through and I can always be corrected if there is a better way, I don’t really mind if I end up doing something a couple of times in different ways because I am still new and learning a lot so it helps really.

I appreciate the thought and notes on this, I really do. Certainly helps gives me some direction and food for thought. There’s certainly a lot to consider and work out in this beyond just the how to do the basics of it sure, the example being make sure banned users are covered too.

Im hoping to formulate a solid plan regarding the considerations to put through here in coming week, and in the mean time, if time allows, have a play with the permissions side more generally just to get a simple toggle on and off for sub and global individually functioning. (not just the toggle, the permissions tied to that toggle… for clarification, the toggle buttons are already there without any functionality right now)

Full disclosure to anyone reading this: I actually have a rotator cuff injury ive been carrying for a few weeks now, this is slowing down how long I can sit at my PC for in a day and type without pain. Its on the mend but progress is currently hindered by this a lot.

Thank you again :slight_smile:

1 Like

Glad to hear the emotes have been improved.

1 Like

In fairness, the changes haven’t been implemented yet. I believe they need more development to be sure it all works best it can

The actual PNG part is up on Github, so that can be pushed if/when the developers think its a good time to do so.

The rest ill be working on separately. I plan to push updates out in stages, minimise any potential issues related to breaking anything xD

Hey all,

Just wanted to update on this. The original PR for just PNG has now been accepted cheer, when/if this gets rolled out is not up too me so please don’t ask me, I simply do not know!

I have been playing round slowly but surely with the options, as always, no timescale is offered. My shoulder is still a bit hit and miss so I am very much just taking my time with things so as not to set myself on the backfoot.

I would offer screenshots but everything is a little less than laid out nicely right now, hopefully I will have some more solid updates in the coming days for how things are progressing.

I did run into a wall with getting the options to save, which I believe is more likely down to my understanding of code than anything else, but I have reached out for help on that so will hopefully have that up and running soon. Once I do I shall hope to share some more concrete updates.

Thanks all!


Updates! not especially exciting but progress.

Thanks to some help from clone we now have actual working, saveable preferences. Right now these preferences do absolutely nothing in terms of actually making them display based on sub status or platform wide, but, I just hit such a roadblock with getting the options to save, I really just wanted to overcome that hurdle before placing more obstacles in my path.

The next step will be linking these up to function as a sub/non sub, global usage etc.

So small update, but huge victory for me personally.

also please ignore any poor wording in the image etc, all of this will be tidied up before final submit


Just so I’m sure on what I’m seeing here, this will be your emote page in settings (Glimesh), correct? This will be configurable at any time and not just at the point of upload, right?

Looks great so far, excited for the next steps! Awesome job so far.


Once your emotes have been approved by GCT then you will see these options on all approved emotes in the emotes dashboard.

You can toggle these on and off at any time at your leisure, they will be off my default. :slight_smile:


Any ideas around what happens if there is an emote that we deem acceptable on a per-channel basis, but not for global use (for example, pepefrog emotes)?

It would be possible with additional coding (how complex without looking idk) to add in some additional permissions to the GCT dashboard which has a more refined approval basis, so we approve use for all, or some, of the settings.

1 Like

Turns out, not that difficult.

Top button is the approve for everything so channel use, sub use and global use.

2nd button prohibits global use.

I cant imagine a case use for us needing a allow global but not sub use, as if we aren’t allowing sub use likelihood is we are rejecting it.


In clicking the 2nd option it would display as the above image here, with a information for them explaining its prohibited and directing to support for more information if they want/need it. The information is designed to appear under the emote which has the prohibits set on it.

Any feedback on this part do let me know, as I just knocked it up more as a proof of concept than anything to see how difficult it would be.

Thanks for the feedback :smiley:

*all previously allowed emotes we have on the system prior to this update will recieve all actions, so all currently approved emotes would be allowed for sub and global use. Reason for this was to prevent people needing to reupload everything again, especially those which have SVG, as right now the way the system works, we are allowing all SVG files to be retained, only going forward will it switch to PNG only - as those who have SVG wouldn’t be able to reupload if they are only in SVG. Plus it makes a lot more work for the streamers.

1 Like

Might I suggest making it “Global Approval” and “Limited Approval”? Might look cleaner :man_shrugging:

…not that it affects me in anyway lol

1 Like

Presently all wording on buttons is just placeholder text for me, so i could make sense of where things are. Its the same with the toggles, i want to clean those up as well eventually.

1 Like

Some failures on some complex code, (which I expected when pushing the PR) which ive reached out to get some advice towards whether I can change them, or if it can be accepted as it is because its a simple as itll get.

Full write up on what this PR includes when I can work out the words, because there is an awful lot to unpack :slight_smile:

The Final Update, Maybe?

insert Final Countdown music here

Hey everyone!

As you can see from the above post I have now submitted a PR over to Glimesh. In plainspeak this PR is bringing you improved emote options!

  • Part 1: User Options

Require Channel Subscription:

Pretty simple, toggle this on and only users who are subscribed to your channel will have access to this emote. Non-subscribers will not be able to see this emote in the picker due to the limited functionality behind the current emote selector - however, the emote owner will have access to be able to use their subscriber locked emotes, so you can advertise them to people in your chat still if you wish!

Allow Platform use:

Toggle this on and your emote will be available to use on the website. You can only have 1 emote used platform wide, this is to keep the emote picker manageable. As an addition, you cannot circumvent this, clicking allow platform use on another emote will automatically disable it for all others.

Require Channel Sub & Allow Platform use:

You can toggle both of these on, in doing so a channel subscriber will be able to use your subscription locked emotes anywhere on the platform - again though, the same rules apply, if you made your subscriber emote your platform emote as well, this would count as your 1 platform emote.

Hide Emote:

Additional feature hurray seasonal emotes? people overusing an emote in your channel? toggle this on to disabled that emote from being used anywhere whether it be channel or platform - you can reinstate your emote without reuploading at any time, just click the toggle again!

On Platform use being disallowed:

If the GCT review your emote and feel it is within channel and sub only use, but may be a controversial emote (see: pepe) due to the history of the emote and its use, we can restrict it so it cannot be used platform wide. If this happens you will not see the platform use toggle and will be presented with a message beneath the emote explaining this is not allowed and where to go to get further information should you wish regarding this decision.

  • Part 2: GCT Options

After talking to Paco earlier in this thread about best ways to approve emotes via GCT now we have some new options on emote approval

GCT approval

I have taken on board Banjax’s advice on button wording:

Global Approval:

Allows an emote to be approved on all facets sub, platform and channel.

Limited Approval:

Allows an emote to approved for sub and channel use but not platform use, as explained above this will present the user with a message to notify them in their emote dashboard.

For anyone who has pre-existing emotes on the platform these emotes will remain and all options will be available to them by default, however, GCT will be able to manually review any platform available emotes and disable them from platform use. This a catch all for those which have previously been approved from a Channel only prespective, but also future proof for any emotes which may end up being used in a hateful way so that we can turn these off. If a GCT member does disable from global use this way, the user will be presented with the same informational message as if it had been disabled at point of approval, as outlined above.

  • Final part

While this may not be the final iteration of emotes, it is the current iteration for me. I hope everyone likes it, any feedback or thoughts please do let me know on this thread.

Otherwise, thank you all for the support and for reading my ramblings.

<3 peace all! - Berribot out.