Browser extension for real-time video playback diagnostics. FrameWatch overlays a compact in-page HUD on YouTube, Twitch, and generic HTML5 video players so you can inspect resolution, FPS, dropped frames, buffering, playback state, and observed bitrate without leaving the page.
- In-page Shadow DOM HUD with strong CSS isolation.
- Active video detection across dynamic pages, SPA navigation, and visible iframe depth.
- Site adapters for YouTube and Twitch, with a generic HTML5 fallback.
- Universal HTML5 metrics: decoded resolution, estimated FPS, dropped frames, total frames, buffer ahead, playback rate, ready state, and network state.
- Observed bitrate estimate from media network resources, shown as
N/Awhen unavailable. - Standard fullscreen and detectable pseudo-fullscreen handling.
- Popup and options pages with persisted browser storage settings.
- Keyboard command to toggle the HUD:
Alt+Shift+Q. - English and French extension locales.
- YouTube.
- Twitch.
- Generic HTML5 video sites.
YouTube and Twitch use site-specific adapters first, then fall back to the generic detector when needed.
- Node.js compatible with WXT and Vite:
^20.19.0or>=22.12.0. - pnpm.
- Chromium-compatible browser for the default build.
- Firefox for the Firefox build target.
pnpm install
pnpm devWXT prints the development browser target and output directory.
pnpm build # Chromium MV3 build
pnpm build:firefox # Firefox build
pnpm zip # package Chromium build
pnpm zip:firefox # package Firefox buildFor Chromium:
pnpm buildThen open chrome://extensions, enable Developer mode, click "Load unpacked", and select:
.output/chrome-mv3
FrameWatch requests storage, tabs, and <all_urls> because the content script needs to detect videos on arbitrary pages and the popup needs to communicate with the active tab.
Settings are stored in browser local extension storage. FrameWatch does not include analytics, does not send collected metrics to a backend, and does not persist video metrics outside the extension UI.
pnpm dev # run WXT development mode
pnpm dev:firefox # run WXT for Firefox
pnpm build # build Chromium extension
pnpm build:firefox
pnpm zip
pnpm zip:firefox
pnpm lint # Biome lint
pnpm check # Biome check
pnpm compile # TypeScript check
pnpm lints # Biome check + lint + TypeScript checkentrypoints/: WXT background, content, popup, and options entrypoints.src/content/: content-script controller and HUD mounting.src/core/: video detection, metric collection, throughput estimation, and fullscreen handling.src/adapters/: YouTube, Twitch, and generic site adapters.src/hud/: React HUD UI and isolated styles.src/popup/andsrc/options/: extension UI surfaces.src/storage/: persisted settings.public/_locales/: Chrome extension i18n messages in English and French.
- Browser APIs expose some video metrics inconsistently by site and browser.
- Cross-origin iframes can block direct video inspection; FrameWatch counts blocked iframes when detection cannot enter them.
- Observed bitrate is an estimate from media resource timing, not a player-provided ground truth.
- Safari packaging is not currently documented.
French documentation is available in README.fr.md.
Licensed under the GNU AGPL-3.0. You are free to use, study, modify, and redistribute it. Any distributed or network-hosted fork must also be released under the AGPL-3.0, which keeps derivatives open.
© 2026 Pierre Guillemot