CLI tool
ilyhalight/voice-over-translation avatar
ilyhalight/voice-over-translation

voice-over-translation (vot): Yandex-style dubbed video in any browser

Смотрите видео на другом языке с закадровым переводом и субтитрами в любом браузере

7,498 stars454 forksTypeScriptMIT

At a glance

What is it?
voice-over-translation is a MIT-licensed userscript and browser extension that adds Yandex Browser's voice-over translation to Chrome, Firefox and other browsers. It is a thin client for Yandex's translation service, so its limits are the service's limits.
Who is it for?
Adopt vot if you already watch foreign-language video in a browser and accept that every translated second is processed by Yandex servers through a third-party proxy. Do not adopt it if you need offline operation, batch processing of long archives, or a translation engine you control.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem vot solves, and the audience it assumes

Yandex Browser ships a feature that dubs a video into another language while you watch it. That feature is not available in Chrome, Firefox or Opera. vot reimplements the client side of it: a userscript or extension that detects a video, asks a translation backend for a dubbed audio track and subtitles, and plays them over the original player. The README describes it as "A small extension that adds a Yandex Browser video translation to other browsers."

The audience is narrow and specific. It is someone who watches foreign-language video in a desktop browser and wants to follow it without reading subtitles the whole time. The output languages are Russian, English and Kazakh, per the features list, with input languages listed in LANG_SUPPORT.md. If you need translation into Arabic or another language outside that set, the project does not offer it. Sites are also enumerated rather than universal: the supported-site list lives in the wiki, and the README points there instead of claiming blanket coverage.

How the dubbing pipeline is wired

The architecture is client plus remote services, not a local model. The repository keeps the userscript build under dist/ and the extension build under dist-ext/, and package.json shows two separate build paths: vite/vite.config.ts for the userscript (build:gm) and the CRXJS and Firefox configs for the extensions (build:ext). The same TypeScript source in src/ feeds both targets.

The runtime depends on two configurable domains. A proxy server exists for cases where direct access to Yandex servers is blocked; the README lists vot-new.toil-dump.workers.dev as the default and notes it does not work inside Russia. A media proxy handles the audio stream. Both can be changed in the extension settings without rebuilding, which matters because the defaults are community-hosted infrastructure, not an SLA. The companion repositories vot-worker, media-proxy and vot-backend are linked from the README, and votstatus.toil.cc and votstats.toil.cc are the public status and statistics pages.

On the client side the extension tracks the player, generates or fetches subtitles, and exposes separate volume sliders for the original and translated audio. That split is the interesting design decision: the original is not muted, it is ducked, and the README lists adaptive volume as a feature. It also lists saving subtitles as .srt, .vtt or .json and saving the translated audio track as .mp3, which means the pipeline can produce artifacts rather than only playing them.

Installing vot and translating a first video

There are two install routes. The userscript route needs a userscript manager first; the README names Tampermonkey and, for Opera specifically, Violentmonkey.

bash
# no shell install: open the userscript URL in a browser that has a userscript manager
# https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist/vot.user.js

Opening that URL with Tampermonkey installed triggers the script install prompt. On Tampermonkey 5.2 or newer under Chromium, the README warns that you must open chrome://extensions, enable developer mode, and on Chromium 138+ also enable "Allow user scripts" in the extension details. Opera users are told to use Violentmonkey and to enable "Allow access to search page results" in its settings, otherwise the script does not run.

The native extension route is simpler. Chrome and Chromium users can install from the Chrome Web Store, or download vot-extension-chrome.zip from the Releases page and drag it onto chrome://extensions with developer mode on. Firefox users can install from Firefox Add-ons or open vot-extension-firefox.xpi from Releases and confirm.

For a first real use, open a supported site, start a video, and use the extension menu to pick the target language and enable translation. The README also documents automatic translation on open and automatic subtitle activation, so if you enable those you should see subtitles appear without touching the menu. If nothing happens, the two things to check are the proxy domain in settings and your browser's autoplay permission: the README explicitly recommends allowing autoplay for audio and video to avoid extension errors.

The four-hour ceiling and other limits you inherit

The README states plainly that the extension cannot translate videos longer than four hours, and attributes that to a translator API limit. This is not a bug that will be patched locally; it is a boundary of the service being called. Long lectures, full-day streams and archived conferences are outside the design.

