Summary
OmniDub reads the subtitles of the video you are watching, translates them, and reads them aloud. You choose one of three voice options, and where your subtitle text goes depends on that choice: (1) your browser's built-in speech (Web Speech), (2) the OmniDub voice service, run by the developer on Cloudflare Workers, which forwards text to Microsoft's text-to-speech service, or (3) a TTS server that you run yourself (on your own computer, or in your own Google Colab session). To use the OmniDub voice service you request an access token through a Telegram bot, so that service stores your Telegram user ID and username. OmniDub has no API-key features and does not call any AI chatbot by itself. We do not sell user data, run advertising or analytics trackers, or use data for any other purpose.
Prominent Disclosure
OmniDub reads subtitle text and playback state from the video page you are watching, in order to translate and dub it. Subtitle text leaves your device only when dubbing is on and you selected an option that needs it: Google Translate for translation, and the OmniDub voice service for voice option (2), as described in Sections 3 and 5. With voice option (3), text goes only to the server address you entered.
You can turn OmniDub off at any time from the toolbar popup or uninstall it.
1. Introduction & Single Purpose
OmniDub: Lồng tiếng phụ đề AI ("OmniDub", "we", "us") is a browser extension with one single purpose: helping users understand foreign-language video by providing AI-assisted subtitle translation and speech dubbing (text-to-speech). This policy describes how user data is collected, handled, stored and shared, in line with the Chrome Web Store User Data Policy.
2. Data Collection
| Data | What exactly | How / when |
|---|---|---|
| Website content | Subtitle/caption text and timing (.vtt, .srt, XML, JSON) loaded by the video player on the page you are watching. | Read from the page's media element or from subtitle network requests while dubbing is active. Where it is sent is described in Section 5. |
| User activity (playback state) | Play, pause, seek events and current playback time of the video. | Read locally by content scripts only to keep the dubbed audio in sync. Not transmitted. |
| Page address (URL) of the active tab | URL and navigation state of tabs. | Used locally to detect when you switch or reload a video so subtitles attach to the right player. Not sent to our service and not stored. |
| Subtitles in Subtitle Studio | Subtitle text you load, paste, edit or save in the OmniDub Subtitle Studio page. | Handled locally in the extension. The "Copy AI Prompt" button writes subtitles and a translation prompt to your clipboard when you click it; the "Paste AI Result" button reads your clipboard only when you click it. OmniDub does not send this text to any AI service. If you paste it into an AI website (for example ChatGPT, Claude, Gemini or DeepSeek), that is your own action and that website's privacy policy applies. |
| Settings & preferences | Target language, volume, speed, pitch, selected voice, toggles, and the server address if you use your own TTS server. | Saved on your device in browser extension storage. |
| Access token (authentication) | A random token that you paste into the extension settings to use the OmniDub voice service. | Stored on your device; sent to the OmniDub voice service with each voice request. |
| Telegram identifiers (personal identification) | Telegram numeric user ID, username (or first name), chat ID, and whether you are a member of the OmniDub Telegram group. | Collected by our Telegram bot only when you message the bot privately (/start or /gettoken) to get a token. Messages in groups are ignored. |
| Technical request data | IP address and request metadata. | Seen by the services your requests reach (for example Cloudflare, Google, Microsoft) as part of ordinary network requests. OmniDub does not store IP addresses. |
We do not collect: your name or email (unless you email us), payment or financial information, passwords or cookies of the sites you visit, keystrokes or form input, or your browsing history as a list. OmniDub's content scripts are not run on a set of sensitive sites (Gmail, Google account pages, and popular AI chat sites).
3. Data Handling & Use
- Translation: subtitle lines can be translated with Google Translate (
translate.googleapis.com). Alternatively you can translate in the Subtitle Studio by copying the prompt and pasting the result back yourself, as described above. - Voice synthesis, by the option you choose:
| Voice option | What happens to the text |
|---|---|
| 1. Web Speech (browser built-in) | Text is passed to your browser's speech engine. With voices installed on your operating system the text stays on your device; some browser voices (for example Google network voices in Chrome) are processed by the browser vendor's servers. OmniDub does not receive it. |
| 2. OmniDub voice service (Microsoft TTS through a Cloudflare Worker) | The extension sends the text line (up to 500 characters), the voice name and your access token to a Cloudflare Worker run by the developer. The Worker verifies the token, applies a per-user rate limit, requests the audio from Microsoft's text-to-speech service, and returns it. The Worker does not save the text or the audio. |
| 3. Server TTS (VieNeu on your own computer, or VieNeu, Piper or OmniVoice in a Colab notebook you run) | The extension sends the text line and voice choice to the server address you entered (for example http://127.0.0.1 or a temporary trycloudflare.com link created by your own Colab session). These servers are run by you, not by OmniDub, and OmniDub never receives this text or audio. In Colab the text is processed in your Colab session under your Google account, and passes through a Cloudflare quick tunnel. Anyone who knows your tunnel link can use your server, so keep it private. |
- Access control and abuse prevention (voice option 2): the Telegram ID is used to confirm group membership, issue a token, apply rate limits and block abusive accounts. A sampled request counter per user is kept for capacity planning and abuse detection.
- Synchronization: playback state is processed in temporary memory to schedule audio in time with the video.
- No secondary use: data is never used for advertising, profiling, creditworthiness, or any purpose unrelated to subtitle dubbing.
4. Storage, Retention & Deletion
| Data | Where | Retention | Deletion |
|---|---|---|---|
| Subtitle text & audio in playback | Browser memory; Worker memory during a request | Temporary. Not written to a database by OmniDub. | Cleared when the tab is closed/reloaded or the request ends. |
| Settings, token, subtitle data of videos you dub or save to the extension | Your device (extension storage) | Until you reset, remove them or uninstall | Reset in the popup, remove in the Subtitle Studio, or uninstall. |
| Access token records | Cloudflare KV (developer's account) | 24 hours, then automatically deleted | Automatic. |
| Telegram ID + username + first-token date | Cloudflare KV | Kept until you ask us to delete it | See Section 8. |
| Block flag and request counter (sampled estimate) | Cloudflare KV | Kept while the account exists (block flags are kept to prevent abuse) | See Section 8. |
| Short-lived caches (token validity, rate limit) | Worker memory | Minutes to one hour; reset when the Worker restarts | Automatic. |
All transfers to the OmniDub voice service, Google Translate and Telegram use HTTPS/TLS. Access to the developer's Cloudflare account, Telegram bot and admin tools is restricted to the developer. Data on servers you run yourself (voice option 3) is under your control.
5. Sharing & Third Parties
We do not sell or rent user data. Data is shared only with the following parties, only to perform the function you requested:
| Recipient | Data | Purpose |
|---|---|---|
Google Translate (translate.googleapis.com) | Subtitle text | Translation. |
| OmniDub voice service (Cloudflare Workers, operated by the developer) | Subtitle text, voice name, access token, request metadata | Text-to-speech proxy, token verification, rate limiting (voice option 2 only). |
| Microsoft (speech/translator services) | Subtitle text and voice name, sent by the OmniDub voice service | Generating the speech audio. Your token and Telegram ID are not sent to Microsoft. |
| Telegram | Messages you send to the bot, the bot's replies, membership check of your user ID | Issuing your access token. |
| Cloudflare | Requests to the voice service and KV data; traffic through quick tunnels you create in Colab | Hosting and network provider (data processor). |
| Your own TTS server (localhost or your Colab session) | Subtitle text and voice choice | Speech synthesis, only if you choose voice option 3. Not operated by OmniDub. |
| Browser speech provider | Subtitle text, depending on the voice you pick | Only for browser voices that are processed online (voice option 1). |
| Google Fonts | IP address and browser information, when the Subtitle Studio page loads its fonts | Displaying the page's typefaces. |
OmniDub shows links to Telegram and Ko-fi. Following those links is your choice and their own privacy policies apply. We may disclose data if required by law or to protect against abuse of the service.
Chrome Web Store Limited Use Compliance
The use of information received by OmniDub adheres to the Chrome Web Store User Data Policy, including the Limited Use requirements:
- We do not sell user data or transfer it to data brokers or advertising platforms.
- We do not use or transfer user data for personalized, retargeted or interest-based advertising.
- We do not use or transfer user data to determine creditworthiness or for lending.
- We use or transfer data only to provide or improve the single, user-facing purpose of subtitle translation and dubbing.
6. Permissions Justification
| Permission | Why it is needed |
|---|---|
storage, unlimitedStorage | Save settings and your token locally, and keep the subtitle data for the video you are dubbing (original and translated cues, which can be very large for videos that are several hours long) on your device, so it is not lost when the browser is restarted and does not hit the default storage quota. |
activeTab, tabs | Find and talk to the tab with the video player and detect navigation/reload so dubbing stays attached to the right video. Tab URLs are not collected or transmitted. |
webRequest | Detect subtitle file requests (.vtt, .srt, XML, JSON) made by the video player so their text can be translated and dubbed. |
declarativeNetRequest | Adjust request headers when fetching subtitle files restricted by CDN referrer/CORS rules. |
scripting | Run synchronization code in the video page to follow play, pause and seek. |
offscreen | Play audio in an offscreen document, because a Manifest V3 service worker cannot play audio or stay alive. |
notifications | Show a short alert when subtitles are ready or a task finishes. |
downloads | Save the subtitle file (.srt) you export with the "Download .SRT" button to your device. |
Host access <all_urls> and content scripts | Video can be on any website, and your own TTS server can be at any address you enter. Content scripts load on web pages (excluding sensitive sites such as Gmail, Google accounts and AI chat sites) and only read subtitle and playback information of video players. |
https://translate.googleapis.com/* | Send subtitle text to Google Translate for translation. |
Remote code: OmniDub does not load or execute remote JavaScript or WebAssembly code. TTS services return audio data only.
7. Your Choices
- Turn OmniDub off from the popup. Choose voice option 1 or 3 so subtitle text is not sent to the OmniDub voice service.
- Edit or delete your settings, token and saved subtitles in the extension at any time.
- Uninstalling the extension removes all data stored on your device.
8. Access and Deletion Requests
You can ask us to show or delete the data held on the OmniDub voice service (Telegram ID, username, block flag and request counter) by emailing the address below, or by messaging the OmniDub Telegram bot or group with your Telegram ID. We will respond within 30 days. Deleting this data ends your access to the voice service; a record may be kept where needed to prevent abuse or comply with law.
9. Children's Privacy
OmniDub is a general-audience tool and is not directed to children under 13 (or under 16 in the EU). We do not knowingly collect personal data from children. If you believe a child has provided data, contact us and we will delete it.
10. Changes to This Policy
We will update the "Effective Date" above when this policy changes, and describe material changes in the extension's store listing or release notes before they take effect.
11. Contact
- Developer: Quang Minh Nguyen
- Email: ngquangminh2128@gmail.com
- Source code: github.com/nqm2128/omnidub-ai-subtitle-dubbing
- Issues: github.com/nqm2128/omnidub-ai-subtitle-dubbing/issues