NAS 里存了一堆剧,用播放器看的时候干干净净一条弹幕都没有。

这件事别扭了我挺久,弹幕这东西,看的时候嫌吵,没了又觉得少了点什么。尤其一些老剧、经典场面,弹幕本身就是内容的一部分。

后来我找到一个开源项目,叫 LogVar 弹幕 API,Docker 一把就部署到飞牛上了,播放器直接对接,效果比我预期好很多,今天把整个过程写一下。

这东西到底干嘛的

简单说,它是一个弹幕中转服务器。

你部署好之后,播放器在播放 NAS 本地视频的时候,会自动去各大平台抓取对应剧集的弹幕,然后叠加到你的视频上。

支持的平台相当全:爱奇艺、优酷、腾讯、芒果、B站、人人影视、韩剧TV、巴哈姆特、搜狐、乐视、西瓜、埋堆堆……基本主流的都有了,还支持弹弹play 的搜索和匹配接口,也就是说播放器那边不用做额外适配,直接能对接。

最让我满意的一点是,它支持自动匹配,你播放一个本地文件,它能从文件名里提取剧名、季数、集数,然后自动去各平台搜对应的弹幕回来,不用你手动一集一集去找。

安装教程

官方提供的安装方式有好几种,本教程基于 Docker Compose 安装,如果不满足你的需求可以自行选择其他安装方式:

Pasted image 20260617090759

首先,打开文件管理,创建安装目录,我这里创建的是 danmu 文件夹:

1781658230753

然后在 danmu 目录下创建一个 .env 文件:

1781658363126

.env 文件内容较多,为了不影响阅读放置文后

可以在本地创建好然后上传。

打开 Docker,进入 Compose,点击新增项目,路径选择刚才创建的目录,创建 docker-compose.yml 粘贴下方配置:

services:
  danmu-api:
    image: logvar/danmu-api:latest
    container_name: danmu-api
    ports:
      - "9321:9321"
    volumes:
      - ./config:/app/config
      - ./.cache:/app/.cache
    restart: unless-stopped

1781658803883

点击确认启动即可。

播放器接入方式

装好之后,关键是播放器那边怎么填。

我以 SenPlayer 为例,进「设置 → 弹幕设置 → 自定义弹幕 API」,把你的 API 地址填进去:

http://飞牛的局域网IP:9321

比如 http://192.168.1.100:9321

Pasted image 20260617093039

然后播放任意视频的时候,点弹幕按钮 → 搜索弹幕,选你的弹幕 API,它会根据标题自动搜索。等几秒,选好剧集,弹幕就出来了。

4f2fa880826906216e4e69b8ade55822

UZ影视 也类似,在弹幕扩展里选「豆儿弹幕」,API 地址填你的就行。

其他兼容的播放器还有小幻、Yamby、Forward、eplayerx、FengMi 影视等等,基本市面上主流的第三方播放器都覆盖了。填法大同小异,找到自定义弹幕 API 的入口,把地址贴进去就完事。

几个值得调的配置

默认配置开箱能用,但有几个地方调一下体验会更好。

1. 弹幕去重

不同平台的弹幕经常有重复的。默认已经开了 1 分钟内合并去重,一般够用。如果你觉得还是有重复,可以把 GROUP_MINUTE 调大一点。

2. 弹幕数量限制

有些剧弹幕太多,密密麻麻反而看不清画面。设置 DANMU_LIMIT=5 就是限制在 5000 条以内,0 表示不限。

3. 顶部/底部弹幕转滚动

有些播放器不支持顶部和底部弹幕,只显示滚动的。把 CONVERT_TOP_BOTTOM_TO_SCROLL 设成 true,所有弹幕统一变成滚动样式,显示更整齐。

4. 弹幕颜色

如果你觉得全是白色的弹幕太单调,CONVERT_COLOR=color 会把白色弹幕随机换成彩色。反过来,如果你喜欢干净统一的风格,CONVERT_COLOR=white 把所有弹幕统一成白色。

5. B站 Cookie

