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. Transcription is lowercase and unpunctuated, which is what the speech model produces.
- Background
- transparent — your scene sits behind it
- Live partial text appears
- 250–500 ms
- Finalised line
- 0.5–1.5 s
The short version
Four 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.
- 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 Vosk on a dedicated worker thread — one shared speech model, one recogniser per person you’ve switched on. Switch someone off and their recogniser is freed straight away.
OBS
Captions appear on stream
Each line gets that speaker’s colour and goes out over a local WebSocket to the browser source. Partial words show up as they’re spoken, then the line is rewritten in place when the sentence settles.
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. They range from 40 MB to 2.3 GB and you only need one, which is why none are bundled. Pick Medium unless you have a reason not to.
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 uses Vosk, which is genuinely impressive for something that runs offline on your own PC. It is not Whisper-large, and it is not Google or AWS or Deepgram.
- Roughly 85–92% of words correct for a clear speaker on a decent mic in a quiet room. Paid cloud services get 93–97% on the same audio.
- No punctuation and no capitalisation. Output is a lowercase stream of words, and numbers come out as words — “twenty twenty five”.
- It struggles with proper nouns, game jargon, usernames and memes. The vocabulary is fixed and can’t be nudged toward your community’s slang.
- It degrades faster than paid services with background noise, music, strong accents and people talking over each other.
- Mic quality matters more than model size. A friend on a bad headset is the weak link whichever model you run.
It's 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?
Medium, unless you have a reason not to. It's clearly better than Small and still light enough to keep up with a full call while you're gaming and encoding at the same time. You can install several and switch between them without re-downloading.
| Model | Download | RAM used | Startup | Good for |
|---|---|---|---|---|
| Small | 40 MB | 152 MB | instant | Big calls, older or busy PCs |
| Mediumpick this | 128 MB | ~250 MB | ~2 s | Almost everyone |
| Large | 1.8 GB | ~5 GB | ~25 s | 1–3 people, accuracy first |
| Gigaspeech | 2.3 GB | 6.8 GB | ~33 s | 1–3 people, best accuracy |
Gigaspeech is the most accurate of the four — it was trained on conversational audio rather than audiobooks — but it wants about 7 GB of RAM and roughly 16× the CPU of Small. On a busy call that turns into captions drifting further and further behind the conversation.
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
- ~250 MB for the app, plus the model you pick
- RAM
- ~400 MB for a 7-person call on the recommended 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
Bug reports and feature ideas are the most useful thing you can send — open an issue. If it's earned you a coffee there's ko-fi.com/ruptz, entirely optional, and nothing in the app changes either way.