Companion for Language Reactor. When you hover a word, Language Reactor’s dictionary often shows a multi-word phrase pattern (for example “did you see”), while the subtitle only marks that one word. This extension highlights the whole phrase on the dual subtitle as a single underline — when the line appears, with no extra hovering.
Use the Phrases control next to Language Reactor’s ON pill to change color and thickness. It does not replace Language Reactor; it only marks phrases Language Reactor already knows.
Language Reactor is required. Without it installed and enabled, this companion has no effect.
- Chrome Web Store: Language Reactor (ID
hoombieeljmmljlkjmnheibnpciblicm) - Site: https://www.languagereactor.com
This project is not affiliated with Language Reactor, Dioco, Netflix, YouTube, or Amazon.
Privacy · License · Author: Burak Keskin · GitHub: @official-burak
Load the unpacked folder that contains manifest.json. Chrome Developer mode is required; this companion is not on the Chrome Web Store yet.
- Install Language Reactor and confirm it is on at
chrome://extensions. - Open
chrome://extensions, turn on Developer mode, click Load unpacked, and select this project folder. - Open YouTube or Netflix with Language Reactor dual subtitles on. Keep both extensions enabled. Refresh the player tab if marks do not appear.
The toolbar icon does not toggle highlighting. Disable the extension from chrome://extensions to turn it off. After you change files, reload the extension card, then refresh the player tab.
A Chrome Web Store listing is not available yet. If you want one, open an issue or email official.burak@icloud.com.
On YouTube (and on Netflix when Language Reactor’s player-bar pill is present), open Phrases next to Language Reactor’s ON/gear control. Choose yellow (default), orange, lime, cyan, or white, and thickness 2 / 3 / 4 px. Each phrase is a bottom stroke with tips that lift slightly (a shallow cradle, not a box). A phrase that wraps across lines stays one mark: the square-U opens at the line break instead of drawing two closed cradles. Choices live in chrome.storage.local and apply immediately.
Language Reactor still greys the hovered word and still shows its dictionary. This extension adds one continuous underline across the whole collocation — for example Did you see on Did you see my last goal? — with no fill.
Language Reactor dual subtitles. Whole phrase patterns are marked on the English line.
The Phrases pill sits in the player bar next to Language Reactor’s ON control. Open its gear for color and thickness.
Phrases control: logo, Phrases, and settings gear, next to Language Reactor’s ON pill.
Preset colors only; thickness is 2 / 3 / 4 px (3 px selected here).
Language Reactor prefetches multi-word patterns for the current video (/base_dict_getHoverDictEntriesForSubs) and, on hover, looks up the longest n-gram (2–9 tokens) that contains that word. Phrase text is not stored on .lln-word nodes; it appears in .tt after hover.
This extension:
- Runs a MAIN-world content script at
document_startand reads that prefetch when Language Reactor fetches it (no extra network call). - When
#lln-subs/.lln-subs(or other allowlisted cue roots) show a new line, it runs the same n-gram lookup on every token. - Draws one overlay from the first through last token of each hit (
pointer-events: none). Nodes are never wrapped or replaced, so Language Reactor still receives hover and click. - If the prefetch was missed, it may silently trigger Language Reactor’s own
.ttfill while keeping the popup hidden, then harvest src headers.
Overlapping phrases: longest match wins; leftover ties keep the leftmost span.
Optional debug on the player tab: localStorage.setItem("lrph-debug", "1") then reload. Logs stay in that tab’s console ([LRPH]). Remove the key to quiet again.
Content scripts run in all frames on:
- YouTube (
*://*.youtube.com/*,https://youtu.be/*) — primary target - Netflix (
*://*.netflix.com/*) - Amazon Prime Video (Language Reactor’s Amazon TLDs)
- Language Reactor’s own player (
*://*.languagereactor.com/*)
YouTube, Netflix, and Amazon use Language Reactor’s overlay (.lln-word + .tt hover dict). languagereactor.com uses the site player; skins are supported via an allowlist of roots and fallbacks.
No network calls from this extension and no accounts. Underline color and thickness are stored locally with chrome.storage.local. See PRIVACY.md.
- Language Reactor is closed-source. Cue markup and the hover popup have no public contract; a site update can break detection until selectors are adjusted.
- Single-word dictionary entries stay unmarked.
- Translation lines are not highlighted.
- The extension does not translate, pause video, save words, or replace Language Reactor.
MIT License. Copyright © 2026 Burak Keskin.
- Email: official.burak@icloud.com
- LinkedIn: Burak Keskin
- GitHub: @official-burak — phrase-highlighter-for-language-reactor


