版本: 3.2.4 | 分析日期: 2026-04-12
AutoBangumi 是一个基于 RSS 的动漫自动下载和整理工具。它监控动漫种子站点(Mikan、DMHY、Nyaa)的 RSS 源,通过 qBittorrent 下载剧集,并将文件整理为 Plex/Jellyfin 兼容的目录结构,支持自动重命名。
| 层级 |
技术 |
| 后端 |
Python 3.13 + FastAPI + SQLModel + SQLite |
| 前端 |
Vue 3 + TypeScript + Naive UI + Vite + Pinia |
| 包管理 |
uv (Python), pnpm (Node) |
| 部署 |
Docker (Alpine 多阶段构建), 端口 7892 |
| CI/CD |
GitHub Actions (测试 + Docker 多平台构建 + Telegram 通知) |
Auto_Bangumi/
├── backend/ # Python 后端 (FastAPI + SQLModel)
│ ├── src/
│ │ ├── main.py # FastAPI 入口, API 挂载在 /api, MCP 挂载在 /mcp
│ │ └── module/ # 核心模块
│ │ ├── api/ # REST API 路由
│ │ ├── core/ # 应用控制器, 后台线程, 状态追踪
│ │ ├── conf/ # 配置管理, 常量, 日志
│ │ ├── database/ # SQLite 操作 (同步 + 异步引擎, 迁移)
│ │ ├── models/ # SQLModel/Pydantic 数据模型
│ │ ├── downloader/ # qBittorrent/Aria2 下载客户端抽象
│ │ ├── manager/ # 文件整理, 重命名, 种子管理
│ │ ├── mcp/ # Model Context Protocol 服务
│ │ ├── network/ # HTTP 客户端工具
│ │ ├── notification/ # 多渠道通知系统 (8个提供者)
│ │ ├── parser/ # 种子名解析, 元数据提取
│ │ ├── parser/analyser/ # TMDB, Mikan, OpenAI 解析器
│ │ ├── rss/ # RSS 源解析和分析
│ │ ├── searcher/ # 种子搜索 (Mikan, DMHY, Nyaa)
│ │ ├── security/ # JWT 认证, WebAuthn/Passkey, IP 白名单
│ │ ├── update/ # 版本迁移, 数据迁移, 启动例程
│ │ ├── checker/ # 健康/完整性检查
│ │ ├── utils/ # JSON 配置, 图片缓存, 数据工具
│ │ └── ab_decorator/ # 自定义装饰器
│ └── pyproject.toml
├── webui/ # Vue 3 前端
│ ├── src/
│ │ ├── api/ # Axios API 客户端函数
│ │ ├── components/ # Vue 组件 (basic/, layout/, setting/, setup/)
│ │ ├── pages/ # 路由页面组件
│ │ ├── store/ # Pinia 状态管理
│ │ ├── router/ # Vue Router 配置
│ │ ├── hooks/ # 自定义 Vue 组合式函数
│ │ ├── i18n/ # 国际化 (zh-CN, en-US)
│ │ ├── services/ # 服务层 (webauthn.ts)
│ │ ├── style/ # 全局 SCSS 样式
│ │ └── utils/ # 工具函数
│ └── package.json
├── .github/workflows/ # CI/CD (build.yml)
├── docs/ # VitePress 文档站
├── scripts/ # 工具脚本
├── Dockerfile # 多阶段 Docker 构建
├── entrypoint.sh # Docker 入口 (用户管理 + 应用启动)
├── CLAUDE.md # Claude Code 指导文档
├── CHANGELOG.md # 详细版本历史
└── CONTRIBUTING.md # 贡献指南
| 包名 |
版本 |
用途 |
| fastapi |
>=0.109.0 |
Web 框架 / REST API |
| uvicorn |
>=0.27.0 |
ASGI 服务器 |
| httpx[socks] |
>=0.25.0 |
异步 HTTP 客户端 (支持 SOCKS 代理) |
| httpx-socks |
>=0.9.0 |
SOCKS 代理连接器 |
| beautifulsoup4 |
>=4.12.0 |
HTML/XML 解析 (RSS 源) |
| sqlmodel |
>=0.0.14 |
ORM (Pydantic + SQLAlchemy 混合) |
| sqlalchemy[asyncio] |
>=2.0.0 |
数据库工具包 (异步支持) |
| aiosqlite |
>=0.19.0 |
异步 SQLite 驱动 |
| pydantic |
>=2.0.0 |
数据验证 / 设置 |
| python-jose |
>=3.3.0 |
JWT 令牌创建/验证 |
| passlib |
>=1.7.4 |
密码哈希 |
| bcrypt |
>=4.0.1,<4.1 |
Bcrypt 哈希后端 |
| python-multipart |
>=0.0.6 |
表单数据解析 |
| python-dotenv |
>=1.0.0 |
环境变量加载 |
| Jinja2 |
>=3.1.2 |
HTML 模板 (生产 SPA 服务) |
| openai |
>=1.54.3 |
OpenAI API 集成 (实验性解析器) |
| semver |
>=3.0.1 |
语义化版本工具 |
| sse-starlette |
>=1.6.5 |
Server-Sent Events (MCP) |
| webauthn |
>=2.0.0 |
WebAuthn/Passkey 认证 |
| urllib3 |
>=2.0.3 |
HTTP 库 |
| mcp[cli] |
>=1.8.0 |
Model Context Protocol 服务 SDK |
| 包名 |
版本 |
用途 |
| pytest |
>=8.0.0 |
测试框架 |
| pytest-asyncio |
>=0.23.0 |
异步测试支持 |
| pytest-mock |
>=3.12.0 |
测试 Mock |
| ruff |
>=0.1.0 |
Python Linter |
| black |
>=24.0.0 |
Python 格式化 |
| pre-commit |
>=3.0.0 |
预提交钩子 |
| 包名 |
版本 |
用途 |
| vue |
^3.5.8 |
核心框架 |
| vue-router |
^4.4.5 |
客户端路由 (Hash 模式) |
| pinia |
^2.2.2 |
状态管理 |
| vue-i18n |
^9.14.0 |
国际化 (zh-CN, en-US) |
| naive-ui |
^2.39.0 |
UI 组件库 |
| axios |
^0.27.2 |
HTTP 客户端 |
| @vueuse/core |
^10.11.1 |
Vue 组合式工具 |
| @headlessui/vue |
^1.7.23 |
无头 UI 组件 |
| vuedraggable |
^4.1.0 |
拖拽列表组件 |
| 包名 |
版本 |
用途 |
| vite |
^4.5.5 |
构建工具 / 开发服务器 |
| typescript |
^4.9.5 |
类型检查 |
| unocss |
^0.51.13 |
原子化 CSS 引擎 |
| vitest |
^0.30.1 |
单元测试框架 |
| storybook |
^7.6.20 |
组件开发/文档 |
| vite-plugin-pwa |
^0.16.7 |
PWA 支持 |
| 路径 |
文件 |
端点功能 |
/auth |
auth.py |
登录, 刷新令牌, 登出, 更新 |
/passkey |
passkey.py |
WebAuthn 注册/认证 |
/log |
log.py |
日志访问 |
/program |
program.py |
启动/停止/重启/状态控制 |
/bangumi |
bangumi.py |
番剧 CRUD, 归档, 偏移检测, 星期管理, TMDB 集成 |
/config |
config.py |
配置读写 |
/downloader |
downloader.py |
qBittorrent 客户端管理 |
/rss |
rss.py |
RSS CRUD, 刷新, 分析, 订阅 |
/search |
search.py |
多提供者种子搜索 |
/setup |
setup.py |
首次运行设置向导 |
/notification |
notification.py |
通知提供者管理 |
- 引擎: SQLite (同步 + 异步 via
aiosqlite)
- 数据路径:
sqlite:///data/data.db
- ORM: SQLModel (Pydantic v2 + SQLAlchemy)
- Schema 版本: 9 (自定义迁移系统)
| 表名 |
说明 |
bangumi |
动漫系列信息 (标题, 年份, 季数, 保存路径, 偏移量, 星期, 海报等) |
rssitem |
RSS 源信息 (URL, 解析器, 连接状态, 最后检查时间) |
torrent |
种子记录 (关联 bangumi_id 和 rss_id, 下载状态, qB 哈希) |
user |
用户认证信息 |
passkey |
WebAuthn 凭证存储 |
schema_version |
数据库迁移版本追踪 |
| 线程 |
说明 |
默认间隔 |
| RSSThread |
定时 RSS 解析和种子添加 |
900s (15分钟) |
| RenameThread |
文件重命名循环 |
60s (1分钟) |
| OffsetScanThread |
后台偏移不匹配检测 |
6小时 |
| CalendarRefreshThread |
Bangumi 日历数据刷新 |
24小时 |
telegram, discord, bark, server-chan, wecom, gotify, pushover, webhook
| 工具名 |
功能 |
| list_anime |
列出所有动漫 |
| get_anime |
获取单个动漫详情 |
| search_anime |
搜索动漫 |
| subscribe_anime |
订阅动漫 |
| unsubscribe_anime |
取消订阅 |
| list_downloads |
列出下载任务 |
| list_rss_feeds |
列出 RSS 源 |
| get_program_status |
获取程序状态 |
| refresh_feeds |
刷新 RSS 源 |
| update_anime |
更新动漫信息 |
anime/list - 动漫列表
anime/{id} - 单个动漫
status - 程序状态
rss/feeds - RSS 源列表
- 可配置 IP 白名单 (CIDR)
- Bearer Token 认证
- SSE 传输 (
/mcp/sse)
| 方式 |
说明 |
| JWT |
令牌通过 HttpOnly Cookie + Bearer Header 发放 (1天有效期) |
| WebAuthn/Passkey |
完整的 Passkey 注册和认证流程 |
| IP 白名单 |
可配置 CIDR 白名单 (登录和 MCP 端点) |
| Bearer Token |
静态令牌可绕过登录 (用于自动化) |
| DEV 模式 |
VERSION == "DEV_VERSION" 时跳过认证 |
- Builder 阶段:
ghcr.io/astral-sh/uv:0.5-python3.13-alpine
- Runtime 阶段:
python:3.13-alpine
- 非 root 用户
ab (UID 911, GID 911)
- 通过
tini 进程管理器启动
services:
AutoBangumi:
image: ghcr.io/estrellaxd/auto_bangumi:latest
ports:
- "7892:7892"
volumes:
- ./config:/app/config
- ./data:/app/data
environment:
- TZ=Asia/Shanghai
- PUID=1000
- PGID=1000
restart: unless-stopped
| 路径 |
用途 |
/app/config |
配置文件 (config.json) |
/app/data |
数据库 + 海报缓存 |
.github/workflows/build.yml 包含 6 个 Job:
- test - Python 测试 (pytest)
- webui-test - 前端类型检查 (pnpm test:build)
- version-info - 版本类型判断 (release/dev/build_test)
- build-webui - Vue SPA 构建 (上传产物)
- build-docker - 多平台 Docker 构建 (amd64 + arm64), 推送 DockerHub + GHCR
- release - 创建 GitHub Release
- telegram - Telegram 发布通知
- 混合 ORM: SQLModel 同时作为数据库表和 API 请求/响应 Schema
- 双数据库引擎: 同步引擎用于常规操作,异步引擎用于 Passkey 操作
- 自定义 Schema 迁移: 轻量级迁移系统 (非 Alembic)
- 上下文管理器: DownloadClient、RSSEngine 等使用
__enter__/__exit__ 管理资源生命周期
- 多继承组合:
Program 类继承所有后台线程能力
- 环境变量展开: 配置支持
$ENV_VAR 引用,凭据通过 @property 安全展开
- SPA 内嵌服务: 生产模式下 FastAPI 直接服务 Vue 构建产物
- MCP 集成: 通过标准 AI 工具接口管理动漫订阅
- 可配置安全模型: IP 白名单 + 静态 Bearer Token + JWT Cookie + WebAuthn 共存
- 版本感知启动: 级联决策树处理首次运行、遗留数据迁移、Schema 迁移
- 种子标签: 下载种子标记
ab:<bangumi_id> 用于重命名阶段关联
- 双语响应: API 响应同时包含
msg_en 和 msg_zh
- 文件:
config/config.json (生产) 或 config/config_dev.json (开发)
- 环境变量:
AB_* 前缀 (如 AB_DOWNLOADER_HOST, AB_INTERVAL_TIME)
- 配置节: program, downloader, rss_parser, bangumi_manage, log, proxy, notification, experimental_openai, security
- 凭据安全: 敏感字段尾部带下划线存储,通过
@property 展开 $VAR 环境引用
cd backend && uv sync # 安装依赖
cd backend && uv run pytest # 运行测试
cd backend && uv run ruff check src # Lint 检查
cd backend && uv run black src # 代码格式化
cd backend/src && uv run python main.py # 启动开发服务器 (端口 7892)
cd webui && pnpm install # 安装依赖
cd webui && pnpm dev # 启动开发服务器 (端口 5173)
cd webui && pnpm build # 生产构建
cd webui && pnpm test:build # 类型检查
cd webui && pnpm lint # Lint 检查
main: 稳定发布版
X.Y-dev: 活跃开发分支 (如 3.2-dev)
- Bug 修复 → PR 到当前版本
-dev 分支
- 新功能 → PR 到下一版本
-dev 分支