A lightweight browser extension that helps you find and download videos from a number of supported websites. Built and maintained by @justyy.
Note: By Chrome Web Store policy, the published build does not support YouTube or adult websites. You can still build the unpacked version yourself from this repository.
- Features
- Supported sites
- Installation
- Project structure
- Development
- Available scripts
- Testing & coverage
- Linting & formatting
- Internationalization
- Contributing
- Security & privacy
- License
- Links
- 中文说明
- One-click detection of downloadable video URLs on the current page.
- One-click download of detected videos, audio and images via the browser's download manager, plus Copy, Download All and Copy All actions.
- Media-type tags label each result as video, audio or image at a glance.
- Right-click context menu to download a video/audio element directly, or find videos on the current page.
- Keyboard shortcut (Alt+Shift+V by default, customizable at
chrome://extensions/shortcuts) to open the popup. - A toolbar badge showing how many media URLs were detected on the page.
- Dark mode for the popup.
- Site-specific parsers plus generic fallbacks:
og:videometa tags,<video>and<source>tags, HLS.m3u8playlists, embeddedvideo_url/mp4references, and direct links to common media files (.mp4,.webm,.mkv,.mov,.mp3,.m4a, and more). - Zero runtime dependencies — the parser is plain, dependency-free JavaScript.
- Built on Chrome Extension Manifest V3.
The parser ships with dedicated handlers for the following sites, and falls back to generic extraction strategies for everything else:
| Site | Example URL |
|---|---|
| miaopai.com | http://www.miaopai.com/show/<id>.html |
| pearvideo.com | http://www.pearvideo.com/video_<id> |
| ted.com | https://www.ted.com/talks/<talk> |
| msdn.com | https://channel9.msdn.com/Events/.../<id> |
| weibo.com | https://www.weibo.com/<uid>/<id> |
| xiaokaxiu.com | https://v.xiaokaxiu.com/v/<id>.html |
| facebook.com | https://www.facebook.com/<user>/videos/<id>/ |
| dailymotion.com | https://www.dailymotion.com/video/<id> |
| vimeo.com | https://vimeo.com/<id> |
Generic fallbacks also recognise og:video headers, HTML <video src> and <source src> tags,
HLS .m3u8 playlists, embedded video_url / mp4 URLs, and direct links to common media files
(.mp4, .webm, .mkv, .mov, .mp3, .m4a, …).
See tested URLs for verified pages and the wishlist for sites we would like to support next.
Install the published (cut-down) version directly: https://chrome.google.com/webstore/detail/simple-video-download-hel/ilcdiicigjaccgipndigcenjieedjohj
The content-script bundle (video-url-parser/dist/dist.min.js) is produced by the build and is
not committed to the repository, so build it before loading:
-
Install dependencies and build the bundle:
cd video-url-parser npm install npm run build -
Open
chrome://extensionsand enable Developer mode. -
Click Load unpacked and select the
video-url-parser/folder.
The extension should work on Firefox via Chrome Store Foxified, although it is not fully tested there.
.
├── .github/ # CI, issue/PR templates, dependabot
│ ├── workflows/ci.yml # Continuous integration pipeline
│ ├── dependabot.yml # Automated dependency updates
│ └── PULL_REQUEST_TEMPLATE.md
├── CONTRIBUTING.md # How to contribute
├── SECURITY.md # Security policy (how to report vulnerabilities)
├── PRIVACY.md # Privacy policy
├── LICENSE # MIT license
├── README.md
├── package.json # Root scripts that delegate into video-url-parser/
└── video-url-parser/ # The extension itself
├── manifest.json # Manifest V3 definition
├── main.html # Popup UI
├── js/
│ ├── functions.js # Core helper utilities (URL parsing, validation, ...)
│ ├── constants.js # Shared constants
│ ├── parsevideo.js # The ParseVideo engine and site-specific parsers
│ └── translate.js # Popup UI translation loader
├── lang/ # Popup UI translations (25 languages)
├── _locales/ # Chrome i18n messages (name/description)
├── test/ # Mocha + Chai unit tests
├── eslint.config.js # ESLint (flat config)
├── .prettierrc.json # Prettier configuration
├── .nycrc.json # Coverage configuration
└── webpack.config.js # Bundler configuration
Requirements: Node.js >= 18.
The extension and its tooling live in video-url-parser/. For convenience, the repository root
exposes the same npm scripts and delegates them into that directory, so you can work from either
location:
# From the repository root (delegates into video-url-parser/)
npm install
# ...or directly inside the extension directory
cd video-url-parser
npm installBuild the bundled content script into dist/dist.min.js:
npm run build # production build
npm run dev # development build
npm run watch # rebuild on changeCreate the Chrome Web Store zip package at the repository root:
npm run packageThe scripts below can be run from the repository root or from the video-url-parser/ directory
(the root delegates to the sub-project).
| Script | Description |
|---|---|
npm test |
Run the Mocha unit-test suite. |
npm run coverage |
Run the tests and produce an Istanbul/nyc report. |
npm run lint |
Lint the source and tests with ESLint. |
npm run lint:fix |
Auto-fix lint problems where possible. |
npm run format |
Format the codebase with Prettier. |
npm run format:check |
Verify formatting without writing changes. |
npm run check |
Run lint, format check, coverage and build together. |
npm run build |
Produce the production bundle. |
npm run package |
Build and create the extension zip at the repo root. |
Unit tests use Mocha and Chai:
npm testGenerate a coverage report (text + HTML + lcov) with nyc:
npm run coverageThe HTML report is written to coverage/index.html and the lcov report is uploaded to
Codecov from CI. Coverage thresholds are enforced via .nycrc.json.
Code quality is enforced with ESLint (flat config) and Prettier. Both run automatically in CI on every push and pull request, across Node.js 18, 20 and 22.
npm run lint
npm run format:checkThe popup UI is available in 25 languages. Translations live in two places:
video-url-parser/lang/<code>.js— the popup UI strings (one object per language).video-url-parser/_locales/<locale>/messages.json— the Chrome extension name and description.
An integrity test verifies that every language exposes the same
set of keys and that each one is wired into main.html and js/translate.js. To add a new language,
see CONTRIBUTING.md.
Contributions are welcome! Please read the contributing guide first. In short:
- Open an issue to report a bug or request a feature.
- Fork the repository and create a topic branch.
- Ensure
npm run checkpasses (lint, format, coverage and build). - Open a pull request using the pull request template.
- Found a vulnerability? Please follow the security policy and report it privately.
- Curious what data the extension touches? See the privacy policy — everything runs locally and no personal data is collected.
This project is licensed under the MIT License.
- Web version: https://weibomiaopai.com/download-video-parser.php
- Author: @justyy · helloacm.com
- Blog post (Chinese): https://justyy.com/archives/5615
If this project helps you, consider supporting it: PayPal · Buy Me a Coffee
这是一个简易的浏览器视频下载助手扩展,帮助你从受支持的网站上查找并下载视频。
由于 Google 政策限制,发布到 Chrome 应用商店的版本不支持 YouTube 以及一些成人网站。你仍然可以从本仓库自行构建并加载未打包(unpacked)的版本,或使用网页版: https://weibomiaopai.com/download-video-parser.php
- Chrome 扩展下载地址:https://chrome.google.com/webstore/detail/simple-video-download-hel/ilcdiicigjaccgipndigcenjieedjohj
- 相关博文:https://justyy.com/archives/5615
- 如果这个小项目对你有帮助,欢迎支持:PayPal · 请我喝杯咖啡
