Framehold is a free, open-source Chrome extension that opens your MP4, MKV, WebM, MOV, and other local files inside a real browser tab—with playback controls, subtitle support, and optional FFmpeg remux when Chrome needs a nudge. Nothing is uploaded to the cloud: decoding runs in your browser from disk.
The main problem Framehold solves is simple: you have a movie or clip saved on your computer, and you want to watch it with someone else over a video call. Tools like Google Meet let you present a Chrome tab—but your default video app is not a tab. Framehold gives you a clean player tab you can select when you click Present → A Chrome tab.
Same idea works for other apps that capture a browser tab—Framehold is the missing link between files on disk and a shareable tab.
A full player in one extension page: subtitles, speed, volume, skip steps, picture-in-picture, themes, optional stats, and a true fullscreen mode that keeps only the video on screen with a minimal control strip when you move the pointer.
Common containers and codecs via HTML5 video. If something won’t play, you can try an in-browser FFmpeg (WASM) remux to MP4—still entirely on your device.
SRT and WebVTT, auto-match from a folder when possible, manual load, delay, size, color, position, font, outline, and caption background.
No analytics pipeline in the project. storage remembers
UI preferences and optional volume/resume—playback bytes never leave your machine for
streaming.
Keyboard shortcuts, optional wake lock while playing, video filters (brightness, contrast, rotation, flip), and a detailed options panel—without blocking the simple Meet workflow.
Framehold is a Manifest V3 extension: a service worker opens
player.html, and modules under js/
split file handling, playback, subtitles, and FFmpeg fallback.
| Manifest | MV3 · single action → new tab · storage permission only |
|---|---|
| Playback | <video> + blob URLs from File |
| Subtitles | Parsed in-page; overlay synced with requestAnimationFrame |
| Optional remux | @ffmpeg/ffmpeg + core vendored into ffmpeg/ via npm install |
| Releases | Versioned zips for unpacked install — latest release |
| Repository | github.com/Hashim1999164/framehold |
Framehold is not on the Chrome Web Store yet—you load it as an unpacked extension.
The easiest path is a GitHub Release zip (FFmpeg assets already included; no
npm required).
Each tagged release
ships a ready-to-load archive built from the repo. The zip is named
framehold-<version>.zip (same version as
manifest.json), e.g. v1.0.0 →
framehold-1.0.0.zip.
framehold containing
manifest.json, player.html,
js/, ffmpeg/, etc.
manifest.json—not the zip).
Use this if you’re contributing or the release asset isn’t there yet. You must run
npm install once so ffmpeg/ is populated.
git clone https://github.com/Hashim1999164/framehold.git
cd framehold && npm install
framehold project folder in
chrome://extensions.
Chrome Web Store: a packaged listing would allow install without Developer mode; that’s a separate publishing step from these GitHub releases.