跳转到内容

配置参考 ​

文档首页 · 使用指南 · 常见问题

不确定某个设置该怎么选时,先看 处理方式组合。本页用于查字段,不必从头填完。

所有设置都能在管理台修改,保存后约 1 秒生效(个别项注明需要重启主进程)。本页是完整的字段说明,日常使用不需要逐项阅读,遇到具体问题时按目录查找即可。

设置分四类:

类别存放位置在哪里改
系统配置data/config.yaml 的 system:管理台「设置」各页
插件配置data/config.yaml 的 plugins.<插件名>:enabled 开关与该插件的设置管理台「插件」页,每个插件一张卡片
密钥data/secrets.json(权限 600,不进配置文件)管理台「设置」:只显示是否已设置,可替换或清除,读不回原值
固定,不可配置代码常量不提供配置项,见 运行文件位置

管理台按页保存,原子写入 data/config.yaml;也可以直接编辑这个文件,运行中的 Worker 约 1 秒内采用新配置。保存时会核对读取时的配置版本,期间被其他页面或进程改过就拒绝保存,重新加载后再改。文件改坏时继续使用上一个有效版本,总览与设置页显示出错的文件和原因;这期间管理台不能保存(不会覆盖你的文件),修正文件后恢复。完整示例见 config.example.yaml。

所有字段都有默认值,下表只列默认值和含义;sources[] 中的条目可覆盖 defaults 里的任何字段。

yaml
system:
  save_dirs: {电影: "123", 剧集: "456", 默认: "0"}
  defaults: {approval_mode: manual, save_to: 默认}
  sources: [{bot: "@some_bot"}]
  llm: {base_url: "", model: gpt-4o-mini}
  # …其余系统配置
plugins:
  organizer: {enabled: true, conflict: manual, naming: {...}}
  daily_report: {enabled: true, narrative: true}
  # …其余插件

系统配置(system) ​

目录与来源(save_dirs / sources / providers) ​

字段默认说明
save_dirs—目录别名 → 115 目录 CID(十进制字符串)。必须至少有一个;0 表示根目录
sources[].bot—要监听的 @username 或数字 ID,不区分大小写;也可以写成列表(如 ["@a", "@b"]),列表里的来源共用这张卡片的设置。一个来源只能出现在一张卡片里
sources[].*同 defaults来源级覆盖:确认方式、保存目录、解析器、过滤规则、偏好等
providers.sourcetelegram消息源 Provider
providers.notify[console]通知渠道列表;console 在配置了控制 Bot 时发到 Telegram,否则写日志

识别与决策(defaults / sources[]) ​

