Skip to content
Projects

ilyhalight/voice-over-translation

View on GitHub

ilyhalight/voice-over-translation has 7,704 GitHub stars and 460 forks. GitHot measured +34 in 7 days. Last checked 2026-11-11 00:10 UTC. Last push 2026-11-07.

How these counts are measured

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

Measured star growth

in 24h
Update delayed
in 7 days
+34
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README-EN.md

Original

voice-over-translation (vot)

Watch videos in other languages with voice-over translation and subtitles in any browser

en ru

Installation · Development · FAQ · Supported sites

Install from Chrome Web Store Install from Firefox Add-ons Install from Github Releases

vot promotion banner

All rights to the original software belong to their respective owners. This extension is not affiliated with the original rights holders.

Thanks to the Yandex.Translate and Yandex.Browser teams, and everyone helping make the extension even better.

Installing the extension From GitHub Releases

[!CAUTION] Before creating an issue, we strongly recommend reading the FAQ and existing issues.

Native for Chrome (Chromium)

  1. Open Releases
  2. Click to vot-extension-chrome.zip
  3. Open your extensions page:
    • Chrome: chrome://extensions
    • Edge: edge://extensions
    • Brave: brave://extensions
    • Opera: opera://extensions
  4. Enable Developer mode
  5. Drag and drop the downloaded .zip file onto the extensions page

Native for Firefox

  1. Open Releases
  2. Click to vot-extension-firefox.xpi
  3. Confirm the installation in Firefox

Userscript Loader (Tampermonkey)

[!WARNING] Important for Tampermonkey 5.2+ (MV3) users: In Chromium-based browsers (Chrome, Edge, Brave, Vivaldi, etc.) you must:

  1. Open the extensions page (chrome://extensions) and enable "Developer mode" (details in Tampermonkey documentation).
  2. If you use Chromium 138+, open extension details and enable "Allow User Scripts".

[!WARNING] For Opera users:

  1. Use Violentmonkey instead of Tampermonkey.
  2. In the extension settings, enable "Allow access to search page results" (Opera guide: where to find this setting), otherwise the script will not work.
  1. Install a userscript manager: Tampermonkey (or Violentmonkey for Opera)
  2. Click -> Install the script

Features

  • Translate videos into Russian, English, or Kazakh from supported source languages
  • Auto-translate videos on open
  • Auto-enable subtitles on open
  • Smart subtitle layout that adapts line width and text size to player dimensions
  • Display AI-generated subtitles
  • Display site-provided subtitles (for example, auto-translated YouTube subtitles)
  • Save subtitles in .srt, .vtt, .ass and .json formats
  • Save translated audio as .mp3
  • Separate volume sliders for original and translated audio
  • Adaptive volume: duck original audio while translated speech is playing
  • Link translation volume with video volume
  • Limit translation from selected languages (selectable in the menu)
  • Hotkeys for translation and subtitles (including key combinations)
  • Easy subtitle appearance customization
  • Word-by-word translation directly in subtitles

Useful links

  1. Tested compatibility: Link
  2. JavaScript library (vot.js): Link
  3. Terminal version (vot-cli): Link

Limitations and recommendations

  1. It is recommended to allow autoplay for audio/video to avoid runtime playback errors
  2. The extension cannot translate videos longer than 4 hours (translator API limitation)
  3. For stable audio-download flow, use up-to-date and supported userscript managers (for example, Tampermonkey or Violentmonkey)

Supported sites

You can find the full list of supported websites and their specific limitations in the wiki.

Our domains:

These domains can be changed in the extension settings without rebuilding:

Proxy-server

Required for proxying requests when direct access to Yandex servers is unavailable.

Media Proxy-server

Required for proxying .m3u8 files and correctly processing indirect links to .mp4 and .webm.

How to build an extension?

  1. Install Node.js 22+ / Bun.sh
  2. Install dependencies:

NPM:

npm install

Bun:

bun install
  1. Build targets:

Automatic Build

Automatic builds are available only when using Bun.sh:

bun run autobuild

After the build completes, the .output directory (the single WXT output folder) will contain all build artifacts ready for publishing to the Chrome and Firefox extension stores, including the sources archive (vot-extension-<version>-sources.zip).

The dist-ext directory contains non-store builds distributed as .zip archives (for Chrome) and .xpi archives (for Firefox).

The dist directory contains the userscript build, which can be installed using Tampermonkey or other userscript managers.

Manual Build

Userscript (standard build):

npm run build:gm:default

Userscript (minified build):

npm run build:gm:min

Userscript (both builds):

npm run build:gm

Native Chrome/Firefox extensions :

bun build:chrome     # Chrome
bun build:firefox    # Firefox
bun build:ext        # production build for Chrome + Firefox → .output/ and dist-ext/
bun build:ext:debug  # unminified, with inline source maps
bun zip:ext          # package as .zip

Development:

bun dev          # extension, Chrome : dev mode, opens the browser on YouTube
bun dev:firefox  # extension, Firefox (wxt -b firefox)
bun dev:gm       # userscript (vite build --watch)

Extension pages and Solid components update via Vite HMR, while WXT automatically rebuilds and re-injects content scripts — no manual extension reload needed.

Development userscript build with source maps:

npm run build:dev

Userscript build artifacts are placed in dist/, unpacked extension builds in .output/chrome-mv3 and .output/firefox-mv3 , and packaged .zip/.xpi archives in dist-ext/.

If you are using Bun you can run unit tests with the built-in Test Runner:

bun test --isolate --preload ./tests/setup.ts

Customization of appearance:

The extension supports appearance customization via Stylus, Stylish, and similar tools.

Example style override:

/* ==UserStyle==
@name         VOT-styles
@version      16.09.2023
@namespace    vot-styles
@description  LLL
@author       Toil
@license      No License
==/UserStyle== */

:root {
  --vot-font-family:
    "Roboto", "Segoe UI", BlinkMacSystemFont, system-ui, -apple-system;

  --vot-primary-rgb: 139, 180, 245;
  --vot-onprimary-rgb: 32, 33, 36;
  --vot-surface-rgb: 32, 33, 36;
  --vot-onsurface-rgb: 227, 227, 227;

  --vot-subtitles-color: rgb(var(--vot-onsurface-rgb, 227, 227, 227));
  --vot-subtitles-passed-color: rgb(var(--vot-primary-rgb, 33, 150, 243));
}

Contributing

Please refer to the contributing guide.

Based on sodapng/voice-over-translation project (license MIT)

Explore related projects