项目介绍

xianer235/115-media-hub 是一个托管在 GitHub 上的开源项目,主要使用 Python 编写,目前获得 116 个 Star、17 次 Fork。

仓库全名
xianer235/115-media-hub
Star 数
116
Fork 数
17
未关闭 Issue
4

README 摘要

115 Media Hub 115 Media Hub 是一个基于 FastAPI 的媒体自动化管理面板,把多网盘转存、115 网盘 .strm 生成、TG 资源同步、影视订阅追更、文件管理(网盘浏览 / 跨盘复制 / 刮削重命名)放进同一个后台,并提供宿主机命令行客户端(cli.py),让 AI 代理或脚本无需打开网页即可完成同样的管理操作。 它适合希望直接用网盘 Cookie 驱动"生成播放链接""转存后自动刷新""按片名自动找资源""批量重命名刮削"一体化流程的场景。 本项目采用 MIT 许可证免费开源,所有功能都可以直接使用,没有付费版,也不需要购买任何授权。 如果你在别处看到「专业版」「授权码」「激活」之类的说法,那不是本项目提供的。 功能总览 模块 | 作用 | 资源中心 | 同步 TG 公开频道、接入 PanSou 盘搜、手动预览/导入资源文本,支持 magnet、ED2K、直链与…

完整内容见 GitHub 原始 README 或本页 。

常见问题

115-media-hub 用什么语言开发?

主要使用 Python 编写,目前有 116 个 Star。

如何获取 115-media-hub 的源码?

可以直接克隆仓库:git clone https://github.com/xianer235/115-media-hub.git,默认分支为 main;安装与运行步骤见仓库 README。

115-media-hub 最近还在维护吗?

仓库最近一次更新为 5 天前,当前有 4 个未关闭 Issue;Star 数为 116,可作为社区活跃度的参考。

简要分析

热度分
150
价值分
74
活跃状态
活跃
暂无主题

语言占比

CSS
Dockerfile
HTML
JavaScript
Python
Shell

README

115 Media Hub

License: MIT Release Docker Pulls Stars

115 Media Hub 是一个基于 FastAPI 的媒体自动化管理面板,把多网盘转存、115 网盘 .strm 生成、TG 资源同步、影视订阅追更、文件管理(网盘浏览 / 跨盘复制 / 刮削重命名)放进同一个后台,并提供宿主机命令行客户端(cli.py),让 AI 代理或脚本无需打开网页即可完成同样的管理操作。

它适合希望直接用网盘 Cookie 驱动"生成播放链接"“转存后自动刷新”“按片名自动找资源”"批量重命名刮削"一体化流程的场景。

本项目采用 MIT 许可证免费开源,所有功能都可以直接使用,没有付费版,也不需要购买任何授权。 如果你在别处看到「专业版」「授权码」「激活」之类的说法,那不是本项目提供的。

功能总览

模块 作用
资源中心 同步 TG 公开频道、接入 PanSou 盘搜、手动预览/导入资源文本,支持 magnet、ED2K、直链与 115/Quark/天翼/123/阿里分享入库并提交导入任务
资源推荐 Explore 筛选与资源发现,多维度筛选与快速导入
影视订阅任务 电影/剧集自动匹配资源并入库,支持多网盘 provider、周期时段调度、评分阈值、质量偏好、TMDB 绑定与追更状态
文件夹监控任务 扫描网盘目录生成 / 同步 .strm,支持手动、定时、Webhook 触发,并可按 savepath/sharetitle 局部刷新;智能补扫失败子目录;只扫描,不整理
接收夹 分类前的中转文件夹(每个网盘一份):磁力/转存/手动保存先丢进来,识别电影或剧集后按自己的整理选项搬到同盘分类目录;不是强制流程,直接推送到分类目录的用法保留
目录树任务 选择 115 文件夹后调用官方“导出目录树”接口生成树文件,自动替换旧树并对比 sha1 增量更新 .strm,支持全量重写
文件管理 网盘文件浏览与常用操作(复制 / 移动 / 重命名 / 删除 / 新建文件夹),支持跨网盘复制(复制后切到另一个网盘粘贴即可);内置 TMDB 识别绑定与批量重命名,可选接入 OpenAI 兼容大模型(DeepSeek/Qwen/OpenAI/Ollama 等)给出「AI 建议」候选,人工确认后才执行
命令行管理(CLI) 宿主机命令行客户端,通过面板 HTTP API 完成搜索/订阅/转存/监控/刮削/STRM/运维,适合 AI 代理与脚本自动化
企业微信通知推送 可对订阅成功、监控生成成功、跨盘复制(按发起方式分订阅补源/手动复制)事件推送提醒,支持机器人和应用两种通道,各事件独立开关;订阅补源补进来的集算订阅更新,两处开关同开时合并成一条汇总
115 每日签到 支持手动签到与每日定时签到,并在页面顶部展示签到状态
Web 管理后台 集中管理配置、任务、日志、版本提示,支持桌面和移动端

支持的网盘与资源来源

  • 网盘:115 / Quark(夸克) / 天翼云盘 / 123云盘 / 阿里云盘,通过 Cookie / 访问凭证驱动(115 支持内置扫码登录,阿里云盘支持内置官方 OAuth 扫码授权);115 支持分享转存、磁力离线与 .strm 生成,其余网盘以分享/链接入库为主
  • 资源来源:TG 公开频道同步、PanSou 盘搜、手动粘贴资源文本,支持 magnet、ED2K、直链与各网盘分享链接
  • 元数据:TMDB 识别绑定(可配 API Key,支持自定义 API 与图片地址)
  • 展示型链接:光鸭网盘分享链接仅在页面中识别并打标签,不提供转存/下载能力

怎么选任务

需求 推荐方式
媒体库很大、更新不频繁 目录树任务
已有固定目录,想持续补新内容 文件夹监控任务
想按影片/剧集名称自动找资源 影视订阅任务
想把 115 转存、磁力离线、刷新串起来 资源中心 + Webhook + 文件夹监控任务
想导入 Quark 分享但不生成 115 strm 刷新 资源中心或影视订阅任务的 Quark 模式
需要批量重命名刮削网盘文件 文件管理
想把一个网盘的文件搬到另一个网盘 文件管理(复制 → 切到目标网盘 → 跨网盘粘贴)或 任务 → 跨盘复制 → 新建复制

快速开始

镜像名为 xianer235/115-media-hub:latest:

services:
  115-media-hub:
    image: xianer235/115-media-hub:latest
    container_name: 115-media-hub
    restart: unless-stopped
    ports:
      - "18080:18080"
    volumes:
      - ./strm:/app/strm
      - ./config:/app/config
      - ./logs:/app/logs
    environment:
      - TZ=Asia/Shanghai

其中 ./strm 是输出给媒体服务器使用的目录,通常还需要再挂载给 Emby、Jellyfin 或 Plex;./config 和 ./logs 建议持久化保留。

启动命令:

docker compose up -d

上面是最小配置,直接改这段就够用。仓库根目录还带了一份 compose.yml,挂载路径、端口、容器名都从同目录的 .env 读取,模板见 .env.example(cp .env.example .env 后按需改),适合想换盘、换机器时只改一处。

访问地址:

  • http://服务器IP:18080

默认账号密码(Web 面板):

  • 用户名:admin
  • 密码:admin123

首次登录后,建议立刻到「参数配置」页修改后台账号密码,并配置 webhook_secret。命令行 CLI 不会使用默认口令自动登录,需显式提供凭据(见「命令行工具」)。

持久化目录

路径 说明
/app/strm 生成的 .strm 文件
/app/config/settings.json 系统配置文件
/app/config/data.db SQLite 数据库
/app/config/trees 目录树缓存和中间文件
/app/logs/task.log 目录树任务日志
/app/logs/monitor.log 文件夹监控日志
/app/logs/subscription.log 影视订阅日志

首次配置顺序

