# Highlight a chat message on stream

Let your mods put one chat message up big on your overlay with !hl, and take it down with !hl off.

Updated 27 September 2026

## Before you start

You need an overlay in OBS. [Add an overlay to OBS](https://bloopbot.com/docs/widgets-in-obs) takes you from **New overlay** to a Browser Source; a Chat highlight is one more layer on it.

A **Chat highlight** layer shows one chat message at a time — the viewer’s badges and name, then their message with its emotes — for a few seconds, and nothing the rest of the time. Your mods choose which message from chat:

- **Reply** to a viewer’s message with `!hl` to show that message.
- Type `!hl @viewer` to show that viewer’s latest message.
- Type `!hl off` to take it down early.

The commands come from the **Mod commands** pack, and only moderators (and you) can use them.

## 1. Add a Chat highlight layer

1. Open **Overlays** and open the overlay you want it on, then choose **Add** and drag the **Chat highlight** tile from **Chat & info** onto the canvas. **Chat** and **Alerts & pop-ups** on the Overlays page’s **Add** come with one already placed.
2. On an existing overlay, choose **Add** on the left and drag the **Chat highlight** tile from **Chat & info** onto the canvas, or open it and press **Add** to drop it in the middle.
3. In **Content** → **Settings**, give it a **Title** (the small line above the message, such as _HIGHLIGHTED_; leave it empty for none) and a **Text size**.
4. Choose whether it shows the viewer’s badges (**Show badges**), draws their name in their own Twitch colour (**Name in the viewer’s colour**), and lets animated emotes move (**Animate emotes**).
5. Press **Publish** to put the layer on stream.

![The Chat highlight layer selected in the overlay editor: its Content tab shows Title set to HIGHLIGHTED, Text size, Show badges, Name in the viewer’s colour and Animate emotes.](https://bloopbot.com/docs/screenshots/chat-highlight-layer.jpg)

_A Chat highlight layer selected in the editor, with its title, text size and switches under Content → Settings._

Nothing shows on stream until a mod highlights a message: the layer is empty the rest of the time.

## 2. Install the !hl commands

1. Open **Flows**, press **Add**, and search **Mod commands**.
2. Install **Chat highlight: !hl** and **Chat highlight: !hl off** (or the whole pack), and switch both on.

If you already use **Mod commands**, choose **Review updates** in the pack and select the two Chat highlight flows. Your other commands stay as they are.

Each is one small flow you can open and change: a **Chat command** trigger, a **Who can trigger** check set to moderators, and the **Highlight a chat message** step. In **!hl**, the step’s **Show for (seconds)** is 20 — change it to keep messages up longer or shorter (3 to 600 seconds). If there is nothing to show, the bot answers the mod in chat with the reason, such as _No recent message from bob._

## 3. Highlight a message

1. In Twitch chat, hover a viewer’s message, choose **Reply**, and send `!hl`. Or type `!hl @viewer` — for example `!hl @pixel_alice` — to show that viewer’s latest message.
2. The message appears on your Chat highlight layer within a second or two, and leaves on its own after the display time.
3. Type `!hl off` to take it down sooner. Highlighting another message replaces the one that is up.

![A Chat highlight as OBS shows it: the title HIGHLIGHTED, the viewer name Pixel\_Alice, and their message “that clutch was unreal” with a Kappa emote.](https://bloopbot.com/docs/screenshots/chat-highlight-overlay.jpg)

_A highlighted message as OBS shows it: the viewer’s name, then their message with a Twitch emote._

Every overlay with a Chat highlight layer shows the same message, and refreshing a Browser Source, or opening OBS again, keeps it on screen for the rest of its time.

## Moderation takes it down

When a mod deletes the highlighted message in Twitch, times out or bans the viewer who wrote it, or clears chat, the highlight comes down at once. A message that was already deleted is never shown in the first place.

## Try it before you go live

With the layer selected, open **Simulate** in the editor’s top bar and press **Test highlight** to see a sample message for eight seconds, or **Test !hl off** to see one taken down. The tests use a made-up viewer and play on the canvas only, unless you tick the box to play them on the live overlay in OBS too. Nothing reaches Twitch.

A flow’s **Test fire** is simulated as well: its run log says what it would highlight and changes nothing on your overlay.

## Use it in your own flows

**Highlight a chat message** is an ordinary flow step, in the **Overlay** group of the node library. Its **Do** setting either shows a message or takes the highlight down. Which message it shows, in this order:

1. The message the trigger replied to, when a mod replied.
2. Otherwise, the latest message of the viewer named in **Viewer** — `$(1)` is the name typed after the command.
3. Otherwise, on a trigger that carries a message — **Any chat message**, **When chat mentions** — that message. A command’s own message (`!hl` itself) is never shown.

For example, a **When chat mentions** flow on the word _clip it_ with **Highlight a chat message** after it puts every “clip it” message up on stream. The step takes its **error** path when there is nothing to show, with the reason in `$(from.<step>.message)`.

## Style it with custom CSS

Use **Parts** to restyle the layer without CSS — **Panel**, **Title**, **Name** and **Message** ([Style one part at a time](https://bloopbot.com/docs/widget-themes#parts)). Your overlay’s custom CSS can use these names:

| Selector | What it is |
| --- | --- |
| `.w-chathighlight` | The panel. It has `data-state="shown"` while a message is up. |
| `.w-chathighlight-title` | The title line. |
| `.w-chathighlight-badge` | A badge image. |
| `.w-chathighlight-name` | The viewer’s name. |
| `.w-chathighlight-message` | The message. |
| `.w-chathighlight-emote` | An emote image in the message. |

The message slides in when it appears; if your computer is set to reduce motion, it fades in instead.

## If nothing shows

- **The bot answers “No recent message from …”.** Bloopbot remembers the last 50 chat messages, for ten minutes, while an overlay with a Chat highlight layer (or a chat box) is open in OBS. Open the overlay first; messages sent while nothing was open cannot be found by name. A reply still works, because the reply itself carries the message.
- **The bot answers “Reply to a message with the command, or name a viewer.”** A bare `!hl` has nothing to show: reply to a message, or add a name.
- **Nothing happens at all.** Check that both flows are switched on under **Flows**, and that the person typing is a moderator or you.
- **Emotes show as words.** An emote whose picture cannot be loaded is shown by its name instead.
