Seerr 版本发布解读:Overseerr 与 Jellyseerr 合并为统一项目
【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr
<output_article>
Seerr 发布解读:Overseerr 与 Jellyseerr 合并、TVDB 元数据与 DNS 缓存等新特性全解析
本文基于 Seerr 官方发布公告(gen-docs/blog/2026-02-10/seerr-release.md)撰写,系统解读这一里程碑版本:Overseerr 与 Jellyseerr 两个团队正式合并为统一的Seerr项目,并一次性带来 TVDB 元数据提供方、DNS 缓存、Webhook 动态占位符、PostgreSQL 支持、Helm Chart、ntfy 通知等一系列新特性。读完本文,你将掌握 Seerr 相较旧版的核心差异、每一项新功能的配置入口与适用场景,以及从 Overseerr/Jellyseerr 无缝迁移到 Seerr 的具体步骤与注意事项。
一、版本背景:两个项目的正式合并
Seerr 是一个开源媒体请求与发现管理器(支持 Jellyfin、Plex 与 Emby),本次发布的重大意义在于:Jellyseerr 与 Overseerr 的开发团队正式合并为单一团队 "Seerr",所有既有功能汇聚到一个共享代码库中。
对于用户而言,这意味着:
- 一个代码库同时整合了 Overseerr 的全部既有功能与 Jellyseerr 的最新特性;
- 原生支持 Jellyfin 与 Emby(与 Plex 并列作为媒体服务器后端);
- 更新交付更高效,项目得以持续向前演进。
从仓库结构可以印证这一合并结果:仓库同时包含 server/api/jellyfin.ts、server/api/plexapi.ts 等媒体服务器 API 实现,以及 docs/migration-guide.mdx 中针对 Overseerr/Jellyseerr 用户的自动迁移说明。官方推荐查阅迁移指南(仓库内对应文档 docs/migration-guide.mdx)完成升级。
二、面向 Overseerr 用户的新特性一览
以下功能此前仅在 Jellyseerr 中存在,合并后所有 Seerr 用户均可使用:
| 新特性 | 说明 |
|---|---|
| 替代媒体方案 | 支持将 Jellyfin 与 Emby 作为 Plex 的替代品接入;同一时间只能启用一种集成 |
| PostgreSQL 支持 | 在 SQLite 之外,可选用 PostgreSQL 作为数据库 |
| 电影/剧集/标签的屏蔽列表(Blocklist) | 允许有权限的用户将特定电影、剧集或标签对普通用户隐藏 |
| 覆盖规则(Override Rules) | 基于用户、标签等条件调整默认请求设置 |
| TVDB 元数据 | 可选择使用 TheTVDB 作为剧集元数据源(与 Sonarr 一致)而非 TMDB |
| DNS 缓存 | 减少 DNS 查询次数与外部请求,对使用 Pi-Hole/AdGuard Home 的场景尤为有效 |
| 内置 Helm Chart | 便于在 Kubernetes 环境中安装与维护 |
| ntfy.sh 通知 | 支持通过 ntfy.sh 发送通知 |
| 禁用特殊季 | 新增设置,阻止特殊季(如 S0)被展示或请求 |
| 新语言 | 新增土耳其语(Turkish)与巴斯克语(Basque) |
这些特性在仓库中均有对应实现,例如:
- 屏蔽列表相关实现见 src/components/Blocklist/index.tsx 与 server/routes/blocklist.ts;
- 覆盖规则相关实现见 server/entity/OverrideRule.ts;
- ntfy 通知代理实现见 server/lib/notifications/agents/ntfy.ts,其 API 路由在 server/routes/settings/notifications.ts 中注册(
GET/POST /ntfy); - Helm Chart 位于 charts/seerr-chart。
三、面向 Jellyseerr 用户的新特性:自上一版本以来的改进
本次发布同样为 Jellyseerr 老用户带来了多项长期期待的功能:TVDB 元数据支持、DNS 缓存、Webhook 动态占位符,以及若干面向开发者与普通用户的体验优化。
3.1 PNPM v10 升级(面向源码构建者)
Seerr 已将包管理器升级到PNPM v10。如果你从源码构建 Seerr 或参与贡献,需要在开始工作前更新本地的 PNPM:
pnpm self-update随后验证版本:
pnpm -v应显示10.x.x。使用 Docker 的用户无需关心此项变更。
3.2 TVDB 元数据提供方(实验性)
此前 Seerr(及其前身)仅依赖TMDB提供电影与剧集信息。由于 Sonarr 使用TheTVDB作为元数据源,两者在季/集编号上偶尔会出现不一致。引入 TheTVDB 后,Seerr 可为剧集与动画使用与 Sonarr 相同的数据源,保证两侧季集信息的一致与准确。
配置入口位于设置页的新 "Metadata Providers" 选项卡:
从源码看,该设置的后端逻辑位于 server/routes/settings/metadata.ts:
- 设置模型
MetadataSettings包含tv与anime两个字段,取值来自枚举MetadataProviderType(tmdb或tvdb),定义见 server/lib/settings/index.ts; - 保存配置时,后端会先行测试所选的提供方连通性:选择 TVDB 时调用
Tvdb.getInstance().test(),选择 TMDB 时调用TheMovieDb().getTvShow({ tvId: 1054 }); - 测试结果通过
getTestResultString归一化为三种状态:not tested(-1)、failed(0)、ok(1)。任一测试失败则返回 500 并携带失败状态,全部通过才写入并保存设置; - 另提供独立的
POST /test端点(metadataRoutes.post('/test', ...))供前端手动测试提供方连通性。
注意:该特性当前标记为实验性,默认配置为剧集与动漫均使用 TMDB(见 server/lib/settings/index.ts 的默认值)。
3.3 DNS 缓存(实验性)
Node.js 默认不会缓存任何 DNS 请求。对于大型 Jellyfin 媒体库,每一个 HTTP 请求都会触发一次 DNS 查询,极易产生极高的 DNS 查询频率,进而被Pi-Hole / AdGuard Home之类的 DNS 服务限流甚至封禁。Seerr 的 DNS 缓存管理器通过缓存 DNS 查找结果,显著降低 DNS 服务器压力,避免限流或封禁问题。
配置入口位于 Seerr 设置的 Network(网络)选项卡中的 "DNS Cache" 设置:
从源码看,其实现位于 server/utils/dnsCache.ts:
- 核心基于
dns-caching包的DnsCacheManager,Seerr 在此之上做了薄封装; - 初始化函数
initializeDnsCache接收forceMinTtl与forceMaxTtl两个参数(秒),内部乘以 1000 转换为毫秒后传入DnsCacheManager; - 默认配置为
enabled: false、forceMinTtl: 0、forceMaxTtl: -1(见 server/lib/settings/index.ts),forceMaxTtl: -1表示不强制上限、遵循系统 TTL; - 缓存的启用时机在服务启动阶段(server/index.ts):当
settings.network.dnsCache.enabled为真时调用initializeDnsCache; - 管理员可通过
GET /api/v1/settings/cache查看 DNS 缓存统计与缓存条目(dnsCache.getStats()/dnsCache.getCacheEntries()),并可通过POST /api/v1/settings/cache/dns/:dnsEntry/flush单独清除某条缓存(见 server/routes/settings/index.ts)。
3.4 Jellyfin 媒体库的 AniDB 回退
针对 Jellyfin 管理的媒体库,本版本增加了额外的元数据来源:当条目缺少 TMDB 或 TVDB 的提供方 ID 时,Seerr 会自动回退到 AniDB,从而覆盖更多小众或区域限定的动漫作品。
3.5 Webhook URL 动态占位符(实验性)
Webhook 通知现在支持在 URL 中嵌入动态占位符,运行时由 Seerr 自动替换为真实值。例如,可以将请求者的用户名直接拼入 Webhook URL,以便与第三方服务或按用户区分的端点深度集成。
启用入口位于Notifications(通知)设置页,界面会列出当前可用的占位符供参考;该功能目前标记为实验性,欢迎社区反馈以在后续版本中扩充占位符集合。
从源码看,占位符的替换逻辑位于 server/lib/notifications/agents/webhook.ts:
- 当
settings.options.supportVariables为真时,遍历KeyMap(webhook.ts)中定义的全部占位符键; - 占位符采用
{{key}}语法,通过正则new RegExp('{{' + key + '}}', 'g')全局替换为真实值,并经过encodeURIComponent编码; KeyMap中预置了丰富的变量,例如:{{notification_type}}、{{event}}、{{subject}}、{{message}}、{{image}}{{notifyuser_username}}、{{notifyuser_email}}、{{notifyuser_avatar}}、{{notifyuser_settings_discordIds}}{{media_imdbid}}、{{media_tmdbid}}、{{media_tvdbid}}、{{media_type}}、{{media_status}}、{{media_status4k}}{{request_id}}、{{requestedBy_username}}、{{requestedBy_email}}{{issue_id}}、{{issue_type}}、{{issue_status}}、{{reportedBy_username}}、{{comment_message}}、{{commentedBy_username}}等
- 测试通知(
Notification.TEST_NOTIFICATION)时,所有变量统一替换为test,便于验证 URL 拼接结果。
对应地,Webhook 的保存/读取接口(server/routes/settings/notifications.ts)会持久化supportVariables、customHeaders、authHeader等选项(JSON 载荷以 base64 形式存储)。
3.6 通知中的图片改为可选
另一项小改进:通知中的图片现在是可选项(默认仍启用)。此前版本发送通知时总是附带图片,一旦图片缺失或不可用,会导致链接失效或请求失败。现在可以关闭图片,避免此类问题。
3.7 安全与供应链改进
本版本在安全层面做了系统性加固:
- 更新了部分过期的依赖(相关工作仍在进行中);
- Helm Chart 与容器镜像现在均经过加密签名,可在客户端侧验证与强制校验;
- 容器改为以非 root 用户(rootless)运行;
- 工作流全面重构,尽量减少第三方 Actions;
- 权限得到强化,Actions 固定到特定的哈希值,提升可追溯性;
- 发布流程移除了大量过时与插件依赖,替换为更标准的行业解决方案。
容器以非 root 运行的细节,可参考 Dockerfile 以及 Helm Chart 中默认的securityContext配置(charts/seerr-chart/templates/statefulset.yaml)。
四、PostgreSQL 用户特别注意事项
官方在发布说明中以醒目方式给出提示:
如果你在 Docker 中把 Postgres 从17 升级到 18,请注意数据挂载点已经变更。不再使用
/var/lib/postgresql/data,正确的挂载路径现在是/var/lib/postgresql。该挂载点更新是保证升级后容器正常工作的必要条件。
即升级后需要将卷挂载目标更新为:
volumes: - postgres-data:/var/lib/postgresqlSeerr 的 PostgreSQL 迁移脚本位于 server/migration/postgres,首次以 Seerr 代码库启动时,迁移会自动执行(详见下文迁移章节)。
五、从 Overseerr / Jellyseerr 迁移到 Seerr
根据官方迁移指南(docs/migration-guide.mdx),无论来自 Overseerr 还是 Jellyseerr,都无需手动执行迁移步骤——实例会在首次使用 Seerr 代码库(Docker 镜像、源码构建或 Kubernetes)启动时自动完成迁移;Overseerr 用户还会额外执行一次配置到新代码库的迁移。
迁移前务必先备份现有实例(详见官方 Backups 文档),以便出问题时回滚。
5.1 Docker 用户
迁移要点:
- 所有
overseerr/jellyseerr引用统一更名为seerr; - 容器镜像引用更新为 Seerr 官方镜像;
- 容器现在可以且建议以非 root 用户(
node用户,UID 1000)运行,如果此前配置了user指令请移除; - 镜像不再内置 init 进程,需要在 Docker Compose 中添加
init: true,或在 Docker CLI 中添加--init。
由于容器以node用户(UID 1000)运行,必须确保 config 目录权限正确:
docker run --rm -v /path/to/appdata/config:/data alpine chown -R 1000:1000 /dataDocker Compose 示例(Unix):
services: seerr: image: ghcr.io/seerr-team/seerr:latest init: true container_name: seerr environment: - LOG_LEVEL=debug - TZ=Asia/Tashkent - PORT=5055 #optional ports: - 5055:5055 volumes: - /path/to/appdata/config:/app/config healthcheck: test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s retries: 3 restart: unless-stoppedDocker CLI 示例:
docker run -d \ --name seerr \ --init \ -e LOG_LEVEL=debug \ -e TZ=Asia/Tashkent \ -e PORT=5055 \ -p 5055:5055 \ -v /path/to/appdata/config:/app/config \ --restart unless-stopped \ ghcr.io/seerr-team/seerr:latest官方 Docker 镜像提供以下标签:latest(最新稳定版)、版本标签(如v3.0.0)、大版本别名(如v3)、小版本别名(如v3.0)以及develop(滚动/每日构建,慎用)。
5.2 Kubernetes 用户
- manifest 中所有
jellyseerr引用更名为seerr; - 镜像引用更新;
- 默认
securityContext与podSecurityContext已更新为支持非 root 运行:
image: repository: seerr-team/seerr podSecurityContext: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: false runAsNonRoot: true privileged: false runAsUser: 1000 runAsGroup: 1000 seccompProfile: type: RuntimeDefault对应的 Helm Chart 位于 charts/seerr-chart,可直接用于 Kubernetes 环境安装。
5.3 源码构建与第三方安装方式
- 源码构建:按官方文档(docs/getting-started/buildfromsource.mdx)从零安装,恢复备份数据后启动即可,无需额外步骤;注意先升级 PNPM 至 v10(见上文 3.1 节);
- 第三方方式(如 AUR、TrueNAS、Unraid 等)由社区维护,Seerr 团队不对其负责;其中Snap 包当前未维护。Unraid 用户可直接将原有 appdata 目录复制为 Seerr 的 appdata(
cp -a /mnt/user/appdata/overseerr /mnt/user/appdata/seerr),首次启动即自动完成数据迁移。
六、总结
Seerr 的这次合并发布,将 Overseerr 与 Jellyseerr 的能力整合进单一代码库,为两类用户带来互补的功能:Overseerr 用户获得了 Jellyfin/Emby 支持、PostgreSQL、屏蔽列表、覆盖规则、Helm Chart 与 ntfy 通知等能力;Jellyseerr 用户则迎来 TVDB 元数据、DNS 缓存、Webhook 动态占位符等长期期待的特性,同时整个项目在供应链安全、镜像签名与 rootless 运行等方面全面加固。对于现有用户,升级路径足够平滑——首次以 Seerr 代码库启动即自动完成数据迁移,只需留意容器 init 进程、config 目录权限与 PostgreSQL 挂载路径等细节变更。
</output_article>
【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考