On stream
Text-to-speech
Landmark can read messages aloud on your stream — chat, donations, alerts, and anything an element wants to speak. You decide who gets read, on which platforms, in which voice, and whether it's free or paid — one ordered rule at a time. Free voices cost nothing; realistic AI voices are billed to you as usage.
Where it speaks
Every read flows through the same queue and plays through one audio source. The triggers are:
- Chat reading
- Read chat messages out loud as they come in. On by default for everyone, on every connected platform, in the free Brian voice — nothing actually speaks until a playback source is open (see Playback).
- Donation & event reads
- Read the message attached to a tip, bits/cheer, sub, gift, raid, or channel-point redeem — optionally only above an amount you set.
- Alert announcements
- Speak a fixed line when an event fires — e.g.
{user} just subscribed!. These go through the TTS queue like any read, separate from your on-screen elements. - Element reads
- Any custom element can call
landmark.tts(text, opts?)to speak a moment worth reading aloud (a goal hit, a big tip). It enqueues a read on your account and is billed the same way — see the window.landmark API. - Tip page “read my message”
- If you enable it, your tip page offers tippers a voice to have their message read in — their pick rides along with the tip and is honored for that read.
Free voices vs. AI voices
There are two voice tiers, and the difference is cost — not how you use them.
- Free voices
- The classics — Brian (the StreamElements-era British male) plus a dozen familiar voices (Amy, Emma, Joey, Matthew, Joanna, and more). They cost nothing to read with, no matter how much chat you read. A fresh account defaults to Brian, so reading chat is free out of the box.
- AI voices
- Realistic, natural-sounding voices. Every character an AI voice speaks is billed to you as Landmark Usage — there is no per-message cap, so more chat means more cost. Picking an AI voice is an explicit, billed opt-in; the settings page warns you whenever your default is an AI voice or viewers can pick one themselves.
Cost is always carried by you, the streamer — the per-character rate, markup, and provider are handled behind the scenes and never shown to viewers. Viewers only ever see free-vs-paid and the flat per-message price you set on a paid rule.
Voices & the library
Manage voices on Voices. The library merges the built-in free + AI voices with anything you add, and you can favorite, hide, rename, or tune rate/pitch/volume per voice.
- Default voice
- What everything reads in, unless a rule or a viewer picks something else. Set it on Text-to-speech or from the dock's TTS tab — the two stay in sync.
- Sync your AI library
- Pull your own catalog of realistic voices into the library in one click, then pick any of them in a rule or as your default.
- Cloning
- With cloning allowed, a voice can be cloned from audio (with consent) and used like any other AI voice. Turn it on under Voices → Allow voice cloning.
Per-viewer voices
Pin a fixed voice to a specific viewer so their messages always read in it. A pin always wins over your rules and your default. Set one three ways:
- Click a chatter in the dock chat window and choose their voice.
- Add a pin by username on the Voices page or the dock's TTS settings (optionally scoped to one platform).
- The viewer sets their own with a chat command (see below), if you allow it.
A pin can be cross-platform (any account using that username) or scoped to one platform; a platform-specific pin wins over a cross-platform one. When you scope to YouTube, it's stored as the platform key google. AI pins are billed to you when they read.
The rules engine
Rules are an ordered list, read top to bottom — the first rule that matches a message decides what happens. The trigger cards on the settings page are the friendly face of this; the full builder lives under Advanced, where you can reorder and the UI warns you when a rule is shadowed (an earlier rule already covers it, so it never fires).
Each rule is: who + trigger (with conditions) + platforms → free or paid + voice.
- Who (role)
everyone,subscribers,mods,VIPs,followers, orspecific people(a list of usernames).- Trigger
a chat message,the !tts command,bits / cheers,a sub or resub,a tip,a gift,a channel-point redeem,a raid, ora specific alert.- Amount conditions
- For
bits,tip, andraid, match by amount — min (at or above), between (a band), or exact. Tips/bits use the money amount; a raid uses the raiding party's viewer count. - Platforms
- Twitch, YouTube, Kick, Rumble, TikTok — or all (the default). Per-rule platforms are gated by the master platforms that read aloud list.
- Access
- Free, or pay to play with a flat price per message you set (e.g. $0.50 / message).
- Voice
- Free or AI, and a specific voice (or leave it on the default). Picking AI shows billed as usage.
- Says (fixed text)
- An optional announcement read instead of the viewer's message — useful for raids, subs, gifts, and alerts where there's no viewer text. It can carry tokens like
{user},{amount},{months},{tier}, and{viewers}. - Redeem reward name
- For the redeem trigger, optionally match a channel-point reward by title (blank = any).
- Per-rule cooldown & max length
- An optional per-viewer cooldown and character cap that override the global settings for that rule.
Voice precedence: a viewer's pinned voice → the matched rule's voice → your default voice (Brian until you change it). A tip page voice pick is honored for that tip read.
Viewer voice commands
Let viewers choose the voice their own messages read in, straight from chat. Set who can under Voices → Viewers pick own voice: Off, Anyone, or Subs only. These commands work even without the chatbot.
!setvoice <name>/!myvoice <name>- Pin a voice by name for that viewer. The message itself isn't read — the command is consumed.
!setvoice off(ornone/clear/reset)- Clear their pin and go back to your default.
!clearvoice- Also clears their pinned voice.
If a viewer picks a realistic AI voice, the cost of their reads is billed to you — the same warning applies as for an AI default.
Moderation
Reads run through the same pipeline whether they came from chat, a tip, or an element. There's a Test a message box on the settings page that runs the exact live pipeline so you can see what would happen.
Category filters
Toggle broad buckets on or off — each is a maintained wordlist (counts shown, words hidden behind “Show words”):
- Slurs
- Racial, ethnic, homophobic, transphobic, ableist. On by default.
- Sexual
- Nudity, sex acts, fetish terms. On by default.
- Swears
- Generic profanity + crude insults. Off by default.
- Violence
- Gore, killing, self-harm. Off by default.
Per category you can optionally set a replacement word: leave it blank to block the whole read (the default), or type a word to swap the matched term so the message still reads. Check sound-alikes (on by default) also catches disguised spellings — spacing, leetspeak, and homophone evasions.
Word swaps & filters
Add your own words or phrases, each with one of three actions:
- read as…
- Swap a word for anything — e.g. “banana” → “Fruit Glizzy”. Great for inside jokes.
- remove word
- Delete just that word from the read.
- block whole read
- Skip the message entirely.
Structural cleanup
- Strip links
- Remove URLs before reading.
- De-shout CAPS
- Read shouting as normal text.
- Squash repeats
- Collapse spammed repeated characters.
- Don't read commands
- Skip messages that start with
!,/, or$. On by default. - Strip zalgo / glitch text
- Removes the thousands of hidden combining characters in glitch text before it's read. Leave this on — a single glitch-text message can otherwise burn through your usage instantly.
Platform emotes are never read — an emote-only message reads nothing. A built-in list of common chat/alert bots (StreamElements, Nightbot, and friends) is also muted by default, on top of anyone you add to Blocked from TTS.
Playback & pacing
Reads queue up and play through one audio source. You have three places to play them:
- A separate browser source
- A dedicated TTS playback page added to OBS as its own browser source.
- Through your alerts overlay
- Turn on Play TTS through my alerts overlay and your existing alerts overlay browser source doubles as the audio player — no separate source needed.
- “Play here” in the dock
- Turn on Play here on the dock's TTS tab to hear reads through the Control Dock.
Chat reads only enqueue while a playback source is actually open, so chat doesn't pile into a stale backlog. Monetary events (tips, bits, subs, raids, redeems) always enqueue — they're never silently dropped.
Tune pacing under Advanced on the settings page:
- Allow overlapping reads
- Off (recommended) = one read at a time. On = a read can start before the last finishes.
- Gap between reads (ms)
- A pause inserted between consecutive reads.
- Per-viewer cooldown (s)
- A floor between one viewer's reads, on top of any per-rule cooldown.
- Min message length
- Skip chat messages shorter than this (anti-spam). Doesn't apply to monetary triggers.
- Max queue length
- The backlog cap. When a raid floods chat, the oldest free chat reads are dropped so the freshest chat keeps reading; paid reads are never dropped.
- Max message length
- The character cap per read. Long messages are trimmed before they're spoken (and billed).
- Who can be read / Announce the name
- A role floor for chat reads, and whether to prefix the viewer's name (just the message, viewer1: msg, or viewer1 said: msg).
You can pause the whole queue from the dock at any time — queued reads are kept and resume when you unpause. There's also an optional auto-translate that reads every message in a language you choose.
Where to configure it
- Dashboard — Text-to-speech
- Settings: the master toggle, trigger cards, alert reads, the default voice and viewer-voice policy, and (under Advanced) chat-reading, pacing, the full rule builder, and moderation.
- Dashboard — Voices
- Voices: browse and tune the library, sync or clone voices, and manage per-viewer pins.
- Control Dock — TTS tab
- The dock mirrors the live controls — pick the chat voice, pin a chatter's voice by clicking them, pause/resume the queue, and play audio through the dock.