Privacy Policy — Netflix Dual Subtitles
Last updated: 5 September 2026
Netflix Dual Subtitles (“the extension”) runs on your device. It has no analytics or tracking, no advertising, and no remote code, and it does not collect personal information. The only network requests it makes to the developer’s site are: (1) a small feature-configuration check when you open the popup (contains no personal data — see “Feature configuration”), (2) a feedback submission, only if you choose to send one — either from the popup’s feedback form or from the short page that opens if you uninstall (see “Feedback” and “Uninstall feedback”), (3) dictionary-pack downloads and a pack-update check at most once a week when you open Netflix, only if you use word lookup’s downloadable packs (see “Dictionary packs”), and (4) a lookup of a single word on two Wiktionary-based sites only if you turn on “Also look up online” (see “Online dictionaries”).
Where it runs
Only on Netflix (https://www.netflix.com/watch/*, /title/*,
/browse*, and /search*) — the watch player, the title/preview
pages, and the search page, so dual subtitles work in the previews as well as full
playback. It reads the subtitle information Netflix
already loads for the video being shown to display a second subtitle language and offer
related tools (search, copy, export). It runs on no other website.
Data stored on your device
Saved locally in your browser’s extension storage; it never leaves your device (unless you submit feedback):
- chosen primary/secondary languages and the feature toggles and timings (navigation keys, loop, auto-pause and its lead/auto-resume, loop wait-between-repeats, the "listen first" hide/reveal settings, click-to-copy, your saved "My setup" mode, and so on)
- subtitle text colors, the primary and secondary font sizes, on-screen height, the chosen subtitle font, and the outline/text-background/window legibility settings (their colors and opacities)
- the on-screen control panel’s position, and your transcript display preferences (paired/timeline view, the “follow” setting, and the dock’s side and width)
- word lookup: its settings (on/off, the language explanations are shown in, when the popup shows, automatic pack updates), and any dictionary packs you downloaded — the packs themselves (dictionary data, no personal content) and the list of which ones are installed, their edition, and download progress. Removed when you press Remove.
- the loop you last set, if “remember loop after refresh” is on — kept as start/end timestamps plus the episode’s Netflix video ID, so the loop can resume on the same episode after a refresh (stored only on your device; never sent anywhere)
- while a practice run is on: the Netflix ID (or title) of the show you started it on, so the run can carry across that show’s episodes and end itself when you open a different title (stored only on your device; never sent anywhere; cleared when the run stops)
- the status of the most recent subtitle load (shown in the popup)
- your chosen interface language for the extension (defaults to your browser’s language) and the global on/off setting
- a small private usage counter — how many separate days you’ve used the extension (and whether you’ve already seen the one-time feedback note) — used only to decide when to show a single, dismissible “send feedback?” prompt in the popup. It is just a number on your device and is never sent anywhere.
- which extension version you last viewed — so the popup can show a “What’s new” note after an update and briefly badge the icon. It is just a version number on your device and is never sent.
- your last “search & jump” query and the language you searched, so the panel restores them when you reopen it (kept on your device; never sent).
- your saved searches (the watchlist): each saved pattern’s name, the pattern itself, its highlight colour, and its on/off state — so your watchlist persists and can highlight matches as you watch (kept on your device; never sent)
- your practice presets — the named practice setups you save in the preset library, and which one you last used (kept on your device; never sent)
- the mini player’s preferences: its window sizes (for the subtitles-only and video views), which view you last used, and whether “open by itself when you switch tabs” is on (kept on your device; never sent). The auto-open consent itself is Chrome’s own prompt, handled and remembered by the browser, not the extension.
- if you activate an optional supporter key (a thank-you for donating), the key — and the details encoded in it (the display name shown on your badge, and an email only if one was included in the key you were given) — is saved on your device. It is verified entirely on your device and is never sent anywhere. A short list of any keys that have been deactivated is also kept (it arrives with the feature-configuration check below) and compared against your key locally.
Uninstalling the extension removes all of it.
Subtitle files
To display and export subtitles, the extension downloads subtitle files from Netflix’s own content servers (the same files Netflix loads for playback), within the Netflix page. These are not sent anywhere else.
Clipboard
The “click/drag a subtitle to copy it” feature is off by default. When enabled, selected subtitle text is written to your clipboard locally, only when you initiate it.
Feedback form (optional, user-initiated)
The popup includes an optional feedback/report form. If — and only if — you fill it in and press send, the following is transmitted, via the third-party form service Web3Forms, to the developer:
- the message you type
- an email address, only if you choose to enter one (so the developer can reply)
- basic diagnostics: the extension version, your browser’s user-agent string, and whether the extension successfully read Netflix’s subtitle list and how many tracks it saw
The diagnostics do not include your identity, your Netflix account, or which title you are watching. The form is never sent automatically. Web3Forms processes the submission under its own privacy policy.
The word popup (word lookup, in beta) has a “Report an error” link for a wrong or odd dictionary entry. It works the same way: nothing goes out until you press Send. With your message it sends the word you looked up, the subtitle line it was in, what the popup showed for it (headwords, parts of speech, first glosses, which layers answered) and the versions of your dictionary packs, the extension version and your interface language — no title, no account, no other lines.
Uninstall feedback (optional, user-initiated)
When you uninstall the extension, your browser opens a short feedback page on the
developer’s website (netflix-dual-subs.pages.dev/uninstall.html). The page
receives only your chosen interface language (so it can show in your language) — no
personal data. It is entirely optional: nothing is sent unless you fill it in and press
send. If you do, the same third-party service
(Web3Forms) delivers what you typed —
your message, any feature tags you tap, an optional reason, and an optional reply email —
to the developer. No diagnostics, account, or viewing data are included.
Feature configuration
When you open the extension’s popup, it fetches a small static configuration file from
the developer’s website (netflix-dual-subs.pages.dev) that toggles optional
features (such as whether the feedback form is shown), carries the list of any
deactivated supporter keys, and may include a short message from the developer (shown
in the popup; you can dismiss it). This request sends no personal data (it is a
plain download — your supporter key and its id are never sent); like any web request it includes your IP address,
which the static host may log. The extension works normally if this check fails.
Dictionary packs (word lookup)
Word lookup — hovering a subtitle word to see its meaning — reads dictionary files that
ship inside the extension; that involves no network request at all. Further
dictionaries (“packs”) can be downloaded from the developer’s website
(netflix-dual-subs.pages.dev/packs/…) only when you press Download
(or turn on “Update packs automatically”, which then re-downloads packs you already installed
when a newer edition exists). Such a download is a plain file fetch: it sends no personal data
and nothing about what you watch or look up; like any web request it includes your IP address,
which the static host may log. While word lookup is on and you have downloaded packs, the
extension checks the site’s pack list at most once a week, when you open Netflix (one tiny
request however many packs you have, again with no personal data) so it can offer updates. Nothing runs
while you are not on Netflix. Looked-up words never leave your device: every lookup
runs against files on your device. The dictionary data comes from Wiktionary (CC BY-SA 4.0).
Online dictionaries (optional, off by default)
The panel’s Learning screen has a switch, “Also look up online when your dictionaries have no entry”
(off unless you turn it on). With it on, when the dictionaries on your device have no entry for a hovered word, the
extension asks two Wiktionary-based sites over the internet, in this order, and stops at the first answer:
freedictionaryapi.com and then en.wiktionary.org (v1.107.0+: for a Japanese word,
jotoba.de is asked first). The request carries the word and
nothing else — not the line, not the title, not your settings — and, like any web request, your IP address,
which those sites may log under their own policies. It never fires for words your dictionaries know, and never for
phrases. (v1.105.1+) When your explanation language is not English, the request to freedictionaryapi.com
also asks for Wiktionary’s translation tables into that language — a flag on the same request; still only the word is sent.
(v1.107.0+) A separate switch, off by default — “Also ask Google Translate (unofficial) for words nothing
else knows” — sends the word alone to clients5.google.com, Google Translate’s unofficial endpoint, only when
neither your dictionaries nor the sites above had an answer. Google’s own privacy policy applies to that request; the
endpoint is not an official service and may stop working. With the switch off, nothing is ever sent to Google by this feature. Answers are kept in memory only for the current page. No permission is added for this: the sites allow such
requests from any page. Turn the switch off and nothing leaves your device again.
On-device translation (optional, off by default)
A second switch, “Translate the word in its line, on your device”, uses the translator built into Chrome (Chrome 138 and newer; other browsers do not offer it) to show what the hovered word means in its line, and (v1.105.0+) to render a dictionary definition written in another language than your explanation language — for instance an English definition when you asked for Korean. The translation runs on your device: neither the word, the line nor the definition is sent to the extension’s developer or to any server. The first use for a language pair needs a language pack, which Chrome itself downloads from Google when you press the panel’s “Download language pack” button — that download is Chrome’s, governed by Google’s policies, and nothing in it comes from this extension. With the switch off, the translator is never touched.
Dictionary sites in the panel (on click only)
The word popup offers links to Naver’s dictionary and to Wiktionary. Since v1.98.0 a click loads that site inside the in-player panel by default (or, by your choice under “Open links”, in a new tab or a small window). Loading it is the same as visiting the site: the site receives the word you clicked and your IP address, under its own policy. Nothing is loaded until you click, the page is sent no referrer (Netflix’s address stays private), and the site is unloaded when you leave the screen. “Translate the line” always opens Google Translate in a tab or window, never in the panel.
Your own translation key (optional, off unless you set one up)
In the toolbar popup you can paste your own API key for DeepL or an AI provider (Gemini, Groq or OpenRouter). With a key saved, the word popup can ask that provider what the hovered word means in its line — by default only when your dictionaries have no entry, or for every word, or only when you click “Ask …”, as you choose. What is sent: the word and its subtitle line, to that one provider, under its own terms (unpaid Gemini keys let Google use inputs to improve its products — read your provider’s terms). The key is stored on your device in the extension’s own storage, is never sent anywhere but to that provider, and never reaches the Netflix page. Saving a key asks the browser once for permission to contact that one provider’s address; choosing another provider or removing the key gives that permission back. The extension asks for no other permission and works fully without a key.
Permissions
- storage — to save your preferences on your device.
- optional: the address of the translation provider you choose (
api-free.deepl.com/api.deepl.com,generativelanguage.googleapis.com,api.groq.comoropenrouter.ai) — requested only when you save your own API key, for that one provider, and released when you remove it. Nothing is requested at install or update. - access to
netflix.com— so the extension can run on Netflix's watch, title/preview, browse and search pages and read/display subtitles. It runs on no other website.
Remote code
None; all code ships inside the package.
Change history
Material changes to this policy are listed here, newest first, with the extension version each change applies from (and onward). (This tracks changes to the policy — for the full list of app features and fixes, see the changelog.)
- 5 September 2026:
- (v1.104.0+) Dictionary error reports (“Report an error” in the word popup, beta): on Send only, the word, its subtitle line, what the popup showed and your pack and extension versions go to the developer through Web3Forms, like the feedback form.
- (v1.99.0+) Your own translation key (optional): with a DeepL / Gemini / Groq / OpenRouter key you paste in, the word and its line are sent to that provider when you allow it; the key stays on your device; saving asks once for permission to contact that provider only. Nothing changes without a key.
- (v1.98.0+) Dictionary sites in the panel: clicking Naver or Wiktionary in the word popup loads that site inside the panel (default; a tab or small window by choice). On click only, no referrer; the site sees the word and your IP under its own policy.
- (v1.107.0+) Japanese words looked up online go to
jotoba.defirst (only the word is sent). A separate, off-by-default switch can send a word nothing else knows to Google Translate’s unofficial endpoint (clients5.google.com), under Google’s privacy policy. - (v1.105.1+) With a non-English explanation language, the online request to
freedictionaryapi.comalso asks for Wiktionary’s translation tables into it (a flag on the same request; still only the word is sent), so a sense can show that language’s words instead of an English definition. - (v1.105.0+) On-device translation also renders a dictionary definition written in another language than your explanation language (an English definition when you asked for Korean), under the original. Same translator, same device, nothing sent.
- (v1.97.0+) On-device translation (optional, off by default): Chrome’s built-in translator shows the hovered word in its line; runs on your device, nothing sent. Its language pack is downloaded by Chrome from Google when you press the button.
- (v1.95.0+) Online dictionaries (optional, off by default): with the new switch on, a word your dictionaries lack is looked up on
freedictionaryapi.com, thenen.wiktionary.org; only the word is sent. Off = no request. No new permission. - (v1.92.0+) Downloadable dictionary packs for word lookup: fetched from the developer’s website only when you press Download (or opt into automatic updates), stored on your device, removable; a pack-list check at most once a week, when you open Netflix, while word lookup is on and packs are installed. No personal data in either request. No new permission (v1.92.0–1.93.3, never released, briefly declared alarms for a background timer; v1.93.4 removed it).
- (v1.91.0+) Word lookup: hovering a subtitle word shows its meaning from dictionary files inside the extension. Reads only; nothing is sent. Its settings are stored on your device.
- 13 July 2026:
- (v1.90.18+) While a practice run is on, the show it was started on (its Netflix ID, or its title) is stored on your device so the run can end itself when you open a different title. Cleared when the run stops. Never sent.
- 11 July 2026:
- (v1.71.0+) Saved searches (the watchlist) are stored on your device — each saved pattern’s name, the pattern, its highlight colour, and its on/off state. Never sent.
- (v1.73.0+) Practice presets — the named practice setups you save, and which one you last used — are stored on your device. Never sent.
- (v1.81.0+) The mini player’s preferences (window sizes, the view you last used, and whether auto-open on tab switch is on) are stored on your device. Never sent. Auto-open uses Chrome’s own one-time consent prompt, handled and remembered by the browser itself.
- 14 June 2026:
- (v1.66.0+) The extension now also runs on Netflix’s search page (
/search), so dual subtitles work in the title preview you open from a search result. It reads only the same subtitle information Netflix already loads for that preview; nothing new is collected or sent. - (v1.61.0+) Optional supporter keys: if you activate one, the key (and the display name on it) is saved on your device and verified there — never sent. The popup’s feature-configuration check also began carrying a list of any deactivated keys, compared against yours on your device.
- (v1.66.2+) The popup can show a short message from the developer (carried in the same configuration file the popup already fetches on open); you can dismiss it, and only which message you dismissed is remembered on your device. Nothing new is sent.
- (v1.66.0+) The extension now also runs on Netflix’s search page (
- 7 June 2026:
- (v1.52.0+) Your chosen interface language and the global on/off setting are saved on your device; never sent.
- (v1.54.0+) A private on-device usage counter (how many separate days you’ve used the extension) was added, only to time a one-time, dismissible feedback note in the popup. It is never transmitted.
- (v1.53.0+) Uninstalling now opens an optional feedback page; it receives only your interface language, and sends nothing unless you submit it (then via Web3Forms, like the in-app feedback form). See “Uninstall feedback”.
- (v1.57.0+) The extension remembers which version you last viewed (on your device) so it can show a “What’s new” note after an update and briefly badge the icon. Never sent.
- 5 June 2026:
- (v1.37.0+) More on-device display preferences are saved: the chosen subtitle font (and a custom font name, if you enter one) and the legibility settings — outline strength, plus the text-background and window colors and opacities. The bundled dyslexia-friendly font (OpenDyslexic) is packaged with the extension and loaded locally — no font is fetched from the network. All stored locally; never sent.
- 4 June 2026:
- (v1.28.0+) A few more on-device display preferences are saved: the separate primary/secondary subtitle sizes, and the transcript viewer’s settings (view, “follow”, and the dock’s side and width). All stored locally; never sent.
- 3 June 2026:
- (v1.24.4+) The extension now also runs on Netflix’s title/preview and browse pages (previously the watch player only).
- (v1.23.0+) If “remember loop after refresh” is on, a saved loop region — including the episode’s Netflix video ID — is stored locally on your device (and never sent).
- 2 June 2026: Initial policy.