字段默认说明
approval_modemanual确认方式:manual 人工确认,每条符合要求的资源都等你确认;auto AI 处理,识别与规则都通过就直接转存,低置信度、TMDB 未匹配、LLM 降级等拿不准的仍转人工
bot_notifytrueBot 通知,与确认方式无关:推送审批卡片(可在 Telegram 直接确认)与入库通知;关闭后在管理台「待审批」处理,转存或整理出问题的提醒照常发送
subscriptions_onlyfalse仅处理订阅:开启后,未匹配到有效订阅的资源直接忽略,不进入待审批。全局默认在「基础 → 默认处理方式」设置,来源卡片可单独开关;未设置时继承全局
save_to默认默认保存到的目录别名
parserllmllm 或 regex。llm 会把规则识别的结果作为参考一起交给 AI;LLM 不可用、超时重试后仍失败或输出非法时降级 regex 并强制人工确认
parse_rules无来源自己的识别规则,按字段写 Python 正则(多行模式):title、year、season、episodes、resolution、size,取第一个捕获组;episodes 逐处匹配后合并,单集用一个捕获组,区间用命名组 start 与 end,只有 end 时表示第 1 集到 end。没写或没匹配到的字段用通用规则。管理台来源卡片的「识别规则」可读取频道最近的消息,由 AI 起草并试跑
llm_response_formatjson_schema不支持结构化输出的兼容接口改为 json_object(仍做本地严格校验)
decisionsubscription放行方式:default 只按规则;subscription 在规则之上让订阅剧集的新集自动放行;llm 再按 preferences 的自然语言偏好(并参考该来源近期的批准与忽略)决定是否收藏。三种都只决定放不放行,保存位置由 save_to 与二级分类决定;识别可靠、TMDB 已匹配且消息里的集都已入库的直接跳过
preferences""例:"只要 4K 或 1080p 的国产剧和日本动画,综艺不要"。想让它变成确定性规则,用管理台「用一句话生成规则」
confidence_threshold0.5低于该值转人工。置信度由标题/类型/年份是否齐全、TMDB 是否匹配计算,不采信 LLM 自报值
episodes_fromshareshare:以分享内文件名为准,转存未入库的所有集;message:只转存消息声明的集
filters.must_have[]正文或链接必须包含其一,否则跳过(且不调用 LLM)
filters.block_keywords[]正文命中任一则跳过(且不调用 LLM)
filters.allow[]条件列表,命中任一条才收;空表示不限。条件字段 media_type(movie/tv/anime)、genre_ids(TMDB 类型 ID)、origin_country(两位代码),写法同二级分类:同一条件内为"且",逗号分隔为"或"
filters.deny[]条件列表,命中任一条就不收
filters.min_resolution不限480p / 720p / 1080p / 2160p;低于则不收,清晰度未知时转人工
forward继承全局来源级转发覆盖,见下

通过忽略与过滤检查后,无论哪种确认方式,低置信度、TMDB 已启用但无可信匹配、LLM 降级的资源都会转人工。allow / deny / min_resolution 在识别与 TMDB 补全之后按字段判断,管理台「用一句话生成规则」会把一句话偏好起草成这些规则,确认后才写入。

版本提示:「仅处理订阅」自 v1.5.0 起支持,早于 v1.5.0 的版本没有这个设置。操作示例见 使用指南,发布记录见 更新日志。

仅处理订阅与「规则 + 订阅放行」不同:后者只让已订阅的新集更容易自动转存,不排除未订阅作品;subscriptions_only: true 则先做硬性过滤,不受确认方式或放行方式影响。

  • 必须通过 TMDB 确认作品身份,并匹配订阅的季。未订阅、订阅已取消或结束、无法确认属于有效订阅的资源都直接忽略;未配置 TMDB 或匹配失败时也不会进入待审批。
  • 「仅提醒、不自动放行」的订阅仍有效;匹配后继续遵守原有的过滤、置信度、去重与审批规则,并不是一律自动转存。
  • 未指定单季的多季合集,必须每一季都有有效订阅,否则整条忽略;只确定一季时,转存范围限定为该季。
  • 仍需先识别消息并按配置进行 TMDB 匹配、分享探测,才能判断是否订阅;被忽略的消息保留任务记录与原因,不转发、不发送识别或审批通知。
  • 来源省略该字段时继承全局,显式 false 可覆盖全局 true。开关变更只影响新接收的任务,不会清理已有待审批或中止已经开始的转存;新增订阅也不会自动重放已忽略的消息。

AI 能力(ai) ​

字段默认说明
ai.examples3识别时取同一来源最近几条人工修正作为提示词示例(0–10,0 关闭)
ai.history20decision: llm 时附上同一来源最近几条人工批准与忽略(0–100,0 关闭);分享已失效、或消息里的集都已入库时的忽略不算在内。AI 的结论和理由写在任务的处理过程里
ai.assisttrue分享清单按规则无法确定要转存哪些文件时(文件名认不出集号或季号、同一季同一集多个文件、电影多个正片候选、消息只写了集数而分享跨多季),先让 AI 给方案;方案按同一套规则校验,不过才转人工
ai.advicetrue待审批附建议动作(批准 / 忽略 / 需要你看一下)与理由;动作由规则决定,AI 只负责措辞
ai.suggest_auto.min_decisions20某来源人工确认满这么多次后才评估是否建议「改为 AI 处理」
ai.suggest_auto.approve_rate0.9批准率不低于该值
ai.suggest_auto.max_correct_rate0.1被修正识别结果的比例不高于该值

