BGmi 是一个用来追番的命令行程序。
v5 是一次主要版本更新,重点是更可靠的单集追踪、更适合媒体库的下载整理,以及新的 HTTP/MCP 管理接口。
- 改为按单集记录下载状态。单集下载失败时,可用
seen forget重新加入更新队列,不再需要回退整部番剧的进度。 - 新增
seen mark/seen forget,用于手动添加或移除单集记录。 - 新增 path formatter 和
postprocess。启用后,下载中的文件会先进入.downloads,完成后整理为SxxExx等媒体库常用路径。 add支持--season、--episode-offset、--display-name,用于修正季度、总集数偏移和媒体库显示名。bgmi_http新增 MCP 接口,供 MCP 客户端管理订阅、过滤器、更新和下载状态。bgmi install支持从 GitHub Release 安装新版前端。
- Python 版本要求提升到 3.11+。
mark命令由seen mark/seen forget取代。update现在默认执行下载,不再使用旧的--download参数。- v4 数据库需要在升级后运行
bgmi upgrade完成迁移。
- 添加
proxy设置。 - 新 Web UI。
- 将配置项
transmission.rpc_url重命名为transmission.rpc_host。 - 修复 Transmission 配置的默认值。
- 新增配置项
global_include_keywords,用于设置全局包含关键词。 - 新增配置项
save_path_map,用于设置不同动画的下载路径。 - 使用 TOML 作为配置文件。
- 不再支持 Python 3.7 及以下版本。
- 支持扩展下载方式。
- 移除迅雷离线。
- 支持 qbittorrent-webapi。
- Transmission RPC 认证设置。
- 支持 deluge-rpc。
- 使用最大和最小集数筛选搜索结果。
- 多个数据源可选:bangumi_moe、mikan_project 或者 dmhy。
- 使用 aria2、transmission、qbittorrent 或者 deluge 来下载你的番剧。
- 提供一个管理和观看订阅番剧的前端。
- 弹幕支持。
- 提供移动设备支持的 ICS 格式日历。
- Bangumi Script:添加自己的番剧解析器。
- 番剧放送列表和剧集信息。
- 下载番剧时的过滤器(支持关键词、字幕组和正则)。
- 多平台支持:Windows、macOS 以及 Linux。
使用 pipx 安装(推荐):
pipx install bgmi安装 v5 预发布版本:
pipx install "bgmi==5.0.0b1"pip install bgmi使用 pip 安装 v5 预发布版本:
pip install "bgmi==5.0.0b1"git clone https://github.com/BGmi/BGmi
cd BGmi
git checkout master
python -m pip install -U pip
pip install .bgmi installpipx upgrade bgmi
bgmi upgradepip install bgmi -U
bgmi upgrade升级后请确保运行 bgmi upgrade。
见 BGmi/bgmi-docker-all-in-one。
查看可用的命令:
bgmi --help--help 选项同样适用于所有子命令,README 仅介绍基础用法。
BGmi 提供两种方式配置运行参数:配置文件与环境变量。
BGmi 的配置文件位于 ${BGMI_PATH}/config.toml。在未设置 BGMI_PATH 环境变量时,${BGMI_PATH} 默认为 ~/.bgmi/。
查看当前 BGmi 设置:
bgmi config printdata_source = "bangumi_moe" # 数据源
download_delegate = "aria2-rpc" # 番剧下载工具(aria2-rpc、transmission-rpc、deluge-rpc、qbittorrent-webapi)
tmp_path = "tmp/tmp" # 临时目录
log_path = "tmp/log" # 日志目录
save_path = "tmp/bangumi" # 下载番剧保存地址
enable_path_formatter = false # 启用后,完成下载会整理为 path_formatter 指定的路径
path_formatter = "{name}/S{season:02d}/S{season:02d}E{episode:02d}.{suffix}" # 媒体库文件路径格式
max_path = 3 # 抓取数据时每个番剧最大抓取页数
bangumi_moe_url = "https://bangumi.moe"
share_dmhy_url = "https://share.dmhy.org"
mikan_username = "" # 蜜柑计划的用户名
mikan_password = "" # 蜜柑计划的密码
enable_global_filters = true
global_filters = [
"Leopard-Raws",
"hevc",
"x265",
"c-a Raws",
"U3-Web",
]
proxy = '' # HTTP 代理,例如:http://127.0.0.1:1080
[save_path_map] # 针对每部番剧设置下载路径
'致不灭的你 第二季' = '/home/trim21/downloads/bangumi/致不灭的你/s2/' # 绝对路径可能导致 web-ui 无法正确显示视频文件
'致不灭的你 第三季' = './致不灭的你/s3/' # 以 save_path 为基础路径的相对路径
[http]
admin_token = "dYMj-Z4bDRoQfd3x" # Web UI 的密码
danmaku_api_url = ""
serve_static_files = false
[aria2]
rpc_url = "http://localhost:6800/rpc" # aria2c RPC URL(不是 jsonrpc URL)
rpc_token = "token:" # aria2c RPC token(如果没有设置 token,留空或者设置为 `token:`)
[transmission]
rpc_host = "127.0.0.1"
rpc_port = 9091
rpc_username = "your_username"
rpc_password = "your_password"
rpc_path = "/transmission/rpc" # Transmission HTTP RPC 的请求路径
[qbittorrent]
rpc_host = "127.0.0.1"
rpc_port = 8080
rpc_username = "admin"
rpc_password = "adminadmin"
category = ""
[deluge]
rpc_url = "http://127.0.0.1:8112/json"
rpc_password = "deluge"当 BGmi 的配置文件还未初始化时,各项运行参数可由环境变量进行配置。
环境变量以 BGMI_ 开头,全大写命名,各级配置以 _ 进行分割,例如:
BGMI_DATA_SOURCE=bangumi_moe # 对应配置文件中的 data_source = "bangumi_moe"
BGMI_HTTP_ADMIN_TOKEN=dYMj-Z4bDRoQfd3x # 对应配置文件 [http] 下的 admin_token
环境变量暂不支持配置以下项目:
enable_global_include_keywords
enable_global_filters
global_include_keywords
global_filters
[save_path_map]
注:当配置文件生成完毕后,运行配置将会以配置文件为准。环境变量仅用于生成第一份配置文件。
使用 bgmi config set ...keys --value '...' 命令可以修改配置。例如:
bgmi config set http admin_token --value 'my super secret token'或者:
bgmi config set max_path --value '3'不能用来修改复杂配置(如 global_filters),请手动修改配置文件。
更换数据源会清空番剧数据库,但是 bgmi script 不受影响。 之前下载的视频文件不会删除,但不会在前端显示。
如果更换的源为 mikan_project,请先配置 MIKAN_USERNAME 和 MIKAN_PASSWORD。 其它源不受影响。
bgmi source mikan_project修改配置文件中对应的配置项:
download_delegate = "aria2-rpc" # 下载方式内置可用的选项包括 aria2-rpc、transmission-rpc、qbittorrent-webapi 以及 deluge-rpc。
bgmi calbgmi add "进击的巨人 第三季" "刃牙" "哆啦A梦"
bgmi add "高分少女"默认会从第 1 集开始下载。可以用 --episode 标记已经下载过的集数,比如
--episode 12 表示从第 13 集开始追;用 --latest 可以把当前已经发布的集数都标记为已下载。
添加番剧的同时设置下载路径:
bgmi add "高分少女" --save-path './高分少女/S1/'设置/修改番剧的季度号:
bgmi add "爱书的下克上 第4季" --season 1--season 对已订阅的番剧同样有效,会直接更新季度号。
bgmi delete "Re:CREATORS"bgmi update
bgmi update "从零开始的魔法书"默认情况下,BGmi 仍会把每集下载到 ${save_path}/{番剧名}/{集数}/。
设置 enable_path_formatter = true 后,下载器会先把任务保存到 ${save_path}/.downloads/{任务 ID}/。任务完成后,bgmi update 会自动执行 postprocess,也可以手动运行 bgmi postprocess,将文件移动到 path_formatter 指定的位置。
默认格式为:
path_formatter = "{name}/S{season:02d}/S{season:02d}E{episode:02d}.{suffix}"v5 会自动记录所有已下载的集数。如果某集下载失败需要重新下载,使用 seen forget 移除该集的记录,然后重新 update。如果你已经手动处理了某集,也可以用 seen mark 将它加入已下载记录:
bgmi seen forget "Re:CREATORS" 5
bgmi update "Re:CREATORS"
bgmi seen mark "Re:CREATORS" 6设置筛选条件:
bgmi list
bgmi fetch "Re:CREATORS"
# include 和 exclude 会忽略大小写。`720p` 和 `720P` 的效果是相同的
bgmi filter "Re:CREATORS" --subtitle "DHR動研字幕組,豌豆字幕组" --include 720P --exclude BIG5
bgmi fetch "Re:CREATORS"
# 删除 subtitle、include 和 exclude,添加正则匹配
bgmi filter "Re:CREATORS" --subtitle "" --include "" --exclude "" --regex "..."
bgmi filter "Re:CREATORS" --regex "(DHR動研字幕組|豌豆字幕组).*(720P)"
bgmi fetch "Re:CREATORS"默认不启用全局包含关键词,你可以设置 enable_global_include_keywords = true 启用此功能:
enable_global_include_keywords = true
global_include_keywords = ['1080']有一些默认定义的全局过滤关键词,默认会排除标题包含以下关键词的种子。可以使用 enable_global_filters = false 禁止过滤全局关键词:
enable_global_filters = true
global_filters = [
"Leopard-Raws",
"hevc",
"x265",
"c-a Raws",
"U3-Web",
]最后使用 bgmi fetch 来查看筛选的结果。
搜索番剧并下载:
bgmi search '为美好的世界献上祝福!' --regex-filter '.*动漫国字幕组.*为美好的世界献上祝福!].*720P.*'使用 --min-episode 和 --max-episode 来根据集数筛选下载结果:
bgmi search 海贼王 --min-episode 800 --max-episode 820
bgmi search 海贼王 --min-episode 800 --max-episode 820 --downloadbgmi search 命令默认不会显示重复的集数。如果要显示重复的集数来方便过滤,在命令后加上 --dupe 来显示全部搜索结果。
- 先下载所有更新中番剧的封面:
bgmi cal --cover-
根据你是否使用 nginx,设置
serve_static_files(使用 nginx 的情况下使用默认设置false,不使用的情况下设置为true)。 -
下载前端的静态文件(你可能在安装的时候已经下载过了):
bgmi install- 在
8888端口启动 BGmi HTTP 服务器:
bgmi_http --port=8888 --address=0.0.0.0参照上面启动服务器,然后访问 http://localhost:8888/。
可以让 BGmi 帮助你生成对应的 nginx 配置文件:
bgmi gen nginx.conf --server-name bgmi.whatever.com你也可以手动写一份 nginx 配置来满足更多需求(比如启用 HTTPS)。以下是一份示例:
server {
listen 80;
server_name bgmi;
autoindex on;
charset utf-8;
location /bangumi {
# ~/.bgmi/bangumi
# alias 到你的 SAVE_PATH,注意以 / 结尾
alias /path/to/bangumi/;
}
location /api {
proxy_pass http://127.0.0.1:8888;
}
location /resource {
proxy_pass http://127.0.0.1:8888;
}
location / {
# alias 到你的 BGMI_PATH/front_static/,注意以 / 结尾
alias /path/to/front_static/;
}
}macOS launchctl service controller 参照 issue #77 自行设置。
BGmi 使用 DPlayer 做为前端播放器。
如果你想要添加弹幕支持,在 DPlayer#related-projects 选择一个后端自行搭建,或者使用 DPlayer 提供的现成接口 https://api.prprpr.me/dplayer/。
然后修改配置文件:
[http]
danmaku_api_url = "https://api.prprpr.me/dplayer/"设置你的 bgmi_http,享受弹幕支援吧。
log 文件位于 {BGMI_PATH}/log/。
由于 pip 的限制,你需要手动清理 BGmi 产生的位于 ~/.bgmi 的文件。
同样,BGmi 添加到你系统的定时任务也不会被自动删除,请手动删除。
*nix:
请手动清理 crontab
Windows:
schtasks /Delete /TN 'bgmi updater'如果你对 Python 有一点了解,并且觉得还不够的话,下面是为你准备的。
你可以写一个 BGmi Script 来解析你自己想看的番剧或者美剧。BGmi 会加载你的 script,视作一个番剧来对待。你所需要做的只是继承 ScriptBase 类,然后实现特定的方法,再把你的 script 文件放到 BGMI_PATH/script 文件夹内。
Example:./tests/script_example.py
get_download_url() 返回一个 dict,以对应集数为键,对应的下载链接为值:
{
1: 'http://example.com/Bangumi/1/1.mp4',
2: 'http://example.com/Bangumi/1/2.torrent',
3: 'http://example.com/Bangumi/1/3.mp4'
}注意,scripts 只会在运行 bgmi update 或者 bgmi cal 时被加载。如果你在 Web UI 找不到对应的内容,请运行上述命令并重试。
通过扩展 bgmi.website.base.BaseWebsite 类并且实现对应的三个方法,你也可以简单地添加一个数据源。
每个方法具体的意义和返回值格式请参照每个方法对应的注释:
from typing import List, Optional
from bgmi.website.base import BaseWebsite
from bgmi.website.model import Episode, WebsiteBangumi
class DataSource(BaseWebsite):
def search_by_keyword(
self, keyword: str, count: int
) -> List[Episode]:
"""
:param keyword: search key word
:param count: how many page to fetch from website
:return: list of episode search result
"""
raise NotImplementedError
def fetch_bangumi_calendar(self) -> List[WebsiteBangumi]:
"""
return a list of all bangumi and a list of all subtitle group
list of bangumi dict:
update time should be one of ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Unknown']
"""
raise NotImplementedError
def fetch_episode_of_bangumi(
self, bangumi_id: str, max_page: int, subtitle_list: Optional[List[str]] = None
) -> List[Episode]:
"""
get all episode by bangumi id
:param bangumi_id: bangumi_id
:param subtitle_list: list of subtitle group
:param max_page: how many page you want to crawl if there is no subtitle list
:return: list of bangumi
"""
raise NotImplementedError
def fetch_single_bangumi(self, bangumi_id: str) -> WebsiteBangumi:
"""
fetch bangumi info when updating
:param bangumi_id: bangumi_id, or bangumi['keyword']
"""
# return WebsiteBangumi(keyword=bangumi_id) if website don't has a page contains episodes and infobgmi_http 内置了 MCP 服务端,允许 MCP 客户端直接管理追番订阅。
| 端点 | 方法 | 说明 |
|---|---|---|
/mcp |
POST | Streamable HTTP(Codex 等客户端) |
/mcp/sse |
GET | SSE 长连接(MCP 传输层) |
/mcp/messages |
POST | 发送 JSON-RPC 消息 |
所有请求需携带 Authorization: Bearer <token> HTTP Header,token 为 ~/.bgmi/config.toml 中 [http] 下的 admin_token。
| Tool | 说明 |
|---|---|
cal |
获取当前季度番剧日历 |
list |
列出我的订阅 |
add |
订阅番剧(支持 season 设置季度,对已订阅番剧同样有效) |
delete |
取消订阅 |
search |
搜索番剧 |
update |
检查更新并下载 |
seen |
获取已观看集数列表 |
seen_forget |
移除单集下载记录(触发重新下载) |
seen_mark |
添加单集下载记录(标记为已观看) |
download |
手动触发下载 |
download_status |
查看下载任务状态 |
get_filter |
获取过滤器配置 |
set_filter |
设置过滤器 |
postprocess |
整理已完成下载 |
set_status |
修正订阅生命周期状态 |
在你的 AI 工具(Claude Desktop/Cursor/Cline)的 MCP 配置中添加:
{
"mcpServers": {
"bgmi": {
"transport": "sse",
"url": "http://<host>:8888/mcp/sse",
"headers": {
"Authorization": "Bearer <your-admin-token>"
}
}
}
}将 <host> 替换为服务器地址,<your-admin-token> 替换为 ~/.bgmi/config.toml 中的值。
Codex 使用 Streamable HTTP,配置 URL 为 /mcp:
[mcp_servers.bgmi]
url = "http://<host>:8888/mcp"
http_headers = { "Authorization" = "Bearer <your-admin-token>" }# 启动服务
bgmi_http
# 测试连接(应返回 SSE endpoint 事件)
curl -N -H "Authorization: Bearer <token>" http://127.0.0.1:8888/mcp/sse
# 无认证应返回 401
curl http://127.0.0.1:8888/mcp/sse

