How emotes work

A modern Twitch or Kick chat is mostly emotes. To analyse it properly, the app needs to know which strings of characters are emote codes — and to display the actual emote images in grids and charts, it needs to fetch and cache those images.

This page explains exactly what's loaded, what isn't, and where to step in when emotes aren't showing up.

The Emote Usage chart showing emotes rendered as bubbles, with messages below using inline emotes
Once a source is loaded, emote codes render as the real graphics throughout the app.

The five providers

Stream Chat Summary recognises emotes from five providers:

ProviderWhat it provides
TwitchTwitch global emotes (Kappa, PogChamp, etc.)
BTTVBetterTTV global + per-channel emotes
7TV7TV global + per-channel emotes (Twitch and Kick)
FFZFrankerFaceZ global + per-channel emotes
KickKick's per-channel emotes

Each provider distinguishes global emotes (the same everywhere) from channel-specific ones (custom to a particular streamer).

What's loaded automatically

When you first launch the app, only global sources are seeded:

That's it. Channel-specific emotes — the custom set that comes with a particular streamer's BTTV, 7TV, FFZ, or Kick account — are never added automatically.

Channel emotes are opt-in

Importing a VOD from streamer_name does not fetch that channel's custom BTTV / 7TV / FFZ / Kick emotes. You add channel-specific sources manually via the Emote Manager, once per channel you care about.

How emote recognition works at import time

When you import a log, the app:

  1. Looks at every loaded source — all the globals, plus any channel-specific sources whose channel matches the streamer being imported
  2. Combines them into a single list of emote codes the app should recognise
  3. Uses that list to show emotes inline in messages and to classify emote-only messages

If a channel-specific source for the streamer hasn't been added in the Emote Manager, its custom codes won't be recognised at all — they'll show as plain text in messages, and emote-only messages that used them will be classified as "Other".

When are sources actually refreshed?

The only times the app reaches out to fetch fresh emote data are:

Importing a log does not refresh anything. Replaying a log does not. Live capture does not. If a streamer adds new tier emotes mid-stream, open the Emote Manager and refresh that channel's source to pick them up.

What's saved

The list of emote codes for each source is saved to disk so you don't re-download it every time you open the app:

%LocalAppData%\Stream Chat Summary\emotes\

One small file per source — for example one for the Twitch global set, one for each channel's BTTV set you've added, and so on.

Emote images are downloaded as needed while the app is running, then discarded when you close it. Reopening the app re-fetches images as you view them — fast on a normal internet connection.

Inline rendering

Once a source is loaded:

Codes that aren't in any loaded source are left as plain text — the single most common symptom of a missing channel source.

Animated emotes display as static

GIF, WebP, and other animated emote formats are supported as recognisable codes and render with the emote's image — but they display as a single static frame rather than animating in place. This applies everywhere emotes appear: message grids, the Emote Usage chart, and tooltips.

When the same code lives in two sources

The same emote code can exist in multiple providers — PogU is in both BTTV and 7TV, for example. When that happens, the last source loaded wins, and that's the image you'll see rendered.

The loading order is:

  1. Global sources first (Twitch → BTTV → 7TV → FFZ)
  2. Then channel-specific sources in the order they appear in the Emote Manager grid

If a specific emote consistently renders from the "wrong" provider, reorder your sources in the Emote Manager (remove and re-add) so the preferred one is added last.

Practical workflow

For a streamer you analyse regularly:

  1. Open Emotes → Emote Manager
  2. Click Add Source and add their BTTV, 7TV, and/or FFZ channel sources (and Kick channel emotes if relevant)
  3. Click OK — the sources fetch immediately and the grids/charts refresh
  4. From now on, every import of that streamer's content uses those emotes

For one-off analysis of an unfamiliar streamer, you can skip this and accept that custom emotes will render as text — the global Twitch / BTTV / 7TV / FFZ sets still catch most of the meme staples.


Next: The Emote Manager →