Framehold app icon — film corners and play symbol

Framehold

Local video in a Chrome tab · Your files stay on your machine

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.

Built for sharing a tab—especially on Google Meet

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.

  1. Install Framehold and click the toolbar icon to open the player page.
  2. Use Open video or drag-and-drop your file. Playback stays local; the tab shows your video.
  3. In Meet, choose Present and pick the Framehold tab so others see the video.
  4. When Chrome offers it, enable Share tab audio so sound goes through the call (depends on Meet and your browser/OS settings).

Same idea works for other apps that capture a browser tab—Framehold is the missing link between files on disk and a shareable tab.

What you get

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.

Formats & fallback

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.

Subtitles

SRT and WebVTT, auto-match from a folder when possible, manual load, delay, size, color, position, font, outline, and caption background.

Privacy

No analytics pipeline in the project. storage remembers UI preferences and optional volume/resume—playback bytes never leave your machine for streaming.

Power users

Keyboard shortcuts, optional wake lock while playing, video filters (brightness, contrast, rotation, flip), and a detailed options panel—without blocking the simple Meet workflow.

Technical snapshot

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

Install in Chrome

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).

Option A — Release zip (recommended)

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.0framehold-1.0.0.zip.

  1. Open Releases → Latest and download the attached framehold-1.0.0.zip (for v1.0.0), or use the latest zip direct link (updates when a new release is published with the same filename pattern).
  2. Unzip. You should see a single folder named framehold containing manifest.json, player.html, js/, ffmpeg/, etc.
  3. In Chrome, open chrome://extensions, enable Developer mode, click Load unpacked, and choose the framehold folder (the one that contains manifest.json—not the zip).
  4. Pin Framehold from the extensions puzzle menu if you want, then click the icon to open the player tab.

Option B — Clone & npm (developers)

Use this if you’re contributing or the release asset isn’t there yet. You must run npm install once so ffmpeg/ is populated.

  1. git clone https://github.com/Hashim1999164/framehold.git
  2. cd framehold && npm install
  3. Load unpacked the 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.

Source & issues: everything lives on GitHub—README, structure, contributing notes, and how to fork or open a PR.

Open repository