如果你经常看 B 站有版权的番剧,填一个 B 站 Cookie(最少只需要 SESSDATA 字段),能抓到更完整的弹幕,还能解锁港澳台区域的内容。

自动匹配这件事,我得多说两句

这个项目最核心的价值,其实在自动匹配(match 接口)。

你播放一个本地文件,文件名是 甄嬛传.S01E23.mkv 这种格式,它能自动识别出这是甄嬛传第一季第 23 集,然后去各平台拉这集的弹幕回来。

甚至网盘资源的命名格式也认,比如 无忧渡.S01E01.2160p.WEB-DL.H265.DDP.5.1,照样能提取出标题和集数。

但实际用下来,自动匹配不是百分百准的。剧名太短、太常见、有同名剧的时候,可能会匹配错。这时候播放器一般支持手动搜索,你手动选一下正确的剧集就行。而且它会记住你上次的选择,下次同一部剧就优先匹配你选过的那个。

如果你的播放器支持 match 接口(SenPlayer、UZ 这些都支持),体验基本就是:播放视频 → 弹幕自动出来,中间不需要操作。

我的使用感受

说实话,装之前我以为会很折腾,结果从拉镜像到弹幕出来,前后不到十分钟。

现在我 NAS 里的剧,不管是用 SenPlayer 在 iPad 上看,还是用电视端的播放器看,弹幕都是自动加载的。遇到没匹配上的,手动搜一下就好。

有一点我觉得特别好:它是本地部署的,弹幕数据不经过任何第三方中转,全部是从各平台直接抓的。NAS 用户应该都比较在意数据不出门这件事。

也有一个现实问题。各平台的弹幕接口不是永远稳定的,有时候某个源会抽风,搜索变慢或者抓不到弹幕。但这个项目支持多源并发查询,一个源不行就自动切下一个,大部分时候不用你操心。

哪些人适合装

如果你符合以下任意一条,我觉得值得折腾一下:

  • NAS 里存了不少影视剧,经常用第三方播放器看
  • 看本地视频的时候怀念弹幕的氛围
  • 用的是 SenPlayer、UZ、小幻这类支持自定义弹幕 API 的播放器
  • 对数据隐私有要求,不想用在线平台看剧但又想要弹幕

如果你从来不看弹幕,或者你只用爱优腾官方 App 看剧(人家自带弹幕),那这个东西对你没什么意义。

.env 文件内容(按需自行修改)

# 弹幕 API 环境变量配置示例
# 复制此文件为 .env 并根据需要修改配置
#
# 配置方式说明:
# 本项目支持三种配置方式,优先级从高到低:
# 1. 系统环境变量(最高优先级)
# 2. .env 文件(低优先级)
#
# 热更新说明:
# - Docker 环境:修改宿主机的 .env 文件后,容器会自动检测并重新加载配置(无需重启容器)
# - Node.js 本地环境:修改 .env 文件后,应用会自动检测并重新加载配置(无需重启应用)
# - Cloudflare/Vercel/Netlify/Edgeone/Hugging Face Spaces:需要在平台的环境变量设置中修改,然后重新部署

# ==================== 基础配置 ====================

# API 访问令牌(用于鉴权)
# 默认值:87654321
TOKEN=87654321

# API 服务监听端口
# 默认值:9321
# 说明:本地 Node 服务会优先读取 DANMU_API_PORT;未设置时回退到 9321
# DANMU_API_PORT=9321

# 系统管理访问令牌(用于系统管理功能)
# 如果未配置此值,则无法访问系统管理功能,需要先配置后在URL中填入此token才能打开系统管理
# 默认值:空(不启用系统管理访问控制)
# ADMIN_TOKEN=

# 其他服务器地址(第三方弹幕服务器)
# 默认值:https://api.danmu.icu
OTHER_SERVER=https://api.danmu.icu

# 自定义弹幕源API地址
# 默认为空,配置后还需在SOURCE_ORDER添加custom源
# CUSTOM_SOURCE_API_URL=