建议只是提示,切换确认方式需要你在管理台确认。

版本偏好(release) ​

同一集(或同一部电影)有多个版本时,待审批的推荐版本与洗版(plugins.organizer.conflict: upgrade)都按这里比较:偏好的字幕 → 清晰度 → HDR → 偏好的音轨 → 偏好的片源 → 体积。列表顺序即优先级。

字段默认说明
release.prefer_subtitles[chs, cht]chs 简体 / cht 繁体 / eng / jpn / kor;空表示不看字幕
release.prefer_audio[]mandarin / cantonese / english / japanese / korean
release.hdranyany 不在意 / prefer 优先 HDR、杜比视界 / avoid 避开
release.prefer_sources[]remux / bluray / web-dl / webrip / hdtv / dvd

消息没写的项:推荐版本时按"不符合偏好"计;洗版会删除旧文件,用严格比较——库中文件已知符合偏好而新文件没写时不替换。

转发、审批提醒、定时 ​

字段默认说明
forward.enabledfalse识别成功后按模板转发
forward.target""转发目标(控制 Bot 需能向其发消息)
forward.template见示例可用字段 {title} {year} {resolution} {size} {link}
approval.timeout_hours24待审批超过该时长视为超时
approval.on_timeoutremindremind 提醒;skip 超时直接忽略
approval.reminderdigestdigest 把所有超时任务合并成一条汇总;card 逐条重推确认卡片
approval.max_reminders3每条最多提醒次数,之后不再提醒但仍保留在待审批;0 不限
schedule.daily_hour9每日系统事件(日报、追更巡检)发送的本地小时;进程启动时会先等停机期间补拉的消息解析完(最多 15 分钟)

AI 服务与 TMDB(llm / tmdb) ​

字段默认说明
llm.base_url空OpenAI 兼容接口地址,留空用 OpenAI 官方地址
llm.modelgpt-4o-mini模型名。管理台打开时用已保存的密钥从接口获取模型列表,只能从列表中选择(直接编辑配置文件不受限制)
llm.reasoning_effort空推理强度,随每次请求作为 reasoning_effort 发送:none / minimal / low / medium / high / xhigh / max;留空不传,由模型决定。各家支持的取值不同(如 DeepSeek 只认 low / high / xhigh / max),管理台会检测当前模型支持哪些并禁用其余选项;请求因推理强度被拒时自动去掉这个参数重发,不会让识别失败
tmdb.base_url空留空用 https://api.themoviedb.org/3;国内该域名常被 DNS 污染,可以配置网络代理,或改用官方备用域名 https://api.tmdb.org/3、自己的反向代理
tmdb.language / tmdb.timeoutzh-CN / 10TMDB 匹配语言与超时秒数

AI 接口密钥与 TMDB key 是密钥,见 密钥。改了立即生效。「设置 → AI 与 TMDB」可以用表单里当前的地址获取模型列表(OpenAI 兼容的 GET /models),并用当前的地址、模型与推理强度发一条很短的消息测试连通性,不必先保存。

已保存的密钥只发给已保存的地址:表单里的地址与已保存的不同时,要同时填写这个地址的密钥才能获取模型或测试。保存时改了 llm.base_url 或 tmdb.base_url,原来的对应密钥会一并清除,需要重新填写。

Telegram(telegram) ​

字段默认说明
telegram.owner_id空你的 Telegram 数字 ID;控制 Bot 只服务这个 ID,留空不启用控制 Bot(重启主进程生效)
telegram.backfill_limit / backfill_max_days200 / 7监听启动或断线后重新连上时,每个来源最多补拉的停机或断开期间消息条数(0 关闭)与最大消息年龄(天);首次监听的来源不导入历史
telegram.alert_after_sec120消息源断开(含还没配置或登录 Telegram)多久后告警,从断开的那一刻算起

