Live captions for your Discord call, straight into OBS.
ChatterLayer puts a bot in your Discord voice call, transcribes whoever you switch on, and draws their words into OBS in their own colour. Or skip the bot and caption just your mic. The speech never leaves your PC.
- Runs on
- Windows, macOS, Linux
- Costs
- Nothing. MIT licensed
- Sends your audio
- Nowhere
The short version
- Free
- No tiers, no licence key, no account, no API key, nothing metered. It’s MIT licensed, so fork it and ship your own if you want to.
- It runs on your PC
- Your voices never leave the machine. ChatterLayer downloads a speech model once and does the listening itself, so after that it doesn’t need the internet to caption at all. The caption server answers on 127.0.0.1 and nowhere else, unless you deliberately switch sharing on. The app makes one request of its own accord, a version check at launch, and there’s a switch for that.
- Sharing, if you want it
- Co-streaming? One person runs the app and sends the others a link to paste into OBS, and everyone shows the same captions. It’s off until you turn it on, it never starts by itself, and it stops when you close the app. Only the finished text goes down the tunnel. The audio stays on your PC.
- Nine speech models
- Four engines, nine models, 40 MB to 2.5 GB. The small one keeps up with a seven-person call. The big one gets close to what you’d pay a cloud service for. Both of the recommended ones punctuate. Keep several installed and switch between them without downloading anything again.
- Nobody by default
- Everyone in the call starts switched off. You turn on the people who’ve said yes, and you can change that mid-call without reconnecting.
- Light on your PC
- It’s a 30 MB download and takes about 95 MB once installed. Waiting in the tray, it uses next to no CPU. While it captions, nearly all the work is the speech model, and since 0.5 that runs as native code: on Parakeet it uses about 15% less CPU than 0.4 did, and the first caption arrives about 4 seconds sooner.
- It’s just a browser source
- The overlay is an ordinary OBS browser source with a transparent background. No plugin, no window capture, nothing to configure. It reconnects on its own, so you can add it before the app is even open.
Why it exists
It started with one viewer.
A streamer I watch has a regular in chat who’s deaf. When it’s just the streamer talking, they can follow along fine. When the Discord call fills up and four people talk over each other, they can’t. On a lot of streams, that’s most of the stream.
There isn’t much you can do about that from where they’re sitting. Twitch doesn’t caption anything by itself, 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 just isn’t there.
ChatterLayer fixes that one thing. It turns out to be handy for other people as well, anyone watching on mute at work, or on a connection that’s mangling the audio, or trying to keep up with a call that has gone completely off the rails. But that isn’t why I built it.
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.
What to expect
This runs offline on your own PC, so it won’t match a paid cloud service. There are nine models to choose from, both of the recommended ones punctuate, and the best one gets close. The real numbers are further down.
How it works
Three hops, and the middle one is the only place your voices are ever decoded.
Discord
A bot sits in your call
ChatterLayer brings a bot into your voice channel, and Discord hands it every person’s audio as a separate stream. Everyone gets transcribed on their own, so two people talking at once never get spliced into one sentence.
Your PC
Your PC does the listening
Discord’s audio is decoded straight to the format the speech engine wants and handed to it on its own thread. You choose the model, nine of them across four engines. It loads once and serves the whole call, so a seventh person doesn’t mean a seventh copy of it sitting in memory.
OBS
Captions land on stream
Every line goes out over a local WebSocket in that person’s colour. The phrase models show a faded guess first and rewrite the line once it settles. Vosk writes it word by word as they speak.
Your call, your mic, or both
Discord call
Everyone in the voice channel you switch on, through the bot.
My mic
Just you, straight from your microphone. No bot, no Discord sign-in, nothing leaves your PC.
Both
The call and your mic together. Mute in Discord or let go of push-to-talk to read chat out, and Discord hears nothing, so those words would go uncaptioned. Your mic still hears them.
In Both, press “This is me” on your own Discord row. Your mic captions you from then on, so you never appear twice.
Speech to pixels
Measured on a Ryzen 5 5600X.
Setup
About ten minutes, and most of that is a download bar.
Install it
On Windows there’s an installer, or a zip if you’d rather not install anything. Macs get a .dmg, and Linux an AppImage or a .deb. The whole setup runs about ten minutes, and most of that is watching a download bar.
None of the builds are code-signed, so Windows SmartScreen throws up a blue box the first time you run it: click More info, then Run anyway. On macOS, Gatekeeper may call the app damaged; one Terminal command clears that, and it’s shown right after you download.
Pick a speech model
First launch asks which model to download. There are nine, across four engines, and they run from 40 MB to 2.5 GB. You only need one, which is why none of them ship with the app. ChatterLayer checks your RAM and CPU and marks the one that suits your machine: Parakeet TDT 0.6B if you have 16 GB or more, which most streaming PCs do, and Moonshine Base on lighter ones.
Install as many as you like and switch between them in the dropdown without downloading anything again. They live in your user data folder and survive app updates, and Remove gives you the disk space back. Switching to a different engine needs a reconnect.
Make a Discord bot
The bot is the thing that sits in your voice channel and listens. Making one is free and takes about two minutes.
- New Application, name it whatever you like, then the Bot tab and Add Bot.
- Reset Token, then Copy. Treat it like a password.
- Leave every Privileged Gateway Intent switched off. ChatterLayer doesn’t need them.
Only captioning your own mic? Skip this step and the next: pick My mic under Source and go straight to OBS.
Paste the token, pick a channel
Drop the bot token into the Source panel and it signs in on its own. Press Invite the bot to a server, pick your server in the browser tab that opens, and it shows up in the Server dropdown by itself. Choose a voice channel and hit Connect. There’s no channel ID to copy and no Developer Mode to turn on, and channels your bot can’t join are greyed out with the missing permission named.
The token goes into your operating system’s own keystore, DPAPI on Windows, Keychain on macOS, libsecret on Linux, so you paste it once and never think about it again.
Add the overlay to OBS
Sources, then +, then Browser. Set the width and height to match your canvas, usually 1920 × 1080, and paste the URL from ChatterLayer’s Output panel:
- Tick Shutdown source when not visible and Refresh browser when scene becomes active.
- Captions sit bottom-left with a small margin, so a full-canvas source at 0,0 usually just works.
The overlay reconnects by itself. You can add the source before ChatterLayer is running, and it will survive you restarting the app mid-stream.
Two things that surprise people
- Closing hides it
- The × drops ChatterLayer to the system tray instead of ending the call, so a stray click can’t cut your captions mid-stream. Minimising behaves normally, Quit on the tray icon always means quit, and you can switch the whole behaviour off in App settings.
- It tells you about new versions
- The version you’re running sits in the top right of the control panel. Once per launch the app asks GitHub whether there’s a newer release, and that stamp turns amber if there is. Click it and the release page opens. Nothing downloads and nothing installs itself. It’s the only request the app makes on its own, which is why it gets a visible switch: Output, then Check for updates.
Stuck on any of it? Open an issue and say where it went wrong. There’s no support queue and no forum — it’s one person reading them.
Nine models, four engines
You need exactly one. The app marks the one that fits your PC, and you can change your mind later.
- Word by wordVosk
- Vosk updates the caption as each word is spoken, so text appears with almost no delay. The trade is a lowercase stream with no punctuation, and every person needs their own recogniser, so memory grows with the size of the call.
- A phrase at a timeMoonshine, Whisper, Parakeet
- These wait for someone to finish a thought, then hand back a punctuated, capitalised sentence a fraction of a second later. It reads like writing rather than a transcript, and one copy of the model serves everybody in the call.
| Model | Download | RAM | 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 BaseBest pick under 16 GB of RAM | 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.6BBest pick on 16 GB and up | 2.5 GB | 2.6 GB | ~290 ms | 4 | Yes |
Measured on a Ryzen 5 5600X against real speech. Speakers is the point at which captions start arriving late, not a hard limit. Vosk Large and Gigaspeech are extrapolated from model size.
- Parakeet TDT 0.6B
- The one to pick if your PC has 16 GB of RAM or more, which covers most streaming machines and not just the expensive ones. It’s the most accurate model here by a distance and still quick, about 290 ms a caption, because it transcribes the phrase itself rather than a padded window. The cost is a 2.5 GB download and around 2.6 GB of RAM, loaded once no matter how many people are on.
- Moonshine Base
- The one to pick on lighter machines, like an 8 GB laptop. It beats Vosk Medium everywhere except immediacy: more accurate, punctuated, capitalised, a caption in about 150 ms and 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 talking.
- Vosk Medium
- Pick this if you want text appearing as the words are spoken instead of at the end of each phrase. That immediacy reads very differently on stream, and it’s the one thing Vosk still wins 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 the name people ask for, and because Small is genuinely accurate for one person if you don’t mind waiting two seconds.
The same clip, five ways
The same eleven seconds of speech, through five of the nine models.
- 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”.
What you should expect
- 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 they’re 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 gets worse with background noise, music, strong accents and people talking over each other. The offline ones get worse faster.
- Game jargon, usernames and memes are hard for all of them. The vocabulary is fixed and there’s no way to nudge it towards 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.
Get it
An installer, or a zip if you'd rather not install anything.
Installer
Or: Windows, no installer · macOS, Apple Silicon · macOS, Intel · Linux AppImage · Linux AppImage, ARM64 · Linux .deb · Every release
The builds aren’t code-signed, because certificates cost money this project isn’t spending. Windows will show a SmartScreen warning the first time: More info, then Run anyway. On macOS the app can clear Gatekeeper’s quarantine flag for you.
There’s a Ko-fi, if you want one
ChatterLayer is free and it stays free. Nothing is held back, nothing is gated, and there’s no pro version coming. If it earned its keep on your stream, you can throw something at ko-fi.com/ruptz.
- OS
- Windows, macOS (Intel or Apple Silicon), or Linux
- Disk
- ~350 MB for the app, plus the model you pick (40 MB to 2.5 GB), plus ~35 MB for cloudflared if you ever share captions
- RAM
- ~2.6 GB on Parakeet, or ~570 MB for a seven-person call on Moonshine Base
- Also
- Any recent OBS, plus a free Discord bot to caption a call (not needed for your mic alone)