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 five providers
Stream Chat Summary recognises emotes from five providers:
| Provider | What it provides |
|---|---|
| Twitch | Twitch global emotes (Kappa, PogChamp, etc.) |
| BTTV | BetterTTV global + per-channel emotes |
| 7TV | 7TV global + per-channel emotes (Twitch and Kick) |
| FFZ | FrankerFaceZ global + per-channel emotes |
| Kick | Kick'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:
- Twitch — Global Emotes
- BTTV — Global Emotes
- 7TV — Global Emotes (Twitch)
- 7TV — Global Emotes (Kick)
- FFZ — Global Emotes
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.
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:
- Looks at every loaded source — all the globals, plus any channel-specific sources whose channel matches the streamer being imported
- Combines them into a single list of emote codes the app should recognise
- 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:
- First app launch — global emote sets are downloaded
- Add Source in the Emote Manager — the new source is downloaded straight away
- Refresh Selected / Refresh All in the Emote Manager
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:
- Every emote code in a message grid is replaced with a small inline image (~24px tall)
- The Emote Usage chart shows the actual emote images as bubbles, sized by frequency
- Hovering a cell with emotes shows a tooltip listing the emote codes
Codes that aren't in any loaded source are left as plain text — the single most common symptom of a missing channel source.
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:
- Global sources first (Twitch → BTTV → 7TV → FFZ)
- 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:
- Open Emotes → Emote Manager
- Click Add Source and add their BTTV, 7TV, and/or FFZ channel sources (and Kick channel emotes if relevant)
- Click OK — the sources fetch immediately and the grids/charts refresh
- 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 →