建议第一次按下面顺序配置,这样最省回头路:

  1. 配置 115 Cookie(按需再填 Quark Cookie 或其他云盘 Cookie)
  2. 配置 STRM 对外访问地址(例如 http://192.168.1.20:18080)
  3. 根据账号风控策略调整 115 API 最小间隔、目录缓存 TTL、下载链接缓存 TTL
  4. 确认 扫描后缀名 是否符合你的媒体类型
  5. 如果要提升影视订阅识别准确率,再启用 TMDB API Key
  6. 如果要使用 PanSou 盘搜,在「PanSou 盘搜」里填写服务地址;如 PanSou 开启认证,再填写账号/密码,按需填写 src / channels / plugins 并点击测试
  7. 如果服务器访问 TG / TMDB 不稳定,再补充代理设置(同一套代理配置会同时用于 TG 与 TMDB)
  8. 点击 Cookie 健康检测,确认 115 / Quark / 天翼 / 123 / 阿里 Cookie 可用
  9. 如果要自动签到 115,再开启 115 每日签到 并设置签到时间
  10. 如果要在任务成功后收到提醒,再配置「通知推送(企业微信)」并发送测试消息

推荐使用流程

方案一:先建库,再持续增量

  1. 在「参数配置」中填好 115 Cookie 与 STRM 对外访问地址(网盘前缀映射已内置:115 -> /115、Quark -> /quark、天翼 -> /tianyi、123 -> /pan123、阿里 -> /aliyun)
  2. 在「目录树任务」里点击「+ 新增目录树任务」,选择 115 文件夹后保存(树文件名可编辑;父文件夹路径前缀与排除层级由所选文件夹自动推导、只读)
  3. 点击任务卡片的“生成并同步”,官方服务器生成目录树(网盘根目录,目录树-路径段…),sha1 未变化时跳过下载/解析,变化时自动更新 .strm;需要重建树用“全量重写”,顶部“下载并生成”直接下载已存在的树文件并生成(导出超时后手动改名收尾),“同步策略”里可关闭 sha1 跳过或开启清理任务范围内的残留 STRM
  4. 再为常更新目录添加「文件夹监控任务」,用于后续补扫与过期 STRM 清理

方案二:转存完成后自动刷新

  1. 创建一个开启了 Webhook 的文件夹监控任务
  2. 让外部工具在转存完成后调用 /webhook/{任务名}
  3. 服务端收到请求后,会优先按 savepath / sharetitle 做局部刷新

方案三:自动找资源并导入网盘

  1. 在「资源中心」配置 TG 频道源,也可以在参数配置里开启 PanSou 后切到「盘搜」搜索,或手动粘贴资源文本
  2. 按目标网盘配置相应 Cookie(115 / Quark / 天翼 / 123 / 阿里)
  3. 在「影视订阅任务」中创建订阅项,并选择 provider
  4. 系统按周期匹配候选资源,并创建导入任务

方案四:批量重命名刮削

  1. 进入「文件管理」页面,浏览网盘目录
  2. 选择需要刮削的文件或文件夹
  3. 点击「识别与命名」,系统自动匹配 TMDB 信息
  4. 确认识别结果后,预览新文件名
  5. 执行批量重命名,支持回溯最近重命名记录

跨盘复制(跨网盘补源)

一句话:在 A 网盘里挑文件,直接复制进 B 网盘;和影视订阅打通后,订阅任务在自家网盘没命中时,会自动从源网盘补一份进来。

源网盘文件 ──► 取下载直链(流式读取,同时算 SHA1/MD5)
                       │
                       ├─ 目标网盘秒传命中 ──► 完成(下载一遍,上传零次)
                       └─ 未命中 ──► 分片上传 ──► 回调/complete ──► 完成
                                                              │
                                                     监控刷新 → STRM → 刮削

当前可用组合:夸克 / 115 / 阿里云盘三家两两互传(源与目标不能是同一个网盘)。所有组合(含文件夹递归复制、秒传、分片上传)均已真机端到端验证,落地文件 SHA1 与源逐字节一致;订阅补源自动链路(夸克分享 → 中转 → 复制进 115 → 自动清理中转副本)也已真机验证。命令行同样可以管理复制任务,见下方「命令行也能复制」。

能省流量的情况:源是 115 或阿里时,网盘自己就存着文件的 SHA1,不用先下载一遍就能拿去做目标端秒传探测。命中时一个字节都不下载,任务详情会写「秒传命中,未产生下载流量」。目标端是 115 时这条最灵;目标是阿里时要先读文件算 pre_hash,仍会触发下载。夸克自己给不出哈希,但下载算过一次的哈希会记 30 天备忘录,同一文件再次复制时可以直接复用。

一、准备暂存位置

跨盘复制要先把源文件下到本地再上传(秒传命中时只下载)。默认落在容器 config 卷下的 cross_copy_tmp 目录,不额外配置也能用;要把暂存放机械硬盘或 NAS,先在 compose.yml 里加一个挂载再重建容器。/app/storage 这个路径现在没有被任何功能占用,可以直接当挂载点用:

    volumes:
      # 已有三行保持不变,追加一行(左边换成你自己的大盘 / NAS 路径)
      - /Volumes/media:/app/storage     # macOS
      # - /mnt/hdd:/app/storage         # Linux / NAS

重建容器(docker compose up -d --force-recreate)后回到「参数配置 → 本地存储位置」,点「更换目录」:容器里挂载的目录会自动列出来,带剩余空间,点一下选中再保存就行,不用记容器内路径。挂的是空盘也没关系,会自动建 cross_copy_tmp 子目录。

手填也留着,但收在「扫描不到要用的目录?」折叠区里——要填容器内路径,宿主机的 /mnt/hdd 在容器里是找不到的。保存前会校验目录存在、可写、能读出剩余空间,不合格直接拒绝;如果填的目录落在容器自己的临时层(没挂宿主机磁盘),能存但会明确提示「容器重建后临时文件会丢」。复制前还会再检查一次剩余空间,不足会直接失败并提示,不会下到一半卡住。

二、手动复制一个文件

有两个入口,随便用哪个。

方法 A:在「文件管理」里就地复制(推荐,符合直觉)

  1. 进入「文件管理」,切到源网盘(当前是夸克)并进入目录,选中文件 → 点「复制」
  2. 切换顶部网盘到目标网盘(115 / 阿里云盘),进入要保存的目录
  3. 底部条会变成「跨网盘复制到此」,并提示:跨网盘需要先下载到本地再上传,大文件会慢一些
  4. 点击 → 确认框列出源网盘、目标网盘、目标目录、文件数与合计大小 → 「创建任务」
  5. 提示「已创建 N 个跨盘复制任务」,进度到「任务 → 跨盘复制」看

整个文件夹也能跨盘复制:选中文件夹(不是点进去)再粘贴即可,目标端会按原目录结构建好子目录。单个文件夹上限 2000 个文件、20 层目录,超了会直接拒绝并提示拆小,不会只复制一半。

跨网盘只支持复制,不提供移动。 移动会删掉源文件,跨盘这一路删源一旦出错没法回滚(下载成功、上传成功、删源删错任何一个环节都可能丢文件),所以跨盘时「移动」按钮会直接置灰并说明原因,旁边的「改用复制」可以一键把待移动清单转成待复制,不用重新选。复制完成后源文件仍然保留,确认没问题再回源网盘自己删。同一个网盘内的移动不受影响,照旧可用。

方法 B:从任务中心新建

  1. 打开右上角「任务」→ 切到「跨盘复制」页签 → 点「新建复制」
  2. 左栏选源网盘并进入目录,勾选要复制的文件(可多选),或勾一个文件夹;顶部会显示「已选 N 个 · 合计 xGB」,也可以「全选本页 / 清空选择」
  3. 右栏选目标网盘(115 / 阿里云盘)并进入保存目录
  4. 底部会显示「源 → 目标 · 已选 3 个文件 · 合计 2.4GB · 保存到 路径」,确认后点「开始复制」
  5. 多个文件是逐个建任务的(避免同时打目标网盘触发限流),按钮上会显示「正在创建任务 2/3…」。中途有失败会保留弹窗并写明失败原因,已成功的不会重复提交,再点一次只重试失败的那几个

任务卡片显示什么

  • 源文件:夸克网盘 · /电影/沙丘2.mkv;文件夹任务是「源文件夹 / 目标文件夹」,并标一个「文件夹」标签
  • 目标文件:115 网盘 · /云下载/电影/沙丘2.mkv
  • 进度:阶段 + 百分比 + 进度条 + 已传输 / 总大小 · 实时速度,例如 下载 42%、已下载 1.10GB / 2.61GB · 7.2MB/s;下载完成进入上传后换成 上传 65%、已上传 1.70GB / 2.61GB · 5.1MB/s。文件夹任务还会显示「文件 3/12」
  • 状态人话:排队中 / 复制中 / 已完成 / 部分完成 / 失败 / 已取消 / 已跳过;「部分完成」指文件夹里有几个文件失败但其余成功,卡片会写「共 N 个文件,M 个失败」,可以重试(已成功的会按同名同大小跳过)
  • 清记录:和「导入任务」「刮削任务」一样,右上角有「清空复制」菜单(清空已完成 / 清空失败 / 清空已结束),卡片上还有单条的「删除记录」。只删任务记录,不删网盘上的文件;正在跑或排队的任务不会被清掉。记录太多时系统也会自动只保留最近若干条。

临时文件(下到本地的部分)会不会占着磁盘

不会长期占。复制是「下载到本地暂存 → 上传 → 删掉本地那份」,任务一结束(成功、失败、取消都算)就会删掉暂存文件;只有容器被强行杀掉才可能留下半截 xcopy-*.part,由启动时和每 30 分钟一次的清理扫掉(超过 24 小时才算孤儿)。想让它落在机械硬盘/NAS 上,见上面「跨盘复制」开头的挂载说明与「参数配置 → 本地存储位置」。

三、让订阅任务自动补源

编辑订阅任务 → 「跨盘补源」分组,一个「开启跨盘补源」复选框:

开关 含义 适用
关 只用自家网盘候选 默认
开(兜底) 自家网盘没有新资源时,才从源网盘搜索并复制到本盘 大多数场景

开着的时候,自家网盘先搜到新资源走的是网盘转存(服务端秒传,不耗本地带宽);只有本盘确实没有新资源才跨盘补一份,需要先下载再上传。源网盘目前只支持夸克,保存后任务卡片会出现「补源:夸克」徽标。

补源的实际链路:订阅任务把夸克分享转存到夸克中转目录 云下载/跨盘中转/<任务名> → 列出文件按「文件名 + 大小」拿到 fid → 注册跨盘复制任务 → 复制进目标网盘。自家网盘已经转存成功时,复制任务会因「同名同大小已存在」自动跳过,这就是兜底语义,不需要额外判断。任务成功后中转目录里的那份副本会被自动删掉(只删中转副本,夸克里你自己的原文件不动)。

命令行也能复制

安装了 CLI(见「命令行工具」一节)后,跨盘复制任务可以全程命令行管理:

# 看支持哪些复制组合
.cli-venv/bin/python cli.py cross-copy capabilities

# 查源文件 ID(browse ls 的 id 列)后创建复制任务
.cli-venv/bin/python cli.py browse ls --provider quark --cid <目录ID>
.cli-venv/bin/python cli.py cross-copy create \
  --source-provider quark --target-provider 115 \
  --source-file-id <文件ID> --target-savepath "/云下载/电影"

# 看进度 / 取消 / 重试 / 删除单条记录
.cli-venv/bin/python cli.py cross-copy list
.cli-venv/bin/python cli.py cross-copy cancel --job-id 12
.cli-venv/bin/python cli.py cross-copy retry --job-id 12
.cli-venv/bin/python cli.py cross-copy delete --job-id 12

# 清空已结束记录(只删记录,不删网盘文件)
.cli-venv/bin/python cli.py cross-copy clear                  # 全部已结束
.cli-venv/bin/python cli.py cross-copy clear --scope failed   # 只清失败的

四、耗时与注意事项

  • 限速:夸克对「整文件流式下载」限得很死(真机实测非会员约 100KB/s,2.6GB 要 7 小时以上),但对 HTTP Range 分段请求按正常速度返回(同一账号同一文件实测 4~11MB/s)。所以复制引擎默认按 16MB 一段下载,2.6GB 约 4~5 分钟;段大小可用环境变量 CROSS_COPY_DOWNLOAD_SEGMENT_MB 调整(1~128)。同任务内多段并发,并发数用 CROSS_COPY_DOWNLOAD_PARALLEL 调整(默认 3,1~8;设 1 即串行)。哈希仍按整文件顺序读一遍算,并发多少都不影响复制结果的 SHA1。目标网盘的上传速度另算,秒传命中可省掉上传时间。任务在后台跑,可随时取消。
  • 秒传命中率:目标网盘已有同内容文件时命中率高;未命中就是老老实实上传,慢但会成功。
  • 不会删源文件:复制只读取源网盘。只有订阅补源自己转存到夸克中转目录的临时文件,才会在任务结束后按 cross_copy_delete_source_after 清理;文件夹任务一律不删源。
  • 文件夹复制:按原目录结构在目标端建子目录后逐个文件复制,单个失败不会中断整批,最后汇总成「部分完成」。目录太深或文件太多(2000 个 / 20 层)会在开始前直接拒绝。目标端每个子目录都要先查一遍是否已存在,目录树很深时请求数会明显变多。
  • 取消与重试(断点续传):取消或失败时断点会保留——已下载的部分不用重下,115 的分片上传也接着没传完的分片传,任务状态里会写「已保留断点,重试可续传」。断点状态存在数据库里、暂存文件在 config 卷上,重启面板不影响续传;暂存超过 24 小时没人认领会被孤儿清理删掉,那时断点作废、重试从头下载。续传前会重新核对源文件哈希,源文件换过就不敢续(免得把旧内容传上去),断点自动作废重来。夸克 / 阿里作目标时只续下载、上传仍整文件重传。
  • 只有 115 会触发监控刷新:复制进 115 的监控目录后会自动生成 STRM / 刮削;复制进其他网盘目前只完成搬运,任务详情会注明「需手动触发」。
  • 常见错误都已经翻译成人话:115 秒传限流(自动退避)、115 二次验证、夸克风控、下载链接过期(自动换链)、目标空间不足、暂存目录不可写。夸克对「网页身份」有非会员单文件下载限额(code 23018),取直链时已自动改用夸克客户端身份,大文件不会再被拦;真的被拦时会直接提示「开通会员或换来源」,不会只丢一串英文。

命令行工具(CLI)

cli.py 是运行在宿主机上的命令行客户端(不进入容器镜像),通过面板自身的 HTTP API 完成 搜索、订阅、转存、监控、刮削等操作,方便 AI 代理或脚本直接管理媒体中心,无需打开网页。

安装依赖(仅宿主机需要,与容器镜像无关):

python3 -m venv .cli-venv
.cli-venv/bin/pip install -r requirements-cli.txt

使用(登录账号密码与网页登录一致,需先设置环境变量;非交互环境未提供凭据时会直接报错):

export MH_USERNAME=admin
export MH_PASSWORD=你的面板密码
export MH_API_BASE=http://127.0.0.1:18080   # 可选,默认即本机
.cli-venv/bin/python cli.py status
.cli-venv/bin/python cli.py search "黑客帝国 4K"
.cli-venv/bin/python cli.py subscribe list

常用命令:status / version / search <关键词>|--cancel / channels sync / subscribe list|add|remove|start / jobs list|retry|cancel / scrape jobs-create|batch-preferences / cross-copy list|create|cancel|retry|delete|clear|capabilities(跨盘复制任务)/ monitor list|start|stop / tree list|create|update|delete|defaults|run|full|jobs / offline list [--page N] / sources search / daemon status|logs|restart。

  • 完整命令列表见 CLI-API-AUDIT.md;每个子命令都支持 --help 查看参数
  • 会话 Cookie 默认保存到 /tmp/.115_cookies.txt(权限 0600),可用 MH_COOKIE_FILE 覆盖
  • sources / daemon 等容器运维命令需要宿主机安装 Docker,容器名自动识别 115-media-hub / 115-media-hub-test,也可用环境变量 MH_CONTAINER 覆盖

批量整理与监控任务相关命令(0.7.1 起):

# 读取 / 设置 / 清除某网盘的批量整理偏好(文件命名方式、文件夹开关、删除广告等)
.cli-venv/bin/python cli.py scrape batch-preferences get --provider 115
.cli-venv/bin/python cli.py scrape batch-preferences set --provider 115 --options-json '{"file_name_mode":"keep"}'
.cli-venv/bin/python cli.py scrape batch-preferences clear --provider 115

# 生成重命名预览时传入命名选项(keep 保持原名 / clean 仅清理广告 / standard 标准重命名)
.cli-venv/bin/python cli.py scrape rename-plan "/影视/剧集" --file-name-mode clean --no-season-subfolder --delete-ad-files

# 创建普通监控任务(只扫描生成 STRM;整理选项已归接收夹,不再挂在监控任务上)
.cli-venv/bin/python cli.py monitor add 自存影视 --scan-path /115/自存影视 --target-path /strm/自存影视 --cron-minutes 30

scrape rename-plan 支持 --file-name-mode keep|clean|standard、--no-rename-folders、--no-season-subfolder、--include-tmdb-id、--delete-ad-files、--title-language auto|zh|en、--season、--episode-mode auto|seasonal|absolute、--preserve-file-info,或直接用 --options-json 传完整选项对象。监控任务只负责扫描生成 STRM,整理选项(文件命名方式、Season 子目录、删除广告文件等)现在配置在接收夹任务上,在面板「文件夹监控 → 接收夹」弹窗里设置。

目录树任务相关命令(0.8.0 起):

# 查看自动填充参数 / 创建任务(--folder 指定 115 文件夹路径,--name 可选)
.cli-venv/bin/python cli.py tree defaults --folder "影视库/电视剧"
.cli-venv/bin/python cli.py tree create --folder "影视库/电视剧" --name "目录树-电视剧"

# 列表 / 增量同步(run 不带 --id 时对所有任务仅做 sha1 对比更新)/ 全量重写
.cli-venv/bin/python cli.py tree list
.cli-venv/bin/python cli.py tree run --id <任务ID>
.cli-venv/bin/python cli.py tree full --id <任务ID>

Webhook 说明

Webhook 地址格式:

POST /webhook/{任务名}

普通刷新请求示例:

{
  "savepath": "/连载中",
  "sharetitle": "示例剧名",
  "delayTime": 30,
  "title": "CloudSaver 转存完成"
}

磁力导入请求示例:

{
  "savepath": "/电影",
  "magnet": "magnet:?xt=urn:btih:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "title": "示例电影",
  "delayTime": 10
}

统一落到接收夹:分类前的中转文件夹

接收夹是分类前的中转文件夹,也是可选的一个便捷入口。以前电影、电视剧各自只有一个监控目录,保存或推送时必须先想清楚这次要落到哪个分类,在油猴脚本里还得先切到对应的那条任务;现在多了接收夹,磁力、分享转存、手动保存都可以先统一丢进这里,不用每次挑分类。接收到内容后会先识别它是电影还是电视剧,再按接收夹任务自己的整理选项整理好,并移动进同一网盘的电影 / 电视剧目标文件夹;识别不准的留在接收夹并写明原因。

接收夹不是强制流程:原来的用法完全保留——给电影、电视剧各建一个监控任务,推送、转存或手动保存时直接指定那个分类目录,行为和以前一样。接收夹只是让你多一个"不想挑分类就先丢进去"的选择,两者可以同时用。

接收夹是「文件夹监控」页里的一类接收夹任务(默认名 接收,可改名),每个网盘一份:内置的「接收」保留给 115,其他网盘(夸克 / 天翼 / 123 / 阿里)点「新增接收夹」各加一份,新增时先选网盘——已被占用的网盘在下拉里禁选。接收夹任务当前一律不能删除,不想用就把「启用本任务」关掉。115 的接收夹可以用油猴脚本:请求地址填 http://IP:端口/webhook/{任务名},保存路径填接收夹本身或它的子目录(留空默认落到接收夹);下载完成后自动跑一次识别 → 整理 → 按类型搬进同盘的电影 / 电视剧目标文件夹。

  • 115 接收夹和普通监控任务共用同一个 Webhook 签名密钥:全站只有一个 webhook_secret(在「参数配置 → 后台安全管理」设置),都用它校验 X-Webhook-Token 或 X-Webhook-Ts/X-Webhook-Nonce/X-Webhook-Sign,接收夹不需要、也不支持单独配密钥;两者唯一的区别是收到请求之后的处理流程不同——普通监控任务只刷新 STRM 并生成播放文件,接收夹任务先识别、整理再按类型分发
  • Webhook 只对 115 的接收夹开放:脚本上报的保存路径按 115 根目录解析,挂在其他网盘上的接收夹在弹窗里禁止打开这个开关(连「推送地址」整块一起收起),服务端也会拒绝该地址;其他网盘的接收夹改用「立即整理并分发」或「定时执行」
  • 接收夹和扫描任务共用同一套任务模型:同一个任务列表、同一个启用开关、同一种 webhook 地址格式,只是任务类型不同;它默认启用,但 webhook 默认关闭——需要先设置上面那个共用的签名密钥才能开启(避免在没设密钥时暴露免鉴权入口)
  • 任务类型由入口决定、保存后不可更改:「接收夹整理」列表的「新增接收夹」只会建接收夹,「文件夹监控任务列表」的「新增任务」只会建目录同步任务;编辑已有任务沿用原类型。接收夹只调整它的网盘、接收目录、分发目标、整理选项与开关(改名可以,但会同时改变它的 webhook 地址)
  • 任务里要选好接收文件夹,并指定「电影 / 电视剧分发到哪个同盘目标文件夹」,目标必须和接收夹在同一网盘;没填或跨盘会直接返回 400 并写明原因
  • 「启用」关掉后,定时、webhook、导入完成、刮削变更等自动触发都会停,只保留手动运行;「定时执行」对接收夹同样生效,会周期整理并分发接收夹里的内容
  • savepath 可以留空(默认落到接收夹),也可以填接收夹本身或它的子目录;填成接收夹以外的目录会直接报错
  • savepath 统一按 115 根目录下的相对路径填写(例如 接收、接收/子目录)。面板里显示成 /115/接收 时照抄进脚本也能识别(会自动剥掉挂载前缀),但推荐只写根目录相对路径;非 115 的接收夹没有 webhook,直接在面板点「立即整理并分发」或等定时执行
  • 请求体只接受磁力链接(magnet / link_url / url / link 任一字段),鉴权方式与普通任务完全一致(X-Webhook-Token 或 X-Webhook-Ts/X-Webhook-Nonce/X-Webhook-Sign 签名)
  • 同一条磁力重复推到接收夹会返回 409(与普通导入一致的查重口径)

常用字段:

  • savepath:转存目标父目录。磁力导入场景下必填
  • sharetitle:资源文件夹名。提供后会优先做更小范围的局部刷新
  • delayTime:本次延时秒数;大于 0 时覆盖监控任务默认延时,不传或为 0 时使用任务默认延时
  • title:只用于日志展示
  • magnet / link_url / url:可选,可直接触发资源导入流程

油猴脚本任务和文件夹监控任务的关系:

  • 脚本"请求地址"必须指向已开启 Webhook 的监控任务:http://IP:端口/webhook/{任务名},后台用 {任务名} 找到要触发的文件夹监控任务
  • 如果通过域名和 HTTPS 暴露服务,脚本和网页前端应使用反代入口:https://域名/webhook/{任务名},不要把容器 HTTP 端口写成 https://IP:端口
  • 脚本"保存路径 savepath"是磁力离线下载到 115 的目标目录;普通监控任务要求它落在该任务的扫描路径内(拼上 115 挂载前缀后匹配),导入成功后才会自动刷新并生成 .strm
  • 想省掉"每次保存先选分类"时,用 115 上的接收夹任务:请求地址同样填 /webhook/{任务名},savepath 填接收夹本身或它的子目录(留空即接收夹),下载完成后自动识别、按接收夹自己的整理预设整理并移动过去(其他网盘的接收夹用不了 webhook,改用「立即整理并分发」或定时)
  • 鉴权只有一套:webhook_secret 是全局密钥,普通监控任务和接收夹任务共用,脚本里配一次即可(接收夹只是接收后的处理流程不同)
  • 脚本"延迟"是导入成功后等待几秒再刷新;填 0 或不填时使用监控任务默认延时
  • 脚本"名称"只用于 Tampermonkey 任务列表显示,不参与后台匹配

跨域调用:

  • 后端默认允许跨域预检请求,普通网页前端可以用 fetch 调用 Webhook
  • 默认允许来源为 *,不允许携带浏览器 Cookie
  • 如需收窄来源,设置环境变量 CORS_ALLOW_ORIGINS=https://example.com,https://app.example.com
  • 如需跨域携带 Cookie,必须设置具体来源,并设置 CORS_ALLOW_CREDENTIALS=1;不要和通配来源 * 混用
  • Webhook 如果暴露到公网,建议始终配置 webhook_secret

安全校验:

  • 如果 webhook_secret 留空,Webhook 不做鉴权
  • 如果已配置 webhook_secret,支持两种校验方式
  • 方式一:请求头 X-Webhook-Token: <secret>
  • 方式二:签名头 X-Webhook-Ts、X-Webhook-Nonce、X-Webhook-Sign
  • 签名基串为 {ts}.{nonce}.{body},算法为 HMAC-SHA256

浏览器辅助脚本(油猴)

仓库根目录自带油猴脚本(安装后显示为 115-media-hub助手):

  • 115-magnet-helper-webhook.user.js

它是浏览器侧工具,镜像会随服务端一起包含,并通过后台安装入口提供给 Tampermonkey。它的用途主要是:

  • 在页面里识别 magnet / torrent / 115 / 夸克分享链接并生成快捷操作
  • 按保存目录绑定不同的 Webhook 地址
  • 点磁力/torrent 链接旁的「115」后,任务选择弹窗里除推送任务外还有同级的「复制磁力链接」入口;torrent 链接会先自动转成磁力再复制,复制后弹窗保持打开,可继续选择推送任务
  • 在离线任务提交后顺手触发服务端刷新
  • 复制 115 / Quark 分享链接时保留快捷操作,不强制提交到后台
  • 在「任务管理器」里可配置「不生效的网页(排除域名)」,匹配域名下脚本不注入按钮(每行一个域名,支持带协议/端口/路径/通配符,裸域名同时匹配其子域名)

常见报错:

  • 401 Webhook 签名已被使用:同一份签名被提交了两次。服务端防重放只认一次签名,而脚本在网络超时后会自动换通道重试,所以看到这条多半意味着第一次请求其实已经受理——先到「任务中心」(或接收夹)确认是否已经收到,不要连续重推;脚本 2.7.2 起每次重试都会重新签名,且把「同一条磁力已在处理」识别为「已提交过」,不再当成失败。
  • 409 该磁力已在处理中 / 已添加过:同一条磁力 + 同一个保存路径重复提交(与普通导入一致的查重口径),属于提示而非故障。

服务端同时提供下载入口:

  • GET /userscript/magnet-helper.user.js(推荐,直接触发 Tampermonkey 安装)
  • GET /download/userscript/magnet-helper.user.js(兼容旧地址,会重定向到新地址)

iOS / iPadOS 使用

iOS 无法安装 Tampermonkey 等浏览器扩展,建议使用 App Store 的 Userscripts(开源免费):

  1. 安装并启用 Userscripts 扩展(设置 > Safari > 扩展,勾选“允许访问所有网站”);
  2. 用 Safari 打开 https://你的域名/userscript/magnet-helper.user.js,点右上角 Userscripts 图标安装;
  3. 点击任意磁力/torrent 链接旁的“115”按钮:未配置任务时直接打开任务管理器,已配置时弹出任务选择器(底部有“任务管理”入口,列表里另有“复制磁力链接”可直接复制磁力、推送与否都不影响);配置保存在脚本全局存储中,跨网站生效。

脚本已兼容 Userscripts 的异步 GM_getValue/GM_setValue;没有 GM_xmlhttpRequest 时会自动改用 fetch(后台默认开放跨域);http 页面没有 WebCrypto 时使用内置 SHA-256/HMAC 签名兜底。

常用环境变量

大多数用户不需要改环境变量,先用页面里的「参数配置」即可。下面这些适合部署时按机器性能或网络情况调整:

  • TZ:容器时区,建议 Asia/Shanghai
  • UVICORN_ACCESS_LOG:是否启用 HTTP 访问日志,默认 0;排查接口访问时可设为 1
  • UI_PUSH_DEBOUNCE_SECONDS:状态流推送合并等待秒数,默认 0.35;NAS 这类低功耗机器可适当调大
  • UI_STATUS_LOG_TAIL_LIMIT:状态流里下发的日志尾部条数,默认 160;日志很多时可适当调小
  • UI_STATUS_STREAM_LOG_TAIL_LIMIT:轮询/推送流单次下发的日志条数,默认 40
  • UI_STATUS_LOG_MEMORY_LIMIT:内存里保留的状态日志条数,默认 220;只想保留更少历史时可调小
  • STRM_PROXY_MODE:STRM 播放模式默认值,默认 redirect_direct
  • API_115_RATE_LIMIT_SECONDS:115 API 最小间隔,默认 0.35;账号风控明显时可调大
  • API_115_LIST_CACHE_TTL_SECONDS:115 目录列表缓存秒数,默认 60
  • API_115_LIST_CACHE_MAX_ROWS:115 目录列表缓存最大行数,默认 2000
  • API_115_DOWNLOAD_URL_CACHE_TTL_SECONDS:115 下载链接缓存秒数,默认 20
  • API_115_DOWNLOAD_URL_CACHE_MAX_ENTRIES:115 下载链接缓存最大条数,默认 1000
  • TG_CHANNEL_THREADS_DEFAULT:TG 同步默认线程数,默认 6;代理不稳时建议调低
  • TG_CHANNEL_SYNC_LIMIT_DEFAULT:TG 同步时每个频道默认抓取资源数,默认 10,页面配置可覆盖
  • PANSOU_SEARCH_TIMEOUT_SECONDS:PanSou 搜索请求超时秒数,默认 15
  • PANSOU_SEARCH_TOTAL_LIMIT:PanSou 搜索结果截断上限,默认 80
  • TMDB_API_BASE_URL / TMDB_IMAGE_BASE_URL:需要自定义 TMDB 访问地址时再配置
  • RESOURCE_JOB_COMPLETED_KEEP / RESOURCE_JOB_FAILED_KEEP:任务中心完成/失败记录保留上限,默认 1000 / 500
  • RESOURCE_JOB_PRUNE_INTERVAL_SECONDS:任务历史后台清理间隔秒数,默认 600(范围 60–86400)
  • CROSS_COPY_MAX_CONCURRENT:同时运行的跨盘复制任务数,默认 2(范围 1–8;排队中的任务不占名额)
  • CROSS_COPY_DOWNLOAD_SEGMENT_MB:下载分段大小(MB),默认 16(范围 1–128);夸克对整文件流式限速、对分段请求不限速,调小分段能更细地断点续传
  • CROSS_COPY_DOWNLOAD_PARALLEL:同任务内并行下载的段数,默认 3(范围 1–8);1 即串行,带宽充足时可调大

CLI 专属环境变量(见「命令行工具」):MH_USERNAME / MH_PASSWORD / MH_API_BASE / MH_COOKIE_FILE / MH_CONTAINER。

近期更新(以 version.json 为准)

  • 当前版本:0.15.12
  • 订阅补上「磁力离线」这层兜底(默认关):以前订阅只认网盘分享链接,盘搜搜到的磁力 / 电驴资源会被过滤掉——只有手动粘贴链接才会走离线下载。现在可以在设置页「PanSou 盘搜」里打开「订阅任务磁力离线兜底」:顺序固定为本盘转存 → 跨盘补源 → 磁力离线,只有前两层都没拿到缺失集时才会动 115 离线队列,一次只提交一条,开关关掉时行为和以前完全一样。
  • 挑包按「能补上几集缺集」排,不再照着发布时间随便取:缺第 5 集时,一条只含第 1 集的新包不会再排到含第 5 集的老包前面;同样覆盖几集时会选集数少的那个包,不会为了补 1 集去下整季。下完仍然只把缺的集搬进 Season NN,整包只留在中转目录按保留天数清理,不会整季堆进你的剧集目录。
  • 死种不会被反复提交:离线判定无效的链接会记下来,下一轮直接筛掉(超时、网络这类暂时性失败不算,不会误伤);盘搜坏掉、候选全部失效时也能正常兜底,并且不会因此整季重下。
  • Seerr 点播终于能一路走通:以前 Seerr 里加服务器时「Test」通不过、点播提交也常常失败——它的固定流程里有好几个动作我们没应答:密钥放在网址参数上(原来只认请求头)、PUT /movie(原来 405)、POST /command 与 GET /episode(原来 404),还有两个字段(titleSlug / folderName)我们回空值导致 Seerr 自己把请求标成失败。现在这些都补齐了,一次加完 Radarr / Sonarr 就能真正点播。
  • 电影和电视剧分开存:「后台安全管理」里从原来一个「点播默认保存目录」拆成「电影点播保存目录」和「电视剧点播保存目录」(两项都留空会回退旧配置,老用户不受影响)。剧集自动多建一层「剧名 (年份)」目录,最终是 <电视剧目录>/剧名 (年份)/Season 01/——以前所有剧的 Season 01 全挤在根目录下会互相撞名,Jellyfin / Plex 认不出来。Seerr 那边的 Root Folder 固定选 / 即可,真实落点由面板决定。
  • 点播失败不再被藏起来:TMDB 查不到影片时以前会静默用客户端传来的标题硬建一条任务,结果「点播成功」但永远搜不到资源;现在直接报错并说明原因。另外修掉了「删除点播时按名字子串匹配」会误删无关电影的问题(删 id=2 会连带删掉名字里带 2 的片子),Seerr 里点「重新搜索」现在也真的会跑一轮。
  • 订阅命中后冷却,不再一天空搜十几次:日更 / 周更剧命中新集后,自动查询会暂停到下一集播出前才恢复——以前「每 2 小时查一次」在命中之后仍然整天空转。冷却终点按 TMDB 的播出排期推算(也可以改成手动指定小时数,或直接关掉),未命中时的查询频率一点没变,及时发现新集仍然优先;只拦定时查询,手动「运行」和 Seerr 点播随时能跑。任务弹窗的「自动查询」区块可以按任务单独设置。
  • 剧集完结后自动停查:TMDB 把剧标记为已完结(Ended / Canceled)后不再定时查它,列表上打「已完结」标记、简介写「自动查询已停止,可手动运行」;集数追平不算完结(TMDB 集数常滞后,按数字停查会误杀),手动跑一次如果变回连载中会自动恢复。
  • 补源落地后自动触发监控扫描(修复不出播放文件的问题):订阅任务从夸克补进来的集落到 115 监控目录后,以前「文件夹监控」不会自己跑一轮,本地迟迟不生成播放文件(STRM),要手动点「立即扫描」才入库。现在补源落地后会自动按落点匹配监控任务、登记一次扫描——顺序是先改名再扫描,播放文件用的是整理后的文件名(如「片名 (年份) - S01E42.strm」)。整包文件夹补源同样自动触发;手动复制与其他网盘目标行为不变。落点没纳入任何监控任务时,订阅日志会写明原因。
  • Seerr / Overseerr 点播对接:让 Seerr / Jellyseerr / Overseerr 把本面板当成 Radarr(电影)/ Sonarr(剧集)服务器——家人在点播页选片,自动转成订阅任务(provider 固定 115)并立即触发全量搜索,走完整的「找资源 → 转存 → 入库 → STRM」链路。在「参数配置 → 后台安全管理」生成 API 密钥并填默认保存目录即可启用(密钥留空则接口整体关闭,不走面板登录会话);逐字段配置教程见 docs/seerr-setup-guide.md。
  • 跨盘复制重试不再被断点卡死:以前任务报「续传起始偏移未按分段边界对齐」时,点多少次重试都是同一句,只能「删除记录」从头重下。根因是断点里存的位置不在 16MB 分段边界上(最后一段上报的是「文件末尾」,而文件大小很少刚好是整数段),程序从段中间接不下去。现在会自动回退到上一个段边界接着下(最坏多重下不足一段),并把修正值写回断点,已下载的部分不用重来。
  • 补源从三档收成一个开关:编辑订阅任务里的「跨盘补源」不再是「关闭 / 兜底 / 优先跨盘」三选一,只有一个开关——开着就是兜底:自家网盘搜到新资源走网盘转存(服务端秒传、不耗本地带宽),本盘确实没有新资源才从夸克下载再上传。老的「优先跨盘」配置会自动按「开」接管,不会静默失效。
  • 补源落地后订阅状态自己跟上:任务界面上的「最近命中 / 追更进度」不再停在上一次同盘导入的旧值,「最近命中」徽章还能直接看到资源库里已保存到第几集(如「最近命中 · 3天前 · 已到 E42」)。
  • 补源成功的通知不再刷屏:补 5 集从 5 条一模一样的「跨盘复制完成」变成 1 条「订阅更新成功」汇总,写明新增哪几集、当前进度与保存路径;补源失败仍逐条发,得知道哪一集挂了。
  • 发版前先过测试,测试不过就不出镜像:每次推送都会自动跑全量单元测试与语法检查,只有测试全绿、且这次改动过 version.json,才会构建并推送镜像。以前测试写在本地的 check.sh 里、发版流水线一条都不跑,测试全红也照样出镜像 —— 现在坏版本推不上去。
  • 连续推送不会打断正在跑的镜像构建:排队中的旧测试会被最新一次取消(省时间),但已经开始构建的镜像会跑完,不会因为随后推了个文档提交就掐断在 tag 发布前。要重建镜像又不想改版本号时,可以在仓库的 Actions 页手动触发一次。
  • README 转 Word 的脚本挪到 scripts/:它是一次性手动工具、不是测试用例,以前放在 tests/ 会被忽略规则藏起来;现在默认输出到系统临时目录,不会再往仓库里落文件。
  • 补源不再把内嵌「Season 2」子目录的集误判成第一季:文件名里带 S01 前缀、但实际躺在 Season 2/ 目录下的文件,以前会落进 Season 01 污染库结构,现在按目录识别季号。
  • 手动转存报「任务失败」先核对目录再判失败:夸克状态码 3 常是部分失败、部分文件其实已落地,以前直接判失败诱导重试产生重复文件,现在先看目录里有没有文件。
  • 补源「已跳过」的任务不再反复注册:目标目录已有同名文件的任务以前每轮重复入队、日志持续膨胀,现在一并视为已处理。
  • 设置里「中转残留保留天数」填负数或 inf 这类非法值不再搞崩配置:统一回落默认值,负数也不会再被当成「关闭清理」。
  • 修掉「转存显示成功但目录里是空的」两条漏网路径:网盘偶尔只回成功、不给任务号,以前这种情况直接判完成、连目录都不查,现在改为按目标目录核对;上一版加的「未确认落地」状态也会被后台的旧恢复逻辑在 20 秒内改回「已完成」,现已隔离,未确认就一直显示「已提交」。115 这类同步接口不受影响。
  • 补源判缺在扫描失败时不再误判整季全缺:目标目录扫描失败(Cookie 失效、接口异常)以前返回空集合,被下游理解成「本盘一集都没有」,于是整季重下几十 GB;现在返回「未知」并退回按已有进度判断。退回整包转存也加了体积上限(默认 10GB,CROSS_COPY_STAGING_FALLBACK_MAX_GB 可调),超过就跳过这一轮,避免占满夸克空间。
  • 补源只补真正缺的集:跨盘补源不再「整包转存再挑」——转存这一步就只把本盘缺的几集送进夸克中转(分享里没有缺集时一次转存都不发,连中转目录都不建),散文件与整季文件夹都按集筛;判断缺哪集改用「目标目录已落盘的集集合」,本盘缺第 30 集这种中间缺也能补上,而不是只比最高集。补进来的文件会自动改成和订阅导入一致的命名(片名 (年份) - S01E42.mp4),开关沿用该订阅任务的「入库后整理」,只改文件名、不移动文件。
  • 夸克中转残留自动清理:取消或失败的任务会把中转副本留在夸克上(要留给重试续传),现在超过保留天数就会自动清(设置页可填,默认 7 天、填 0 关闭;后台每 30 分钟一轮,运行中的任务不受影响)。注意删除是把文件移进夸克回收站,配额要等回收站清空或系统回收之后才真正释放;清掉之后旧任务「重试可续传」也就不成立了。
  • 手动转存等落地再算完成:分享转存接口只返回「已受理」,现在会先等异步任务结束,再在宽限期内(默认 120 秒)轮询目标目录确认文件真的出现——确认到才标「已完成」,等满超时就写「已提交,可能稍后出现」,不再出现「显示成功但目录里找不到」。
  • 暂存目录改成点选挂载盘:设置页不再要求你手填容器内路径——它直接读取容器的 /proc/mounts,把真实挂载进来的盘列成卡片(带剩余空间),点一下选中保存;挂的是空盘会自动补 cross_copy_tmp 子目录。三层防呆:只列真实挂载点(容器临时层路径不会出现)、只在真实挂载盘下才自动建目录(填宿主机路径会被拒并告诉你怎么映射)、万一存到容器临时层会明确警告「容器重建后文件会丢」。compose.yml 的映射写法同步加了提醒:宿主机路径:容器路径 中间漏掉冒号,Docker 会当成匿名卷挂到容器里一条超长路径上,看着像成功其实文件没落到你的盘。
  • 并行分段下载 + 任务断点续传:大文件不再一段接一段排队下——同任务内多段并发拉取(默认 3 路,CROSS_COPY_DOWNLOAD_PARALLEL 可调 1~8),哈希仍按整文件顺序读一遍算,结果与串行逐位一致。任务失败或取消时保留暂存文件与断点,重试从已下载的部分接着下;上次已经下完只是上传失败的,重试直接跳过下载。115 的上传会话也会续:upload_id 与已完成分片随断点落库,重试只补没传完的分片(夸克 / 阿里作目标时只续下载,上传仍整文件重传)。续传前会重新核对源文件哈希,源文件换过就作废重来;失败与取消的任务状态都写明「已保留断点,重试可续传」。
  • 设置页两处按反馈重做:跨盘复制通知按来源拆成「订阅补源 / 手动复制」两个开关,并修掉它曾被「订阅成功」开关的渠道门禁误挡的问题(渠道是否可用与场景开关现已解耦);设置项 2b「本地存储位置」从「位置列表 + 选位置 + 填子目录」简化为单暂存目录模型(默认 config 卷下 cross_copy_tmp,旧配置自动迁移),并补上日间主题配色。
  • 跨盘复制(跨网盘补源):夸克 / 115 / 阿里云盘三家两两互传,在「文件管理」里选中文件切到目标网盘粘贴,或「任务 → 跨盘复制 → 新建复制」;整个文件夹也能复制(按原目录结构建子目录)。复制走「分段下载 → 秒传探测 → 分片上传」,命中秒传只下载不上传;任务结束自动清理本地暂存。跨网盘只支持复制不提供移动(删源无法回滚)。订阅任务新增「跨盘补源」三档模式,自家没命中时自动从夸克补一份进来、成功后清理中转副本;复制进 115 监控目录自动衔接扫描 → STRM → 刮削。任务记录支持清空与单条删除(只删记录不删网盘文件)。命令行新增 cross-copy 命令。详见「跨盘复制」一节。
  • 整理不再被 115 的排队写操作骗到:115 的 files/move、批量改名、copy 返回成功只代表「请求进了服务端队列」——同一账号上一批写任务没跑完就再发,会拿到 990019 移动[...]操作尚未执行完成 这类忙响应,旧实现直接当搬运失败,还在文件没落地时就把监控同步按成功排了一轮。现在写操作统一「忙响应退避重试(1/2/4/8 秒)+ move_proid 查进度 + 逐条回验父目录 / 名字」,没确认落地就不排 STRM 同步、也不删接收夹里的源目录(条目留在接收夹写明原因,下一轮重试;监控同步事件转 needs_reconcile 兜底补扫)。手机端「文件夹监控」页排版同步调整:两块卡片的「新增接收夹 / 新增任务」按钮回到标题行右侧、状态胶囊独占第二行,卡片简介收进标题旁的「i」弹窗并精简成一句话用途;并修掉手机软键盘把任务弹窗顶出屏幕的问题——弹窗按可视视口重新定位,停在键盘上方那半屏,标题栏不再被顶走、表单在弹窗内滚动。
  • 推广话术命名的假视频不再生成本地 STRM:文件夹监控扫描、变更同步、目录树三条生成链路都跳过「整段名字只有推广话术」的假视频(如「更多无水印高品质资源请访问」重复拼接),115 上叫 【更多无水印高品质资源请访问】….mkv 的假视频不再长出 ….mkv.strm 进媒体库——上一轮已经生成的本地 .mkv.strm 会在过期 STRM 清理里被删掉(需要该任务开着「清理过期 STRM」)。广告识别也不再只看扩展名:同一份推广话术配的 .DOC / .strm 同样识别,判断前先剥掉叠在名字后面的后缀链(.mkv.strm、.mp4.DOC)、并把裸域名(如 www.Butailing.com)算作广告残留,所以开启「整理时删除广告文件」时这些文件也会进网盘回收站。扫描日志会逐条写 跳过广告文件: …,「生成汇总」行显示「跳过文件 N(含广告 M)」。仍然不按体积判断:名字里还留着真正片名的照旧当正片(更多资源请访问官方网站.The.Matrix.1999.1080p.mkv 不受影响),即使文件很小也不删。
  • 接收夹与文件夹监控解耦:文件夹监控回归纯扫描——「扫描监控」按钮、变更同步、Webhook、定时、卡片「运行」全部只生成 / 同步 .strm,不再顺手整理、改名或移动,把已整理好的文件夹放回库里也不会再被套出多层同名目录;旧配置里的「新增资源自动整理」开关与选项在归一化时直接丢弃。自动整理只剩两个入口:接收夹负责「识别 → 整理 → 搬进同盘分类目录」,订阅负责「电视剧新集入库后原地改名」(只改文件名、不建目录、不移动;电影订阅不改名,默认开启,可关)。接收夹变成每个网盘一份:内置「接收」保留给 115,夸克 / 天翼 / 123 / 阿里在「文件夹监控」页点「新增接收夹」各加一份,新增时先选网盘(已被占用的禁选),分发目标从「监控任务名」改成同盘远程路径(如 /115/自存影视),跨盘目标直接拦下;只有 115 的接收夹、且目标落在某个目录同步任务扫描范围内时才刷新 STRM,其他网盘只搬运。接收夹的触发、状态、最近接收统计、运行 / 中断、静默窗口全部按网盘隔离——两个网盘都用 /接收 也不再互相串账,点一张卡片「立即整理」或「中断」不影响另一张。存进接收夹就一定整理:转存 / 离线任务刚返回成功但目录列表还没刷新时,按落盘宽限期(30 秒 / 每 10 秒 / 最多 3 次)重扫一次,不再出现「存进去了却没整理」。此外 Webhook 收口到只对 115 接收夹开放(其他网盘禁用开关并收起推送地址,服务端也拒绝),非 115 接收夹的「立即整理并分发」链路修好、能直接搬进同盘目标,目录选择弹窗标题跟着网盘走并支持就地「新建文件夹」。
  • 集数识别补齐「片名 + 分隔符 + 裸数字」:Renegade Immortal – 仙逆 Xian NI – 154.mkv、仙逆 - 154.mkv、仙逆 154.mp4 这类文件名现在都能解析出第 154 集——以前它们解析为「空集」,订阅分享扫描会直接把文件跳过(第 154 集永远选不中),刮削命名预览也只会显示「无法识别集数」,得手动填集数兜底。同时补上一直缺失的全角破折号 – — - 与空格分隔(旧代码只认半角 -,且只认「数字在前」)。为避免误判收窄了边界:破折号前必须是空白或中日韩文字(仙逆-154 认、X-Men-2 不认),数字必须落在文件名结尾、后面最多跟一段画质后缀,数字本身排除 1900–2099 年份与 720 / 1080 这类裸分辨率——12 Monkeys、Blade Runner 2049、Show 1080 仍然不会被当成集数(长番真到这些集号时用 第N集 写法)。订阅分享扫描、刮削命名预览、接收夹自动整理共用同一套解析,三条链路一起生效。
  • 整理不再在剧目录里重复套层:文件已经在 剧名/Season NN/ 里时,整理复用它原地整理——订阅任务按 savepath/Season NN 落盘(真实案例 115连载中/仙逆/Season 01/)后,监控的「新增资源自动刮削整理」不会再新建 仙逆 (2023)/ 把文件搬走;你手动把新集移回季目录也不会再被搬走,历史上已经套出来的目录也不会继续加深。剧名比对忽略年份写法与空格、[tmdbid-…] 与网盘追加的 (n)(仙逆 / 仙逆 (2023) / 仙逆(2023) 视为同一部);standard 命名方式只在原地改名,keep / clean 不动文件。只对「选中的是季目录」生效:选中剧目录本身并勾了「同步重命名文件夹」时,文件夹仍会改成 片名 (年份) [tmdbid-…]、文件跟着进去。注意:本版不会自动回搬已经生成的 仙逆/仙逆 (2023)/…,需要时手动整理。
  • 影视广告识别补充整句式推广话术与「伪装视频」判定:站点把广告做成 .mkv/.mp4 并用整句推广话术命名(如「更多无水印高品质资源请访问」重复拼接)时,不再被当成正片——这类名字清理后原本还剩「更多 高品质资源」,会被拿去搜 TMDB 并生成 更多(2026)[tmdbid-969681] 这种并不存在的媒体文件夹。现在识别阶段就不产出关键词,整理时按广告文件处理:默认忽略(不改名、不搬运),开启「整理时删除广告文件」才删除进网盘回收站。推广词表同时补充 无水印高品质资源 / 高品质资源 / 无水印高清资源 / 更多高清资源 / 高清资源 / 更多无水印;要求整段命中才判广告,名字里还有真正片名的照旧当正片整理(更多资源请访问官方网站.The.Matrix.1999.1080p.mkv 不受影响)。注意:本版不会自动清理此前已经生成的假媒体文件夹(如 更多(2026)[tmdbid-969681]),需要手动删除。
  • 接收夹同一部影视多版本合并与冲突隔离:接收夹里同一部影视的多个条目现在会合并进同一个媒体文件夹——文件夹撞名只保留一次改名、内容并进去;标准命名下算出同名文件的多个版本(2160p / 1080p 等)给后面的文件加 (2) 序号并存,不再因为「目标路径与本批次其他条目重复」两条都留在接收夹(真实案例:功夫女足(2026)[tmdbid-1491920] + 发行组命名的另一个版本)。冲突改为按条目隔离:某个条目自己冲突(无法识别 / 目标目录已有同名文件 / 与不同作品的路径重复)只留它自己,同批其他条目照常整理分发;内容已并进别的媒体文件夹的条目只登记「并入同部影视文件夹」并清理源空壳,不再被当成整理失败。
  • 接收夹整季包与运行记录过程:发布式整季文件夹(Show.S09.1080p…)现在会识别为单季包,按集整理到 片名 (年份) [tmdbid]/Season NN/ 并合并进已有剧集文件夹——同一部剧的多个整季包不再都撞到同一个目标文件夹而反复报计划冲突,同剧多个季包只搬运一次,源空目录自动清理;多季合集(S01-S03)暂不自动拆,留在接收夹并写明原因。季包内的广告 / NFO / 图片等非视频文件默认随季原样搬进 Season NN/(开启「删除广告文件」时删除),不再因为残留 RARBG.txt 之类的广告文本让源目录永远非空。运行记录列表补开始 / 结束时间与本次范围,每页 10 → 5 条并在列表底部增加翻页;概览新增「过程」时间线(扫描目录、STRM 生成、自动整理逐条重命名 / 移动),「已整理条目」和网盘变更明细新增「文件夹 / 单文件」类型,能看出识别的是整目录还是散文件。字幕与源信息:多语言字幕后缀不再只保留最后一个语言(chs.eng、中英、简繁英 等完整保留),Subs/<S09E01>/2_English.srt 不再按文件名里的 2_ 误挂到 E02;新增「字幕组 / 压制组」保留标签组。
  • 接收夹整理降频与运行概览优化:一轮只扫描接收夹一次,识别结果在内存中按批执行,并按电影 / 电视剧、分发目标和重命名策略分组建计划;移动 / 重命名继续按底层 100 条 / 次批量提交,避免「50 条续跑重扫」反复触发 115 限流。接收夹编辑弹窗新增「接收夹整理节流」:无新文件等待时间(默认 120 秒)、单批最多整理条目数(默认 100)、轮间暂停(默认 5 秒),连续保存会重新计时,手动「立即整理」不受等待时间限制。运行记录方面,接收夹概览新增「已整理条目」对照(原始文件夹 / 文件名 → 整理后文件夹名 + 识别来源 / 置信度),多条范围路径改为逐行展示;等待下一次整理期间点「中断」现在会立即退出。
  • 界面优化(设置页 / 监控说明 / 整理选项):设置页改成「顶部横向分区条 + 单开折叠卡片」——默认只展开当前分区,其余折叠成「序号 + 标题 + 一行状态摘要」(网盘认证 / 播放基础 / TG / PanSou / 代理 / TMDB / AI / 通知 / 安全 / 过滤词),点分区条即跳转并展开、卡片头可多开,上次看的分区用 localStorage 记住;顶部吸顶栏常驻「展开全部 / 收起全部 / 保存全部配置」,底部那条固定保存条与页面底部留白一并移除(保存仍是一次提交全部分区),AI 兼容说明、推送范围、油猴脚本说明三处长文字收进「查看说明」折叠。文件夹监控页标题下的说明(「扫描 115 网盘目录,生成或刷新本地 /strm 文件;资源导入 / Webhook 命中 savepath 时会优先局部刷新」)移到标题旁的信息按钮弹窗,分「在做什么 / 什么时候会跑 / 路径怎么匹配 / 什么时候不会生成」四节。批量整理的「命名选项」与监控任务的「自动整理选项」共用同一套分组样式——「文件夹 / 文件命名 / 文件清理」三组是带左侧强调线的独立分块,标题带圆点与向右淡出的分割线,日 / 夜两套配色,分界一眼可辨。本版只改呈现方式,不动配置结构与后端行为。
  • 文件夹监控运行记录与任务链重构:接收夹整理只覆盖「识别 + 整理移动」两步——分发完成即定稿(有分发且无留守=已完成,有条目留在接收夹=部分完成),不再等待后续同步;连续推送多个文件时仍按「合并 + 自动补扫」的触发协调自动续跑,整理跑在独立工作线程里不拖住监控队列。每条分发条目触发的 STRM 生成独立成一条「目录同步」任务(来源「接收夹分发」),在运行记录里各占一行,各自展示新增 / 删除本地播放文件;搬运成功后清理接收夹空目录失败(115 删除响应不明确 / 目录已被移走)不再被判成「搬运失败、留在接收夹」,残留会在本轮结束统一重试、清掉后只记过程事件(不再显示「删除失败」),空壳目录会自动清理,已精准生成过 STRM 的条目也不会再补排一次目录扫描;变更同步不再挂到接收夹运行下、不等独立任务,只保留自己的「系统补扫」链,且只有需要自己补扫的目录才计入未完成。展示层改为「精简列表 + 按任务类型匹配的互斥页签」:列表一行一个工作单元(去掉子任务折叠),按开始时间排序(不再随后台状态更新跳动);接收夹整理=概览 / 网盘变更 / 问题(无本地文件),目录同步=概览 / 本地文件 / 问题(无网盘变更,本次真的做了自动整理时例外保留网盘页签),变更同步四个页签都有;概览用结果卡 + 接收夹两步进度条(识别 → 整理移动)替代阶段条与中文时间线,网盘操作逐条写明「原位置 / 原名称 / 新位置 / 新名称」(含识别来源与置信度),本地文件增删逐条同时给出网盘位置 / 名称与本地位置 / 名称。
  • 接收夹口径与手机端推送修复:接收夹是"分类前的中转文件夹",也是可选的新增入口(不是强制流程)——不用它照样按电影 / 电视剧监控目录直接推送、保存;它和普通监控任务共用同一个 Webhook 签名密钥(全站唯一,不需要单独配)。同时修掉手机端偶发的 401 Webhook 签名已被使用:脚本在网络超时后走备用通道时会重新签名,不再重发同一份签名(那个 401 之前的第一次请求其实已经受理,先去任务中心确认再决定是否重推);同一条磁力已在处理(409)改提示「已提交过」,不再显示成失败。油猴脚本 @version 升至 2.7.2,README 新增「常见报错

README 内容过长,已截取前 64 KB。完整内容请前往 GitHub 仓库查看。

评论

暂无评论