There are softer failure modes too. The default proxy is documented as not working in Russia, which means users there must supply their own domain in settings or route around it. The README also warns that audio download stability depends on using a current, supported userscript manager, which is a polite way of saying that an outdated Tampermonkey can break a feature that is not the extension's fault. And because both the proxy and the media path are third-party infrastructure, availability is a property of votstatus.toil.cc rather than of the code you installed.

The project is not archived and the last push was on 2026-09-21, with release 1.11.14 tagged the same day. That is a fast release cadence, and it also means the extension surface moves often enough that pinned builds and stale documentation drift apart.

vot.js and vot-cli: same engine, different shape

If you want translation inside your own program rather than inside a video player, the README points to vot.js, a JavaScript library, and vot-cli, a terminal version. The difference is where the player integration lives. The browser extension carries the DOM work: finding the video element, drawing subtitle overlays, adapting subtitle line length and text size to the player dimensions, and wiring keyboard shortcuts. A library consumer gets the translation and subtitle retrieval without any of that, and has to handle playback themselves.

That distinction decides the choice. vot-cli is the right shape when the video is a file or a URL and you want subtitles or an audio track out of it, not a live overlay. The extension is the right shape when the video is embedded in a page you do not control. Neither replaces the other, and the README treats them as separate projects rather than modes of one tool.

Licence, build cost and what upgrading involves

The repository is MIT-licensed, and package.json repeats that under the license field. MIT is permissive: you can fork, modify and redistribute, including commercially, provided the copyright notice and permission notice travel with it. That covers the code in this repository. It does not cover the Yandex translation service the extension calls, and the README carries a disclaimer that all rights to the original software belong to their owners and that the extension is not affiliated with them. Treat the service terms as a separate question from the code licence; this article is not legal advice.

Building from source assumes Bun and Node.js, both linked from the README. package.json exposes build:gm for the userscript, build:ext for both extensions, build:chrome and build:firefox individually, plus lint and check scripts driven by Biome and tsc. Tests run through bun test. Upgrading an installed copy is cheap: userscript managers and browser stores both handle it, and the release history shows 1.11.12, 1.11.13 and 1.11.14 within ten days, so updates arrive frequently. The real upgrade cost is configuration drift: if you changed the proxy or media proxy domains in settings, verify them after a major update instead of assuming the defaults still apply to your network.

Editorial conclusion

Adopt vot if you already watch foreign-language video in a browser and accept that every translated second is processed by Yandex servers through a third-party proxy. Do not adopt it if you need offline operation, batch processing of long archives, or a translation engine you control. Before installing, open votstatus.toil.cc and vot-worker.toil.cc/health, confirm your browser is listed in BROWSERS-EXTS-TEST.md, and check the wiki page for your specific site, because support there is per-site and not uniform.

Frequently asked questions

What is voice-over-translation (vot)?

It is a userscript and browser extension that adds Yandex Browser style voice-over translation to other browsers, playing a translated audio track and subtitles over the original video. It is MIT-licensed and written in TypeScript.

Is there a live audio translator for videos?

vot translates while the video plays, and the README lists automatic translation on open and automatic subtitle activation as features. It depends on remote translation and proxy servers, so it is not an offline translator.

How do I install the voice-over-translation script?

Install Tampermonkey (or Violentmonkey on Opera), then open the vot.user.js URL from the dist folder to trigger the script install prompt. Chromium users on Tampermonkey 5.2+ must enable developer mode, and on Chromium 138+ also enable "Allow user scripts".

Does voice-over-translation work in Chrome and Opera?

Yes. Chrome and Chromium browsers can install the extension from the Chrome Web Store or load vot-extension-chrome.zip from Releases with developer mode enabled. Opera users are told to use Violentmonkey rather than Tampermonkey and to enable "Allow access to search page results" in its settings.

Which languages can voice-over-translation translate into?

The features list names Russian, English and Kazakh as output languages, with input languages covered in LANG_SUPPORT.md. Videos longer than four hours cannot be translated because of a translator API limit.

Official sources

  1. ilyhalight/voice-over-translation on GitHub
  2. License: MIT
  3. Project website
  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/ilyhalight-voice-over-translation.svg)](https://hysenlabs.com/projects/ilyhalight-voice-over-translation)