Instant is the wrong promise
Viewers often think paid TTS should play the second they hit submit. That expectation causes arguments because the real path has several steps. A message may start on Twitch, Kick, YouTube, or a payment page. It may need a webhook, a chat event, a payment state, moderation, voice generation, queue placement, browser-source playback, and an OBS scene that is actually visible.
The better promise is not instant. The better promise is visible status. Submitted, pending approval, queued, playing, completed, held, rejected, replay owed. If viewers can see where the message is, they are less likely to assume the streamer ignored them.
StreamableBot should make paid TTS feel like a production queue. The viewer paid for a controlled moment, not a guarantee that a synthetic voice will interrupt the next sentence no matter what is happening on stream.
- Submitted: the viewer sent the message or payment event.
- Confirmed: payment or platform event arrived.
- Review: a moderator needs to approve, edit, hold, or reject.
- Queued: the message is ready but waiting for the right moment.
- Playing: the browser source is visible and audio is active.
- Completed: the message finished playback.
Every platform has a different path
Twitch, Kick, and YouTube do not hand a bot the exact same event shape. Twitch has chat and EventSub developer docs. Kick documents chat APIs, scopes, and webhook payloads. YouTube's Live Streaming API has live chat resources and separate Super Chat behavior. Those differences matter because the same visible TTS reward may start from different signals.
A Twitch chat command might arrive fast but still need a payment check. A Kick event may depend on authorized scopes and webhook delivery. A YouTube Super Chat may have a different moderation and visibility context from a direct paid TTS checkout. A cross-platform bot has to normalize those paths before it can show one clean queue.
Do not expose all of that complexity to viewers. Show the state they care about: received, waiting for review, queued, held, playing, completed, or rejected. Keep platform differences in the mod view.
- Twitch: chat, EventSub, channel events, and bot identity matter.
- Kick: API scopes, chat actions, and webhook payloads matter.
- YouTube: live chat, Super Chat, and moderator tools may behave differently.
- Direct payment: payment confirmation and refund policy matter.
- Browser source: OBS visibility and audio routing matter.
Moderation is part of latency
Moderation time is not a bug. It is the thing that keeps paid TTS from wrecking the stream. If the message is mature, personal, long, hard to pronounce, sponsor-conflicting, or potentially unsafe, a mod should slow it down.
That means streamers should explain review time before viewers pay. A queue label like usually reviewed by a mod before playback is clearer than pretending every message will fire immediately. During high-risk modes, change the label to TTS is held until the segment opens.
Moderators also need controls that match the timing. Approve now, approve after current segment, hold for streamer, edit pronunciation, reject, replay, or mark failed. If the only buttons are play and delete, the queue will either become unsafe or unfair.
- Fast lane: trusted short messages during open hangout mode.
- Review lane: normal paid TTS that needs mod approval.
- Hold lane: guest, sponsor, serious, or privacy-sensitive segments.
- Reject lane: rule-breaking content before playback.
- Replay lane: approved message failed because of production timing.
OBS can add delay even after approval
Approval is not the end of the path. OBS still has to show the browser source and route the audio. OBS Browser Source docs cover settings like refresh behavior, shutdown behavior, dimensions, frame rate, and permissions. If the source is hidden, muted, refreshing, unloaded, or behind another source, the TTS can fail or appear late.
This is why a queue should track playback separately from approval. A moderator needs to know whether the message was sent to the browser source, whether the source was visible, whether audio played, and whether the message completed. Without those states, every failure looks like viewer confusion.
Scene rules matter too. If TTS is approved during a sponsor scene where the browser source is intentionally muted, the queue should hold it until the scene changes. The browser source should not fight the production plan.
- Approved: a moderator cleared the message.
- Sent to source: the browser source received it.
- Visible: the source is active in the current OBS scene.
- Audible: audio is routed and not muted.
- Completed: playback finished.
- Failed: production owes a replay or credit review.
Set timing by stream mode
A single latency promise does not work across every stream mode. Hangout mode can be fast. Ranked-game mode may wait for rounds. Guest mode may hold TTS until the guest finishes. Sponsor mode may block TTS entirely. IRL public mode may require stronger moderation because the streamer is around people who did not opt in.
Make the current mode visible. If TTS is fast right now, say it is open. If it is reviewed, say it is reviewed. If it is held, say it is held. Viewers get less annoyed when the menu tells them the truth before payment.
StreamableBot should let the streamer or mod switch modes without rewriting every reward. The queue can keep the paid message safe while the show moves from desk to guest to IRL to BRB.
- Open mode: approved messages play quickly after review.
- Review mode: every message waits for mod action.
- Segment hold: approved messages wait for the next open slot.
- Closed mode: viewers cannot buy new TTS until the mode changes.
- Recovery mode: queue pauses while OBS, audio, or platform output is fixed.
Write viewer copy that prevents support tickets
Viewer copy should be short and honest. Your TTS enters a moderated queue. It may be delayed during guests, sponsor segments, or focus mode. Messages that break rules can be rejected. If approved playback fails, mods can replay or review credit.
That copy does more than protect the streamer. It helps viewers choose the right reward. Someone who wants instant noise can buy a small sound alert if that lane is open. Someone who wants a voice message can accept that approval and timing are part of the product.
Do not hide timing rules in a long command response. Put the most important timing expectation on the checkout page, overlay, or command result before the viewer pays.
- Good: TTS is reviewed before playback and may wait for the next open segment.
- Good: Guest mode is active, so approved TTS will queue until chat mode returns.
- Good: If playback fails after approval, mods can replay or mark credit review.
- Bad: Instant TTS every time.
- Bad: No refunds ever, no matter what happened.
Give moderators a timing dashboard
The mod view should show queue age, platform, viewer, message length, current mode, approval state, playback state, and whether the source is allowed in the active scene. A mod should not need to watch three chats, a payment dashboard, OBS, and a spreadsheet to answer where a message is.
Queue age helps catch stuck messages. Platform labels prevent name confusion across Twitch, Kick, and YouTube. Playback state helps mods decide replay versus rejection. Current mode keeps a mod from pushing TTS during a closed segment.
The point is consistency. Paid TTS becomes much easier to defend when the moderation team can explain the state without guessing.
- Queue time since submission.
- Platform and event type.
- Moderator action and reason.
- Current stream mode.
- Browser-source playback state.
- Replay, credit, or refund-review flag.
Test timing like a real stream
Do not test TTS latency with one perfect message while the browser source is already visible. Test the real path. Send a Twitch message, a Kick event, a YouTube message or Super Chat path if you support it, and a direct paid checkout. Put some through approval, hold some, reject one, replay one, and hide the browser source once.
Record the timing in plain language, not fake precision. Usually plays after mod approval in open mode. May wait until the current round ends. Guest mode holds all TTS. Browser-source failures get replay review. That is more useful than promising a number you cannot control across platforms.
After a busy stream, review the queue. Find the longest waits, repeated stuck states, scenes where the browser source failed, and modes where viewers kept buying closed rewards. Fix the workflow before adding more paid voices.
- Test platform event arrival.
- Test payment confirmation.
- Test mod approval and rejection.
- Test held playback after mode change.
- Test browser-source visibility and audio.
- Test replay after a forced failure.
Other resources
These docs are useful when checking how chat events, browser sources, and live chat moderation fit into a cross-platform paid TTS queue.
- Twitch Developers: EventSub Subscription Types.
- Kick Dev Docs: Chat API.
- YouTube Live Streaming API: LiveChatMessages.
- YouTube Help: Moderate live chat.
- OBS: Browser Source.
Quick answers
How fast should paid TTS play?
It should play after the event is received, payment is confirmed, moderation clears it, the current stream mode allows it, and the OBS browser source can play it. Do not promise instant playback.
Why does paid TTS take longer on some platforms?
Twitch, Kick, YouTube, and direct payments use different events, APIs, permissions, and moderation paths. A good bot normalizes those into one queue but still needs time to process them.
Should viewers see the TTS queue?
They should see enough state to understand what happened: received, pending approval, queued, held, playing, completed, rejected, or replay owed. The full moderation detail can stay private.
What if approved TTS does not play in OBS?
Track playback state separately. If the source was hidden, muted, or failed after approval, moderators can replay it or mark credit review according to the stream's rules.
