Open-source project
ratwithacompiler/OBS-captions-plugin avatar
ratwithacompiler/OBS-captions-plugin

obs-captions-plugin: live captions from Google Speech, inside OBS

Closed Captioning OBS plugin using Google Speech Recognition

1,339 stars93 forksC++GPL-2.0

At a glance

What is it?
This OBS plugin captions a microphone source live using the Google Cloud Speech Recognition API and hands the text to Twitch's own caption support, so viewers need no extension and nothing extra runs on their machine. It also writes the full stream transcript to an SRT file, and the README is unusually candid about the places where it does not work.
Who is it for?
Adopt this plugin if you stream on Twitch, talk into a dedicated microphone source, and want accessible live captions without asking your viewers to install anything. Do not adopt it if you broadcast through Streamlabs OBS, if you need captions in Japanese or Russian, or if you rely on the AMD hardware encoder on Windows, since the README lists all three as unsupported.
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 14 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 October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Captions with nothing installed on the viewer's side

The plugin provides closed captioning via the Google Cloud Speech Recognition API as a standalone OBS plugin, with no other tools required.

The part that makes it work without a Twitch extension is the choice of delivery. The plugin uses Twitch's built-in caption support, which works on livestreams and in VODs on PC, Android and iOS, and no Twitch extension is required. The captions arrive through a channel the platform already has, so a viewer who has captions turned on sees text and a viewer who has them off sees nothing.

The plugin's own feature list makes the viewer-facing property explicit: it is completely optional for viewers, it works live and in VODs, it requires no extra tools or website open, and it supports OBS delay so the captions can be aligned with the audio.

There is a further layer for sites that do not support closed captions, Open Caption support through OBS Text Sources, which renders the text into the stream as an ordinary video source. And the captions themselves can be captured to files, with the full stream or recording transcript saved as SRT subtitle files or as plain text, and the current captions written to a text file for use with other tools.

The remaining features are about control rather than delivery: text filtering with custom word and phrase removal and replacement, and the option to caption entire OBS audio tracks instead of just single sources.

The safety rule, and the half second delay

Two details matter more than the feature list.

The first is the safety rule, and the README states it twice. Captions only appear when the microphone source is unmuted and active, and the plugin only captions the selected audio source when it is not muted and when it is used on the current active scene. The stated reasons are to ensure safety and to avoid any captioning when the mic is muted for the stream.

That is a well-judged design decision for a live broadcast. An always-on transcription plugin in a streaming setup will happily caption background conversation, other people in the room, or a television in the other room, and a caption that reveals something the streamer did not intend to broadcast is a broadcast accident. Gating the captioning on the source being unmuted and on the current scene is a simple, effective mitigation, and the README also recommends selecting an OBS source that is only your microphone.

The second detail is the delay. The caption delay is usually less than half a second and should not be noticeable to viewers, which sets the expectation that this is real-time rather than post-processed. The cost of that is in the recognition quality, and the README is candid about it: the quality of Google's Speech Recognition heavily depends on the speaker and what is being said, results are usually good in normal conversational settings such as talking to chat, and recognition can go down noticeably with ingame terms, other specialised vocabulary, or during hectic speaking.

The list of things it does not do

The known issues and downsides section is the most useful part of the README, and it is long.

It does not work with Streamlabs OBS, because SLOBS does not support third-party plugins like this. It does not support native caption output for languages with foreign character sets such as Japanese or Russian, because that is not possible the way Twitch and OBS captions work, though transcripts and Open Captions do work. And it does not appear to work with the AMD hardware encoder in OBS on Windows, while other hardware encoders such as NVEnc, and AMD on macOS, seem fine.

The positioning limitation follows from using the platform's caption channel. Viewers get the limited amount of positioning options the player provides, so they can choose between top or bottom and left, centre or right for the caption box, but they cannot move or resize it freely or put it in a corner, and a streamer cannot pick a good custom default position for it, since the default is centre bottom for everyone with captions enabled.

Embedded captions in local recordings are described as currently not very useful. They only work with certain file formats, ts, mp4 and mov, and only very few video players can play them correctly. MPV can play them normally with .ts files, and almost no common video players play them in mp4 and mov, so saving transcripts to separate SRT subtitle files is generally much more useful.

There is one more oddity, that captions should be off by default for most viewers but Twitch sometimes has them enabled for some viewers for unknown reasons, so occasionally some viewers will be confused and need it explained. The README then explains where the setting is, per platform.

Installing on Windows is a folder copy

The Windows installation is deliberately manual, and the steps are worth following exactly because the plugin has to end up inside the OBS installation folder.

Close OBS if it is running. Download the latest Closed_Captions_Plugin.zip for Windows from the releases section, and extract it; the archive contains a folder named obs-plugins. Then find your OBS installation folder, which is usually C:\Program Files\obs-studio\ or C:\Program Files (x86)\obs-studio\, and copy that obs-plugins folder into the main OBS folder. The main folder should already contain obs-plugins, bin and data directories, and Windows will ask you to confirm the copy and replace a few times, which just adds the plugin files to the existing obs-plugins folder.

The two paths, for reference:

text
C:\Program Files\obs-studio\
C:\Program Files (x86)\obs-studio\

Then start OBS. There should now be a Cloud Closed Captions option at the bottom of the Tools menu. Open Settings in the new Captions Preview window and select your audio source under Caption Source, choosing the OBS source that is only your microphone for the best results.

The README also notes that if your audio setup is more complicated, with several sources mixed together, there is more information further down for that case.