115 请求限速(p115) ​

字段默认说明
p115.open_qps / cookie_qps / share_qps3 / 2 / 1开放平台接口、网页接口、分享与转存接口每秒最多请求数
p115.risk_cooldown_sec3600触发 115 风控(访问上限、操作频繁)后所有接口暂停的秒数。冷却期间转存与整理暂停,任务到点自动继续,不算失败、不消耗重试次数;主进程重启后接着冷却。115 说上一个操作还没执行完(如同一时间只处理一个删除)不算风控,只是这一个操作 30 秒后自动重试

115 的登录态在「设置 → 115 网盘」扫码获得,保存在 data/115_credentials.json。

网络代理(proxy) ​

国内网络连不上 Telegram、TMDB 或 AI 服务时,让它们经 HTTP 或 SOCKS5 代理连接(Clash、mihomo、v2rayN 等客户端的 HTTP 端口或混合端口都可以用)。115 的服务器在国内,始终直连。

字段默认说明
proxy.url空代理地址,如 http://192.168.1.2:7890、socks5://127.0.0.1:1080;留空不使用代理。需要认证时写成 http://用户名@地址:端口,密码是密钥 proxy_password,不写在地址里。Docker 部署时 127.0.0.1 指容器自己,代理在宿主机或局域网里的其他设备上时填它的局域网地址
proxy.telegramtrue监听、控制 Bot 与终端登录(python -m reelay.login)走代理
proxy.tmdbtrueTMDB 走代理
proxy.aitrueAI 服务走代理;用国内的 AI 服务或本地模型时可以关掉

TMDB 与 AI 服务保存后立即生效;Telegram 要重启主进程,还没连上 Telegram 时下次重试(30 秒一次)就会用上。没开代理的服务按原来的方式连接:TMDB 与 AI 仍会使用环境变量 HTTP_PROXY / HTTPS_PROXY,Telegram 直连。

「设置 → 网络代理」的「测试代理」用表单里当前的地址经代理连一次开启的服务,不必先保存:Telegram 只与数据中心建立连接,不登录;TMDB 与 AI 服务有回应就算连得上。和 AI 密钥一样,已保存的代理密码只发给已保存的地址,保存时改了 proxy.url 会清除密码。

运行参数(runtime) ​

字段默认说明
runtime.concurrency3同时处理的任务数(重启主进程生效)
runtime.log_levelINFODEBUG / INFO / WARNING / ERROR(重启主进程生效)

插件配置(plugins) ​

每个插件的设置在 plugins.<插件名> 下,enabled 是开关(不写时按插件声明的默认状态,内置插件都默认开启)。没有设置项的插件(如 tmdb_enrich、share_probe、failure_explainer)只有开关。外部插件的设置同样放在这里,见 插件开发指南。

媒体库整理(plugins.organizer) ​

转存前按目录方式决定存放位置,转存完成后按命名模板建目录、改名、移动并读回核验;两步共用一个开关。

字段默认说明
plugins.organizer.layoutcategory目录方式:category 二级分类(规则见下);media_type 按媒体类型(按 type_dirs);none 不分类,直接放在来源的保存目录下
plugins.organizer.type_dirs{movie: 电影, tv: 剧集, anime: 动漫}按媒体类型时的文件夹名(单层)。类型为动漫或题材含动画(16)的作品放进 anime;anime 留空则不单独分,按电影 / 剧集归入
plugins.organizer.naming.movie / tv见示例受限 Jinja2 路径模板,变量与 MoviePilot 的重命名格式一致:title original_title name en_name year tmdbid season episode season_episode part videoFormat videoCodec audioCodec resourceType effect edition releaseGroup fileExt(含点)original_name(原文件名);电影的季集为空;en_title season_year imdbid doubanid episode_title episode_date customization 暂为空;过滤器:default lower upper replace trim join length pad2
plugins.organizer.conflictmanual库里已有同一集 / 同一部的文件时:manual 转人工,在管理台选择删除本次转存的文件或覆盖保存;skip 保留旧文件、新文件进回收站;suffix 新文件加「 (2)」并存;upgrade 洗版——按 release 版本偏好比较,新文件更好则替换(旧文件进回收站),否则同 skip

