| 首页 · 我的订阅 | 番剧源 |
|---|---|
![]() |
![]() |
| 设置 | 日志 |
|---|---|
![]() |
![]() |
| 能力 | 说明 |
|---|---|
| 云端追番 | RSS 自动离线下载到 115 / PikPak 网盘,本地零存储 |
| AI 解析 | DeepSeek 等大模型批量解析标题,提取集数 / 分辨率 / 字幕组 / 选版信号,同步完成规则与简中字幕筛选 |
| 智能选版 | 同集多版本自动择优(分辨率 > 压制源 > 编码 > 色深 > 字幕嵌入/语言),每集不重复下载 |
| 四源聚合 | animes.garden(動漫花園 + 蜜柑 + 萌番组 + ANi 聚合)作番剧源 |
| 在线播放 | 首页直接调用系统播放器(mpv 等)经本地代理播放 115 / PikPak 云端文件,无需下载 |
| 元数据 | Bangumi 评分 / 季数 / 总集数、封面下载,后台定时刷新(周期可配) |
| 通知 | Telegram / Bark / ServerChan / WebHook / Shell / 系统日志 |
| 单二进制 | 前端 React 构建产物嵌入后端,一个 anigo 搞定 |
Note
支持 115 网盘(Cookie)和 PikPak(邮箱/手机号与密码)离线下载,可在「设置 → 下载」中选择。
- Go 1.26+(构建)
- Node.js 20+(构建前端,
make all会先构建前端再嵌入)
make all # 前端 + 后端一体构建,产物 backend/bin/anigo若只改后端、前端已构建:
make build # 仅构建后端(使用已嵌入的前端)./backend/bin/anigo # 默认端口 7789,配置目录 ./config
PORT=9000 ./backend/bin/anigo # 自定义端口
CONFIG=/path ./backend/bin/anigo # 自定义配置目录首次启动自动生成 config.v2.json / ani.v2.json。浏览器打开 http://服务器:7789 即可管理。
make dev # 后端 :7789 + Vite 热更新 :37789(/api 自动代理)make test # 后端:go vet ./... && go test -race ./...
cd frontend && npm run test # 前端:vitest(组件/API)
cd frontend && npm run lint # 前端:eslint 静态检查
cd frontend && npm run test:coverage # 前端:vitest + 覆盖率(阈值 40%)
cd frontend && npm audit # 前端:依赖漏洞扫描
make e2e # 端到端集成测试(需真实外部服务:AI/115/BGM/animes.garden)覆盖范围:后端单元测试(store/util/domain/rename/rss/scoring/service/httpapi/provider)、前端测试(API client/App 路由/SideMenu 导航)、E2E(基础 API/配置/AI/元数据/RSS/订阅/115 登录/通知/导出导入)。
从 Releases 下载对应平台的单文件二进制(前端已内嵌,无需 Go/Node 环境):
chmod +x anigo-linux-amd64
./anigo-linux-amd64 # 默认端口 7789,配置目录 ./config
PORT=9000 ./anigo-linux-amd64 # 自定义端口
CONFIG=/data/anigo ./anigo-linux-amd64 # 自定义配置目录Windows 直接运行 anigo-windows-amd64.exe(参数相同)。首次启动自动生成配置,浏览器打开 http://服务器:7789,默认账号 admin / admin。
产生文件(均在配置目录):config.v2.json(主配置)、ani.v2.json(订阅列表)、files/(封面缓存)、logs/(可选日志落盘);日志默认在内存中,视频全部离线下载到所选网盘,本地零存储。
Note
发布版二进制内嵌的默认密钥为空,需在网页「设置」里自行填入所选网盘凭据与 AI Key。
默认 番剧/${title}/Season ${season},支持占位符:
${title} ${season} ${seasonFormat} ${episode} ${episodeFormat}
${letter} ${quarter} ${quarterName} ${year} ${month} ${monthFormat}
${bgmId} ${jpTitle} ${subgroup}
配置多条通知渠道(Telegram/Bark/ServerChan/WebHook/Shell/系统日志),每条可设定:
- 触发状态:下载开始 / 完成 / 缺集 / 错误 / 完结 / 摸鱼
- 模板:
${text} ${title} ${season} ${episode} ${emoji} ${action}等 - 重试次数、排序、备注
- RSS 轮询:按
rssSleepMinutes(分钟)周期刷新订阅;BGM 元数据按bgmRefreshHours(小时,缺省 6)后台刷新评分/总集数/已播出集数/封面,可配合「自动更新总集数 / 强制更新总集数」开关。 - 备份与恢复:网页「设置 → 日志与备份」可一键导出
anigo.backup.zip(含配置、订阅与封面)或导入恢复。 - 日志:默认存内存环形缓冲(
logsMax条,日志页可查);「设置 → 日志与备份」可配置 日志级别(DEBUG/INFO/WARN/ERROR)与 落盘文件(相对配置目录路径,如logs/anigo.log,留空不落盘),落盘后重启仍可回溯历史日志。
Note
在线播放(可选):首页订阅卡片点击播放图标,通过 mpv-handler:// 协议拉起系统播放器(mpv 等)观看 115 云端文件。需安装并注册 mpv-handler;前端经本地 /api/file 代理转发 115 CDN 流,播放器只访问本地端点,不暴露云端地址。
Note
扫码获取 115 Cookie:scripts/qrcode_cookie_115.py 可扫码登录 115 并打印 Cookie(UID=...; CID=...; SEID=...; KID=...)。安装 pip install qrcode 后运行 python scripts/qrcode_cookie_115.py,免去手动复制。出处:ChenyangGao/qrcode_cookie_115
anigo/
├── backend/ # 后端 Go
│ ├── cmd/anigo/ # 入口(DI 组装)
│ └── internal/
│ ├── domain/ # 领域模型 + 端口接口(ports.go)
│ ├── store/ # JSON 文件持久化 + TTL 缓存
│ ├── service/ # 业务服务(订阅/下载/通知/元数据/状态)
│ ├── provider/ # 适配器:bgm/garden/ai/notifier
│ ├── cloud/ # 网盘驱动(driver_115)
│ ├── rss/ rename/ scoring/ # 纯函数:RSS 解析/剧集提取/重命名/选版打分
│ ├── httpapi/ # Gin HTTP 层 + 嵌入前端
│ └── task/ # 后台任务循环(RSS 轮询 + BGM 元数据刷新)
├── frontend/ # 前端 React + TS + Ant Design
│ ├── src/pages/ # 首页/番剧源/设置/日志页面
│ └── src/**/*.test.tsx # vitest 组件与 API 测试
├── scripts/ # 辅助脚本
│ ├── e2e.sh # 端到端集成测试
│ └── qrcode_cookie_115.py # 扫码获取 115 Cookie(第三方脚本)
├── docs/ # 架构设计文档(architecture.md / pipeline.md)
├── Makefile # 构建/开发/测试统一入口
└── go.work # Go workspace(backend 模块)
graph LR
subgraph Web[浏览器]
UI[前端 React + Ant Design]
end
subgraph Core[后端 Go]
HTTP[HTTP API · Gin]
SVC[业务服务 Service]
TASK[后台任务 RSS 轮询]
PORT[端口接口 ports.go]
end
subgraph Adapter[适配器 Provider]
AI[AI 解析 DeepSeek]
BGM[元数据 Bangumi]
GARDEN[番剧源 animes.garden]
NOTIFY[通知 Telegram/Bark/WebHook]
CLOUD[网盘 115]
end
UI -->|HTTP| HTTP
HTTP --> SVC
SVC --> PORT
TASK --> PORT
PORT --> AI
PORT --> BGM
PORT --> GARDEN
PORT --> NOTIFY
PORT --> CLOUD
技术栈:
| 层 | 选型 |
|---|---|
| 后端 | Go 1.26 + Gin |
| 前端 | React + TypeScript + Vite + Ant Design |
| 存储 | 标准库 JSON 文件 |
| 日志 | log/slog 结构化日志 |
- 打开「设置 → 下载」,选择 PikPak。
- 填写 PikPak 账号和密码;手机号需包含国家区号,例如
+86138…。第三方登录账号需先在 PikPak 设置可用于账号登录的密码。 - 点击「测试 PikPak 登录」,成功后点击「保存」。测试使用当前表单,不会保存配置。
- 后续刷新会在 PikPak 创建下载目录、提交磁力任务,并在之后的刷新中确认云端完成状态。首页播放支持 PikPak 文件。
驱动参考 52funny/pikpakcli 的登录、验证和文件接口,直接集成于 Go 服务,无需额外安装 CLI。会话在内存中缓存并自动续期;服务重启后重新登录。上游若要求人工验证,会返回明确提示,需先在官方客户端完成验证。
切换网盘后,旧网盘的未完成任务会保留,切回后继续查询与重试;新任务使用当前网盘。历史已完成集数保持不变,文件不会自动迁移或重新下载。播放凭证绑定网盘与凭据,切换后需重新点击播放。
协议参考版本:pikpakcli@560f263661fc55e40e508fe8e0d4b151c855dcbd。上游 MIT 许可保留在 LICENSE.pikpakcli。离线任务查询与原地重试字段另外参考 pikpak-go 的任务接口。
- 新任务区分待提交、已提交、完成和失败。网盘接受离线任务只表示“已提交”;后续刷新查询云端任务状态,确认完成后才增加已完成集数、判断订阅完结。
- 失败任务保存原磁力和目标路径,按
downloadRetry限制重试次数(不含首次提交),使用 1~64 分钟退避,在后续刷新时重试。115 重试仅清理失败任务记录;PikPak 原地重试失败任务,均保留网盘文件。 - 已提交但无法在云端列表确认的任务保持待确认,不推测完成。历史版本的
downloaded/downloadedHash记录保留兼容,不会自动重新下载。 - 定时刷新、手动刷新、添加订阅共用有界队列;同一订阅重复刷新会合并。首页展示任务执行状态、失败原因,并自动更新进度。
- AI 解析缓存保留 24 小时、最多 10000 个标题;模型、提示词、筛选规则或凭据变化后重新解析。每批最多 32 个新标题,缓存仅驻留内存。
- mpv 播放前申请单文件凭证,有效期 3 小时。凭证仅能读取该文件,不能调用管理接口;服务重启或登录密码、网盘类型或凭据变化后失效。过期后从首页重新点击播放即可。
- 备份导入要求同时包含配置和订阅 JSON,支持恢复封面和 torrents 附件。上传最大 50 MiB,解压总量最大 100 MiB;校验全部通过后才提交,提交失败时回滚。运行中的下载完成或取消后才执行恢复。
本项目采用 GNU General Public License v3.0(GPL-3.0)。
免责声明:本工具为中立性技术辅助工具,请遵守当地法律法规,勿用于盗版传播。
- ani-rss — 思路与契约格式来源
- mpv-handler — mpv 在线播放协议
- ChenyangGao/qrcode_cookie_115 — 115 扫码登录获取 Cookie 脚本
Made with ❤️ · AniGo




