mrkeyoor.com_
Thu 17 Sept 05:16 UTC
AI Toolsevaluationupdated 26 Aug 2026

XHS-Downloader review

XHS-Downloader is documented primarily in Simplified Chinese, with a full English README available. It downloads public RedNote posts and metadata through a terminal app, browser userscript, HTTP API, or MCP server, giving people a repeatable way to archive images, videos, and Live Photos.

+52stars / 7d
Verdict

Our XHS-Downloader run installed 106 packages in 81 seconds and built in 9 seconds, but it offered no test target, so the code is easy to try and hard to independently regression-check. Use it for hands-on RedNote archiving when its precise media and metadata controls justify maintaining Cookies and watching for site breakage. Do not make it the sole unattended collector for a business process.

We ran it

Lab card: what happened when we ran XHS-DownloaderScreenshot of XHS-Downloader (discord.com/invite/ZYtmgKud9Y)
Install✓ · 81s106 packages · 151 MB
Build✓ · 9s
Testsn/ano test script
Known vulns0(pip-audit)
Repo113 files~13,827 lines of source · 7.1 MB · 6 CI workflows · Dockerfile

Answers from our run

Does XHS-Downloader build from source?

Dependencies installed in 81 seconds (106 packages), and the build succeeded in 9 seconds. We cloned commit e9e0322 into a clean Debian container with 3 CPUs and no project-specific setup.

Does XHS-Downloader have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does XHS-Downloader have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use XHS-Downloader?

Anyone needing a stable official RedNote API: open issues report downloads breaking after site changes, including issue 441 for video extraction and issue 423 for the userscript.

What are the alternatives to XHS-Downloader?

gallery-dl, yt-dlp, RSSHub. Our XHS-Downloader run installed 106 packages in 81 seconds and built in 9 seconds, but it offered no test target, so the code is easy to try and hard to independently regression-check.

Setup4/581-second install; packaged and Docker paths are documented
Docs4/5English guide covers app, source, Docker, API, MCP, and risks
Community4/512,488 stars with pushes and issue activity in August 2026
Maturity3/5Broad workflows, but no test target and site changes cause breakage

Who it’s for

Researchers and creators who need local copies of RedNote posts they are permitted to save.
Python developers who want one RedNote extraction service behind an HTTP API or MCP client.
Desktop users who prefer a packaged app or Tampermonkey workflow over writing a scraper.
Archivists who value per-author folders, download records, resumable files, and configurable names.

Who it’s NOT for

Anyone needing a stable official RedNote API: open issues report downloads breaking after site changes, including issue 441 for video extraction and issue 423 for the userscript.
Teams that cannot handle session data carefully: higher-resolution video needs a manually obtained Cookie, and the README says browser Cookie reading no longer works.
Large unattended browser exports: issue 442 reports long liked or saved-post jobs being interrupted by account verification or a sleeping computer, with no checkpoint recovery.
Users unwilling to accept account enforcement risk: the README warns that automatic scrolling can be detected as automation and may trigger restrictions or a ban.
Comment-analysis projects: issue 339 asks for comment collection because the current detail endpoint returns counts rather than comment text.

Setup reality

Our sandbox installed 106 Python packages in 81 seconds and used 151 MB on disk. The build succeeded in 9 seconds. There was no test script or target, so we skipped tests; pip-audit found 0 known vulnerabilities.

Source use requires Python 3.12 or newer. Higher-resolution video needs a manually obtained RedNote Cookie, while proxy, file naming, download formats, and author folders live in Volume/settings.json. API and MCP modes listen on port 5556.

Packaged Windows and macOS builds avoid the Python setup, but the macOS binary is unsigned and needs its quarantine flag removed. Docker omits command-line calls and clipboard monitoring. The userscript depends on RedNote page internals and carries an explicit account-risk warning for automated scrolling.

It archives RedNote posts through four different interfaces

XHS-Downloader saves images, videos, Live Photos, and post metadata from XiaoHongShu, also called RedNote. The primary README is in Simplified Chinese, and a substantial English translation covers the same program. Users can paste links into a terminal interface, call the Python code, send JSON to an HTTP endpoint, or expose the downloader to an MCP client. A separate Tampermonkey userscript collects links from visible account, search, discovery, liked, saved, and board pages.

The useful distinction is that this is more than a one-link video grabber. It records downloaded post IDs, can resume file transfers, groups work by author, updates stored nicknames, and writes metadata to local files. Image format, filename fields, per-post folders, media switches, proxy behavior, and modification times are configurable. That makes it suitable for a personal research archive where repeated runs should skip old material and keep an intelligible directory.

Better video quality depends on a current Cookie

The basic path accepts public RedNote links without credentials, but the README says video is limited to low resolution when no Cookie is supplied. Browser Cookie extraction has been removed because its dependency no longer kept pace with current browsers. Users now have to copy the relevant Cookie manually and place it in Volume/settings.json, or pass it in an API request. That is workable for an operator, though awkward for a service expected to run untouched.