二级分类的规则随插件发布(reelay/plugins/organizer/category.yaml),不在配置文件里,管理台只读展示。匹配方式与 MoviePilot 相同:TMDB 类型为电影的按 movie、剧集(含动漫、纪录片、综艺)按 tv,从上到下取第一个满足全部条件的分类;条件字段 genre_ids(TMDB 题材 ID)、origin_country(两位国家/地区代码)、release_year(年份,可写 2000-2010),逗号分隔为"或";没有条件的分类遇到即命中(放在最后就是兜底);作品缺少条件用到的信息时该分类不命中,都不命中时直接放在保存目录下。

分类结果(二级分类的一级,或按媒体类型的文件夹)与某个 save_dirs 别名相同时,转存根目录跟随它;否则在来源指定目录下创建完整路径。审批时(管理台、MCP)手动选择的目录优先:与分类结果不同时直接存入该目录,不再套用分类子目录;不选则按分类自动存放,待审批卡片与 Telegram 审批卡片显示网盘中的实际路径(如 /测试/剧集/国产剧集;主进程读取到目录路径之前显示「别名/分类」)。

其他插件 ​

字段默认说明
plugins.share_probe.enabledtrue只有电驴链接的消息不访问 115,按链接里的文件名与大小得出季、集、大小与版本。识别后只读查询 115 分享:过期、取消或违规的分享在待审批标为「分享无法访问」并建议忽略;消息没写集数的剧集再列出分享内容,显示实际的季、集与大小(跨多季时如「S01–S03 · 30 集」),并提前标出文件名无法识别季集等转存时会转人工的情况。同一时间只读一个分享、两次至少间隔 2 秒,单个分享最多列 20 个目录,115 风控冷却期间不读;消息没写分辨率、片源、大小时,同一次查询顺带按根目录里的视频补(文件名,或 115 识别的清晰度)
plugins.tmdb_enrich.enabledtrue识别后匹配 TMDB 补全规范元数据与海报;TMDB 的地址、语言与 key 是系统配置
plugins.episode_tracker.track_alltrue自动跟踪最近有新集入库的剧,只报告断档和 TMDB 已播未入库的新集
plugins.episode_tracker.lookback_days30自动跟踪的时间窗口
plugins.daily_report.narrativetrue配置了 AI 时,日报开头附一段 AI 按统计事实写的提醒,数字版保留

订阅与不再接收的作品 ​

订阅与「不再接收」的作品是用户数据,存在数据库(data/reelay.db)里,不在配置文件里:在管理台「追剧订阅」、Telegram(审批卡片的「追剧并转存」「不再接收」,/subs、/ignored)或 MCP 里管理,改动不会改变配置版本。

  • 剧集订阅:片名、季、总集数(可选)、TMDB ID(可选)与是否自动放行。缺集巡检从第 1 集开始检查;自动放行时,decision 为 subscription 或 llm 的来源里同一 tmdbid(没有时按 TMDB 规范片名)、同一季的新集直接转存。仍要求 TMDB 匹配、置信度达标、过滤规则无疑问、消息里的集未全部入库;消息没写季集时以读取分享(share_probe)的结果确认季,跨多季的合集不放行,消息没写季号时转存只取订阅的那一季。播完且全部入库后自动结束。
  • 不再接收的作品:片名、TMDB ID(可选)与类型(电影 / 剧集)。识别后同一 tmdbid 与类型(没有 tmdbid 时按 TMDB 规范片名)的消息直接忽略。

