浏览器里的番剧应用:基于自定义规则选源播放,搭配
Bangumi 元数据与
弹弹play 弹幕。
兼容 KazumiRules,支持导入与规则商店安装。
本地历史 / 追番,Anime4K 超分。绝赞开发中 (~ ̄▽ ̄)~
Animaku 是 React SPA + 本地 Hono API 的自托管 Web 客户端。
| 能力 | 说明 |
|---|---|
| 元数据 | Bangumi 搜索 / 时间表 / 详情 / 分集;可选 Token 同步追番 |
| 选源播放 | 兼容 Kazumi 规则(XPath / API);多线路选集 |
| 弹幕 | 弹弹 play 匹配;B 站 BV;拖入 bilibili / pakku XML |
| 本地数据 | 历史、设置、规则 JSON 均在浏览器;服务端不落库用户内容 |
相对桌面 Kazumi 的硬天花板:没有内嵌 WebView 媒体拦截,播放地址优先靠服务端静态解析 m3u8/mp4;抽不到时可 iframe 嵌源站页降级(跨域、弹幕与续播等能力受限)。
- 浏览器:现代 Chromium / Firefox / Safari(播放、HLS、可选 WebGPU 超分)
- 部署(推荐):Docker / Compose 单容器 — 只需 Docker,不必装 Node / pnpm
- 本机生产 / 开发:Node.js ≥ 20(建议 LTS)+ pnpm 9.15.0
- 番剧首页 / 目录 / 搜索
- 放送时间表
- 番剧详情与分集
- 多视频源 / 多线路选集
- 自定义规则导入与规则商店
- 规则冒烟测试(search → chapters → resolve)
- 原生
<video>+ hls.js 播放器 - 弹弹弹幕 + 弹幕面板 / 偏移 / 快捷键
- B 站 BV 弹幕与本地 XML 导入
- 追番列表(Bangumi 收藏,需 Token)
- 观看历史与续播
- 倍速 / 自动下一集 / 跳 OP·ED
- 明暗主题
- HLS 广告段过滤(对齐 Kazumi 思路)
- Anime4K 实时超分(WebGPU,效率 / 质量档)
- 媒体代理与直连回退;iframe 降级
- Docker 一键部署
- 还有更多 (/・ω・\)
多数用户 只装 Docker 即可;下面的 pnpm 仅用于本机生产或二次开发。
git clone https://github.com/uerax/Animaku.git animaku
cd animaku
cp .env.example .env # 按需改 PORT、PUBLIC_PROXY 等
docker compose up -d --build浏览器打开 **http://localhost:$PORT**(默认 8787)。
单容器同时提供 SPA 与 /api/*(同源)。
docker compose logs -f
docker compose down# 不用 compose
docker build -t animaku .
docker run --rm -p 8787:8787 --env-file .env -e PORT=8787 -e PUBLIC_PROXY=1 animaku- 健康检查:
GET /api/health - 镜像内
WEB_DIST=public;进程以非 root(node)运行 PUBLIC_PROXY默认开启(公网可直接选源/代理);仅内网可设0收紧- 页脚
VITE_*为构建期变量:改完需docker compose up -d --build才生效
一个进程同时提供 /api/* 与 SPA(同源,无需 Vite 代理):
# 需 Node ≥ 20 + pnpm 9.15.0,在仓库根目录
pnpm install
cp .env.example .env # 按需修改
pnpm start:prod
# 等价:pnpm build && pnpm start浏览器打开 **http://localhost:$PORT**(默认 8787)。
WEB_DIST 可指定静态目录(相对进程 cwd);本机可省略,会探测 public / apps/web/dist 等。
| 工具 | 版本 |
|---|---|
| Node.js | ≥ 20(建议 LTS) |
| pnpm | 9.15.0(与 packageManager 字段一致) |
# 安装 pnpm(任选)
npm install -g pnpm@9.15.0
# 或:corepack enable && corepack prepare pnpm@9.15.0 --activate请在 仓库根目录 使用 pnpm,不要用 npm / yarn 直接装依赖。
pnpm install
cp .env.example .env # 按需修改
pnpm dev| 进程 | 默认地址 | 说明 |
|---|---|---|
| Web(Vite) | http://localhost:5173(`WEB_DEV_PORT`) | 浏览器只开这个 |
| API(Hono) | http://localhost:8787(`PORT`) | Vite 把 /api 代理过来 |
pnpm dev:web # 仅前端
pnpm dev:server # 仅后端
pnpm typecheck # 全仓 tsc跳过 pnpm install 直接 pnpm dev 会报找不到 tsx / node_modules missing。
日常改代码请用 pnpm dev,不要用生产 start。
- Docker / 本机生产:http://localhost:$PORT · 开发:http://localhost:$WEB_DEV_PORT
- 设置 → Bangumi Token(可选,用于追番)
- 规则:默认已内置(
Anime1/otage/xifan/MXdm);可导入 JSON 或从 规则仓库 安装 - 详情页 → 选源 → 选集播放(能直链则浏览器直连 CDN,失败自动回退媒体代理)
- 播放页自动匹配弹幕;控制栏「幕」打开面板
| 键 | 作用 |
|---|---|
| Space / K | 播放 / 暂停 |
| ← / → | ±5s |
| ↑ / ↓ | 音量 |
| F | 播放器全屏 |
| D | 弹幕开关 |
, / . / / |
弹幕滞后 / 超前 / 偏移复位 |
| Alt+M | 弹幕面板 |
| P / N | 上 / 下一集 |
拖入 .xml |
导入 B 站 / pakku 弹幕 |
控制栏另有 网页全屏(CSS 铺满,不走 Fullscreen API)。
设置页:默认倍速、自动下一集、续播、跳 OP/ED、超分档位、强制广告过滤 / 媒体代理等。
完整注释见 .env.example。服务端从仓库根与 apps/server 加载;Vite 读同一份根 .env。
| 变量 | 默认 | 说明 |
|---|---|---|
PORT / HOST |
8787 / 0.0.0.0 |
API / 生产单进程监听 |
WEB_DEV_PORT / WEB_HOST |
5173 / 代码默认 127.0.0.1 |
仅本地 Vite;Docker 生产不用 |
DANDAN_APP_ID / DANDAN_APP_SECRET |
空 | 空则用内置 legacy 客户端密钥,开箱可弹幕 |
BANGUMI_USER_AGENT / PRODUCT_USER_AGENT |
animaku/0.1 |
上游 UA |
非观看页底部展示 GitHub 与可选维护者信息;改后需重新 pnpm build / 重启 pnpm dev。
| 变量 | 说明 |
|---|---|
VITE_GITHUB_URL |
源码地址(默认 https://github.com/uerax/Animaku);也可写 owner/repo |
VITE_MAINTAINER_NAME / VITE_MAINTAINER_URL |
维护者显示名与主页链接 |
VITE_HOMEPAGE_URL / VITE_CONTACT_EMAIL |
额外主页、联系邮箱 |
VITE_SITE_TAGLINE / VITE_FOOTER_NOTE |
标语与附加说明 |
完整列表见 .env.example。
SPA 默认带 index.html meta、客户端按路由改 title/description/OG、以及 /robots.txt + /sitemap.xml。
| 变量 | 说明 |
|---|---|
SITE_URL |
运行时公网 origin(无尾斜杠),写入 sitemap / robots 的 Sitemap: |
VITE_SITE_URL |
构建期写入客户端,供 canonical / og:url(Docker 需 rebuild) |
未设置时:服务端用请求 Host(含 X-Forwarded-*);客户端用 window.location.origin。
私有页(设置 / 历史 / 追番 / 搜索 / /play/*)noindex;番剧详情索引在 /subject/:id。
| 变量 | 说明 |
|---|---|
PUBLIC_PROXY |
默认 1:任意客户端可用媒体代理 + 规则 search/chapters/resolve。设 0 则仅本机/局域网(或 PROXY_TOKEN) |
PROXY_TOKEN |
可选;在 PUBLIC_PROXY=0 时可用请求头 X-Animaku-Proxy-Token 或 ?proxyToken= 放行 |
CORS_ORIGINS |
额外允许的浏览器 Origin(逗号分隔);localhost 始终可用 |
默认已适合 VPS 公网部署。 开启后他人也可借你的服务器出口拉流,请知悉带宽风险(仍有内网 SSRF 拦截)。
仅本机 / 局域网、不希望端口暴露后被公网当出口用时:设 PUBLIC_PROXY=0。
欢迎向 KazumiRules 提交自定义规则;规则编写可参考 Kazumi 规则开发文档。
本仓库架构、约定与踩坑见 docs/CONTEXT.md。
使用者 Q&A
A: 本项目不插入广告。片源侧广告可能来自 m3u8 分段;可在规则或设置里开启 广告过滤(基于 #EXT-X-DISCONTINUITY 启发,不是通用广告拦截)。无 DISCONTINUITY 或 iframe 降级时过滤无效。
A: Anime4K 走浏览器 WebGPU,对 GPU 要求较高。尽量选 效率档 而非质量档,或对低分辨率源使用;不支持 WebGPU 时请关闭超分。
A: Web 端没有桌面 Kazumi 的 WebView 拦截能力,只能静态抽链。大量 resolve 失败多半是解析上限,可换规则 / 线路,或接受 iframe 降级(弹幕与部分播放增强不可用)。
A: 检查 .env / 环境变量是否把 PUBLIC_PROXY 设成了 0。默认应为 1;若刻意收紧,可改回 1 或配置 PROXY_TOKEN。
A: 本地可留空 DANDAN_* 使用内置密钥。仍失败时查 /api/danmaku/status 与服务端日志;生产环境建议申请弹弹开放平台密钥。
A: 多为布局 / 合成问题(例如父级 overflow + 圆角与硬解视频叠加)。详见 docs/CONTEXT.md。
规则与部署 Q&A
A: 确认镜像构建包含前端 SPA;WEB_DIST=public,并确认 GET /api/health 正常。
A: 仅本机 Node / 开发需要 pnpm。安装 pnpm 9.15.0 并保证在 仓库根 执行 pnpm install。只想部署时用上面的 Docker 即可。不要只开 dev:web 却期望 /api 可用。
A: 与 Kazumi 类似:部分站反爬 / 验证码 / 防盗链会导致静态解析失败。可换线路,或依赖 iframe 降级提高兼容(体验弱于直链播放)。
本软件按「现状」提供,作者与贡献者不对适用性、可靠性或准确性作任何明示或暗示保证。在法律允许的最大范围内,不承担因使用本软件产生的任何直接或间接损害责任。
使用本项目须遵守所在地法律法规,不得侵犯第三方知识产权。因使用产生的数据与缓存建议及时清理;长时间缓存或传播他人内容需自行取得权利人授权。
默认仅内置少量示例规则;更多请从 KazumiRules 安装或自行导入。部分站点有反爬 / 验证码 / 防盗链,Web 端可能解析失败。
- 不收集用户遥测;无内置分析 SDK。
- Bangumi Token、规则 JSON、历史与设置仅保存在 浏览器本地(
localStorage等)。 - 服务端代理请求会按规则访问第三方站点与媒体 CDN;
PUBLIC_PROXY默认开启,请注意出口流量与访问控制(可设0限制为局域网)。
特别感谢 Kazumi 与 KazumiRules——规则模型、选源与产品形态的重要参考。
特别感谢 agefans-enhance 与 @ironkinoko/danmaku——弹幕交互与播放器面板的重要参考。
特别感谢 弹弹play 开放平台提供弹幕能力。
特别感谢 Bangumi 开放 API 提供番剧元数据。
特别感谢 Anime4K 提供实时超分算法思路与实现参考。
