Skip to main content

Multichat

Multichat is Lumio's unified chat experience. It merges messages from every connected platform — Twitch, YouTube, Kick, and Trovo — into one stream with full emote rendering, moderation tools, reply threading, and a rich user-info modal. It also shows live overlays for polls, predictions, hype trains, raids, ad breaks, and every other mod-facing event so you can react without ever leaving the chat view.

This guide walks through the Chat page, every moderation action, the user info popup and mod notes, the /popout/chat window for OBS, and how to send messages from Lumio directly.

Where to find it

  • Sidebar: Dashboard → Chat.
  • Popout window: /popout/chat.
  • Translations: chat labels live under the chat.* namespace in apps/web/messages/{en,de}.json.

Quick start

  1. Connect at least one streaming platform under Dashboard → Connections.
  2. Open Dashboard → Chat. Messages start appearing as soon as the WebSocket connects — you will see the Connected indicator in the header.
  3. Pick the platforms you want to see using the platform toggles at the top of the feed (Twitch / YouTube / Kick / Trovo). Toggles let you read, send, or both per platform.
  4. Type a message in the footer input, press Enter to send. Use the emote picker (the :) icon) to insert emotes from any of your connected sets.
  5. Click any username to open the User Info Modal for quick moderation context.

The Multichat feed

Message rows

Every row shows:

  • Platform icon (Twitch purple, YouTube red, Kick green, Trovo teal).
  • User avatar (squared, next to the platform icon).
  • Badges (broadcaster, moderator, VIP, subscriber, founder, artist, cheer).
  • Display name in the user's Twitch/YouTube color (falls back to a platform default).
  • Message body with inline emotes rendered from Twitch, 7TV, BTTV, and FFZ.
  • Timestamp (localized).
  • Action row on hover: Reply, Copy, Delete, and the moderation dropdown.

Platform icons, avatars, badges, and timestamps are individually toggleable in the chat settings (gear icon).

Reply chains are shown inline with a small ↳ Replying to {name} marker. Mentions of your own username are highlighted; the highlight style is configurable in the popout settings (Off, Border, Background, Border + Background).