密钥 ​

在管理台「设置」中填写,保存即生效;页面只显示「已设置 / 未设置」。控制 Bot 的 token 改了要重启主进程;Telegram API ID / Hash 在监听连上之前填写会自动采用,连上之后再改需要重启主进程。

名称在哪一页说明
llm_api_keyAI 与 TMDBAI 接口密钥;未设置时识别降级为规则匹配并且每条都转人工。改了 llm.base_url 时自动清除
tmdb_api_keyAI 与 TMDBTMDB v3 API Key 或 v4 Read Access Token。改了 tmdb.base_url 时自动清除
telegram_api_id / telegram_api_hashTelegram个人账号的 Telegram API 凭证
control_bot_tokenTelegram控制 Bot 的 token
proxy_password网络代理代理的认证密码,proxy.url 里写了用户名时才使用。改了 proxy.url 时自动清除
web_password运行与安全管理台登录密码,只保存 PBKDF2 摘要,至少 8 个字符。第一次打开管理台时设置(局域网里用 IP 地址打开的设备也可以);设置之前,除首次设置外的接口只接受本机地址。修改或清除要先输入当前密码,修改后其他已登录的页面需要重新登录。登录会话保存在数据库里,有效期 7 天,Web 重启不影响。忘记密码时删掉 data/secrets.json 里的 web_password 一项,再打开管理台重新设置
mcp_token / mcp_readonly_token运行与安全MCP 访问令牌(读写 / 只读)。外部 Agent 在请求头 Authorization: Bearer <令牌> 里带上它访问 /mcp;只读令牌看不到写操作工具。至少 24 个字符,两个不能相同,管理台可随机生成。两个都没设置时 /mcp 关闭。与 Web 登录密码相互独立

运行文件位置 ​

以下位置固定,不提供配置项;备份或迁移时整体复制 data/ 即可(Docker 为数据卷 /app/data)。

文件说明
data/config.yaml系统配置与插件配置
data/secrets.json密钥
data/reelay.dbSQLite 数据库(勿放在网络文件系统)
data/userbot.session / data/controlbot.session个人账号与控制 Bot 的 Telegram 会话
data/115_credentials.json115 cookie 与开放平台令牌
data/reelay.log主进程日志,管理台「运行日志」读取;超过 10 MB 轮转为 reelay.log.1 … .5
data/plugins/外部扩展目录
data/eval/本地评测样本与报告

以下参数也已固定:LLM 瞬时错误重试 2 次(首次间隔 2 秒)、115 凭证探活每 5 分钟(失效暂停期间每 30 秒)、审批超时扫描每小时、115 扫码绑定 TV 设备会话、OAuth 令牌按 2 小时有效期提前 15 分钟刷新。

环境变量 ​

只有启动前就要知道、或与部署方式绑定的几项,写在 .env 里(参考 .env.example):

变量默认说明
REELAY_VERSIONlatest仅 Docker Compose:使用的镜像版本,如 1.0.0
REELAY_WEB_HOST / REELAY_WEB_PORT127.0.0.1 / 28080本机运行时管理台的监听地址(Docker 部署改 compose.yaml 的 ports)
REELAY_FORWARDED_ALLOW_IPS127.0.0.1管理台信任哪些反向代理转发的客户端地址(X-Forwarded-For),逗号分隔,* 表示全部;登录失败限流按真实客户端计数。Docker 部署时填反向代理在容器网络里的地址
REELAY_MCP_READONLY空设为 1 时 MCP 只暴露查询工具(stdio 与 HTTP 都是,HTTP 的读写令牌也降为只读)
REELAY_LOG_LEVELWARNING仅 MCP stdio(python -m reelay.mcp_server):写到 stderr 的日志级别。主进程的日志级别是系统配置 runtime.log_level
VITE_BASE_PATH/构建前端时的子路径前缀(反向代理到子路径时使用)