mrkeyoor.com_
Mon 14 Sept 15:50 UTC
Self-Hostedevaluationupdated 14 Sept 2026

danmu_api review

Danmu API is a Chinese-language server for finding and converting the scrolling viewer comments used by Chinese and East Asian video services. The primary README is Chinese and the repository lists no English README; it gives compatible search, episode-detail, matching, and comment endpoints to players that understand the DandanPlay API shape.

Verdict

Our Danmu API run installed 63 packages in 44 seconds with 0 known vulnerabilities, but there was no build or test target to exercise. It is worth trying for a Chinese-speaking personal media setup that can use Docker, change the default token, and tolerate source-specific repairs. Avoid making it a correctness-sensitive shared service until episode matching, upstream failure handling, and the AGPL-versus-ISC metadata conflict are resolved for your deployment.

We ran it

Lab card: what happened when we ran danmu_apiScreenshot of danmu_api (bks.indevs.in)
Install✓ · 44s63 packages · 112 MB
Buildn/ano build script
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo116 files~57,381 lines of source · 2.4 MB · 4 CI workflows · Dockerfile

Answers from our run

Does danmu_api build from source?

Dependencies installed in 44 seconds (63 packages), and the project has no separate build step. We cloned commit ea88a15 into a clean Debian container with 3 CPUs and no project-specific setup.

Does danmu_api have tests you can run?

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

Does danmu_api have known vulnerabilities in its dependencies?

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

Who should not use danmu_api?

English-only teams: the main and Hugging Face READMEs are Chinese, and no English README is listed at the repository root.

What are the alternatives to danmu_api?

Misaka Danmu Server, Jellyfin Plugin Danmu, dan-any. Our Danmu API run installed 63 packages in 44 seconds with 0 known vulnerabilities, but there was no build or test target to exercise.

Setup3/544-second install, but configuration and source access vary
Docs3/5Detailed Chinese guide; no listed English README
Community4/53,138 stars with seven open issues and September activity
Maturity2/5No build or test target; matching and license questions remain

Who it’s for

Chinese-speaking self-hosters adding danmu to a compatible media player.
Node or Docker operators who want source ordering, title mapping, filtering, and local comment imports.
Developers who need JSON, XML, or player-specific comment formats behind one HTTP service.
Small personal deployments that can monitor upstream source changes and fix matches manually.

Who it’s NOT for

English-only teams: the main and Hugging Face READMEs are Chinese, and no English README is listed at the repository root.
Playback systems that cannot tolerate a wrong episode match: open issue 472 documents comment IDs resolving to comments from a different show.
Serverless users who need scheduled favorite refreshes or disk persistence: the README limits scheduling to Node/Docker and requires Redis for cloud persistence.
Organizations that need unambiguous license metadata before deployment: the root license is AGPL-3.0 while package.json says ISC.
Services promising stable access to every upstream platform: issue 447 records one source returning HTTP 403, and the README warns about Cloudflare limits and blocking.

Setup reality

Our sandbox installed 63 npm packages in 44 seconds and used 112 MB. The checkout had 116 files, about 57,381 source lines, and occupied 2.4 MB. There was no build script or target and no test script or target, so both steps were skipped. Npm audit found 0 known vulnerabilities.

Local use needs Node.js 18 or newer, a changed TOKEN, and source choices in environment variables or config/.env; it listens on port 9321. Some sources need cookies, proxies, or a TMDB API key. Redis is optional locally but required for persistent favorites and local uploads on serverless hosts.

Node/Docker can persist .cache and run favorite-refresh schedules. Vercel, Netlify, Cloudflare, EdgeOne, and Hugging Face do not run that scheduler. The README calls local Docker the most stable route, notes Cloudflare limitations, and relies on external video services whose behavior can change independently.

Port 9321 fronts many danmu sources and formats

Danmu API runs an HTTP service on port 9321 and translates the viewer comments attached to shows across several Chinese and East Asian video platforms. The Chinese README documents DandanPlay-compatible search, episode, matching, and comment endpoints. Responses can be JSON, XML, or one of several player-specific forms supported through dan-any. It also accepts direct video URLs and can merge, filter, recolor, sample, or time-shift comments.

This is more than a thin format converter. The server remembers manual selections, supports title and episode mapping, caches searches, stores favorites, imports local danmu files, and has a web management interface for configuration and logs. Those features help when filenames and platform titles disagree. They also create state that an operator must understand. A bad automatic match can return perfectly valid comments for the wrong episode, which is harder to spot than an HTTP error.

Node.js 18 supports local use, while serverless loses scheduling

