把分散在多个网盘里的影视资源,收成一条自动化的影音工作流。
MyPan 是一个自托管的网盘聚合面板。它把 115、夸克、百度、天翼等网盘挂到同一个界面里浏览和管理,并且围绕「影视库」这件事做了一整套自动化:扫描网盘 → 生成 STRM → 刮削海报和 NFO → 整理目录 → 通知 Emby/Jellyfin 刷新。生成的 STRM 文件可以被 Emby、Jellyfin、飞牛影视直接播放,播放时走网盘直链,不占服务器硬盘。
程序是一个单二进制 + 内嵌网页界面,全部配置和数据落在一个 SQLite 文件里,用 Docker 部署。
一个界面管理所有网盘账号,支持多账号并存、切换、启用/禁用、设置默认账号。
| 网盘 | 代码标识 | 登录方式 |
|---|---|---|
| 115 网盘(Open) | 115_open | OAuth / Token |
| 123 云盘(Open) | 123_open | OAuth / Token |
| 百度网盘(Open) | baidu_open | OAuth / Token |
| 天翼云盘 | 189_cloud | 扫码 / Cookie / Token |
| 移动云盘 | 139_cloud | 扫码 / Token |
| 光鸭云盘 | guangya | 扫码 / Token |
| 夸克网盘 | quark | 扫码 / Cookie |
| OneDrive | onedrive | OAuth |
| OpenList | openlist | Token |
| WebDAV | webdav | 地址 + 账号密码 |
| 本机存储 | localfs | 无需登录(直接读服务器本地路径) |
扫码登录只支持天翼云盘、移动云盘、光鸭云盘、夸克;其余走 OAuth 或手动填 Token。
各网盘能力并不一致,下面这些差异会直接影响你能用哪些功能:
| 能力 | 支持情况 |
|---|---|
| 能接收秒传(作为传输目标) | 仅 123_open、guangya、189_cloud |
| 秒传预检(先探测再传) | 仅 189_cloud |
| 能提供秒传哈希(作为传输源) | baidu_open、guangya、189_cloud |
| 网盘离线下载 | 115_open(最全,含磁力和种子)、guangya(批量 URL)、123_open(单条 URL,且不支持删除离线任务) |
| 302 直链 | 除夸克外均支持;夸克只支持本机代理,不支持 302 |
| 全量递归列目录(STRM 扫描加速) | 仅 115_open |
百度网盘能当秒传的源(可以吐出 md5),但当不了目标(收不了秒传)。所以「百度 → 115」这种组合不会触发秒传,会走普通上传,这是正常的。
不用下载就能看。共 9 类预览:
| 类型 | 支持格式 | 说明 |
|---|---|---|
| 视频 | mp4 / mkv / avi / mov / flv / wmv / webm / ts / m3u8 / rmvb | HLS(m3u8)走 hls.js,FLV/TS 走 mpegts.js |
| 音频 | mp3 / flac / wav / aac / ogg / opus / m4a / ape / wma | 自动播放同目录音频,可上/下一首 |
| 图片 | jpg / png / gif / webp / bmp / svg / avif / heic / heif | HEIC/HEIF 在前端解码,无需转码 |
| 缩放、旋转、全文搜索、支持加密 PDF | ||
| Word | 仅 .docx | .doc 会提示下载 |
| 表格 | xls / xlsx / csv / ods | 多 sheet、分页、合并单元格、CSV 编码自动识别 |
| PPT | 仅 .pptx | .ppt 会提示下载 |
| 压缩包 | 仅 .zip / .cbz | 用 HTTP Range 读,不落盘解压就能浏览内部、支持加密包 |
| 文本 | txt / md / rtf / log / strm / nfo / srt / ass / lrc / xml / yml / json / 各类代码 | Markdown 带目录渲染;RTF 渲染且屏蔽外部资源 |
视频预览还额外支持:
←/→ 快退快进 10 秒、↑/↓ 音量、空格 播放暂停、N/P 切换剧集、M 静音这是 MyPan 的核心。它扫描网盘目录,为每个视频文件生成一个 .strm 文本文件(内容是一行播放地址),Emby / Jellyfin / 飞牛影视扫描到这个文件后,播放时请求会打到 MyPan,由 MyPan 换取网盘直链并 302 跳转过去。
好处是:媒体服务器不占用本地硬盘,也不消耗服务器带宽(直链模式下流量直接从网盘到播放器)。
STRM 任务的配置项:
配套工具:
扫描 STRM 任务产出的目录,自动匹配 TMDB,写出 NFO(movie.nfo / tvshow.nfo / 分季分集 NFO)和 海报图,让 Emby / Jellyfin 直接就有海报墙。
TMDB 识别 → 生成计划 → 预览 → 应用。识别出的影片会被改名并移动到目标目录,命名规则可以对齐媒体标签(分辨率 / 编码 / 音轨 / 声道)。
计划在应用前完全可编辑 —— 可以逐条修改、删除,也可以批量删掉误识别的,确认无误再执行。
提供两套互相独立的识别方案:
还有:
把上面这些串成流水线。规则 = 触发器 + 一串动作。
触发器:每天定时 / 每隔 N 小时 / Webhook / 离线下载完成
动作(按顺序执行):延迟 → 刷新目录缓存 → 目录整理 → 生成 STRM → 刮削 → 通知 Emby 刷新 → 补全 Emby 媒体信息
每个动作可以设执行条件:总是执行 / 上一步成功才执行 / 上一步失败才执行。目录整理还能设风险阈值(匹配风险超过阈值就停下等你人工确认)。
有运行记录可查。
Webhook 走 /api/open/automation/events,需要用 API 秘钥鉴权,可以按事件和路径前缀匹配。
把文件从一个网盘搬到另一个网盘,两种模式:
冲突策略可选:跳过 / 重命名 / 覆盖。
因为秒传只在部分网盘生效,「115 → 115」这种组合不会触发秒传。参见 第 1 节的能力表。
把网盘挂出去给自己用。注意:这是挂载,不是生成公开分享链接 —— MyPan 没有分享链接功能。
WebDAV
开启后通过 /dav/<账号>/... 访问,用管理员账号密码做 Basic 认证。支持列目录、下载、上传、重命名、移动、删除、新建目录。目录列表有缓存可加速。
FUSE 本地挂载
把网盘目录挂成本机文件系统路径,让其他程序(比如 Emby、qBittorrent、各种播放器)能像读本地文件一样读网盘。
FUSE 需要容器有
privileged: true、挂载/dev/fuse、并且pid: "host"。官方镜像是带 FUSE 支持编译的。
有两条路:
网盘离线下载 —— 把链接或种子交给网盘,让网盘自己去下(不占服务器带宽)。支持情况见能力表:115 最全(含磁力/种子),光鸭支持批量 URL,123 只支持单条 URL 且不能删除任务。
内置下载器 —— MyPan 自己下载,支持:
内置 BT 的默认监听端口是 42069(TCP + UDP),所以 Docker 里 EXPOSE 42069/tcp 42069/udp 就是它。用 host 网络时无需额外映射;用 bridge 网络记得把 TCP 和 UDP 都映射出去,否则 DHT 拿不到节点、速度会很差。
下载完成后会自动交接给上传任务传到目标网盘。可以设临时目录、全局限速、BT 端口。
网盘列目录是有成本的。缓存保持任务会在设定的时间窗口内主动遍历指定目录,把目录和元数据缓存焐热,这样你点进去浏览时是秒开,而不是转圈等网盘返回。
按账号设置扫描范围,支持立即运行、强制停止。它和 STRM / 目录整理任务在同一个账号上互斥,不会同时跑。
给 Emby / Jellyfin / 飞牛影视用的代理层,把媒体服务器的 STRM 播放请求转成网盘 302 直链。
这样做的意义是降低直链直接暴露的风险,同时方便统一管理播放地址。
任务系统:STRM、缓存保持、目录整理、自动联动、上传、离线下载全部落库,重启后自动恢复(会把上次异常中断的「运行中」状态纠正回来)。统一都有启用/禁用、立即运行、强制停止、进度查看。
日志:分级(debug/info/warn/error),按天落文件在 data/log。可设日志级别和保留天数,启动时自动清理过期日志。界面上可以查看、统计、确认错误、一键清理。
备份:生成 .lpb 备份文件(可选密码加密),支持完整备份和仅设置备份。恢复是在下次启动时应用的,失败会回滚。注意备份加密用的是 MyPan_SECRET_KEY。
通知与公告:站内通知中心(带未读数)+ 后台公告弹窗。
| 工具 | 作用 |
|---|---|
| 从服务器上传 | 把服务器本机路径的文件传到网盘账号 |
| 封面提取 | 用 ffmpeg 从视频里抽帧生成海报封面 |
| 夸克 TV | 绑定夸克 TV,让夸克 STRM 走 TV 版 302 直链 |
| 垃圾清理 | 清理 .DS_Store、Thumbs.db、孤儿 STRM、上传/离线临时目录、过期缓存、过期日志等 |
| 分类整理 | 自定义分类模板 + TMDB 详情查询 |
| AI 整理 | AI 识别配置与测试 |
| API 秘钥 | 管理 API 秘钥(最多 10 个),并可轮换 STRM Token |
/dev/fuse,容器需要 privileged: true 和 pid: "host"scratch,里面只有一个静态二进制和一份根证书,没有任何系统工具新建一个目录,比如 /volume1/docker/MyPan,在里面建 docker-compose.yml:
services:
MyPan:
image: desstg/mypan:latest
container_name: MyPan
restart: unless-stopped
ports:
- "5211:5211"
# 内置磁力的 TCP/uTP/DHT 监听端口;在后台改过端口的话这里要同步改
- "42069:42069/tcp"
- "42069:42069/udp"
environment:
- TZ=Asia/Shanghai
volumes:
- ./data:/app/data
- ./strm:/app/strm
- ./mounts:/app/mounts:shared
# 可选:把 FUSE 读缓存单独放到更快的盘上
# - ./fuse_read_cache:/app/data/fuse_read_cache
devices:
- /dev/fuse:/dev/fuse
pid: "host"
privileged: true
然后:
docker compose up -d
打开 http://你的IP:5211。
mounts后面的:shared不能省。 FUSE 在容器内挂载后需要把挂载点传播到宿主机,去掉:shared挂载会失效。
privileged: true+/dev/fuse+pid: "host"三件套也不能省,少任何一个 FUSE 都用不了。如果你确定不用 FUSE 挂载,这三项可以去掉。
NAS 上常用,尤其配合媒体服务器反代时:
services:
MyPan:
image: desstg/mypan:latest
container_name: MyPan
restart: unless-stopped
network_mode: host # 用了 host 网络就不要写 ports:
environment:
- TZ=Asia/Shanghai
volumes:
- /vol1/1000/docker/MyPan/data:/app/data
- /vol1/1000/docker/MyPan/strm:/app/strm
- /vol1/1000/docker/MyPan/mounts:/app/mounts:shared
devices:
- /dev/fuse:/dev/fuse
pid: "host"
privileged: true
host 网络下端口直接监听在宿主机上,5211 和 42069 都自动可用。
docker run -d \
--name MyPan \
--restart unless-stopped \
--pid host \
--privileged \
--device /dev/fuse \
-p 5211:5211 \
-p 42069:42069/tcp \
-p 42069:42069/udp \
-e TZ=Asia/Shanghai \
-v /volume1/docker/MyPan/data:/app/data \
-v /volume1/docker/MyPan/strm:/app/strm \
-v /volume1/docker/MyPan/mounts:/app/mounts:shared \
desstg/mypan:latest
加 --network host 的话去掉所有 -p。
http://你的IP:5211admin / admin 登录忘记密码怎么办:登录页有「忘记密码」,点击后系统会生成一个临时密码并打印到容器日志里,10 分钟内有效。执行
docker logs MyPan查看。临时密码同样会触发强制改密。
| 宿主机目录 | 容器内路径 | 作用 |
|---|---|---|
./data | /app/data | SQLite 数据库、全部配置、日志、密钥文件 |
./strm | /app/strm | STRM 文件输出位置 |
./mounts | /app/mounts | FUSE 挂载点目录(必须 :shared) |
./fuse_read_cache | /app/data/fuse_read_cache | 可选,FUSE 读缓存,建议放 SSD |
data 目录是全部身家,备份它等于备份了整个 MyPan。注意复制时要把 MyPan.db-wal 和 MyPan.db-shm 一起复制,否则可能丢最近的数据。
| 变量 | 默认值 | 说明 |
|---|---|---|
MyPan_DATA_DIR | ./data | 数据目录 |
MyPan_STRM_DIR | ./strm | STRM 输出目录 |
MyPan_DB_PATH | <数据目录>/MyPan.db | 单独指定数据库路径 |
MyPan_LISTEN | :5211 | HTTP 监听地址 |
MyPan_LOG_LEVEL | info | 日志级别 |
MyPan_SECRET_KEY | 自动生成 | 会话签名、STRM 签名、备份加密的主密钥。不设的话会自动生成到 data/secret.key |
MyPan_CORS_ORIGINS | 空 | 额外允许的跨域来源,逗号/分号/换行分隔 |
MyPan_MOUNT_ROOT | /app/mounts | FUSE 挂载根目录 |
绝大多数配置都在网页后台里改,不需要碰环境变量。 上面这些是给特殊部署场景用的。
⚠️ TMDB 不是用环境变量配的。 网上流传的
TMDB_API_BASE_URL环境变量在这个版本里不存在。TMDB 的 API Key、语言、API 域名、图片域名、代理都在网页后台「任务管理 → 目录整理 → 设置」里填。
刮削和目录整理都依赖 TMDB。如果服务器连不上 api.themoviedb.org,有两个办法,二选一:
办法一:在「目录整理 → 设置」里填 TMDB 反代域名(会自动补 /3 和 /t/p)。
办法二:给容器加 hosts。Compose 写 extra_hosts,docker run 用 --add-host:
extra_hosts:
- "api.themoviedb.org:对应的IP"
- "image.tmdb.org:对应的IP"
| 端口 | 协议 | 用途 |
|---|---|---|
5211 | TCP | 网页界面和 API |
42069 | TCP + UDP | 内置磁力下载的 BT 监听端口(TCP/uTP + DHT) |
用不到内置磁力下载的话,42069 可以不映射。但如果要映射,TCP 和 UDP 必须都给,只给 TCP 会导致 DHT 找不到节点、下载极慢。
privileged 和 pid: host),建议用 SSH 跑 docker compose,配置文件放在 /volume1/docker/MyPan。RUN --mount=type=cache 这类 BuildKit 专属语法)。/vol1/1000/ 作为数据根路径,其它一样。.doc / .ppt / .rar / .7z 不能在线预览,需要下载后用本地程序打开。压缩包只支持 zip / cbz。-tags fuse)。官方镜像已经打开;如果你自己从源码编译,忘了加这个 tag 会得到「未编译 FUSE 支持」的报错。登录进去只看到一个「导入备份」的卡片,别的页面都点不动? 正常,你在用默认密码。先改密码,其他页面就会解锁。
打开首页就跳登录页,不能免登录浏览? 默认如此。「系统设置 → 账号安全」里有「允许匿名访问文件列表」开关,打开后不登录也能看文件列表。
FUSE 挂载失败?
依次检查四件事:宿主机 /dev/fuse 是否存在、容器是不是 privileged: true、pid 是不是 "host"、mounts 卷有没有写 :shared。这四项缺任何一个都会挂不上,绝大多数情况是漏了 :shared。
Emby 里 STRM 播放不了? 先确认 STRM 里的播放地址能被 Emby 所在机器访问到,再检查「系统设置」里的 STRM 基础地址是不是填的内网地址。如果网盘直链域名变了,用「播放地址替换」工具批量更新已有 STRM。
刮削一直失败 / 目录整理匹配不上? 基本都是 TMDB 网络问题,参见上面的网络章节。
磁力下载没速度?
先确认 42069 的 TCP 和 UDP 都映射了。这是 DHT 节点发现的前提,只映射 TCP 会非常慢。
容器日志在哪?
./data/log 目录下按天分文件。也可以在网页「仪表盘 → 系统日志」里看。注意镜像是 scratch 基础、没有 shell,docker exec 进不去,排障请用日志。
Content type
Image
Digest
sha256:9695a1cf7…
Size
23.5 MB
Last updated
4 days ago
docker pull desstg/mypan