Links age too. The documentation warns that older shared URLs contain date-related data and may meet RedNote risk controls, so it recommends freshly obtained links for downloads. A built-in delay reduces request frequency, and proxy configuration is available. None of this turns the project into an official API. It is a client adapting to a private web product, which means extraction can change underneath it.

What happened when we ran it

Our sandbox run at commit e9e0322 installed 106 Python packages in 81 seconds, consuming 151 MB on disk. The build completed successfully in 9 seconds. The checkout contained 113 files, about 13,827 source lines, and occupied 7.1 MB before installation. Six CI workflow files and a Dockerfile were present.

There was no test script or test target, and no tests directory, so the test step was skipped. That absence matters for a downloader whose upstream page structure can change without notice. Pip-audit reported 0 known vulnerabilities in the installed environment. Those results cover repository setup in our fresh Debian container, not a live download from RedNote, because the sandbox had no secrets.

The userscript is convenient until RedNote changes the page

The userscript can scan pages, auto-scroll to load more results, package multi-file posts, and push jobs to the Python server when script_server is enabled. Its default search or discovery scroll count is 50, although auto-scroll starts disabled. That pairing is sensible: batch discovery is useful, but the README explicitly says automated scrolling may be detected and lead to account controls or a ban.

Open reports show the maintenance cost. Issue 423 says the browser download button stopped responding from one day to the next. Issue 387 records a failure on rednote.com because the expected initial-state object was absent. Issue 442 describes a much larger liked or saved-post export failing when the account demanded verification or the computer slept; the reporter asked for checkpoints or partial export. Operators should split large jobs and inspect results rather than treating the userscript as a durable queue.

API and MCP access make one local downloader reusable

API mode exposes interactive documentation and a POST /xhs/detail route on port 5556. Requests can choose whether to download, select image indexes, supply a Cookie or proxy, and decide whether existing records should be skipped. MCP mode uses a streamable HTTP endpoint at /mcp/ and supports post lookup plus file download, including selected images. These interfaces let a local automation or agent reuse the same downloader without driving its terminal UI.

The server still needs ordinary security work before remote exposure. The examples bind to localhost, and the README does not present the service as a multi-user hosted product. Cookies, proxy details, and downloaded media all deserve access controls outside this repository. Keeping it on a trusted workstation or behind an authenticated internal gateway is the safer interpretation of the documented design.

Packaged builds trade setup work for platform caveats

Windows 10 and newer and macOS users can download packaged builds instead of installing Python 3.12 and the 106 packages measured in our run. GitHub Actions can also build current executables. The macOS artifact is not code-signed, so the documented first-run process uses xattr -cr to remove its quarantine attribute. That is a material trust decision, not a cosmetic warning.

Docker images are published through Docker Hub and GitHub Container Registry, with a volume mounted for settings and downloads. Docker supports the terminal UI, API, and MCP service, but the README says command-line call mode, clipboard reading, and clipboard monitoring are unavailable there. Choose the runtime around the actual interaction: desktop package for manual use, source for customization, and a container for a local service.

August pushes show activity, while release 2.7 trails the branch

GitHub recorded 12,488 stars, 28 combined issues and pull requests, and a last push on August 22, 2026. The latest tagged release was 2.7 from February 9, 2026. Its notes include repaired MCP downloads, userscript-to-server jobs, Cookie handling changes, download preferences, and video fixes. Newer issue and pull-request activity shows work continued after that tag, so the release date alone does not indicate abandonment.

That activity also reflects how often platform-specific behavior needs attention. Issue 441 reports video extraction failing after a RedNote web change, while current pull request 466 addresses videos that contain audio but use an incompatible stream. XHS-Downloader is worth trying when RedNote-specific archiving is the job. Budget for manual Cookie upkeep, spot checks, and occasional breakage, because those are part of operating a downloader against a changing site.

Alternatives

ProjectWhat it isPick it when
gallery-dlA command-line image and gallery downloader that supports many sites through extractors.pick this instead when you archive several supported platforms and prefer one mature command-line tool.
yt-dlp gh↗A widely used command-line downloader focused on video and audio sites.pick this instead when video extraction across many services matters more than RedNote metadata, albums, and MCP access.
RSSHub gh↗A self-hosted feed generator for monitoring updates across many services.pick this instead when you want ongoing feed monitoring rather than a local media archive.

Sources

  1. XHS-Downloader repository
  2. XHS-Downloader English README
  3. XHS-Downloader 2.7 release
  4. Video extraction failure report
  5. Large export interruption report
  6. Comment collection request
  7. RedNote userscript failure

More ai tools reviews

yolov5 · eve · MemOS · LongCat-Video · Concat · DLSS5-Feeder · the whole board →