The local path requires Node.js 18 or newer, npm install, a configuration file or environment variables, and npm start. Docker images and a Dockerfile are available. Deployment instructions also cover Vercel, Netlify, EdgeOne, Cloudflare, and Hugging Face Spaces. The many buttons make first deployment approachable, yet the platforms do not provide the same service. The README recommends local Docker when stability matters.

Node and Docker deployments can write favorites and uploaded comments under .cache, provided that directory is mounted for container persistence. They can also execute scheduled favorite refreshes in the Asia/Shanghai timezone. Serverless deployments disable that scheduler and need Redis to preserve favorites or local uploads across cold starts. Ordinary search and comment caches remain instance memory according to the documentation, even when Redis is configured. That difference should decide the host before a team fills out the long environment file.

What happened when we ran it

Our sandbox installed 63 npm packages in 44 seconds and left 112 MB on disk. The repository at commit ea88a15 contained 116 files, about 57,381 lines of source, and a 2.4 MB checkout. Npm audit reported 0 known vulnerabilities, including 0 critical, high, moderate, and low findings. Four CI workflow files and a Dockerfile were present; our scan found no tests directory.

There was no build script or target, so the build step was skipped. There was also no test script or target, so our harness skipped tests. The README mentions direct node --test commands for selected files, but that does not change the measured result: a conventional checkout-level test target was unavailable. Buyers should decide which manual commands represent the release gate and run them explicitly; our lab data cannot say whether they pass.

The install result only covers repository mechanics. We did not query video providers, verify comment accuracy, exercise Redis persistence, or compare player output formats. None of those should be inferred from the 44-second install. A useful acceptance run would use shows the operator knows, check that each returned episode is correct, restart the chosen host, and confirm that favorites and local uploads survive exactly where the README says they will.

Three requests per minute do not fix upstream failures

The default comment limit is 3 requests per minute for one IP, and the documented default token is 87654321. When that default remains in use, the README says callers may omit the token from the URL. Public deployments should set their own token, configure an administrator token for management, and check which read endpoints remain public. Logs are held in memory and disappear on restart, so a reverse proxy or external log path is needed for longer incident history.

Source access is the recurring operational cost. Some platform paths need a Bilibili or Douban cookie, a proxy, or a TMDB key. Open issue 447 shows the Aiyifan source returning HTTP 403. The README also says Cloudflare can be blocked or truncate later comments because of request limits. Danmu API can retry and reorder sources, but it cannot guarantee that an upstream site will keep serving the same unofficial access path.

Correctness has sharper evidence than availability. Issue 472 reports automatic matches whose episode IDs later resolved to comments from a different series. Issue 481 reports local ASS imports retaining control tags, losing color and position, and deleting ordinary text inside angle brackets. Both were open on September 14, 2026. Verify matches and imported files visually before relying on unattended playback.

Seven open issues accompany fresh September work

GitHub showed 3,138 stars, 2,998 forks, and 15 open issues and pull requests on September 14, 2026. An issue-only search returned 7 open issues. The last push was September 13, and several pull requests had updates that month. GitHub's latest-release endpoint returned no release, although repository tags include v1.20.10. Health looks active from pushes and issue traffic; it should not be judged from the missing release object alone.

License metadata needs a maintainer answer. The root LICENSE file contains AGPL-3.0, and GitHub detects that license, while package.json declares ISC. Network operators and distributors should not guess which notice controls their use. For a personal Docker deployment, the immediate questions are simpler: can it match your library correctly, can your chosen sources be reached, and can you support its Chinese-only operating guide?

Alternatives

ProjectWhat it isPick it when
Misaka Danmu ServerA self-hosted danmu aggregation and management server compatible with DandanPlay APIs.pick this instead when you want another full server to compare for source coverage, management, and player compatibility.
Jellyfin Plugin DanmuA Jellyfin plugin that fetches danmu for media managed inside Jellyfin.pick this instead when Jellyfin is the only client and a direct server plugin is simpler than a separate API.
dan-anyA JavaScript library for reading and writing several danmu formats.pick this instead when format conversion belongs inside your application and you do not need a source-aggregation server.

What people are saying

  1. [github-trending] huangxd-/danmu_api

Sources

  1. Danmu API Chinese README
  2. Danmu API repository facts
  3. Danmu API AGPL license file
  4. Wrong episode ID mapping report
  5. ASS import parsing report
  6. Aiyifan HTTP 403 report

More self-hosted reviews

Mailspring · kvm · nango · SmartTubeLegacy · tvbox · opendisplay · the whole board →