Skip to content

Latest commit

 

History

History
102 lines (81 loc) · 4.96 KB

File metadata and controls

102 lines (81 loc) · 4.96 KB

🎬 Video FrameGrab

Automatically capture clean screenshots from any HTML5 video. Downloads all frames as a single ZIP.

Release Chrome License

A portable, zero-dependency Chrome extension. No per-file download dialog fatigue.


📸 See It In Action

Recording.2026-03-04.182048.mp4

✨ Features

  • 🌐 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:SS start 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.

🚀 Quick Start

  1. Download the latest video-framegrab.zip from the Releases tab and extract it, or clone this repository.
  2. Open Google Chrome and navigate to chrome://extensions/.
  3. Enable Developer mode using the toggle in the top right corner.
  4. Click the Load unpacked button.
  5. Select the folder containing the extension files.
  6. The extension is now installed! You can pin the 🎬 Video FrameGrab icon for easy access.

🛠️ How It Works

How It Works — Doodle Explanation

⚙️ Configuration

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.

🕹️ Usage

  1. Open a video on a supported platform (e.g., YouTube).
  2. Click the FrameGrab extension icon.
  3. Click Start Capture. You will see the counter increase on the popup and a toast overlay directly on the page.
  4. Let the video play. (It intelligently ignores ads and pauses!)
  5. When finished, click Stop & Download ZIP. A single compressed folder containing all frames (and optionally the Contact Sheet) will immediately download.

📂 File Structure

├── 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

❓ FAQ

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.

🤝 Contributing

Please see docs/CONTRIBUTING.md for guidelines on how to help out! PRs are welcome!

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.