使用手册
HyperMS 使用手册
从部署到 Emby 联动,按实际使用顺序写。遇到问题时,先从左侧目录跳到对应章节。
快速开始
先把服务启动、账号登录、网盘连上。其他设置可以等流程跑通后再补。
部署前准备
- Docker + Docker Compose —— 推荐部署方式。下面这一份 Compose 默认会同时启动 Redis、PostgreSQL 和 HyperMS;如果你本机已经有 Redis 或 PostgreSQL,看后面的精简方式
- 一个媒体目录 —— STRM 文件会写到宿主机目录,再映射给 Emby 扫描。建议一开始就定好路径
- 网络能出去 —— 如果需要刮削 TMDB、连接 Telegram 频道,确保容器能访问外网
- 不用克隆项目,也不用本地构建 —— 主服务直接使用 Docker Hub 上的
gravityle/hyperms:latest 镜像
如果你打算对接 Emby:一开始就把宿主机目录和容器内的 /media 映射关系确定好。很多人遇到"STRM 生成了但 Emby 扫不到",其实就是两边看到的路径不一样。
复制 Compose 配置
新建一个目录,把下面内容保存为 docker-compose.yml。这就是完整部署文件,不需要再额外准备数据库 Compose。
# 根据实际情况调整挂载目录路径
services:
# Redis 服务
redis:
image: redis:latest
container_name: redis
restart: unless-stopped
networks:
- hms_network
volumes:
- ./data/docker/redis/data:/data
environment:
TZ: Asia/Shanghai
# PostgreSQL 主数据库
pgsql:
image: postgres:17-alpine
container_name: postgresql
restart: unless-stopped
networks:
- hms_network
volumes:
- ./docker/postgresql/data:/var/lib/postgresql/data
environment:
POSTGRES_DB: hyperms
POSTGRES_USER: hyperms
POSTGRES_PASSWORD: hyperms
TZ: Asia/Shanghai
# HyperMS 主服务
hms:
image: gravityle/hyperms:latest
container_name: HyperMS
restart: unless-stopped
networks:
- hms_network
depends_on:
- redis
- pgsql
environment:
TZ: Asia/Shanghai
HMS_DB_URL: postgresql+asyncpg://hyperms:hyperms@pgsql:5432/hyperms
HMS_REDIS_URL: redis://redis:6379/0
HMS_REDIS_KEY_PREFIX: hyperms
# HMS_DISABLE_AUTH: "true" # 关闭登录认证,不建议公网使用
# HMS_ADMIN_KEY: xxxxxxxx # 自定义字符串,用于重置管理员密码
ports:
- "8115:8115"
- "8196:8196"
volumes:
- ./data/docker/hyperms/media:/media
networks:
hms_network:
name: hms_network
已有 Redis 或 PostgreSQL 怎么改
如果宿主机已经跑了 Redis 或 PostgreSQL,不需要再让 Compose 启动对应容器。保留 hms 服务,删掉你已有的服务块和对应的 depends_on,再把连接地址改成宿主机能访问的地址。
| 本机已有 | Compose 里删掉 | 需要改的环境变量 |
| 只有 Redis |
redis 服务和 depends_on 里的 redis |
HMS_REDIS_URL |
| 只有 PostgreSQL |
pgsql 服务和 depends_on 里的 pgsql |
HMS_DB_URL |
| Redis 和 PostgreSQL 都有 |
redis、pgsql 两个服务,以及整个 depends_on |
HMS_REDIS_URL 和 HMS_DB_URL |
不要在容器里写 127.0.0.1:对 HyperMS 容器来说,127.0.0.1 指的是容器自己,不是宿主机。Docker Desktop 通常可以用 host.docker.internal;Linux 建议给 hms 加上下面的 extra_hosts。
services:
hms:
image: gravityle/hyperms:latest
container_name: HyperMS
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
TZ: Asia/Shanghai
HMS_DB_URL: postgresql+asyncpg://hyperms:你的数据库密码@host.docker.internal:5432/hyperms
# Redis 无密码:
HMS_REDIS_URL: redis://host.docker.internal:6379/0
# Redis 有密码时,把上一行换成:
# HMS_REDIS_URL: redis://:你的Redis密码@host.docker.internal:6379/0
HMS_REDIS_KEY_PREFIX: hyperms
ports:
- "8115:8115"
- "8196:8196"
volumes:
- ./data/docker/hyperms/media:/media
Redis 连接串按你的认证方式选择:
| Redis 情况 | HMS_REDIS_URL 写法 |
| 无密码 |
redis://host.docker.internal:6379/0 |
| 只有密码 |
redis://:你的Redis密码@host.docker.internal:6379/0 |
| ACL 用户名 + 密码 |
redis://用户名:密码@host.docker.internal:6379/0 |
PostgreSQL 需要提前建库:如果复用现有 PostgreSQL,请先创建 hyperms 数据库和可登录用户,并确保 PostgreSQL 允许 Docker 容器访问。Redis 连接串最后的 /0 表示数据库编号;如果密码里有 @、:、/、# 等特殊字符,需要先做 URL 编码。
启动服务
docker compose up -d
默认入口:浏览器打开 http://127.0.0.1:8115。如果不需要 Emby 代理端口,可以把 8196:8196 删掉。
首次登录
- 找初始密码 —— 首次启动时,系统会在容器日志里输出临时管理员账号和密码。执行
docker logs HyperMS 查看
- 修改密码 —— 登录成功后,进设置页把管理员用户名和密码改成你自己的。临时密码留在日志里不安全
- 忘了密码怎么办 —— 修改容器部署环境变量,添加
HMS_ADMIN_KEY,启动容器后在登录页走重置流程。
先填这些设置
现在设置页按使用场景分成总览、账号权限、网盘登录、资源搜索、媒体服务、功能开关和通知。先把下面几项跑通,再开启自动流程。
| 位置 | 设置项 | 干嘛用的 |
| 账号权限 |
管理员账号 |
把临时用户名和密码换掉;需要外部工具时,在这里查看或重新生成 API Token。 |
| 网盘登录 |
115 / 夸克登录和默认目录 |
让系统能访问网盘、转存分享,并决定电影、电视剧等内容默认落到哪里。 |
| 资源搜索 |
PanSou / 影巢 / 聚影 / Telegram 授权 |
决定首页和详情页能从哪些来源找资源;Telegram 授权只搜索当前账号已加入的频道。 |
| 媒体服务 |
TMDB API Key |
匹配片名、拉海报、简介、年份和剧集数据;扣子授权可作为更智能的标题识别辅助。 |
| 媒体服务 |
Emby / 极影视 / 飞牛影视 |
连接外部媒体库;配置后总览会显示对应媒体库概览,便于确认库数量和影片数量。 |
| 功能开关 |
内置媒体库、分享入库、STRM 和定时任务 |
控制自动扫描、自动整理、自动生成 STRM、链接有效期检查、订阅检查和索引增量同步。 |
| 通知 |
企业微信 / Telegram Bot / Server 酱 |
配置消息渠道并发送测试消息;具体哪些场景要通知,在功能开关里的通知开关控制。 |
检查是否可用
- 改完管理员密码,确认能正常登出再登入
- 去设置页“网盘登录”看 115 或夸克的登录状态是不是“正常”
- 回首页搜一部片,看看能不能搜到结果
- 贴一个 115 分享链接,看能不能解析出文件列表
- 去任务页看一眼,确认后台任务能创建、能执行、能看到进度
建议节奏:先手动跑完一遍"搜片 → 转存 → 整理 → 生成 STRM",确认每一步正常,再开启自动扫描和自动整理。
日常使用
日常操作集中在首页:搜内容、处理链接、加订阅。任务、索引和规则维护放在工具页。
搜索框支持哪些输入
| 你输入的 | 系统会怎么做 | 接下来你可以 |
| 片名 / 剧名 |
显示搜索结果,带出海报、年份、简介 |
点进去看详情、补元数据、加订阅 |
| 115 分享链接 |
校验链接还有效吗,能打开吗 |
转存到自己网盘,或者直接生成 STRM |
| 夸克分享链接 |
解析文件列表,显示目录结构 |
转存、查看文件、后续整理 |
| 磁力 / ED2K |
进入离线流程(如果网盘支持) |
添加离线任务,完成后继续整理 |
使用方式:首页搜索框是主要入口。片名、分享链接、磁力或 ED2K 都可以直接粘贴进去。
常用场景
场景一:拿到了一个分享链接
把链接贴进首页搜索框,系统会校验它还有没有效。有效的话,你可以选择"转存到我网盘"或者"直接生成 STRM"(如果你只想播、不想占网盘空间)。
场景二:想把资源整理进家庭库
先转存或导入,然后让系统扫描、补全元数据、按电影/剧集分类,最后统一生成 STRM。Emby 扫一下新目录,海报和播放就都有了。
场景三:只有磁力或 ED2K 链接
直接贴到首页。如果网盘支持离线,系统会先把资源离线到网盘,然后再走整理流程。不支持离线的话,暂时只能先存着链接。
场景四:长期追一部剧
搜到这部剧后,点"添加订阅"。系统会定期检查有没有新集数。发现更新后自动转存、整理、通知你。稳定后再开自动生成 STRM。
场景五:维护一个索引库
在网盘浏览器里给常用目录建索引,后续去"索引管理"里同步、发布。适合你有大量存量资源,想批量生成 STRM 的情况。
场景六:旧的 STRM 链接失效了
进 STRM 转换工具,批量选中旧的 STRM 文件,预览新链接,确认没问题后一键改写。不用手动一个个改文本文件。
排查顺序
先看任务,再看操作记录,最后看日志。这样最容易定位问题发生在哪一步。
- 任务页 —— 你点了一个操作,先看任务页里有没有出现对应任务。如果没出现,说明请求根本没发出去
- 操作记录 —— 任务出现了但结果不对,看操作记录。这里记录了系统具体做了哪些动作,比如"尝试转存到 /电影/2024/"
- 日志页 —— 操作记录里没有异常,但结果还是不对,去看日志。这里有原始报错、外部服务返回的异常信息
建议:先确认任务有没有生成,再确认操作是否符合预期,最后再看日志原文。
整理输出
资源导入后,整理、刮削和 STRM 会决定 Emby 里的显示和播放效果。这里按流程说明每一步。
资源怎么进你的网盘
从分享链接转存
在首页粘贴 115 或夸克分享链接,系统校验后会显示文件列表。选择"转存",文件就会复制到你设定的默认目录里。转存是复制,不是移动,原分享不受影响。
从离线任务获取
粘贴磁力或 ED2K 链接,系统会调用网盘的离线下载功能。离线完成后,文件已经在你的网盘里,可以直接进入整理流程。
注意:115 对重复转存有限制,短期内重复转存同一个分享可能会失败。
元数据补全
系统会根据文件名和目录结构匹配 TMDB,并补上海报、简介、年份、演员等信息。
- 系统先猜 —— 根据文件名和目录结构,系统会调用 TMDB 搜索匹配的影片。如果文件名规范(比如"沙丘.2021.1080p"),命中率很高
- 猜错了你纠正 —— 如果匹配错了(比如把电视剧匹配成了电影),去"手动整理"页里重新指定正确的 TMDB ID
- 写规则让它以后自动猜对 —— 在"TMDB 规则"里可以写正则或关键词映射,比如凡是文件名带"S01E"的,一律按剧集处理
没有 TMDB Key 会怎样?系统无法自动整理媒体进入库,无法使用 Emby 插件。强烈建议尽早申请 TMDB API Key,免费且简单。
STRM 文件
STRM 是一个很小的文本文件,里面写着播放地址。Emby 扫描到它以后,会按这个地址拉流播放。
- 不占本地空间 —— 一部电影几十 GB,STRM 文件只有几百字节。本地磁盘只需要存这些索引文件,视频本身还在网盘里
- Emby 能直接识别 —— STRM 文件放在 Emby 的媒体库目录里,Emby 扫描时会把它当成普通视频文件显示。点播放时读取里面的直链地址,自动走网盘播放
- 链接失效可以批量换 —— 如果网盘直链格式变了,不用重新生成所有 STRM。用"STRM 转换"工具,批量改写文件里的链接地址即可
路径映射是关键:HyperMS 生成 STRM 时写的路径,必须是 Emby 实际能访问到的路径。如果两边对不上,Emby 就扫不到。具体怎么配,看
播放器联动 章节。
什么时候开启自动整理
| 阶段 | 策略 | 适合谁 |
| 阶段一 |
全部手动确认 |
刚上手,熟悉系统的判断逻辑 |
| 阶段二 |
自动整理 + 手动生成 STRM |
信任系统的分类能力,但 STRM 还想自己把关 |
| 阶段三 |
全自动 |
流程跑稳定了,订阅检查 + 自动转存 + 自动整理 + 自动生成 STRM + 通知推送 |
播放器联动
Emby 插件用于将 HyperMS 的虚拟媒体库映射进 Emby。找资源、整理和生成 STRM 仍由 HyperMS 处理,Emby 负责扫描和播放。无需生成 STRM 文件。
两步装好插件
第 1 步:复制插件文件
下载项目提供的 HyperMSPlugin.dll,复制到 Emby 的插件目录,然后重启 Emby。
Emby 插件
v1.0.5.6
HyperMSPlugin.dll · 约 750 KB
下载 DLL
# Docker 部署的 Emby 示例
docker cp HyperMSPlugin.dll emby-server:/config/plugins/
docker restart emby-server
不是 Docker 部署?把 HyperMSPlugin.dll 放进 Emby 配置目录下的 plugins 文件夹,然后重启 Emby 即可。
第 2 步:在 Emby 后台配置
- 打开 Emby Dashboard
- 进入 Plugins → HyperMS
- 填写 Server URL —— 这是最关键的一项。注意:这里要填 Emby 容器内部能访问到的 HyperMS 地址,不是你在浏览器里访问的地址。举例:如果你用上面的 Compose,并让 Emby 加入同一个网络,可以填
http://hms:8115
- 保存并重启 Emby
路径映射最容易出错
HyperMS 生成 STRM 文件时写的是容器内部路径,Emby 读取时也必须是同一个物理路径。两边对不上,Emby 就扫不到。
✓ 正确的例子
宿主机 /mnt/media 同时映射给 HyperMS 和 Emby 的 /media。
HyperMS 生成:/media/电影/沙丘 (2021)/沙丘.strm
Emby 扫描:/media/电影
两边路径完全一致,能扫到。
✗ 错误的例子
HyperMS 映射 /media,Emby 映射 /data/media。
HyperMS 生成:/media/电影/...
Emby 扫描:/data/media/电影
Emby 看到的路径和 STRM 里写的不一样,扫不到。
简单判断方法:在 Emby 容器里执行 cat /media/电影/某文件.strm,如果能读到内容,说明路径映射是对的。如果提示"No such file",就是路径没对上。
确认插件生效
- 插件列表能看到 —— 进 Emby 的插件列表,确认 HyperMS 插件出现在已安装列表里
- 配置能保存 —— 填完 Server URL 保存后,退出重进插件页,确认内容还在
- 搜索有结果 —— 在 Emby 客户端里搜索一部本地没有的片,看结果里有没有来自 HyperMS 的条目
插件常见问题
- 插件不显示:先重启 Emby,再确认 DLL 是否真的在
/config/plugins/ 目录下
- 搜索没结果:检查 Server URL 填的是不是 Emby 能访问的地址。在 Emby 容器里
curl 一下这个地址,看能不能通
- 配置不保存:检查 Emby 配置目录的权限,确保容器有写入权限
- 有结果但播不了:通常不是插件的问题,是 STRM 或网盘直链的问题,检查 STRM 地址和分享链接是否有效
后台管理
后台用于处理维护工作:任务、订阅、索引、权限、STRM 批量改写和日志排查。
设置页速览
设置页桌面端是左侧菜单,移动端是底部浮动标签。开关和选项通常选择即保存;右上角的 保存 主要提交输入框内容,返回 关闭设置页,退出 结束当前登录会话。
总览
- 使用声明:资源导入、整理和使用前先确认来源合法,避免误把风险当成功能问题。
- 本地媒体库概览:显示媒体主记录、待整理、已补全、待补全和失败数量。
- 外部媒体库概览:Emby、极影视、飞牛影视配置后会在这里显示库数量和影片数量,子媒体库默认折叠。
- 管理工具:媒体库、订阅、任务、索引、互联、链接、手动整理、规则、操作日志和 STRM 转换都从这里进入。
账号权限
- 管理员账号:修改管理员用户名和密码,首次部署后应优先完成。
- 子账号:开启后可创建受限账号;权限逐项控制网盘、搜索、转存、离线、STRM 和订阅能力。
- API Token:给第三方工具或脚本调用开放接口使用,泄露后可以在这里重新生成。
网盘登录
- 115 / 夸克登录:Cookie 或扫码登录决定网盘是否可用;状态异常时先重新登录。
- 默认目录:电影、电视剧等转存目录和 STRM 输出目录从这里选择,影响后续自动入库和媒体库扫描。
- 目录浏览:浏览按钮会打开网盘目录弹窗,可查看目录、选择目标、创建索引或分享。
- 高级动作:“转存时手动选择目录”等开关已归入功能开关,网盘登录页只保留账号和目录类配置。
资源搜索
- 外网代理:影响 Telegram 授权搜索、Telegram Bot 通知和 TMDB 等外网访问;检测按钮会测试常见站点连通性。
- PanSou:启用后作为搜索来源;资源过滤可只保留当前已配置网盘能处理的结果。
- 影巢 / 聚影:启用后参与资源搜索;影巢支持签到和积分解锁相关配置。
- Telegram 授权:扫码授权后只搜索当前 Telegram 账号已加入的频道;取消授权会移除当前会话。
媒体服务
- Emby / 极影视 / 飞牛影视:填写地址和凭据后连接外部媒体库,概览统一显示在总览。
- TMDB:用于元数据搜索、海报、简介、年份和剧集信息补全。
- 扣子智能体:通过设备授权绑定,用于更智能地识别标题、年份、编码等信息。
- 整理规则入口:电影、电视剧命名和分类规则仍在管理工具里的规则整理弹窗维护。
功能开关
- 分享链接:控制分享中心推送、内置媒体库、自动递归扫描和自动整理入库。关闭内置媒体库后,详情页和工具里的整理入库类按钮会隐藏。
- STRM 生成:控制生成 STRM 时是否手动选目录、分享后/整理后/索引后是否自动生成,以及是否过滤 100M 以下小视频。
- 网盘动作:控制转存时是否手动选择目录,以及播放转存后的临时文件是否自动删除。
- 通知开关:决定哪些场景发通知:整理入库完成、订阅更新、订阅完结。
- 定时设置:订阅检查、增量同步、链接有效期检查都有独立开关和间隔;增量同步里也可以设置元数据下载线程。
通知
- 企微通知:填写企业微信 CorpID、Secret、AgentID 后才能启用;发送通知按钮用于测试。
- Telegram 通知:填写 Bot Token 和 Chat ID 后才能启用;如果网络不稳定,先回资源搜索页检测代理。
- Server 酱:填写 SendKey 后启用,兼容普通 SCT 和 Server 酱³ 的 sctp 格式。
- 场景开关:通知页只配置发送渠道,是否在整理入库、订阅更新、订阅完结时发送,由功能开关页控制。
工具说明
| 工具 | 什么时候用 |
| 媒体库管理 |
查看整理好的内容,确认分类对不对、元数据齐不齐,手动修正错误信息 |
| 订阅管理 |
手动触发检查、暂停/删除订阅,定期查看有没有长期没更新的订阅 |
| 任务管理 |
查看进度、失败原因、卡住的任务和重试入口。系统异常时,先看这里 |
| 索引管理 |
给网盘目录建索引,批量生成 STRM,同步文件变动 |
| 互联管理 |
保存其他 HyperMS 实例地址,实现跨实例搜索和资源推送 |
| 链接管理 |
查看导入的分享链接状态:哪些已转存、哪些已失效、哪些还没处理 |
| 手动整理 / TMDB 规则 |
自动整理没认出的片名、TMDB 匹配错了,在这里纠正。也可以写规则让系统以后自动按你的习惯命名 |
| STRM 转换 / 日志 |
批量改写旧 STRM 链接地址。日志页用来查系统级错误,比操作记录更底层 |
子账号权限
给家人或朋友使用时,建议只开放必要权限。
- 只给搜索 —— 适合只想让别人查查看有什么资源,不开放任何修改操作。最安全
- 搜索 + 转存 —— 适合让家人或朋友帮忙把资源转存到统一目录。但要注意会消耗你的网盘空间
- 链接处理助手 —— 额外开放 STRM 生成权限,但仍然不给设置页和管理工具
权限建议:设置页和管理工具页尽量只保留给管理员。子账号的网盘权限也建议分开给(比如只给 115 不给夸克),万一账号泄露损失可控。
浏览器插件
如果你经常在网页上收集 115/夸克分享链接,希望边浏览边入库,不用来回复制粘贴,那浏览器插件很适合你。
浏览器扩展
hyperms-browser-import-extension.zip · 约 43 KB
下载扩展
下载后先解压,再到 Chrome / Edge 的扩展管理页开启开发者模式,选择“加载已解压的扩展程序”。
最关键的四个设置:
- HyperMS 地址 —— 按实际填写,比如
http://127.0.0.1:8115
- 连接测试 —— 先确认插件能访问到你的 HyperMS
- 自动入库 —— 熟悉效果后再开启,别一上来就全自动
- 指定网站 —— 控制在哪些站点触发,避免误识别
开放接口
开放接口适合给第三方工具、桌面小程序或 AI 辅助整理工具使用。它的核心流程很简单:先读取索引文件列表,在外部补全片名、类型、海报等元数据,再把结果写回 HyperMS 媒体库。
AI 开发接口说明
hyperms-open-api-ai.md · 包含接口契约、字段类型和请求示例
下载 MD
权限说明:接口需要管理员登录态,或设置页“账号权限 → API Token”里的 API Token。第三方程序推荐使用 API Token,不需要保存管理员密码。
使用流程
- 在 HyperMS 后台完成网盘索引,记下索引根目录 ID。
- 调用读取接口拿到文件列表,重点使用文件的
id、file_id、文件名和相对路径。
- 在外部工具里补全媒体标题、媒体类型、海报、简介、演员等元数据。
- 调用写入接口导入媒体库,成功后 HyperMS 会尝试同步 Emby 插件频道。
接口概览
| 用途 | 接口 | 说明 |
| 读取索引文件 |
GET /api/v1/drive/index/roots/{root_pk}/export-files |
导出指定索引根目录下的文件列表,供外部工具选择和分组。 |
| 写入媒体库 |
POST /api/v1/library/drive-index/import |
把补全后的元数据和文件引用写入 HyperMS 媒体库。 |
必须填写的信息
- 索引根目录 ID:请求里的
root_pk,来自索引管理。
- 媒体标题:每条媒体的
title,为空会导入失败。
- 媒体类型:
movie、tv 或 custom。自定义分类媒体使用 custom。
- 文件引用:推荐使用读取接口返回的
items[].id,写入到导入请求的 file_pks。
- 自定义分类:导入综艺等自定义频道时,使用
custom_category_id 或 custom_category_path,例如 综艺/真人秀。
注意:tmdb_id 可以为空;系统不会自动替你补标题、类型或其他兜底值。你填什么,导入时就按什么写入。
最小请求示例
{
"root_pk": 2,
"source_key": "manual-test",
"items": [
{
"title": "示例真人秀",
"media_type": "custom",
"custom_category_path": "综艺/真人秀",
"file_pks": [12345]
}
]
}
完整字段、分页方式、响应结构和面向 AI 开发模型的实现检查清单,请下载上方 Markdown 文档。
返回格式:两个接口都使用统一外层结构 {"success": true, "data": ...}。下面表格只说明 data 里的业务字段。
接口鉴权
第三方桌面程序推荐使用 API Token,不需要保存管理员密码。请求时把 Token 放到标准请求头里:
Authorization: Bearer hms_xxxxxxxxxxxxxxxxxxxxx
读取索引文件列表
GET /api/v1/drive/index/roots/{root_pk}/export-files?video_only=true&include_dirs=false&limit=1000&offset=0
用于导出某个已索引根目录下的文件。外部工具通常先拿到 id、file_id、relative_path 和文件名,再手动或自动补全媒体元数据。
路径和查询参数
| 字段 | 位置 | 类型 | 必填 | 说明 |
root_pk |
路径 |
integer |
是 |
索引根目录的数据库 ID,可在索引管理中查看。必须大于 0。 |
video_only |
查询 |
boolean |
否 |
默认 true,只导出视频文件。传 false 时可包含非视频文件。 |
include_dirs |
查询 |
boolean |
否 |
默认 false。传 true 时目录项也会出现在返回列表中。 |
limit |
查询 |
integer |
否 |
每页数量,默认 1000,范围 1-10000。 |
offset |
查询 |
integer |
否 |
分页偏移量,默认 0。 |
响应 data 字段
| 字段 | 类型 | 说明 |
root | object | 当前索引根目录信息。 |
items | array | 导出的文件或目录列表。 |
total | integer | 符合当前过滤条件的总数量。 |
limit | integer | 本次请求使用的分页数量。 |
offset | integer | 本次请求使用的分页偏移量。 |
video_only | boolean | 本次请求是否只导出视频文件。 |
include_dirs | boolean | 本次请求是否包含目录项。 |
root 字段
| 字段 | 类型 | 说明 |
id | integer | 索引根目录数据库 ID,也就是导入时使用的 root_pk。 |
drive_type | string | 网盘类型。写入媒体库接口当前仅支持 115。 |
root_id | string | 网盘侧根目录 ID。 |
root_name | string | 索引根目录名称。 |
root_path | string | 索引根目录路径。 |
file_count | integer | 根目录下索引到的文件数量。 |
video_count | integer | 根目录下索引到的视频数量。 |
indexed_at | string | 最近完成索引的时间,ISO 格式;为空表示暂无。 |
created_at | string | 索引根目录记录创建时间。 |
updated_at | string | 索引根目录记录更新时间。 |
items[] 字段
| 字段 | 类型 | 说明 |
id | integer | 索引文件数据库 ID。写入媒体库时可放入 file_pks。 |
root_pk | integer | 所属索引根目录 ID。 |
file_id | string | 网盘侧文件 ID。写入媒体库时可放入 file_ids。 |
parent_id | string | 网盘侧父目录 ID。 |
file_name | string | 文件名或目录名。 |
file_path | string | 索引时记录的完整路径。 |
relative_path | string | 相对当前索引根目录的路径,适合给外部工具展示和分组。 |
file_size | integer | 文件大小,单位字节。 |
pickcode | string | 115 文件 pickcode,后续播放解析会用到。 |
sha1 | string | 文件 SHA1;没有时为空字符串。 |
is_dir | boolean | 是否目录。 |
is_video | boolean | 是否视频文件。 |
modified_at | string | 网盘侧修改时间,ISO 格式;没有时为空字符串。 |
created_at | string | 索引文件记录创建时间。 |
写入媒体库
POST /api/v1/library/drive-index/import
外部工具补全元数据后,用这个接口把索引文件写入媒体库。写入成功后,系统会创建资源分组和媒体绑定,并尝试触发 Emby HyperMS 频道同步。
必填规则:root_pk、items、每条媒体的 title、media_type 必填;每条媒体还必须至少提供一个能命中当前 root_pk 的视频文件引用。tmdb_id 可以为空,系统不会替你兜底补值。
请求顶层字段
| 字段 | 类型 | 必填 | 说明 |
root_pk |
integer |
是 |
索引根目录 ID,必须对应一个已存在的 115 索引根目录。 |
source_key |
string |
否 |
外部来源标识,默认 external。会写入资源绑定的扩展信息里,方便后续追踪来源。 |
items |
array |
是 |
待写入的媒体条目列表,不能为空。 |
items[] 元数据字段
| 字段 | 类型 | 必填 | 说明 |
title | string | 是 | 媒体标题。为空会报错。 |
media_type | string | 是 | 媒体类型。常规值为 movie、tv;自定义频道导入可使用 custom 并配合自定义分类字段。 |
tmdb_id | string | 否 | TMDB ID。有值时会和 media_type 一起用于更新同一媒体;为空时创建不带 TMDB ID 的媒体记录。 |
douban_id | string | 否 | 豆瓣 ID。 |
original_title | string | 否 | 原始标题。 |
year | integer/null | 否 | 年份;为空时不会自动推断。 |
season_number | integer/null | 否 | 剧集季号,主要用于电视剧条目。 |
language | string | 否 | 语言标记,例如 zh-CN、ja。 |
poster_url | string | 否 | 海报地址。 |
backdrop_url | string | 否 | 背景图地址。 |
overview | string | 否 | 简介。 |
genres | string[] | 否 | 类型标签数组,例如 ["真人秀"]。 |
extra | object | 否 | 扩展字段,会合并进媒体记录的 extra_json。 |
extra_json | object | 否 | 扩展字段。和 extra 同时传时优先使用 extra_json;支持保存任意 JSON,常用字段见下方说明。 |
custom_category_id | string | 否 | 二级自定义分类 ID。用于让自定义媒体显示在对应的 Emby 自定义频道和目录下。 |
custom_category_path | string | 否 | 二级自定义分类路径,例如 综艺/真人秀。没有传 ID 时可用路径匹配分类。 |
group_cid | string | 否 | 外部分组 ID。为空时系统会根据文件自动生成;过长会被压缩为固定长度标识。 |
group_name | string | 否 | 资源分组名称,可填片名、目录名或外部工具生成的分组名。 |
group_path | string | 否 | 资源分组路径。 |
parent_group_cid | string | 否 | 父分组 ID。为空时默认使用索引根目录的网盘侧 ID。 |
parent_group_name | string | 否 | 父分组名称。 |
variant_label | string | 否 | 资源版本标签,例如 4K、REMUX。 |
variant_type | string | 否 | 资源版本类型,供后续筛选或展示使用。 |
match_note | string | 否 | 匹配备注,会写入资源分组和绑定信息。 |
match_confidence | number/null | 否 | 匹配置信度,例如 0.92。 |
is_primary | boolean | 否 | 是否主资源,默认 true。 |
file_pks | integer[] | 条件必填 | 索引文件数据库 ID 列表,对应导出接口 items[].id。 |
file_ids | string[] | 条件必填 | 网盘侧文件 ID 列表,对应导出接口 items[].file_id。 |
files | array | 条件必填 | 文件引用数组。file_pks、file_ids、files 三种至少提供一种。 |
extra_json 常用扩展字段
extra_json 会原样保存到媒体库记录中,适合放 TMDB 已返回但媒体库没有独立列的扩展信息。下面是建议使用的字段名;未列出的自定义字段也可以保存。
| 字段 | 类型 | 说明 |
credits | object | TMDB credits 原始对象,通常包含 cast 和 crew。 |
cast / actors | array | 演员列表。可以保存字符串数组,也可以保存 TMDB cast 对象数组。 |
crew | array | 幕后人员列表,适合直接保存 TMDB crew 对象数组。 |
director / directors | array | 导演列表。电影通常可从 crew[].job == "Director" 得到。 |
rating / tmdb_rating | number | 评分,例如 TMDB 的 vote_average。 |
vote_count | integer | 评分人数。 |
runtime | integer | 片长,单位分钟。 |
tagline | string | 标语。 |
status | string | 发行状态,例如 Released、Returning Series。 |
homepage | string | 官网地址。 |
imdb_id | string | IMDb ID。 |
original_language | string | 原始语言。 |
country / region | string | 国家或地区展示值。 |
production_companies | array | 出品公司列表,可保存 TMDB 原始对象数组。 |
production_countries | array | 出品国家/地区列表,可保存 TMDB 原始对象数组。 |
spoken_languages | array | 对白语言列表,可保存 TMDB 原始对象数组。 |
keywords | array/object | 关键词信息,可保存 TMDB keywords 响应。 |
episode_metadata | object | 剧集分集元数据,key 通常是集数,value 可包含标题、简介、剧照、播出日期等。 |
custom_category | object | 自定义分类信息。通常由 custom_category_id 或 custom_category_path 命中后自动写入。 |
files[] 文件引用字段
| 字段 | 类型 | 说明 |
id | integer | 索引文件数据库 ID,等同于 file_pk。 |
file_pk | integer | 索引文件数据库 ID,等同于导出接口 items[].id。 |
file_id | string | 网盘侧文件 ID,等同于导出接口 items[].file_id。 |
fid | string | 网盘侧文件 ID,等同于 file_id。 |
响应 data 字段
| 字段 | 类型 | 说明 |
root_pk | integer | 本次写入使用的索引根目录 ID。 |
share_link_id | integer | 系统为该索引根目录创建或复用的内部分享链接 ID。 |
imported_count | integer | 成功写入数量。 |
failed_count | integer | 失败数量。 |
items | array | 成功写入的媒体条目结果。 |
failed_items | array | 失败条目及失败原因。 |
message | string | 本次导入的汇总文案。 |
items[] 成功结果字段
| 字段 | 类型 | 说明 |
media_item_id | integer | 媒体库主记录 ID。 |
resource_group_id | integer | 资源分组 ID。 |
tmdb_id | string | 本次写入的 TMDB ID,可能为空。 |
media_type | string | 本次写入的媒体类型。 |
title | string | 媒体标题。 |
custom_category | object/null | 命中的自定义分类信息;没有传自定义分类时为 null。 |
file_count | integer | 写入资源分组的文件数量。 |
video_count | integer | 写入资源分组的视频数量。 |
failed_items[] 失败结果字段
| 字段 | 类型 | 说明 |
index | integer | 失败条目在请求 items 中的位置,从 1 开始。 |
tmdb_id | string | 失败条目传入的 TMDB ID。 |
media_type | string | 失败条目传入的媒体类型。 |
title | string | 失败条目传入的标题。 |
message | string | 失败原因,例如标题为空、媒体类型为空、文件不属于当前根目录。 |
最小请求示例
{
"root_pk": 2,
"source_key": "manual-test",
"items": [
{
"title": "示例真人秀",
"media_type": "custom",
"year": 2026,
"custom_category_path": "综艺/真人秀",
"file_pks": [12345]
}
]
}
常见问题
多数问题可以从任务页、操作记录和日志定位。下面按常见症状整理。
我登录不了怎么办
先确认你用的是当前有效的管理员账号。首次启动时系统会在容器日志里输出临时账号密码,执行 docker logs HyperMS 查看。
如果部署时填了 HMS_ADMIN_KEY,可以在登录页走管理员密码重置流程。没填的话只能进数据库改或者重装。
页面能打开,但转存总是失败
按这个顺序检查:
- 网盘登录状态是不是"正常"?过期了就重新扫码或更新 Cookie
- 默认目标目录设了吗?没设的话系统不知道往哪转
- 当前账号有没有转存权限?如果是子账号,可能被管理员限制了
STRM 生成了,但 Emby 扫不到
最常见的原因是路径映射不一致。检查三点:
- HyperMS 生成的 STRM 文件,是不是放在 Emby 实际扫描的目录里?
- 容器里的
/media 和宿主机的目录映射关系,两边是否一致?
- Emby 里对应的媒体库路径,是否包含了 STRM 所在的子目录?
Emby 扫到了,但播放报错
这说明 STRM 文件本身没问题,问题出在直链解析上。去 HyperMS 的任务页看有没有"解析播放地址"相关的失败任务。
也可能是网盘登录失效了,直链拿不到。重新登录网盘后再试。
TMDB、Telegram、影巢连不上
先回设置页的“资源搜索 → 外网代理”里检查代理配置。如果容器走不了外网,这些服务全部会超时。
确认网络没问题后,再用测试按钮或测试消息验证单个服务是否可用。不要同时排查多个,容易搞混。
订阅一直没更新
三步排查:
- 订阅检查的定时开关开了吗?去设置页“功能开关 → 定时设置”里确认是否启用
- 任务页里有没有出现"订阅检查"任务?如果没出现,说明定时器没触发
- 有任务但失败了?看日志里的具体报错,可能是网盘空间满了、链接失效、或者 TMDB 匹配不到
索引同步不到最新文件
检查 115 生活事件功能是否打开。
检查索引定时同步是否启用,以及目标目录在网盘里是否还存在(有时候文件被移动或删除了)。
也可以手动在索引管理页点"立即同步",强制刷新一次。如果手动同步成功但自动不同步,说明定时器有问题,看日志。
完全不知道从哪里开始排查
按这个顺序看:
- 任务页:你点的操作有没有生成任务?任务状态是"成功"、"失败"还是"卡住"?
- 操作记录:系统实际执行了哪些动作?和你预期的一样吗?
- 日志页:看报错原文。如果是外部服务报错(比如 TMDB 429、网盘 401),日志里会有原始返回。
如果这三页都看不出问题,再考虑是不是设置填错了(比如路径、API Key、地址)。
还解决不了?
回到对应章节,对照配置要求和验证步骤再查一遍。
去社群提问
加入 Telegram 群,带上任务页截图、相关时间点的日志片段、设置页关键配置(敏感信息打码)。信息越全,别人越能精准定位。