# ==================== VOD 配置 ====================

# VOD 服务器配置(支持多服务器)
# 格式:名称@URL,名称@URL,...
# 示例:VOD_SERVERS=金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top
# 如果不指定名称,会自动生成 vod-1, vod-2 等名称
# 默认值:金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top
VOD_SERVERS=金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top

# VOD 服务器返回模式
# 可选值:all(返回所有站点结果)、fastest(只返回最快的站点结果)
# 默认值:fastest
# 说明:
#   - all: 搜索时会并发查询所有配置的 VOD 站点,返回所有结果(结果较多)
#   - fastest: 搜索时只返回首先响应成功的 VOD 站点结果(结果较少,避免重复)
VOD_RETURN_MODE=fastest

# VOD 服务器请求超时时间(毫秒)
# 默认值:10000(10秒)
# 建议值:5000-15000
# 说明:防止慢速或失效的采集站阻塞整个搜索过程(单个请求超时)
#       由于 fastest 模式只返回最快响应的站点,可以设置较大的超时时间给慢速站点更多机会
VOD_REQUEST_TIMEOUT=10000

# ==================== Bilibili 配置 ====================

# Bilibili Cookie(用于访问需要登录的内容)
# 默认值:空(不使用 Cookie)
# BILIBILI_COOKIE=

# 豆瓣 Cookie(用于豆瓣相关接口请求,配置后可降低豆瓣接口风控影响,提升搜索/详情获取的稳定性。填写浏览器中已登录豆瓣后的完整 Cookie 字符串即可,格式示例:`bid=xxxx; ll="118282"; ...`。如遇到豆瓣搜索不稳定、返回异常或频繁验证,建议优先补充该变量)
# 默认值:空(不使用 Cookie)
# DOUBAN_COOKIE=

# ==================== 优酷配置 ====================

# 优酷并发数(最大:16)
# 默认值:8
YOUKU_CONCURRENCY=8

# ==================== 源排序配置 ====================

# 数据源查询顺序(可选值:360, vod, tmdb, douban, tencent, youku, iqiyi, imgo, bilibili, migu, renren, hanjutv, bahamut, dandan, sohu, leshi, xigua, maiduidui, aiyifan, animeko, custom)
# 默认值:douban,360,renren,hanjutv(不包含 tencent, youku, iqiyi, imgo, bilibili, migu, sohu , leshi, xigua, maiduidui, aiyifan等)
# 如需使用腾讯源、优酷源、爱奇艺源、芒果源、B站源、搜狐源、乐视源、西瓜源、埋堆堆源,请手动添加:SOURCE_ORDER=douban,360,tencent,youku,iqiyi,imgo,bilibili,migu,renren,hanjutv,sohu,leshi,xigua,maiduidui,aiyifan
# 如需使用巴哈姆特源,请手动添加:SOURCE_ORDER=douban,360,renren,hanjutv,bahamut
# 如需使用弹弹play源,请手动添加:SOURCE_ORDER=douban,360,renren,hanjutv,dandan
# 如需使用TMDB源,请手动添加:SOURCE_ORDER=douban,360,tmdb,renren,hanjutv
SOURCE_ORDER=douban,360,renren,hanjutv

# ==================== 平台排序配置 ====================

# 平台优先级排序(用于自动匹配)
# 默认值:空(自动匹配)
# 可选值:qiyi, bilibili1, imgo, youku, qq, migu, sohu, leshi, xigua, maiduidui, aiyifan, renren, hanjutv, bahamut, dandan, animeko, custom 或 qiyi&bilibili1&imgo,dandan&animeko
# 说明:平台排序配置,可以配置自动匹配时的优选平台,当配置合并平台的时候可以指定期望的合并源
# PLATFORM_ORDER=

