Xiaoer VideoLab: a Chrome button that hands the current page's video to a local yt-dlp daemon
One click on the toolbar grabs the current page's video into ~/Downloads — local yt-dlp daemon, 1800+ sites. 小耳抓视频:一键把当前页视频抓到本地。
At a glance
- What is it?
- Xiaoer VideoLab pairs a Manifest V3 toolbar button with a Python stdlib daemon on 127.0.0.1:7788 that shells out to yt-dlp. It is a macOS-first tool with Windows support, and its design deliberately keeps the extension almost empty.
- Who is it for?
- Adopt Xiaoer VideoLab if you are on macOS or Windows, already trust yt-dlp, and want a one-click front end that never sends your browsing data anywhere except 127.0.0.1. Skip it if you need Kuaishou, Tencent Video or WeChat Channels, if you rely on Weibo or Zhihu links, or if you want a downloader that works without installing a background service.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 105 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 19, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem Xiaoer VideoLab picks, and the users it picks it for
Browser video downloaders have a reputation problem, and the README names it directly: extensions that request permission to "read everything on every site" and phone home. Xiaoer VideoLab takes the opposite position. The extension reads the current tab's URL only when you click the toolbar button, and POSTs that one string to 127.0.0.1. There are no content scripts and no remote servers in the described architecture.
The audience follows from that trade-off. This is for someone who already uses yt-dlp or is willing to install it, works on macOS or Windows 10/11, and runs a Chromium-based browser (Chrome, Arc, Edge, Brave or Dia). The README states you do not need to know how to code, and the install path is copy-paste commands. It is not for someone who wants a hosted service, and it is not for mobile. Every piece of the pipeline runs on the machine you are sitting at.
How the click travels: extension, daemon, yt-dlp
The data flow is short enough to hold in your head. A click on the toolbar button grabs tab.url. The extension POSTs it to the daemon. The daemon listens on 127.0.0.1:7788, is written against the Python standard library http.server, and is started at login by launchd on macOS. It spawns yt-dlp, which does the actual extraction and download. The file lands in ~/Downloads as <platform>_<title>_<date>.mp4, capped at 1080p mp4 by default, and the README calls that default configurable without documenting where.
The badge on the button reports state with symbols (a check, a cross, an exclamation mark), and a macOS notification fires with the filename when the download finishes. Logs go to ~/Library/Logs/xiaoer-videolab.log. The split is the interesting part: the browser side holds almost no logic, and the part that touches the network for real is a tool you can audit separately. That also means the extension is only as capable as the URL it can read.
Installing it on macOS and making the first download
The README gives a TL;DR for people who have done this before. It assumes Homebrew, then installs the two engine dependencies, clones the repository, runs the installer script, and leaves you to load the extension manually.
brew install yt-dlp ffmpeg
git clone https://github.com/Jane-xiaoer/xiaoer-videolab.git
cd xiaoer-videolab && ./scripts/install.sh
# then load extension/ as an unpacked extension at chrome://extensions/If Homebrew is not installed yet, the README uses the standard installer line:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"ffmpeg is not optional decoration. The README explains that some sites serve video and audio as separate streams, and without ffmpeg you get audio-only or low quality because nothing merges them back together. After the script runs, open chrome://extensions/, enable developer mode, and load the extension/ directory as an unpacked extension. Then open a video page and click the toolbar button. On success the badge turns into a check and a notification names the file in ~/Downloads. On Windows 10/11 the daemon runs under Task Scheduler instead of launchd, and the README points Windows users to its own section with PowerShell install scripts before they return to the extension step.
Where the one-click model breaks: Weibo, Zhihu and the SPA problem
The README is unusually honest about failure, and the Weibo and Zhihu note is the clearest example. Those sites render combined SPA feeds, so a video is one small part of a large page and you usually cannot open a single video at its own URL. With no clean per-video address to grab, the button has nothing reliable to work with. That is a structural limit of an architecture built on reading tab.url, not a bug that will be patched.
Two more boundaries matter. Youku and iQiyi are listed as free content only, because VIP and DRM-protected episodes cannot be downloaded. Kuaishou and Tencent Video have no yt-dlp extractor at all, and WeChat Channels are in-app and encrypted. The README points those cases at res-downloader, a packet-sniffing tool, and says this project focuses on the yt-dlp universe. There is also a regional caveat: TikTok and overseas sites need a network that can reach them, and the README notes some datacenter IPs are blocked by TikTok's API. Douyin and Xiaohongshu use a special in-page grabber rather than the yt-dlp path, so the README says to click while the video is open or playing.
res-downloader and the packet-sniffing alternative
The honest comparison is the one the README makes itself. res-downloader is named for the cases Xiaoer VideoLab refuses: WeChat Channels, Kuaishou, mini-programs and live streams. The difference in approach is the layer where each tool sits. Xiaoer VideoLab reads a URL from the browser tab and hands it to yt-dlp, which knows how to extract from over 1800 sites by name. res-downloader captures network traffic instead, so it does not need a per-video URL and does not depend on an extractor existing.
That is a real trade. Packet capture sees more, including streams inside apps, but it requires more setup and more trust in what it inspects. The URL-handoff model is narrower and simpler, and it inherits yt-dlp's extractor coverage and its gaps. If most of your downloads come from YouTube, Bilibili, Vimeo, Douyin or Xiaohongshu, the narrower model is the easier one. If they come from inside an app, it is the wrong tool and the README says so.
Maintenance, upgrade cost and the MIT licence
The repository is not archived, and the last push was on 2026-06-07. Two releases shipped in June 2026: v1.0.0 on 2026-06-04 and v1.0.1, described as security hardening plus CI, later the same day. There is a CHANGELOG.md at the repository root, so upgrade notes have a home, though the README does not document rollback or a downgrade path.
Upgrade cost is mostly yt-dlp's, not this project's. The daemon is a thin wrapper, so when a site changes its extraction the fix arrives through yt-dlp, which you update with Homebrew on macOS. The extension itself is loaded unpacked, which means Chrome will not auto-update it; you pull the repository and reload it yourself. The README does not describe a packaged store release, so treat updates as a manual git pull plus a reload at chrome://extensions/.
The licence is MIT, which is permissive and places few conditions on reuse. That is a statement about the licence text, not advice about your situation; if you plan to redistribute a modified build, read the LICENSE file and the yt-dlp licence yourself, since the two are separate projects with separate terms.
Editorial conclusion
Adopt Xiaoer VideoLab if you are on macOS or Windows, already trust yt-dlp, and want a one-click front end that never sends your browsing data anywhere except 127.0.0.1. Skip it if you need Kuaishou, Tencent Video or WeChat Channels, if you rely on Weibo or Zhihu links, or if you want a downloader that works without installing a background service. Before you commit, verify three things on your own machine: that brew install yt-dlp ffmpeg resolves on your PATH, that the daemon answers on 127.0.0.1:7788 after ./scripts/install.sh, and that the extension loads as an unpacked extension at chrome://extensions/ without a manifest error.
Frequently asked questions
Does Xiaoer VideoLab send my browsing data anywhere?
According to the README, the extension only reads the current tab's URL when you click it and POSTs that one string to 127.0.0.1. The README states nothing leaves your machine except the request yt-dlp makes to fetch the video you asked for.
Which sites can Xiaoer VideoLab download from?
It is powered by yt-dlp's 1872 extractors, and the README lists YouTube, Vimeo, Bilibili, Douyin and Xiaohongshu as tested and confirmed. Kuaishou and Tencent Video have no extractor, and WeChat Channels are in-app and encrypted.
Why does Xiaoer VideoLab fail on Weibo and Zhihu links?
The README says those pages are combined SPA feeds, so the video is a small part of a large page and you usually cannot open a single video at its own URL. With no clean per-video address, the toolbar button has nothing reliable to grab.
Do I need ffmpeg for Xiaoer VideoLab to work?
The README installs yt-dlp and ffmpeg together with brew install yt-dlp ffmpeg and warns that without ffmpeg some sites give you audio-only or low quality, because the video and audio arrive as separate streams that ffmpeg merges.
Community notes