LocalVocal: offline Whisper transcription and translation inside OBS Studio
OBS plugin for local speech recognition and captioning using AI
At a glance
- What is it?
- LocalVocal is a GPL-2.0 OBS plugin that runs Whisper.cpp and CTranslate2 on your own machine to caption and translate speech live. It is built for streamers who cannot send audio to a cloud API, and it asks you to pick the right build for your GPU before anything works.
- Who is it for?
- Adopt LocalVocal if your audio cannot leave the machine, or if per-minute cloud captioning costs are the blocker, and you can match a release build to your CPU or GPU. Skip it if you need word-level timings, per-speaker labels, or a support contract.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem LocalVocal solves for OBS users
OBS Studio captures and composites video. It does not transcribe speech. Anyone who wants live captions on a stream has traditionally had two options: a paid cloud captioning service that receives the audio stream, or a separate local tool wired in through a virtual audio device. LocalVocal collapses that into a single plugin that lives inside OBS and processes the audio on the same machine.
The README frames the pitch directly: transcribe locally, translate simultaneously, with no GPU required, no cloud costs, no network and no downtime, and it states that all data stays on your machine. That list is really an audience definition. It fits a streamer with privacy constraints, a creator on a metered or unreliable connection, and anyone who objects to paying per minute of transcribed audio. It also fits people captioning recorded material in OBS rather than live, since the same plugin handles both.
The project is written in C++ and licensed GPL-2.0. The plugin is distributed as prebuilt installers rather than as a library you compile into something else, which tells you who the maintainers expect to use it: OBS users, not application developers.
How Whisper.cpp and CTranslate2 sit inside the OBS pipeline
The README describes the mechanism in one sentence: the plugin runs OpenAI's Whisper to process real-time speech and predict a transcription, using Whisper.cpp from ggerganov to run the model efficiently on CPUs and GPUs, and translation is done with CTranslate2.
So there are two distinct stages. Whisper.cpp handles speech to text, and CTranslate2 handles text to text. That split matters because it means the transcription model and the translation model are separate artifacts with separate resource profiles. You can run transcription on a small Whisper model on CPU and still get translation, or you can push a larger model onto a GPU. The plugin also exposes the result as a text source inside OBS, which is why it composes with scenes and filters the way any other source does: the caption text is a source you can position, style and route into a stream or a recording.
Nothing in the README describes a queue, a buffer size, or a latency budget, and it does not document how far behind live audio the captions run. That is a gap, not a detail. Real-time captioning is a latency problem before it is an accuracy problem, and the project leaves you to measure it yourself.
Installing LocalVocal and getting a first caption on screen
The README does not give shell install steps. It links to the latest releases page for downloads and install instructions, and the download table is organised by platform and by GPU vendor, so the first decision is which build you take, not which command you run.
On Windows there are three x86_64 installers: generic, NVidia and AMD. On Linux there are .deb packages for Ubuntu 22.04 (Jammy) in the same three variants. On macOS there are .pkg files for Intel and ARM64, with named builds for macOS 12 through 15 plus a generic one. The README notes that while version-specific variants may work better on that version, the generic variant is likely the best option.
Once installed, the plugin's output is an OBS text source. The README points to three video walkthroughs for usage rather than written steps, so the practical path is: install the matching build, open OBS, and add the plugin's text source to a scene. If you prefer to build from source, the repository ships CMakeLists.txt, CMakePresets.json and buildspec.json, and there is a flatpak directory and a build-aux directory for packaging.
If the plugin does not appear after installation, the release page is the only documented support route; the README does not describe a troubleshooting procedure.
Where LocalVocal breaks down
The build matrix is the first real constraint, and it is easy to underestimate. Every release ships separate binaries for NVidia and AMD hardware, and the macOS packages are split by OS version as well as by architecture. Picking the wrong one is a plausible cause of a plugin that installs but does not load, and the README does not document a fallback path when a variant misbehaves. The generic build exists, but the README only says it is likely the best option, which is not the same as saying it is the recommended one.
Accuracy and latency are the second constraint, and they trade against each other. Whisper.cpp can run on CPU, and the README's no-GPU-required claim is accurate in the sense that it will run. Whether it keeps up with continuous speech on your CPU is a separate question the README does not answer. Choosing a larger model for accuracy costs compute you may not have while OBS is also encoding video.
Translation is a second model on top of the first. CTranslate2 is named as the translation engine, but the README does not document which translation models are supported, how they are selected, or what happens when the target language is not covered. If your use case depends on a specific language pair, treat that as unverified until you check it on your own machine.
Finally, this is the wrong tool if you need word-level timestamps, speaker diarisation, or a caption format that downstream tools can consume. The README describes transcription and translation into a text source. It does not describe subtitle file export or speaker separation.
LocalVocal against cloud captioning and standalone Whisper
The obvious alternative is a cloud captioning service. The difference is architectural, not cosmetic: a cloud service receives your audio, runs a larger model on better hardware, and returns text with lower local resource use. LocalVocal inverts every one of those properties. Your audio never leaves the machine, your CPU or GPU does the work, and your quality ceiling is whatever model you can run locally. If your constraint is accuracy on difficult audio, cloud wins. If your constraint is that the audio cannot leave the building, cloud is not an option at all.
The second alternative is running Whisper directly, either through whisper.cpp's command line or through a desktop transcription app, and routing the text into OBS with a text file source. That gives you more control over model selection and flags, and it is easier to script. What it does not give you is a single process. You manage two programs, you manage the handoff between them, and you manage the audio routing yourself. LocalVocal's value is that the handoff is internal. The cost is that the internal handoff is opaque: the README documents neither the buffering nor the model management, so when something goes wrong you are debugging a plugin rather than a command you wrote.
Maintenance, licence and upgrade cost
The repository is not archived, and the last push was on 2026-09-09, which is recent. Releases have been reasonably paced: 0.6.0 on 2026-01-05, 0.6.1 on 2026-04-01, and 0.6.2 on 2026-04-21. That is a project that ships, though the gap between the 0.6.2 release and the most recent commit is worth noting: commits and releases are not the same thing, and the release notes are not published with the source tree.
Upgrade cost is mostly a reinstall. Because builds are split by platform, architecture and GPU vendor, moving to a new machine or swapping a GPU means downloading a different installer rather than updating in place. macOS users face the additional step of matching the package to their OS version. The repository carries CMakeLists.txt, CMakePresets.json and buildspec.json, so a source build is possible, but the README does not present it as the primary path.
The licence is GPL-2.0. That is a copyleft licence, and it governs the plugin. If you are a streamer or a creator using OBS, the licence is not something you need to act on. If you intend to bundle this plugin into a commercial product, or link it into a closed-source application, GPL-2.0 is the fact you need to examine, and that examination is a job for a lawyer rather than for a review.
Editorial conclusion
Adopt LocalVocal if your audio cannot leave the machine, or if per-minute cloud captioning costs are the blocker, and you can match a release build to your CPU or GPU. Skip it if you need word-level timings, per-speaker labels, or a support contract. Before trusting it on a real stream, install the variant that matches your hardware, confirm OBS loads the plugin without errors, and check that the model you pick keeps up with your speaking pace on your own machine.
Frequently asked questions
How do I use LocalVocal in OBS?
Install the build that matches your platform and GPU vendor, then add the plugin's text source to a scene in OBS. The README points to three video walkthroughs for usage rather than written steps, and it does not document a text-based configuration procedure.
Does LocalVocal need a GPU?
The README states that no GPU is required and that Whisper.cpp runs the model efficiently on CPUs and GPUs. Separate release builds exist for NVidia and AMD hardware, plus a generic build, so a GPU is optional rather than mandatory.
Is LocalVocal free and does it send my audio anywhere?
The README states there are no cloud costs, no network and no downtime, and that all data stays on your machine. The plugin is licensed GPL-2.0.
Which LocalVocal build should I download?
Choose by platform, architecture and GPU vendor. Windows and Ubuntu 22.04 have generic, NVidia and AMD variants; macOS has Intel and ARM64 packages with separate builds for macOS 12 through 15. The README notes the generic variant is likely the best option even where a version-specific build exists.
Community notes