# ==================== 源合并配置 ====================
# 数据源合并配置(可选值:tencent, youku, iqiyi, imgo, bilibili, migu, renren, hanjutv, bahamut, dandan, sohu, leshi, xigua, maiduidui, aiyifan, animeko)
# 默认值:空
# 说明:配置后将对应源合并同时一起获取弹幕返回,允许多组、允许同时存在、允许多源,允许填单源表示保留原结果,一组中第一个为主源其余为副源,副源往主源合并,主源如果没有结果会轮替下一个作为主源循环
# 格式:源字段&源字段&源字段,源字段
# 示例:MERGE_SOURCE_PAIRS=dandan&bahamut&animeko,renren&hanjutv,renren
# MERGE_SOURCE_PAIRS=

# 合并映射表
# 默认值:空
# 说明:用于自定义源合并行为,实现强制合并源结果或阻断合并源结果。[/S季数] 与 [|路由规则] 为可选项,留空则交由程序判断。多个规则用分号(;)隔开,多段路由用逗号(,)分隔。
# 格式1(合并):副源剧名/S季数@来源 -> 主源剧名/S季数@来源 | E副源集数>E主源集数
# 格式2(阻断):副源剧名@来源 × 主源剧名@来源
# 示例:
#   - 常规合并:天气之子@bilibili -> 天气之子@dandan
#   - 多集路由:我推的孩子/S01@bahamut -> 我推的孩子/S03@dandan | E25~E35>E25~E35
#   - 阻断合并:辉夜大小姐想让我告白?~天才们的恋爱头脑战~(2020)@bilibili × 辉夜大小姐想让我告白~天才们的恋爱头脑战~ OVA(2021)【OVA】@dandan
# CUSTOM_MERGE_RULES=

# ==================== 剧集标题过滤 ====================

# 剧集标题过滤正则表达式(用于过滤花絮、预告等非正片内容)
# 默认值:下方完整规则
# 说明:
#   - 如果设置了此环境变量,将完全覆盖默认的过滤规则(不是增量添加)
#   - 格式:使用 | 分隔多个关键词,例如:预告|花絮|特辑|番外
#   - 可以直接修改下方规则,按需增删关键词
# 示例:只过滤预告和花絮
#   EPISODE_TITLE_FILTER=预告|花絮
EPISODE_TITLE_FILTER=(特别|惊喜|纳凉)?企划(?!(书|案|部))|合伙人手记|超前(营业|vlog)?|速览|vlog|(?<!(Chain|Chemical|Nuclear|连锁|化学|核|生化|生理|应激))reaction|(?<!(单))纯享|加更(版|篇)?|抢先(看|版|集|篇)?|(?<!(被|争|谁))抢[先鲜](?!(一步|手|攻|了|告|言|机|话))|抢鲜|预告(?!(函|信|书|犯))|(?<!(死亡|恐怖|灵异|怪谈))花絮(独家)?|(?<!(一|直))直拍|(制作|拍摄|幕后|花絮|未播|独家|演员|导演|主创|杀青|探班|收官|开播|先导|彩蛋|NG|回顾|高光|个人|主创)特辑|(?<!(行动|计划|游戏|任务|危机|神秘|黄金))彩蛋|(?<!(嫌疑人|证人|家属|律师|警方|凶手|死者))专访|(?<!(证人))采访(?!(吸血鬼|鬼))|(正式|角色|先导|概念|首曝|定档|剧情|动画|宣传|主题曲|印象)[\s\.]*[PpPp][VvVv]|(?<!(退居|回归|走向|转战|隐身|藏身|的))幕后(?!(主谋|主使|黑手|真凶|玩家|老板|金主|英雄|功臣|推手|大佬|操纵|交易|策划|博弈|BOSS|真相))(故事|花絮|独家)?|直播(陪看|回顾)?|直播(?!(.*(事件|杀人|自杀|谋杀|犯罪|现场|游戏|挑战)))|未播(片段)?|衍生(?!(品|物|兽))|番外(?!(地|人))|会员(专享|加长|尊享|专属|版)?|(?<!(鸦|雪|纸|相|照|图|名|大))片花|(?<!(提取|吸收|生命|魔法|修护|美白))精华|看点|速看|解读(?!.*(密文|密码|密电|电报|档案|书信|遗书|碑文|代码|信号|暗号|讯息|谜题|人心|唇语|真相|谜团|梦境))|(?<!(案情|人生|死前|历史|世纪))回顾|影评|解说|吐槽|(?<!(年终|季度|库存|资产|物资|财务|收获|战利))盘点|拍摄花絮|制作花絮|幕后花絮|未播花絮|独家花絮|花絮特辑|先导预告|终极预告|正式预告|官方预告|彩蛋片段|删减片段|未播片段|番外彩蛋|精彩片段|精彩看点|精彩集锦|看点解析|看点预告|NG镜头|NG花絮|番外篇|番外特辑|制作特辑|拍摄特辑|幕后特辑|导演特辑|演员特辑|片尾曲|(?<!(生命|生活|情感|爱情|一段|小|意外))插曲|高光回顾|背景音乐|OST|音乐MV|歌曲MV|前季回顾|剧情回顾|往期回顾|内容总结|剧情盘点|精选合集|剪辑合集|混剪视频|独家专访|演员访谈|导演访谈|主创访谈|媒体采访|发布会采访|陪看(记)?|试看版|短剧|精编|(?<!(Love|Disney|One|C|Note|S\d+|\+|&|\s))Plus|独家版|(?<!(导演|加长|周年))特别版(?!(图|画))|短片|(?<!(新闻|紧急|临时|召开|破坏|大闹|澄清|道歉|新品|产品|事故))发布会|解忧局|走心局|火锅局|巅峰时刻|坞里都知道|福持目标坞民|福利(?!(院|会|主义|课))篇|(福利|加更|番外|彩蛋|衍生|特别|收官|游戏|整蛊|日常)篇|独家(?!(记忆|试爱|报道|秘方|占有|宠爱|恩宠))|.{2,}(?<!(市|分|警|总|省|卫|药|政|监|结|大|开|破|布|僵|困|骗|赌|胜|败|定|乱|危|迷|谜|入|搅|设|中|残|平|和|终|变|对|安|做|书|画|察|务|案|通|信|育|商|象|源|业|冰))局(?!(长|座|势|面|部|内|外|中|限|促|气))|(?<!(重症|隔离|实验|心理|审讯|单向|术后))观察室|上班那点事儿|周top|赛段|VLOG|(?<!(大案|要案|刑侦|侦查|破案|档案|风云|历史|战争|探案|自然|人文|科学|医学|地理|宇宙|赛事|世界杯|奥运))全纪录|开播|先导|总宣|展演|集锦|旅行日记|精彩分享|剧情揭秘(?!(者|人))|(?:^|】\s*|\]\s*)(?:[SC]|SP|OP|ED|PV)\d+(?:[\s::\.\-]|$)
# ==================== 屏蔽词配置 ====================
# 屏蔽词列表(用于过滤弹幕内容)
# 默认值:空
# BLOCKED_WORDS=

# ==================== IP 黑名单配置 ====================

# IP 黑名单列表(命中则拒绝请求)
# 默认值:空
# 说明:支持逗号/分号/换行分隔;支持使用 /regex/ 或 /regex/i 形式的正则;支持 IPv4/IPv6 CIDR
# 示例:IP_BLACKLIST=192.168.1.10,10.0.0.0/24,2001:db8::/64,/^203\.0\.113\./
# IP_BLACKLIST=

# ==================== 弹幕去重配置 ====================

# 分钟内合并去重(最大值:30,0 表示不去重)
# 默认值:1
GROUP_MINUTE=1

# ==================== 限制弹幕总数 ====================

# 等间隔采样限制弹幕总数(单位为k,即千:默认 0,表示不限制弹幕数)
# 默认值:0
DANMU_LIMIT=0

# ==================== 弹幕转换配置 ====================

# 是否将顶部和底部弹幕转换为浮动弹幕
# 默认值:false(不转换)
# 说明:启用后,顶部弹幕(ct=5)和底部弹幕(ct=4)会被转换为浮动弹幕(ct=1)
# 可选值:true, false
CONVERT_TOP_BOTTOM_TO_SCROLL=false

# 弹幕转换颜色配置
# 默认值:default(不转换)
# 说明:default 模式不转换,white 模式将所有非白色的弹幕颜色转换为纯白色,color 模式将所有白色弹幕转换为随机颜色(包含白色)
# 可选值:default, white, color
CONVERT_COLOR=default

# 自定义颜色池(CONVERT_COLOR为color时生效)
# 默认值:空(使用内置默认颜色池:白、红、橙、黄、绿、青、蓝、紫、粉)
# 说明:格式为十进制颜色值逗号分隔,例如 16711680 表示红色(即 #FF0000)
# 示例:16711680,65280,255,16776960
COLOR_POOL=

# 弹幕简繁体转换设置:default(默认不转换)、simplified(繁转简)、traditional(简转繁)
# 默认值:default(不转换)
# 可选值:default, simplified, traditional
DANMU_SIMPLIFIED_TRADITIONAL=default

# 弹幕时间偏移配置
# 格式:剧名:秒 或 剧名/季:秒 或 剧名/季/集:秒,支持指定来源:剧名@来源:秒 或 剧名/季@来源1&来源2:秒(不指定来源则对所有来源生效)
# 正数表示弹幕延后(向右),负数表示弹幕提前(向左),多条用逗号分隔
# 支持百分比模式:在路径或来源末尾追加 %,如 东方/S03/E02@tencent%:11
# 百分比模式会按公式:调整后时间 = 原时间 * (视频时长 + 偏移秒数) / 视频时长
# 示例:overlord/S01:90,re-zero/S02@bilibili:120,re-zero/S02/E03@dandan&bilibili:10,东方/S03/E02@tencent%:11
# 默认值:空
DANMU_OFFSET=

# 弹幕点赞数显示开关
# 默认值:true(开启)
# 说明:开启后会在弹幕内容后显示点赞数标记,≥5 才显示,避免低赞干扰
# 可选值:true, false
LIKE_SWITCH=true

# ==================== 弹幕推送配置 ====================

# 弹幕推送地址
# 默认值:空
# 说明:如果设置了此值,在弹幕推送页面的推送地址输入框里会默认填上该地址
# 示例:http://127.0.0.1:9978/action?do=refresh&type=danmaku&path=
DANMU_PUSH_URL=http://127.0.0.1:9978/action?do=refresh&type=danmaku&path=

# ==================== 弹幕输出格式配置 ====================

# 弹幕输出格式(全局默认格式)
# 默认值:json
# 可选值:json, xml
# 说明:
#   - json: 返回 JSON 格式的弹幕数据(默认)
#   - xml: 返回 XML 格式的弹幕数据(兼容弹弹play等客户端)
# 注意:可通过 API 查询参数 ?format=xml 或 ?format=json 覆盖此设置
# 示例:GET /api/v2/comment/10001?format=xml
DANMU_OUTPUT_FORMAT=json

# ==================== 限流配置 ====================

# API 限流:1分钟内同一IP最大请求次数
# 默认值:3(1分钟内最多3次请求)
# 设置为 0 表示不限流
RATE_LIMIT_MAX_REQUESTS=3

# ==================== 集标题过滤开关 ====================

# 控制手动搜索的时候是否根据ANIME_TITLE_FILTER进行剧名过滤以及根据EPISODE_TITLE_FILTER进行集标题过滤
# 默认值:false(禁用)
# 说明:GET /api/v2/bangumi/{id} 和 GET /api/v2/search/anime 接口会过滤掉预告、花絮等特殊集
# 如需启用过滤,设置为 true
# 可选值:true, false
ENABLE_ANIME_EPISODE_FILTER=false

# ==================== 搜索匹配模式 ====================

# 是否启用严格标题匹配模式
# 默认值:false(宽松模糊匹配)
# 说明:
#   - false(默认): 模糊匹配,只要标题包含搜索词即可(例如搜索"遮天"会匹配"古惑仔3之只手遮天")
#   - true: 严格匹配,只匹配标题开头或完全匹配(例如搜索"遮天"只匹配"遮天"、"遮天 第一季"等)
# 可选值:true, false
STRICT_TITLE_MATCH=false

# 是否在match自动匹配时将外语标题转换成中文标题,适用于网盘没有刮削的资源
# 默认值:false(不转换)
# 说明:需配合TMDB_API_KEY使用
# 可选值:true, false
# TITLE_TO_CHINESE=false

# 是否启用 Bangumi Data 加速匹配
# 默认值:false(关闭)
# 说明:
#   - 开启后将动画元数据缓存至本地或内存中给源调用,提升动画源的检索与匹配速度并解锁隐藏/区域番剧。
#   - 本地和Docker部署使用时请先挂载.cache目录获得最佳体验,云部署使用时会将数据缓存至临时内存中如果体验不佳请关闭。
# 可选值:true, false
USE_BANGUMI_DATA=false

# ==================== 代理配置 ====================

# 代理/反代地址(用于访问受限资源)
# 默认值:空(不使用代理/反代)
# 格式:
#   - 设置为代理为 http://proxy-server:port 或 https://proxy-server:port 
#   - 设置为万能反代为 @http://proxy-server:port 或 @https://proxy-server
#   - 设置为巴哈反代为 bahamut@http://proxy-server:port 或 bahamut@https://proxy-server
#   - 设置为TMDB反代为 tmdb@http://proxy-server:port 或 tmdb@https://proxy-server
#   - 设置为bilibili反代为 bilibili@http://proxy-server:port 或 bilibili@https://proxy-server
#   - 设置为animeko反代为 animeko@http://proxy-server:port 或 animeko@https://proxy-server
# 说明:目前只对巴哈姆特、TMDB API、bilibili、animeko生效
#      如果使用 Docker 部署并且访问不了 bahamut / animeko 源或 TMDB API ,请配置代理/反代地址(animeko 也可通过开启 Bangumi Data 解决)
#      如果想启用B站港澳台番剧的弹幕搜索与获取请配置反代/解析服务器地址
#      反代教程参考:https://github.com/wan0ge/bahamut-api-proxy
# PROXY_URL=

# ==================== TMDB 配置 ====================

# TMDB API Key(用于巴哈姆特源的译名转换)
# 默认值:空(不使用 TMDB)
# 说明:配置后并行从 TMDB 获取日语原名搜索巴哈
#       如果TMDB条目类型不是动画或制作地区不是jp则不会进行巴哈搜索
#       可以解决巴哈译名不同导致的搜索无结果问题(例如:间谍过家家 vs 間諜家家酒)
#       获取方法参考:https://www.ugnas.com/tutorial-detail/id-226.html
# TMDB_API_KEY=

# ==================== 日志配置 ====================

# 日志级别(可选值:error, warn, info)
# 默认值:info
# 说明:
#   - error: 仅显示错误日志
#   - warn: 显示错误和警告日志
#   - info: 显示所有日志(包括详细的调试信息)
# 建议:生产环境使用 warn,开发/调试时使用 info
LOG_LEVEL=info

# ==================== 缓存配置 ====================

# 搜索结果缓存时间(分钟)
# 默认值:3
# 说明:避免短期内重复的不必要 API 请求,同时保证获取最新的结果列表
# 可根据需要调整:Vercel/Cloudflare 建议 1-5 分钟,Docker 可设置 5-30 分钟
# 设置为 0 表示不缓存
SEARCH_CACHE_MINUTES=3

# 弹幕缓存时间(分钟)
# 默认值:3
# 说明:弹幕数据的缓存时间,独立于搜索结果缓存
# 可根据需要调整
# 设置为 0 表示不缓存
COMMENT_CACHE_MINUTES=3

# 是否记住手动选择结果
# 默认值:true
# 说明:是否记住手动选择结果,用于match自动匹配时优选上次的选择
# 用于存储查询关键字上次选择的 animeId,下次 match 自动匹配时优先选择该 anime
REMEMBER_LAST_SELECT=true