Installing on macOS is a plugin bundle

The macOS route is similar in spirit and different in detail.

Download the latest Closed_Captions_Plugin___MacOS.zip, which extracts by itself when opened, and it contains a file or plugin package named cloud-closed-captions.plugin. Copy that into the plugins folder inside the obs-studio settings folder. To find the settings folder, in the OBS menu click File and then Show Settings Folder, which opens it automatically, or in Finder use Go to Folder with Cmd+Shift+G and paste the path:

text
~/Library/Application Support/obs-studio/

Your obs-studio folder may already have a plugins folder, and if not you create one, then paste the cloud-closed-captions.plugin into it. Restart OBS, and the Cloud Closed Captions option appears at the bottom of the Tools menu, where the same Settings and Caption Source selection follows.

The repository reflects a native plugin built with CMake, with a CMakeLists.txt at the root, src/ and lib/ directories, a BUILD.md for the build instructions, a CI/ directory and a github/ directory holding the images the README embeds. There is no installer, which is why both platform instructions are copy-and-paste rather than a double-click.

The transcript is the artefact that keeps working

The plugin can save the full stream or recording transcript as SRT subtitle files or as plain text, and can save the current captions to a text file for use with other tools.

The README is clear that SRT transcript files are generally recommended for saving captions for local recordings, and gives three reasons: they are supported by many video players, websites and tools, and they are easy to edit. That last point matters more than it first appears, because a transcript produced by speech recognition is a draft, and a draft that you can open in a text editor is a transcript you can correct.

The alternative, embedding the captions in the video file, is the one the README qualifies as not very useful. It works with certain file formats, ts, mp4 and mov, and only very few video players can play them correctly. MPV handles them in .ts files, and almost no common video player plays them in mp4 or mov. Since mp4 is what most people record to, the embedded path usually produces a file whose captions silently do not appear for the audience.

There is also a text filtering feature, custom word and phrase removal and replacement, which pairs well with the SRT output, because a recogniser that repeatedly mishears your game's character names is a recogniser whose transcript you will want to clean up before publishing.

Where the plugin is the wrong choice

The first wrong-tool case is a streamer on anything other than Twitch. The README says it is only tested on Twitch.tv and that other streaming services with native caption support might work but are not very likely. The whole delivery path is built on Twitch's caption mechanism, so a YouTube or Kick streamer gets the transcript files and the Open Caption fallback, which is the hard way to do live captions.

The second is Streamlabs OBS, which is a large share of the streaming audience, and the plugin simply does not run there.

The third is a non-English broadcaster with a script outside the Latin range. Native caption output for languages with foreign character sets such as Japanese or Russian is not possible the way Twitch and OBS captions work, and while transcripts and Open Captions do work, the difference matters. Open Captions means the text is burned into the video as pixels rather than delivered as a caption track, which is a different product for the viewer, a different size for the recording and a different accessibility story.

There is a privacy dimension that the README does not discuss, and it is worth thinking about before streaming with it. The audio of the selected source is sent to Google's speech recognition service, which means the audio leaves the machine and is processed by a third party. A streamer who talks about something confidential has a new disclosure path that did not exist before the plugin was installed.

Editorial conclusion

Adopt this plugin if you stream on Twitch, talk into a dedicated microphone source, and want accessible live captions without asking your viewers to install anything. Do not adopt it if you broadcast through Streamlabs OBS, if you need captions in Japanese or Russian, or if you rely on the AMD hardware encoder on Windows, since the README lists all three as unsupported. Before you stream with it, test the caption delay on your own connection, since the plugin sends audio to Google, and plan to keep the SRT transcript as the real deliverable, because the embedded caption path in local recordings is described as useful only for a few file formats and players.

Frequently asked questions

How does the OBS closed captioning plugin deliver captions to viewers?

It uses the built-in caption support of the Twitch video player, so it works on livestreams and VODs on PC, Android and iOS with no Twitch extension required, and captions are completely optional for viewers. For sites without native caption support, the plugin also offers Open Caption output through OBS Text Sources.

When does the plugin produce captions?

Only when the selected audio source is unmuted and active, and only when that source is used on the current active scene. The stated reasons are to ensure safety and to avoid captioning when the microphone is muted for the stream, and the README recommends selecting a source that is only your microphone.

How do I install the plugin on Windows?

Close OBS, download the latest Closed_Captions_Plugin.zip from the releases section, extract it, and copy the obs-plugins folder it contains into your OBS installation folder, usually C:\Program Files\obs-studio\. Start OBS, open Cloud Closed Captions from the bottom of the Tools menu, and choose the audio source under Caption Source.

Which file formats can the plugin save transcripts in?

The full stream or recording transcript can be saved as SRT subtitle files or as plain text, and the current captions can be written to a text file for other tools. The README recommends SRT for local recordings because many players and tools support it and it is easy to edit, while embedded captions in recordings only work with certain formats.

What licence is the OBS closed captioning plugin released under?

GPL-2.0, with the LICENSE file at the repository root. The most recent release is v0.34, dated 2026-10-09, and the last push was on the same day. It is built with CMake, with src/ and lib/ directories and a BUILD.md in the tree.

Official sources

  1. Issues
  2. License: GPL-2.0
  3. ratwithacompiler/OBS-captions-plugin on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ratwithacompiler-obs-captions-plugin.svg)](https://hysenlabs.com/projects/ratwithacompiler-obs-captions-plugin)

Was this useful?