* fix(cache): 隔离缓存后端并优先恢复 Local Redis 查询数据 * fix(cache): 透传剧集 ID 写入失败并补充清理失败提示 - addAnime 的 ID 溢出/映射错误保留在请求级 detailStore,逐层合并后写入搜索响应 errorMessage,不再只留服务端日志 - 清缓存保存失败时提示未保存的后端仍保留清理前数据、重启后会重新加载 - 补充搜索透传与清理失败提示的回归用例 * fix(cache): 收敛剧集 ID 写入失败的提示范围并隔离诊断日志 - 诊断用的 animes 序列化移出主 try 并自带容错:历史快照里残留 links 为 null 的条目时,序列化不再把已成功的写入判成失败,也不再把 内部报错透给调用方。 - errorMessage 只在"没有结果"时承载写入失败原因,恢复与 dandanplay 既有约定一致(其余响应点均与 success:false 配对);链接解析与合并 分支恒有合成条目,不承载该提示。 - /api/v2/match 与 /api/v2/search/episodes 在无结果时透出同一原因, 补齐上一提交只覆盖搜索接口的缺口。 - 逐源隔离存储的错误合并抽为 mergeAddAnimeError,去掉重复实现。 - 测试:溢出用例拆成"无结果"与"部分成功"两个方向,新增 links 为 null 的历史快照不再拖垮后续写入用例。 * fix(cache): 限制本地 Redis 命令响应等待时间 - 初始化读取使用 5 秒响应期限,普通 GET/SET/SETEX 使用 30 秒期限 - 超时关闭对应连接并冷却 30 秒,释放在途请求;失败不更新保存 hash - 复用现有 TCP 故障测试,覆盖读取回退、并发等待、写入失败及冷却后重连 - 影响范围仅限 Local Redis 工具与测试,不新增配置或依赖 - 验证:159 项测试通过,原始故障脚本复测通过,语法检查及 Node/neutral 打包通过 * fix(cache): 收敛编号恢复并限制缓存清理等待 - 编号兜底统一在初始化结束时判断,健康计数器或 ID 不受损坏副本影响 - 剧集链接分配失败时回滚本次追加的 ID 和计数器,保留既有详情与映射 - 各后端并发清理,Redis 清理使用包含 Local Redis 建连时间的 5 秒预算 - 保留持久化失败状态与失败后端提示,普通业务沿用原超时设置 - 复用持久化和 TCP 故障用例补充回归,说明编号兜底及备份语义 * fix(cache): 修复 Upstash 收藏热切换与读取失败假成功 * fix(cache): 补齐剧集编号引用并按详情批次校正上界 * perf(cache): 复用 Local Redis 批量保存的序列化结果 * fix(cache): 阻止热切换前的收藏请求修改新库 * test(cache): 将缓存回归测试合并到主测试文件 * test(cache): 扩大 Redis 超时测试的预算压缩范围,5 个场景耗时从 ~27s 降至 ~8s - 业务命令 30s、握手 5s、批量/清理 5s 与 Upstash 5s 一并钳制到 1200ms,并新增 AbortSignal.timeout 钳制 - clear-write 假服务器慢握手停顿 3000ms 降至 600ms,保持仍慢于压缩后的命令预算 - 断言下限 4500ms 调整为 1000ms,上界收紧至 4000ms - 新增断言验证清理路径剩余预算扣除已耗连接时间(budgets 记录原始值) --------- Co-authored-by: huangxd- <649924757@qq.com>
499 lines
27 KiB
Bash
499 lines
27 KiB
Bash
# 弹幕 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
|
||
|
||
# API 对外访问协议(反向代理未传递 X-Forwarded-Proto 时使用)
|
||
# 可选值:http、https;默认值:http
|
||
# DANMU_API_PUBLIC_PROTO=https
|
||
|
||
# 系统管理访问令牌(用于系统管理功能)
|
||
# 如果未配置此值,则无法访问系统管理功能,需要先配置后在URL中填入此token才能打开系统管理
|
||
# 默认值:空(不启用系统管理访问控制)
|
||
# ADMIN_TOKEN=
|
||
|
||
# 收藏写入和管理接口是否必须使用 ADMIN_TOKEN(收藏列表始终可公开读取)
|
||
# false:自定义 TOKEN 时必须显式携带 TOKEN 或 ADMIN_TOKEN;TOKEN=87654321 时可省略
|
||
# true:无论 TOKEN 是否为默认值,都只能使用 ADMIN_TOKEN
|
||
# 默认值:false
|
||
FAVORITE_REQUIRE_ADMIN=false
|
||
|
||
# 本地弹幕上传和删除是否无需 ADMIN 权限
|
||
# false:仅 ADMIN_TOKEN 可上传和删除;true:也允许普通 TOKEN 用户上传和删除
|
||
# 默认值:false;普通 TOKEN 用户可查看已导入列表
|
||
LOCAL_DANMU_NOT_REQUIRE_ADMIN=false
|
||
|
||
# 其他服务器地址(第三方弹幕服务器)
|
||
# 默认值: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
|
||
|
||
# ==================== NipaPlay 中转弹弹play服务端配置 ====================
|
||
|
||
# 弹弹play账号(dandan 源获取弹幕使用)
|
||
# 说明:
|
||
# - 与密码同时填写后自动开启,无需额外开关
|
||
# - 开启后 dandan 源改由 NipaPlay 中转弹弹play服务端获取弹幕,并把同一请求下发的弹弹关联链接分发给对应平台源实时拉取(需开启对应源),最终弹幕为两者合并去重后的结果
|
||
# - 注意:关联链接指向的平台视频若已下架将无法通过自有链路补取;关联含巴哈姆特平台时需确保能够连通巴哈
|
||
# DANDANPLAY_ACCOUNT=
|
||
|
||
# 弹弹play密码(dandan 源获取弹幕使用)
|
||
# DANDANPLAY_PASSWORD=
|
||
|
||
# ==================== 源排序配置 ====================
|
||
|
||
# 数据源查询顺序(可选值:360, vod, tmdb, douban, tencent, youku, iqiyi, imgo, bilibili, migu, renren, hanjutv, sohu, leshi, xigua, maiduidui, aiyifan, hongguo, dandan, bahamut, animeko, custom, local)
|
||
# 默认值:douban,360,renren,hanjutv(不包含 tencent, youku, iqiyi, imgo, bilibili, migu, sohu, leshi, xigua, maiduidui, aiyifan, hongguo, dandan, bahamut, animeko, custom、local 等)
|
||
# 如需使用腾讯源、优酷源、爱奇艺源、芒果源、B站源、搜狐源、乐视源、西瓜源、埋堆堆源、爱壹帆源、红果源,请手动添加:SOURCE_ORDER=douban,360,tencent,youku,iqiyi,imgo,bilibili,migu,renren,hanjutv,sohu,leshi,xigua,maiduidui,aiyifan,hongguo
|
||
# 如需使用巴哈姆特源,请手动添加:SOURCE_ORDER=douban,360,renren,hanjutv,bahamut
|
||
# 如需使用弹弹play源,请手动添加:SOURCE_ORDER=douban,360,renren,hanjutv,dandan
|
||
# 如需使用TMDB源,请手动添加:SOURCE_ORDER=douban,360,tmdb,renren,hanjutv
|
||
# 如需使用已上传的本地弹幕,请手动添加 local 源,例如:SOURCE_ORDER=local,douban,360
|
||
SOURCE_ORDER=douban,360,renren,hanjutv
|
||
|
||
# ==================== 平台排序配置 ====================
|
||
|
||
# 平台优先级排序(用于自动匹配)
|
||
# 默认值:空(自动匹配)
|
||
# 可选值:qiyi, bilibili1, imgo, youku, qq, migu, sohu, leshi, xigua, maiduidui, aiyifan, hongguo, renren, hanjutv, dandan, bahamut, animeko, custom 或 qiyi&bilibili1&imgo,dandan&animeko
|
||
# 说明:平台排序配置,可以配置自动匹配时的优选平台,当配置合并平台的时候可以指定期望的合并源
|
||
# local 是本地弹幕源,不属于播放平台;如需启用本地弹幕,请在 SOURCE_ORDER 中添加 local
|
||
# PLATFORM_ORDER=
|
||
|
||
# ==================== 源合并配置 ====================
|
||
# 数据源合并配置(可选值:tencent, youku, iqiyi, imgo, bilibili, migu, renren, hanjutv, sohu, leshi, xigua, maiduidui, aiyifan, hongguo, dandan, bahamut, 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=
|
||
|
||
# 渐变色弹幕概率(CONVERT_COLOR为color时生效)
|
||
# 默认值:5
|
||
# 说明:白色弹幕转换为随机颜色时,按该概率(百分比)改为从渐变色带上取色;颜色随弹幕出现时间平滑流转(60秒循环),相邻弹幕颜色渐变过渡;0 表示关闭
|
||
# 可选值:0-100
|
||
GRADIENT_CHANCE=0
|
||
|
||
# 渐变色带(CONVERT_COLOR为color时生效)
|
||
# 默认值:空(使用内置默认皮肤 bilibili:B站标准粉蓝 #FB7299→#33B8FF)
|
||
# 说明:可直接填皮肤名,或填十进制颜色值逗号分隔(至少2个,相邻颜色平滑过渡)
|
||
# 皮肤预设:
|
||
# bilibili = 粉→蓝 #FB7299→#33B8FF(B站标准)
|
||
# sweet = 粉紫 #FF6B8B→#A259FF(甜美风)
|
||
# cyber = 荧光绿→天青 #00FF87→#60EFFF(电竞风)
|
||
# sunset = 金橙→珊瑚 #FFA726→#FF5252(日落风)
|
||
# ocean = 深海蓝→浅蓝 #2E3192→#1BFFFF(海洋风)
|
||
# mint = 薄荷绿 #43E97B→#38F9D7(清新风)
|
||
# rainbow = 彩虹七色(红橙黄绿青蓝紫)
|
||
# 示例:GRADIENT_COLORS=sweet 或 GRADIENT_COLORS=16711680,16776960,255
|
||
GRADIENT_COLORS=
|
||
|
||
# 弹幕简繁体转换设置: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
|
||
|
||
# ==================== 界面配置 ====================
|
||
|
||
# 管理界面主题
|
||
# 默认值:shinyo(新叶绿)
|
||
# 可选值:shinyo(新叶绿)、sakura(哔哩粉)、tianyi(天依蓝)、hatsune(初音青)、sakuragi(樱木红)、violet(罗兰紫)、amber(LCL橘)、lavender(经典默认)
|
||
UI_THEME=shinyo
|
||
|
||
# ==================== 代理配置 ====================
|
||
|
||
# 代理/反代地址(用于访问受限资源)
|
||
# 默认值:空(不使用代理/反代)
|
||
# 格式:
|
||
# - 设置为代理为 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
|
||
|
||
# 弹幕缓存最少条数
|
||
# 默认值:100
|
||
# 说明:缓存中的弹幕低于该数量时,无视缓存时间并重新获取最新弹幕
|
||
# 设置为 0 表示关闭此机制
|
||
COMMENT_CACHE_MIN_COUNT=100
|
||
|
||
# 红果短剧是否将所有集弹幕按剧集顺序合并为一集,默认关闭
|
||
HONGGUO_MERGE_ALL_EPISODES=false
|
||
|
||
# 是否记住手动选择结果
|
||
# 默认值:true
|
||
# 说明:是否记住明确手动选择的结果,用于match自动匹配时优选上次的选择
|
||
# 自动匹配后直接获取其返回结果不会写入偏好,选择不同结果时才会记录
|
||
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
|
||
|
||
# ==================== 通用文件缓存配置 ====================
|
||
|
||
# 通用文件缓存开关(Node/Docker)
|
||
# 默认值:true,需已有 .cache 目录
|
||
# 设置 false 后不读取或写入通用文件缓存,包括收藏与定时计划;已配置 Upstash 时仍可持久化
|
||
# 不影响本地弹幕文件、Bangumi Data 或 Redis
|
||
# LOCAL_CACHE_ENABLED=true
|
||
|
||
# ==================== Redis 配置(Upstash)====================
|
||
|
||
# Upstash Redis REST URL(用于缓存)
|
||
# 默认值:空(不使用 Redis)
|
||
# UPSTASH_REDIS_REST_URL=
|
||
|
||
# Upstash Redis REST Token
|
||
# 默认值:空
|
||
# UPSTASH_REDIS_REST_TOKEN=
|
||
|
||
# ==================== 本地 Redis 配置 ====================
|
||
|
||
# 本地 Redis 连接 URL(用于查询数据持久化,收藏与定时计划需使用文件缓存或 Upstash)
|
||
# 格式: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=
|
||
|
||
# 自动匹配映射表(仅作用于 POST /api/v2/match)
|
||
# 默认值:空(不启用自动匹配映射)
|
||
# 说明:多个规则用分号(;)分隔,源标题按规范化后的完整标题精确匹配,支持 S5E2 和 S05E02
|
||
# 开放映射:从源季起始集开始递增映射,但不会延伸到下一季
|
||
# 有限范围:箭头两侧都必须填写范围且长度相同,范围包含两端;范围外保持原始匹配
|
||
# 目标可使用 (年份)、【类型】和 @平台 优选结果;限定结果或映射目标不可用时会自动回退
|
||
# 优先级:当前源季的手动选择偏好 > AUTO_MATCH_MAPPING_TABLE > TITLE_MAPPING_TABLE > 普通自动匹配
|
||
# 开放映射:永生 S05E02 -> 永生 S01E58
|
||
# 有限范围:永生 S05E02~03 -> 永生 S01E58~59
|
||
# 指定结果:海贼王 S02E01 -> 航海王(1999)【动漫】 S01E62
|
||
# 指定平台:航海王 S01E01 -> 航海王 S01E01 @qiyi
|
||
AUTO_MATCH_MAPPING_TABLE=
|
||
|
||
# 是否在搜索时将繁体剧名标题自动转换为简体,适用于繁体标题搜索
|
||
# 默认值:false(不转换)
|
||
# 可选值:true, false
|
||
ANIME_TITLE_SIMPLIFIED=false
|
||
|
||
# ==================== 剧名过滤配置 ====================
|
||
|
||
# 剧名过滤规则(用于过滤不需要的剧集),需开启ENABLE_ANIME_EPISODE_FILTER
|
||
# 默认值:空(不过滤)
|
||
# 说明:使用 | 分隔多个关键词,例如:广告|预告|无关剧名
|
||
ANIME_TITLE_FILTER=
|
||
|
||
# 剧名杂音清理规则(按正则表达式清理搜索与匹配阶段的剧名杂音词,如`百花杀(真彩)`→`百花杀`)
|
||
# 默认值:下方完整规则
|
||
# 说明:
|
||
# - 如果设置了此环境变量,将完全覆盖默认规则(不是增量添加)
|
||
# - 可以直接修改下方规则,按需增删关键词
|
||
# 示例:只清理括号臻彩和真彩
|
||
# TITLE_NOISE_FILTER=[((](?:臻彩|真彩)[))]
|
||
# 设为空值可禁用
|
||
TITLE_NOISE_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=
|