# 用户偏好记忆缓存大小限制
# 默认值:100
# 说明:lastSelectMap 最多保存的条目数,超过限制时删除最早的条目(FIFO)
# 用于存储查询关键字上次选择的 animeId,下次 match 自动匹配时优先选择该 anime
MAX_LAST_SELECT_MAP=100

# 动漫标题缓存最大数量
# 默认值:100
# 说明:缓存最多保存的anime条目数,超过限制时删除最早的条目(FIFO)
# 最小值100,最大值1000
MAX_ANIMES=100

# Bangumi Data 缓存有效期(天)
# 默认值:7
# 说明:指定 Bangumi Data 数据有效期,超过有效期后会下载更新,设置0则每次请求时强制异步更新
BANGUMI_DATA_CACHE_DAYS=7

# ==================== Redis 配置(Upstash)====================

# Upstash Redis REST URL(用于缓存)
# 默认值:空(不使用 Redis)
# UPSTASH_REDIS_REST_URL=

# Upstash Redis REST Token
# 默认值:空
# UPSTASH_REDIS_REST_TOKEN=

# ==================== 本地 Redis 配置 ====================

# 本地 Redis 连接 URL(用于本地缓存存储)
# 格式:redis://:password@127.0.0.1:6379/0
# 默认值:空(不使用本地 Redis)
# LOCAL_REDIS_URL=

# ==================== 部署平台API接口信息 配置 ====================

# 部署账号ID,调用部署服务API需要,配置后可使用UI界面配置服务
# Hugging Face Spaces 填 Space 所属用户名或组织名
# 默认值:空
#DEPLOY_PLATFROM_ACCOUNT=

# 部署项目名称,调用部署服务API需要,配置后可使用UI界面配置服务
# Hugging Face Spaces 填 Space 名称
# 默认值:空
#DEPLOY_PLATFROM_PROJECT=

# 部署平台token,调用部署服务API需要,配置后可使用UI界面配置服务
# Hugging Face Spaces 填具备目标 Space 写入权限的 User Access Token
# 默认值:空
#DEPLOY_PLATFROM_TOKEN=

# 在建立 HTTPS 连接时是否验证服务器的 SSL/TLS 证书,0表示忽略
# 默认值:1
# NODE_TLS_REJECT_UNAUTHORIZED=1

# ==================== 标题映射表配置 ====================

# 标题映射表(用于自动匹配时替换标题进行搜索)
# 格式:原始标题->映射标题;原始标题->映射标题;...
# 示例:TITLE_MAPPING_TABLE: "唐朝诡事录->唐朝诡事录之西行;国色芳华->锦绣芳华"
# 默认值:空(不启用标题映射)
TITLE_MAPPING_TABLE=

# 是否在搜索时将繁体剧名标题自动转换为简体,适用于繁体标题搜索
# 默认值:false(不转换)
# 可选值:true, false
ANIME_TITLE_SIMPLIFIED=false

# ==================== 剧名过滤配置 ====================

# 剧名过滤规则(用于过滤不需要的剧集),需开启ENABLE_ANIME_EPISODE_FILTER
# 默认值:空(不过滤)
# 说明:使用 | 分隔多个关键词,例如:广告|预告|无关剧名
ANIME_TITLE_FILTER=

# ==================== AI 配置 ====================

# AI服务的基础URL地址,用于配置AI相关功能的API端点
# 默认值:https://api.openai.com/v1
# AI_BASE_URL=

# AI模型名称,指定使用的AI模型
# 默认值:gpt-4o
# AI_MODEL=

# AI服务的API密钥,用于身份验证
# 默认值:空(不使用AI功能)
# AI_API_KEY=

# AI匹配提示词,用于自定义AI匹配行为
# 默认值:空(使用默认提示词)
# AI_MATCH_PROMPT=

项目地址

GitHub:https://github.com/huangxd-/danmu_api