Skip to content

Latest commit

 

History

94 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AniGo Logo

AniGo

云端追番 · 自动下载 · 智能选版

订阅动画 RSS,AI 智能解析,自动离线下载到网盘,通知推送。全程不占本地硬盘,单二进制部署。

Go React TypeScript License Status CI

快速开始 · 核心特性 · 配置指南 · 项目结构 · 架构设计


界面预览

首页 · 我的订阅 番剧源
首页 番剧源
设置 日志
设置 日志

核心特性

能力 说明
云端追番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
Loading

技术栈:

层 选型
后端 Go 1.26 + Gin
前端 React + TypeScript + Vite + Ant Design
存储 标准库 JSON 文件
日志 log/slog 结构化日志

详见 docs/architecture.md 与 docs/pipeline.md。

PikPak 配置

  1. 打开「设置 → 下载」,选择 PikPak。
  2. 填写 PikPak 账号和密码;手机号需包含国家区号,例如 +86138…。第三方登录账号需先在 PikPak 设置可用于账号登录的密码。
  3. 点击「测试 PikPak 登录」,成功后点击「保存」。测试使用当前表单,不会保存配置。
  4. 后续刷新会在 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;校验全部通过后才提交,提交失败时回滚。运行中的下载完成或取消后才执行恢复。

License

本项目采用 GNU General Public License v3.0(GPL-3.0)。

免责声明:本工具为中立性技术辅助工具,请遵守当地法律法规,勿用于盗版传播。

致谢


Made with ❤️ · AniGo

About

RSS 订阅番剧,AI 解析并自动离线下载到 115 网盘,通知推送

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages