Free desktop app · Windows, macOS, Linux
Your viewers can see who said what.
Chatterlayer joins your Discord voice call, transcribes the people you switch on, and renders colour-coded captions into an OBS browser source. It runs on your own PC, it's free, and it always will be.
A preview of the overlay: each person in the call is captioned in their own colour as they speak. The default speech model punctuates and capitalises; an in-progress guess appears faded first, then the line is rewritten in place once it settles.
- Background
- transparent — your scene sits behind it
- Caption delay
- ~150 ms
- Live word-by-word
- 250–500 ms
The short version
Five things worth knowing before you download it.
- Free
- No paid tiers, no licence keys, no accounts, no API keys, no per-minute billing. MIT licensed — fork it, ship it, stream with it.
- Runs on your PC
- Speech recognition happens on your own machine. After the one-time model download Chatterlayer doesn’t need an internet connection to caption, and the caption server only listens on 127.0.0.1 — your machine and nothing else.
- Nine speech models
- Four speech engines, from a 40 MB model that keeps up with a seven-person call to a 2.5 GB one that gets close to a paid cloud service. The default punctuates and capitalises. Install several and switch between them without re-downloading.
- Nobody by default
- Everyone in the call starts switched off. You turn on the people who’ve agreed to it, and you can flip them in and out mid-call without reconnecting anything.
- Just a browser source
- The overlay is a normal OBS browser source with a transparent background. No plugins, no capture tricks. It reconnects on its own, so you can add it before the app is even running.
Why it exists
It started with one viewer.
A streamer I watch has a regular viewer who's deaf. When it's just the streamer talking, they can follow along. When the Discord call fills up and four people start talking over each other, they can't — and on a lot of streams, that's most of the stream.
There isn't much you can do about that from the viewer's side. Twitch doesn't caption anything on its own, and the tools that do usually only hear the streamer's own mic — not the four friends they're playing with. So the conversation everyone else is listening to simply isn't there.
Chatterlayer is a fix for that one specific thing. It turns out to be useful for other people too — anyone watching muted at work, or on a connection that's chewing up the audio, or just trying to keep up with a chaotic group call — but that isn't why it exists.
It won't make a stream accessible on its own and it won't catch every word. A rough caption with the right name on it still beats silence.
How it works
Audio comes in from the call. Text goes out to OBS.
Discord
A bot sits in your call
Chatterlayer brings a bot into your voice channel and receives each person’s audio as its own stream. Everyone is transcribed separately, so two people talking at once never get spliced into one sentence.
Your PC
It transcribes locally
Audio is decoded, resampled and handed to the speech engine on a dedicated worker thread. You pick the model — nine of them, across four engines — and it is loaded once and shared by everyone in the call, so a seventh speaker doesn’t mean a seventh copy of the weights.
OBS
Captions appear on stream
Each line gets that speaker’s colour and goes out over a local WebSocket to the browser source. An in-progress guess appears faded first, then the line is rewritten in place when it settles — on Vosk that happens word by word as they’re spoken.
both stages run on your machine — the caption server only listens on 127.0.0.1, and after the model download it works with no internet at all
Choosing who gets captioned
Everyone in the voice channel appears as a strip you switch in or out of the mix, live, without reconnecting. Click a name in the app to change how it appears on stream — ruptz_45454 can show up as Ruptz — and click the swatch to override their colour.
Channels
0 onColours are worked out automatically from each person's Discord ID, so the same friend is the same colour every stream, on every machine — and no two people in a call ever share one, up to 16 people.
Before you switch someone on
Tell people they're being captioned.
Everyone you switch on is being transcribed onto your stream, permanently, in front of your audience. In some countries and US states, transcribing someone without their consent is illegal.
Chatterlayer ships with everyone switched off specifically so the safe option is the default one. Use the per-person switches to caption only the people who've actually agreed to it.
The word filter
Captions hit your stream the instant they're recognised — there's no chance to review them first. Racial and ethnic slurs are masked by default, in speech and in speaker names, and the masking happens before captions reach OBS or the in-app monitor. You can add your own words and phrases.
It's a safety net, not a guarantee. Speech recognition mishears things — it can miss a slur, and it can invent one nobody said. Don't leave captions running unattended.
Setup
Five steps, once.
About ten minutes, most of which is waiting for a download. After this, Chatterlayer signs in by itself at launch and OBS remembers the source.
Install Chatterlayer
There’s a normal installer and a portable build if you’d rather not install anything. About ten minutes for the whole setup, most of it waiting for a download.
The builds aren’t code-signed, so Windows SmartScreen shows a blue box on first launch — More info → Run anyway. On macOS, right-click the app → Open, or run xattr -cr /Applications/Chatterlayer.app.
Pick a speech model
On first launch Chatterlayer asks which model to download. There are nine, across four speech engines, and they range from 40 MB to 2.5 GB — you only need one, which is why none are bundled. Pick Moonshine Base unless you have a reason not to; it’s the one the app offers by default.
You can install several and switch between them in the Speech model dropdown without re-downloading anything. They live in your user data folder and survive app updates, and Remove frees the disk space again. Switching engines needs a reconnect.
Create a Discord bot
Chatterlayer needs a bot account to sit in your voice channel and listen. It’s free and takes about two minutes.
- New Application → name it whatever you like → Bot tab → Add Bot.
- Reset Token, then Copy. Treat it like a password.
- Leave every Privileged Gateway Intent switched off — Chatterlayer doesn’t need them.
- OAuth2 → URL Generator: scope bot, permissions View Channel and Connect. It never talks, so it doesn’t need Speak.
- Open the generated URL and invite the bot to your server.
Paste the token and pick a channel
Paste the bot token into the Source panel. It signs in, and the Server and Voice channel dropdowns fill with everywhere your bot can go. Pick one and hit Connect. There’s no channel ID to copy and no Developer Mode to turn on — channels your bot can’t join are greyed out with the missing permission named.
Your token is stored encrypted in your operating system’s own keystore — DPAPI on Windows, Keychain on macOS, libsecret on Linux — so you only paste it once.
Add the overlay to OBS
Sources → + → Browser. Set the width and height to match your canvas, normally 1920 × 1080, and use the URL from Chatterlayer’s Output panel:
http://127.0.0.1:8777/overlay- Tick Shutdown source when not visible and Refresh browser when scene becomes active.
- Captions render bottom-left with a small margin, so leaving the source at full canvas size positioned at 0,0 usually just works.
How good are the captions, really?
Better to know now than to find out on stream.
Chatterlayer ships nine speech models across four engines — Vosk, Moonshine, Whisper and Parakeet — and every one of them runs entirely on your own machine.
That rules out the very best cloud models, but it no longer means what it used to. Moonshine, Whisper and Parakeet all land meaningfully closer to a paid service than Vosk does, and they punctuate.
- Vosk gets roughly 85–92% of words right for a clear speaker on a decent mic in a quiet room, as a lowercase stream with no punctuation. Moonshine, Whisper and Parakeet all do better than that, and are much better on names.
- Paid cloud services get 93–97% on the same audio, so there’s still a gap at the top. Parakeet on clear speech gets close to closing it.
- Every engine degrades with background noise, music, strong accents and people talking over each other — the offline ones faster than the paid ones.
- Game jargon, usernames and memes are hard for all of them. The vocabulary is fixed and can’t be nudged toward your community’s slang.
- Mic quality matters more than model size. A friend on a bad headset is the weak link whichever model you run.
Parakeet TDT 0.6B
And so, my fellow Americans. Ask not. What your country can do for you. Ask what you can do for your country.
Moonshine Base
And so my fellow Americans. Ask not. What your country can do for you ask what you can do for your country
Whisper Tiny
And so am I fellow Americans. Ask, not! What your country can do for you, ask what you can do for your country.
Vosk Medium
and so my fellow american ask not what your country can do for you ask what you can do for your country
Vosk Small
and so my fellow americans as not what your country can do for you ask what you can do for your country
Where the small models slip: Whisper Tiny hears “am I” for “my”, Vosk Small hears “as not” for “ask not”, and Vosk Medium drops the plural on “Americans”.
Offline is still the right trade for this job: nothing to meter, nothing to expire mid-stream, your friends' voices never leave your machine, and no round-trip to a server to slow it down.
Which speech model should I pick?
Moonshine Base, unless you have a reason not to — it's the one the app offers by default. The reason you might: Vosk puts words on screen as they're spoken rather than a phrase at a time. That difference matters more than the model sizes do.
- StreamingVosk
- Vosk updates the caption word by word as someone talks, so text appears with essentially no delay. The trade is a lowercase stream with no punctuation, and each person needs their own recogniser, so memory grows with the number of people in the call.
- A phrase at a timeMoonshine · Whisper · Parakeet
- These wait for you to finish a thought, then return a properly punctuated, capitalised sentence a fraction of a second later. It reads like writing rather than a transcript, and one copy of the model serves everyone in the call.
| Model | Download | RAM | Caption delay | Speakers | Punctuation |
|---|---|---|---|---|---|
| Vosk Small | 40 MB | 170 MB + 12/speaker | live | 7 | no |
| Vosk Medium | 128 MB | 420 MB + 51/speaker | live | 7 | no |
| Vosk Large | 1.8 GB | ~5 GB | live | 4 | no |
| Vosk Gigaspeech | 2.3 GB | 6.8 GB | live | 3 | no |
| Moonshine Basepick this | 251 MB | 550 MB | ~150 ms | 6 | yes |
| Whisper Tiny | 43 MB | 420 MB | ~650 ms | 2 | yes |
| Whisper Base | 79 MB | 700 MB | ~1 s | 1 | yes |
| Whisper Small | 251 MB | 1.8 GB | ~2.2 s | 1 | yes |
| Parakeet TDT 0.6B | 2.5 GB | 2.6 GB | ~290 ms | 4 | yes |
Measured on a Ryzen 5 5600X against real speech. RAM is the peak with one person captioned — on the three phrase-at-a-time engines each extra speaker costs about 3 MB, because the model is loaded once and shared, so Parakeet is 2.5 GB in total and not 2.5 GB per person. The speaker counts are a latency judgement rather than a memory one: how many people can be captioned before captions start arriving late. The app warns rather than refuses when you go over.
- Moonshine Base
- The default, and the right answer for most people. It beats Vosk Medium on every measured axis except immediacy: more accurate, punctuated and capitalised, a caption in about 150 ms, a tenth of the CPU per second of speech — and because one shared model serves the whole call, it uses less memory than Vosk Medium once more than three people are on.
- Vosk Medium
- The one to pick if you want text appearing as the words are spoken rather than at the end of each phrase. That immediacy is a real difference on stream, and it’s the only thing Vosk still wins on.
- Parakeet TDT 0.6B
- The most accurate here, and quicker than you’d expect at about 290 ms a caption — it transcribes the phrase rather than a padded window. The cost is a 2.5 GB download and ~2.6 GB of RAM, loaded once and shared however many people are on.
- The Whisper models
- Hard to recommend over Moonshine. Every Whisper caption pays for a padded 30-second window whatever the phrase length, so Tiny is slower than its size suggests and Base takes about a second while being less accurate than Moonshine. They’re here because Whisper is what people ask for by name — and Small is genuinely accurate for one person, if you don’t mind waiting two seconds.
Download
Free, and staying that way.
No tiers, no upsell, no “pro” version holding the good features hostage. Windows, macOS and Linux builds, plus a portable Windows build if you’d rather not install anything.
- OS
- Windows, macOS (Intel or Apple Silicon), or Linux
- Disk
- ~350 MB for the app, plus the model you pick (40 MB – 2.5 GB)
- RAM
- ~570 MB for a 7-person call on the default model
- Also
- A free Discord bot, and any recent OBS
You don't need Node.js, a compiler, Python, a paid speech API, or an account with anyone. The builds aren't code-signed, so Windows SmartScreen warns on first launch and macOS may claim the app is damaged — the release notes explain how to get past both.
Support the project
Chatterlayer is free. It stays free.
No tiers, no licence keys, no upsell, no “pro” version holding the good features hostage. Nothing here is locked and nothing is going to be.
If it's earned you a coffee
One-off, any amount, no account needed. It goes to the person who writes this, and it's entirely optional — nothing in the app changes either way.
ko-fi.com/ruptz
Bug reports and feature ideas are worth more than the coffee. A stream where the captions broke, a model that misheard something badly, a setup step that read as gibberish — those are the things that actually make the next version better. Open an issue.
It's MIT licensed, so the other useful things you can do are star the repo so other streamers find it, or fork it and build something better.
There's a matching cup in the bottom corner of the app itself, if you'd rather find it there.