A keyword rule can carry its own highlight color: matching messages glow in that color across the platform tabs (a rule's own keyword tab does not re-color its own rows, since every row there already matches). When several colored rules match one message, the first rule in your ordered list wins. A rule color outranks the automatic role coloring: on a moderator's, VIP's, or self-mention row a matching rule paints both the border and the background in the rule color, while the mod/VIP badge stays visible. Rule colors honor the same highlight-style setting above and are automatically adjusted for contrast in both light and dark themes. Moderation always takes precedence: a message you have set to Monitor or Restrict keeps its amber / red treatment marking regardless of any rule color, and a rule with no color assigned highlights nothing.

A rule matches a message in one of two ways, combined with or: a keyword matches when the message contains it (anywhere, or on whole-word boundaries — set by the rule's matching mode), and a prefix matches when the trimmed message begins with it, case-insensitively. Prefixes are made for command tabs: a rule with the prefix !frage collects every message that starts with !frage but not one that merely mentions it mid-sentence. A rule can mix both — for example prefix !frage or keyword umfrage — and either one alone is enough: a rule needs at least one keyword or one prefix, not both. The two fields are never joined into a single term: a keyword test together with a prefix # matches messages that contain test or that start with # — not the one string #test. To match #test, enter #test itself, either as a prefix (begins-with) or as a keyword (contains). Prefixes ignore the whole-word setting (a prefix is always a begins-with test). Because a prefix rule is exactly what you reach for alongside the global Hide commands switch, its matches stay visible even when that switch would otherwise blank a ! message.

Creating and editing a rule

Rules are built in a full-screen, three-step assistant. Open it from the Filters tab of the chat settings (the New button) or from the + at the end of the chat's tab bar — both open the same assistant and produce identical rules. The assistant fills the whole chat window, so it works inside a pop-out too.

The three steps follow what does the rule match?where does it apply?how is it shown?:

  1. Rule — the rule's name plus its keywords and prefixes (both chip fields: type a value and press Enter or ,). You cannot leave this step until the rule has a name and at least one keyword or one prefix.
  2. Scope — the matching mode (anywhere vs. whole word) and the platform the rule applies to. Both have defaults, so you can pass straight through.
  3. Appearance — show the rule as its own tab, give it a highlight colour, and pick a notification sound (with a preview button). These come last on purpose: for a quick command tab you just press Next twice.

When you create a rule the assistant is linear — Back and Next, with the finish button only on the last step. When you edit an existing rule the same assistant opens with every step clickable in the progress bar and Save active on every step, so you can jump straight to Appearance, change a colour, and save without touching the other steps. Closing the assistant (the ×, Cancel, or Escape) discards everything — a half-filled assistant never leaves a rule behind.

Keyword tabs and history

A keyword rule can also appear as its own tab above the feed — a filtered view that shows only the messages matching that rule. Keyword tabs behave like the main feed, with three additions:

  • History back-fill. A keyword tab starts from what is still in the in-browser buffer, then pulls older matches from the server as you scroll up — the same infinite-scroll as the main feed, but querying the keyword search over the last 12 hours. Live and back-loaded messages are judged by the same matcher, so a message never shows in one place and not the other. If a fetched page happens to contain no visible match, the tab loads on automatically — capped, so a keyword with no recent hits never loops.
  • Older-message marker. Rows pulled from history carry a muted older tag and always show their timestamp (even when timestamps are switched off globally), because for a keyword tab when something was asked is the point. A single divider separates the back-loaded history above from the live buffer below.
  • A named end. When there are no older matches left in the window, the feed shows No older matches in the last 12 hours instead of the scroll indicator simply vanishing. Because a keyword search is time-bounded and retention trims old data, reaching this end is normal.

Each tab keeps its own scroll position, unread divider, and jump-to-latest counter: switching tabs and back returns you to exactly where you were reading, and one tab's new-message counter never leaks into another.

Entering a keyword tab that has unread matches draws a new messages line at your read boundary and lands you there, so the matches the badge counted are the first thing you see. Leaving that tab counts as read: as long as you did not scroll while it was open, the line does not come back when you return — unless new matches have arrived since, which draw a fresh line. The preserved read position of the other views is unaffected: scroll up to read history in All (or a platform tab), switch away and back, and you return to exactly that spot with its divider intact, because the messages below it there are genuinely still unread.

The tab bar

Platform tabs and keyword tabs share one row at the top of the chat. When there are more tabs than fit — many rules, or a narrow pop-out — the row scrolls sideways instead of wrapping onto a second line, so the chat never loses height to the tab bar. The + (new rule) and the gear (settings) sit outside the scrolling area and stay in place; everything else scrolls.

  • On a mouse/desktop, a left and right arrow appear at the edges of the row only while there is more to reach in that direction, and a soft fade marks the scrollable edge. Click an arrow to scroll the row.
  • On touch, there are no arrows — swipe the row sideways instead.
  • The active tab always scrolls into view when you select it, and again after a reload restores your last tab, so the tab you are reading is never hidden off-screen.
  • On narrow widths an inactive keyword tab collapses to just its colour dot and unread count to save room; the active tab keeps its label, and hovering a collapsed tab shows its name.

Reordering. On a mouse you can drag a keyword tab left or right to reorder it — a click still just selects the tab; only a small drag starts a move. Touch keeps the up/down arrows in the Filters settings list for reordering. Both write the same order, and it survives a reload.

Hide and highlight lists

The Filters tab of the chat settings (gear icon) carries four editable lists, grouped under Hide and Highlight. Each is a chip field: type a value and press Enter or , to add it, Backspace on an empty field removes the last chip, and the × on a chip removes it. Every change is saved to your browser immediately and survives a reload — including in a token pop-out opened without signing in.

The two user lists — Hidden users and Highlighted users — suggest matching viewers as you type (from two characters on), drawn from the people your account has seen in chat. Pick one with the mouse or the keyboard (/ to move, Enter or Tab to take the marked entry, Esc to close) and the exact username is added — so the rule keeps matching even after that viewer changes their display name. A rule is not tied to a platform: one entry matches the same name everywhere you are connected, and a name seen on several platforms appears once. The suggestions need the View user info permission; without it — or if the lookup is briefly unavailable — the field simply lets you type the name in by hand, exactly as before. The Command prefixes and Hidden words lists are word lists and do not suggest.

Under Hide:

  • Hidden users — messages from these users are hidden. The match is case-insensitive against the username and the display name.
  • Command prefixes with a Hide commands switch — while the switch is on, any message whose text starts with one of these prefixes is hidden. ! is pre-filled; add your own (for example # or ?) or remove them. The switch is the master toggle — with it off, the prefixes are ignored.
  • Hidden words with a Whole word only switch — messages containing one of these words are hidden. By default the word matches anywhere in the text; turn on Whole word only to match on word boundaries instead (so art no longer hides start).

Under Highlight:

  • Highlighted users — messages from these users get a highlight colour, matched the same way as the hidden-user list. Each highlighted user has its own colour, edited from the colour button on the left of the chip — a small pill showing the current colour and a pencil icon. Clicking it opens a colour dialog with a Highlight switch, the colour picker, a Default colour option, and a live preview of a chat line in the chosen tone. Leave the switch on and keep the default to use the standard highlight colour, pick a colour for a custom one, or switch it off to keep the name in the list but stop highlighting it (the chip then reads dimmed, with no colour dot). Changes apply only when you press Apply; Cancel discards them. This highlight overrides the automatic mod/VIP row colouring — a highlighted moderator's row shows the highlight colour, not the mod colour — while their mod/VIP badges stay visible. Choosing a custom colour only changes how the row looks; it does not change priority — the highlight still ranks below a self-mention, a keyword-tab colour, and any moderation treatment, and it follows the same border/background highlight style as the rest of the chat.
  • Notification sound — one built-in sound that plays when any highlighted user sends a message. Pick a sound from the dropdown — twelve built-ins grouped by character (Chime, Ding, Marimba, Pop, Blip, Soft, Bubble, Click, Knock, Alert, Arpeggio, Cascade) — or leave it on No sound. Every row has its own play button, so you can preview each sound right in the open menu (it plays the row you click without changing your selection or closing the menu), audible even when the volume slider is at 0. All twelve are loudness-matched, so switching between them does not jump in volume. This is one sound for the whole highlight list — not a separate sound per user. A switched-off highlighted user is silent, exactly as their row is no longer coloured. If a message both belongs to a highlighted user and matches a keyword rule that has its own sound, the keyword rule's sound wins — the same order as the colour cascade. The shared Notification volume slider and its 1500 ms anti-spam gap cover this sound too, so there is no second volume control and no double-ringing.

A message you sent yourself is never hidden by these lists, and a message under a Monitor or Restrict moderation treatment always stays visible with its treatment marking, regardless of the hide lists. A keyword-tab match also shields a message from the hide filters, so a !frage tab is not blanked by the default ! command prefix.

Hidden and deleted messages

Filter-hidden messages are only hidden in your Lumio view. They are not deleted from the source platform and they are not written as moderation actions. By default a matching message is removed from the feed entirely — the row does not appear at all. If you would rather keep a placeholder you can click to expand and moderate what the filter took away, switch Hidden Messages to Show placeholder. A keyword rule's own tab also shields its matching rows from the hide filters so the tab does not immediately hide the messages it was created to collect.

Deleted messages are different: Lumio marks a row as deleted when it receives a platform deletion event or when a delete/ban/timeout action succeeds in Lumio. Twitch and YouTube deliver individual message deletions to Lumio, including moderator deletes and YouTube author retracts. Kick does not deliver individual message deletion events, although Kick bans still sweep the user's messages. Trovo does not deliver delete events. The Deleted Messages setting only controls rows Lumio has actually received as deleted, and it affects the live Multichat feed only; the User Info Modal still shows deleted rows in that user's message history with a muted deleted style.

Notification sounds

Lumio plays a notification sound from two sources: a keyword rule that matches a message, and the highlighted-user list (see Hide and highlight lists above). In each case, pick one of twelve built-in sounds — grouped by character from soft to attention-grabbing (Chime, Ding, Marimba, Pop, Blip, Soft, Bubble, Click, Knock, Alert, Arpeggio, Cascade) — or leave it on No sound. Each row in the dropdown has its own play button that previews that sound in place, without changing the current selection, so you can audition the whole catalog without picking blindly. The sounds ship with Lumio — there is no upload — and are all loudness-matched, so switching between them never jumps in volume.

  • A keyword rule's sound plays on any live match, regardless of whether the rule is shown as a tab — a rule set to highlight-only (no visible tab) still rings.
  • The highlight-list sound plays when any switched-on highlighted user posts. It is one sound for the whole list, not one per user.
  • If a message matches both a sound-carrying keyword rule and a highlighted user, the keyword rule's sound wins — the same priority as the colour cascade — and only one sound plays.
  • A sound only plays for a message you can actually see. Hidden messages do not ring: a message removed by your hidden-user or hidden-word lists is silent, even if its author is also a highlighted user — you cannot get a chime for a line that never appears. Your own messages and messages under a Monitor/Restrict moderation treatment are silent too. (A keyword-rule match still shields a message from the hidden-word list, so such a message stays visible and rings.) Sounds from a platform or keyword tab you are not currently viewing do still play — the chime is the cue to look there.
  • A single Notification volume slider in the chat settings' Filter tab controls the volume for both sources; set it to 0 to mute every notification sound.
  • Rapid matches are rate-limited, so a burst of matching messages plays at most one sound at a time rather than a wall of overlapping beeps.
  • Sounds work the same in the pop-out chat, including a token pop-out opened without signing in.
  • Browsers only allow audio after you have interacted with the page. Until you click or type once, a queued sound is skipped silently — no error, no prompt.

Platform toggles and YouTube multi-stream

The platform-icon row at the top of the feed lets you enable/disable each platform for reading and sending independently. YouTube gets an extra dropdown for broadcast selection:

  • All Broadcasts shows messages from every YouTube broadcast (current and historical).
  • Selecting a specific broadcast filters the chat feed to show only messages from that broadcast's live_chat_id. Messages from other platforms (Twitch, Kick, Trovo) are always visible regardless of the YouTube broadcast filter.
  • Outgoing messages are sent to the selected broadcast. Replies always target the original message's broadcast.
  • The dropdown works in both the dashboard and the popout chat window (browser source).

Alerts overlay

When a mod-facing event fires, a compact alert card pins to the top of the feed so you can act from the same screen:

  • Raid incoming — shows the raider and viewer count, with quick links.
  • Raid outgoing — the Cancel Raid button stays visible until the raid fires.
  • Ad break — shows the duration and whether the break was Automatic.
  • Hype Train — live progress and Hype Train Complete summary at the end.
  • Polls — running totals per option with an End Poll shortcut.
  • PredictionsLock, pick a Winner, or Cancel (Refund) from the card.

These shortcuts require the relevant chat permission (chat:raid, chat:poll, chat:prediction).

Sending messages

The footer input supports:

  • Plain textEnter sends, Shift+Enter inserts a newline.
  • @mentions — autocompletes against recent chatters.
  • Emotes — click the smiley icon to open the Emote Library (Recently Used, per-channel sets, and Twitch Global). Search with the placeholder Search emotes….
  • Reply — click Reply on any message; the input shows Replying to {name} with an X to cancel.

Sending requires the chat:write permission, plus a connected login OR bot connection for that platform. Platforms where you do not have send access are greyed out in the footer.

Moderation actions

Hovering any message reveals a chevron that opens the Moderation dropdown. Lumio enforces a role hierarchy (broadcaster > lead moderator > moderator > user) so moderators cannot act on the broadcaster or peers.

What each platform supports

Moderation actions depend on what the platform's API allows. Actions a platform cannot perform are greyed out in the dropdown and the user info modal, so you can see the limit before you click:

PlatformDelete messageTimeoutBan
Twitch
YouTube
Kick
Trovo

Kick's API only supports deleting messages; Trovo does not expose a public moderation API, so its ban and timeout are unavailable. Treatments (monitor / restrict, below) are Lumio-native and work on every platform regardless of this table.

If a moderation action fails for any other reason — an expired login, a missing scope, or a platform rate-limit — Lumio shows an error message with the reason and leaves the user's messages in place. It never pretends a failed ban succeeded.

Delete a single message

Click the trash icon or Delete in the menu. Deleted messages show Deleted message in-place so the context of a conversation remains visible for other mods. Requires chat:delete.

Timeout

Presets: 1min, 5min, 10min, 30min. Pick Custom timeout… for any duration in minutes. Every timeout opens a confirmation dialog:

Are you sure you want to Timeout 10min {name}?

Requires chat:timeout.

Ban

The Ban user button is destructive and always requires confirmation. Bans are permanent until reversed on the source platform. Requires chat:ban.

Treatments (monitor / restrict)

Lumio-native moderation flags that travel across platforms:

  • Monitor user — flags the user; their messages get a subtle amber badge and mod notes are surfaced.
  • Restrict user — stronger warning; messages get a red badge and are down-weighted in alerts.
  • Remove treatment — clears the flag.

Treatments are stored in Lumio, not on the platform, so they work even for platforms without native mod actions (Trovo, Kick).

Raids, polls, and predictions

Start or cancel a raid from the Raid command in the alerts overlay. Polls and predictions started from Lumio use the same input flow as the Twitch dashboard and require chat:poll or chat:prediction respectively.

User Info Modal

Click any username (in chat or in the event feed) to open a detailed profile:

  • Follower / Not following badge with Following since {date}.
  • Account created date and platform ID.
  • Bio (where the platform exposes one).
  • Tabs:
    • Messages — recent messages by that user in this channel, with the same moderation controls as the live feed.
    • Mod Notes — private notes shared with your mod team. Create, edit, and delete with chat:notes. Great for tagging repeat offenders or regulars.
    • Events — every event this user has triggered (follows, subs, cheers, raids, superchats, tips).
  • Moderation History — timeline of bans, unbans, timeouts, deletions, and treatment changes, each annotated with by {moderator name}.
  • Currently Banned — shows Banned on {date} if the user is still banned on this platform.
  • Open Profile — deep link to the user's page on the source platform.
  • Highlight / Hide — one-click shortcuts to the Highlighted users and Hidden users filter lists (see Hide and highlight lists), to the left of the moderation buttons. They write the same name-based rule the Filters tab does, so the change also shows up there. Both rules are cross-platform: the button hides or highlights that name on every platform (and any same-named account elsewhere) — the button tooltip spells this reach out, which is why the buttons carry no platform icon. Each button toggles: click again to remove the rule (or, for a highlight you had switched off in the Filters tab, to switch it back on). While a user is hidden the Highlight button is disabled — hiding wins over highlighting. Hiding removes all of that person's messages from the live feed at once; the button flips to Hidden ✓ so you can undo it, and the Messages tab notes that you are still looking at their history even though the live feed dropped them. These buttons appear only in the chat modal, not when the card is opened from an event row.

Requires chat:userinfo (or events:userinfo when opened from an event row).

Popout chat for OBS

/popout/chat gives you a borderless chat window perfect for an OBS browser source, a Stream Deck, or a secondary monitor. The same moderation tools are available subject to the token's permissions.

  1. Generate a popout token under Account → Tokens and copy it.
  2. Open /popout/chat?token=YOUR_TOKEN in OBS as a custom browser dock, or in a secondary browser.
  3. Use the Settings cog (top right) to configure:
    • General: Font Size, Emote Size (a 0.5×2.0× scaling factor for inline emotes, shown as a factor next to the slider), Timestamp, User Badges, Platform Icon, User Avatars, Deleted Messages, Show Header, Show Chat Input, Highlight Events, Theme, and Language.
    • Filters: Hidden Messages (Remove entirely by default, or Show placeholder), the Hide and Highlight lists (hidden users, command prefixes with a Hide commands switch, hidden words with a Whole word only switch, and highlighted users each with a per-user colour that can also be switched off, plus one Notification sound for the whole highlight list), Notification Volume, and the keyword-rule list for editing, reordering, or deleting keyword tabs.

Popout display settings are stored in the browser's localStorage for the current popout variant. Chat filters and keyword tabs use Lumio localStorage keys with an account-scoped value plus an unscoped mirror so token popouts can reuse the same filter setup without a signed-in session.

Permissions

PermissionWhat it unlocks
chat:readView the Multichat feed and the popout
chat:writeSend messages from Lumio
chat:deleteDelete individual chat messages
chat:timeoutTimeout users (preset and custom durations)
chat:banBan users
chat:userinfoOpen the User Info Modal
chat:notesRead and write mod notes
chat:raidStart / cancel raids
chat:pollCreate and end polls
chat:predictionManage predictions (lock, resolve, cancel)

The broadcaster / moderator hierarchy applies on top of these permissions — moderators cannot delete the broadcaster's messages even with chat:delete, for example.

Tips & best practices

  • Use treatments instead of escalating immediately. Monitor User lets you keep an eye on borderline chatters before committing to a timeout or ban, and the badge stays visible across platforms.
  • Add mod notes the moment a user does something worth remembering. Future you (and every co-moderator) will thank you.
  • Separate popouts for your team. Give each moderator their own scoped token with chat:delete, chat:timeout, and chat:ban but not chat:notes if you want to keep notes private to a smaller circle.
  • Keep the alerts overlay visible during events. The raid/ad-break/hype-train cards are context you cannot get from the native platform dashboards without tab-switching.
  • Emote search is fuzzy. Type the first few letters to narrow huge emote collections like BTTV/7TV channel sets.

Troubleshooting

Messages appear only from some platforms

  • Check the platform toggles at the top of the feed — a toggled-off platform is hidden.
  • Check the Filters tab in the Settings cog. A hide-user, hide-command, or hide-word rule removes matching rows from the feed entirely by default (or collapses them into a placeholder if you switched Hidden Messages).
  • Open Dashboard → Connections and confirm each platform is Connected as ….
  • For YouTube, make sure the dropdown on the toggle includes the stream IDs you expect.

Connection lost — reconnecting… banner

The WebSocket dropped. Lumio reconnects automatically with exponential backoff. If it persists, your token is probably expired — log out and back in.

Send box is disabled

You do not have chat:write, or you have no login/bot connection for the currently-filtered platform. Check your role and confirm the bot connection under Dashboard → Connections → Bot.

Ban / timeout silently fails

The target may outrank you — Lumio refuses to run a moderator action against the broadcaster or (on Twitch) against a lead moderator from a regular moderator. You will see Mod-only on Twitch or the button disabled on the dropdown.

Emotes render as plain text

The emote library has not loaded yet (check the loadingEmotes state) or the channel does not have the relevant 7TV/BTTV/FFZ set linked. Click Refresh playlists in the popout, or reload the page to force a refetch.

Lumio deliberately intercepts outbound links with the External Link modal so a single misclick cannot push a viewer to a malicious URL. Approve only links you actually trust.

  • Events — shares the same WebSocket pipeline; mod-facing events surface in the chat alerts overlay.
  • Roles & Permissions — how to design scoped mod roles.
  • Connections — connect platforms and custom bot identities.
  • Overlays — show Multichat on stream with the chat widget.