Automatically capture clean screenshots from any HTML5 video. Downloads all frames as a single ZIP.
A portable, zero-dependency Chrome extension. No per-file download dialog fatigue.
Recording.2026-03-04.182048.mp4
- 🌐 Any Site: YouTube, Vimeo, Twitch, and generic HTML5
<video>tags. - ⚡ In-Memory Compilation: Frames are processed rapidly in-memory and merged into one single ZIP. No more "Save As..." dialog spam for every frame.
- ⏱️ Time Range Capture: Set specific
MM:SSstart and end boundaries. - 🗂️ Auto Contact Sheet: Generating an image grid inside the ZIP as
_ContactSheet.png. - 🏷️ Filename Template: Name your outputs exactly how you want (
{title}_{time}_{index}). - 🔴 Progress UI: Live capture counter on the extension badge, popup, and non-intrusively on the video page.
- 📜 Session History: Keep track of your past capturing sessions directly from the popup browser.
- Download the latest
video-framegrab.zipfrom the Releases tab and extract it, or clone this repository. - Open Google Chrome and navigate to
chrome://extensions/. - Enable Developer mode using the toggle in the top right corner.
- Click the Load unpacked button.
- Select the folder containing the extension files.
- The extension is now installed! You can pin the
🎬 Video FrameGrabicon for easy access.
Open the Advanced Settings accordion inside the extension to adjust:
| Setting | Default | Description |
|---|---|---|
| Capture Interval | 6 seconds |
How often to grab a frame. |
| Auto-Capture | Off |
Starts capturing automatically when a video begins playing. |
| Time Range | - |
Specify Start (00:00) and End timestamps to limit the range. |
| Filename Template | {title}_{time}_{index} |
Supported tokens: {title}, {time}, {index}, {date} |
| Contact Sheet | Checked |
Creates an image grid thumbnail overview in the final zip. |
- Open a video on a supported platform (e.g., YouTube).
- Click the
FrameGrabextension icon. - Click Start Capture. You will see the counter increase on the popup and a toast overlay directly on the page.
- Let the video play. (It intelligently ignores ads and pauses!)
- When finished, click Stop & Download ZIP. A single compressed folder containing all frames (and optionally the Contact Sheet) will immediately download.
├── manifest.json # Chrome Manifest V3
├── src/
│ ├── background.js # Service worker (downloads, badge, history)
│ ├── content/
│ │ ├── content.js # Capture engine, templates, toast
│ │ ├── minizip.js # Lightweight ZIP builder (zero deps)
│ │ └── toast.css # On-page progress overlay styles
│ └── popup/
│ ├── popup.html # Extension popup UI
│ ├── popup.css # Dark theme styling
│ └── popup.js # Tabs, settings, live counter
├── assets/ # README demo images
├── docs/
│ ├── CHANGELOG.md # Version history
│ └── CONTRIBUTING.md # Contribution guidelines
├── .gitignore
├── LICENSE
└── README.md
Why do I need to approve <all_urls> permission?
To function on any webpage hosting an HTML5 <video> element (Vimeo, Dailymotion, internal sites), it requires generic host permissions. The extension runs locally and securely in your browser.
Can it capture DRM-protected videos? No. Content protected by Widevine (Netflix, Hulu, Amazon) inherently blocks the HTML Canvas from accessing raw pixel data.
Does it use a lot of memory? Because it stores frames in-memory before zipping, it depends on the resolution and capture length. A 1080p frame is roughly ~2-4MB raw. Be mindful on highly constrained memory systems if capturing thousands of frames in one sitting.
Please see docs/CONTRIBUTING.md for guidelines on how to help out! PRs are welcome!
This project is licensed under the MIT License - see the LICENSE file for details.
