[tampermonkey-link]: https://www.tampermonkey.net/index.php
[violentmonkey-opera]: https://chrome.google.com/webstore/detail/violent-monkey/jinjaccalgkegednnccohejagnlnfdag
[violentmonkey-link]: https://violentmonkey.github.io
[devmode-enable]: https://www.tampermonkey.net/faq.php#Q209
[opera-search-results-access]: https://help.opera.com/en/extensions/content-scripts/
[vot-faq]: https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ
[vot-supported-sites]: https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-Supported-sites
[vot-wiki]: https://github.com/ilyhalight/voice-over-translation/wiki
[vot-balancer]: https://vot-worker.toil.cc/health
[vot-worker]: https://github.com/FOSWLY/vot-worker
[media-proxy]: https://github.com/FOSWLY/media-proxy
[vot-backend]: https://github.com/FOSWLY/vot-backend
[vot-status]: https://votstatus.toil.cc
[vot-stats]: https://votstats.toil.cc
[vot-dist]: https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist/vot.user.js
[vot-releases]: https://github.com/ilyhalight/voice-over-translation/releases
[nodejs-link]: https://nodejs.org
[bun-link]: https://bun.sh/
[badge-en]: https://img.shields.io/badge/lang-English%20%F0%9F%87%AC%F0%9F%87%A7-white
[badge-ru]: https://img.shields.io/badge/%D1%8F%D0%B7%D1%8B%D0%BA-%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%20%F0%9F%87%B7%F0%9F%87%BA-white
[vot-chrome-store]: https://chromewebstore.google.com/detail/dnioaagdjgpcokckfpokpndoblenmfcg
[vot-firefox-store]: https://addons.mozilla.org/ru/firefox/addon/voice-over-translation/
[vot-readme-ru]: README.md
[vot-readme-en]: README-EN.md
[vot-langs]: LANG_SUPPORT.md
[vot-issues]: https://github.com/ilyhalight/voice-over-translation/issues
[votjs-link]: https://github.com/FOSWLY/vot.js
[vot-cli-link]: https://github.com/FOSWLY/vot-cli
[yabrowser-link]: https://browser.yandex.com
[yatranslate-link]: https://translate.yandex.ru/
[contributors-link]: https://github.com/ilyhalight/voice-over-translation/graphs/contributors
voice-over-translation (vot)
Watch videos in other languages with voice-over translation and subtitles in any browser
[Installation](#installing-the-extension) ·
[Development](#how-to-build-an-extension) ·
[FAQ][vot-faq] ·
[Supported sites][vot-supported-sites]
[![en][badge-en]][vot-readme-en]
[![ru][badge-ru]][vot-readme-ru]
---
> 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][yatranslate-link]** and **[Yandex.Browser][yabrowser-link]** teams, and everyone [helping make the extension][contributors-link] even better.
## Installing the extension
> [!CAUTION]
> Before creating an issue, we strongly recommend reading the [FAQ][vot-faq] and existing [issues][vot-issues].
> [!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][devmode-enable]).
> 2. If you use **Chromium 138+**, open extension details and enable **"Allow User Scripts"**.
>
> **For Opera users:**
> 1. Use **[Violentmonkey][violentmonkey-opera]** instead of Tampermonkey.
> 2. In the extension settings, enable **"Allow access to search page results"** (Opera guide: [where to find this setting][opera-search-results-access]), otherwise the script will not work.
1. Install a userscript manager: **[Tampermonkey][tampermonkey-link]** (or [Violentmonkey][violentmonkey-opera] for Opera)
2. **[Install the script][vot-dist]**
### Install Native Extension for Chrome / Chromium
#### From Chrome WebStore
Open [Chrome WebStore][vot-chrome-store] and click "Install"
#### From GitHub Releases
1. Open [Releases][vot-releases] and download `vot-extension-chrome.zip`
2. Open your extensions page:
- Chrome: `chrome://extensions`
- Edge: `edge://extensions`
- Brave: `brave://extensions`
- Opera: `opera://extensions`
3. Enable **Developer mode**
4. Drag and drop the downloaded `.zip` file onto the extensions page
### Install Native Extension for Firefox
#### From Firefox Add-ons
Open [Firefox Add-ons][vot-firefox-store] and click "Add to Firefox"
#### From GitHub Releases
Open [Releases][vot-releases], click `vot-extension-firefox.xpi`, and confirm installation in Firefox
## Features
- Translate videos into Russian, English, or Kazakh from [supported source languages][vot-langs]
- 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`, 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](./BROWSERS-EXTS-TEST.md)**
2. JavaScript library (vot.js): **[Link][votjs-link]**
3. Terminal version (vot-cli): **[Link][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][tampermonkey-link] or [Violentmonkey][violentmonkey-link])
## Supported sites
You can find the full list of supported websites and their specific limitations in the **[wiki][vot-supported-sites]**.
### 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.
- [vot.deno.dev][vot-worker]
- [vot-new.toil-dump.workers.dev][vot-worker] (⚠️ doesn't work in Russia)
#### Media Proxy-server
Required for proxying `.m3u8` files and correctly processing indirect links to `.mp4` and `.webm`.
- [media-proxy.toil.cc][media-proxy]
## How to build an extension?
1. Install [Node.js 22+][nodejs-link] / [Bun.sh][bun-link]
2. Install dependencies:
NPM:
```bash
npm install
```
Bun:
```bash
bun install
```
3. Build targets:
3.0. Userscript (regular build):
```bash
npm run build
```
3.1. Userscript (minified build):
```bash
npm run build:min
```
3.2. Userscript (both variants):
```bash
npm run build:all
```
3.3. Native Chrome/Firefox extension packages:
```bash
npm run build:ext
```
3.4. Development userscript build with sourcemaps:
```bash
npm run build:dev
```
Userscript artifacts are generated in `dist/`, native extension artifacts in `dist-ext/`.
## Customization of appearance:
The extension supports appearance customization via Stylus, Stylish, and similar tools.
Example style override:
```css
/* ==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](./CONTRIBUTING.md).
> Based on [sodapng/voice-over-translation](https://github.com/sodapng/voice-over-translation) project (license MIT)