如何跨Radarr、Jellyfin和Seerr匹配同一部影片:Janitorr的IMDB/TMDB/TVDB匹配逻辑完整解析 如何跨Radarr、Jellyfin和Seerr匹配同一部影片Janitorr的IMDB/TMDB/TVDB匹配逻辑完整解析【免费下载链接】janitorrCleans your Radarr, Sonarr, Jellyseerr and Jellyfin before you run out of space项目地址: https://gitcode.com/gh_mirrors/ja/janitorrJanitorr是一款自动清理媒体库的开源工具它会定期扫描你的Radarr电影与Sonarr剧集找出超过保留期限的影片然后远程删除对应文件并同步清理Jellyfin / Emby中的元数据和Seerr里的申请记录避免硬盘被永远没人看的媒体塞满。很多人第一次接触 Janitorr 都会有个疑问Radarr 里存的是自己的数据库 IDJellyfin 里存的是它的 item IDSeerr 里又是一套 ID——这三套系统到底怎么知道我们说的是同一部《奥本海默》答案就是Janitorr 完全绕开各自的本机 ID改用IMDB、TMDB、TVDB这三个全球通用的媒体编号做身份证比对。本文带你完整看懂这套跨系统影片匹配逻辑。一、为什么跨系统匹配这么难三个系统对同一部影片的记录方式完全不同系统它认识影片的编号特点Radarr / Sonarr本地自增 ID如id: 128每台服务器都不同Jellyfin / Emby内部 item IDUUID重建媒体库后可能变化Seerr申请记录 ID 外部服务 ID还会记录是哪个 *arr 实例发起的如果直接拿这些 ID 互相比对结果可想而知全对不上。所以 Janitorr 的策略是——只比三个全球唯一的第三方编号IMDB ID如tt6710474IMDb 的影片编号电影和剧集通用TMDB IDThe Movie Database 的影片编号Radarr 必备TVDB IDTV 数据库编号剧集专属Sonarr 必备这三组编号在三个系统里都会被自动填充只要任意一组相等就可以确认是同一部影片。二、第一道匹配关Jellyfin 里的 ProviderIdsJanitorr 向 Jellyfin 请求媒体列表时会显式要求带上元数据字段fieldsPath,ProviderIds返回的每部影片都携带一组ProviderIds第三方提供者编号定义在 ProviderIds.kt 中包含Tvdb、Imdb、Tmdb三个字段。真正的比对逻辑在 BaseMediaServerService.kt先比类型电影只能对电影剧集只能对剧集类型不符直接跳过再比编号取出候选影片的ProviderIds与待删除条目来自 Radarr/Sonarr的imdbId/tmdbId/tvdbId逐一比对任一命中即匹配IMDB、TMDB、TVDB 三个编号只要任意一个相等就判定为同一部影片执行删除。这种三选一命中的设计非常稳健——即便某部老片在 Jellyfin 里缺失 TVDB 编号也能靠 IMDB 编号兜底。剧集的一个巧妙细节季继承整剧的 IDJellyfin 把剧集拆成剧→季两层而季Season本身只有 TVDB 编号没有 IMDB/TMDB 编号。Janitorr 在 MediaServerLibraryQueryService.kt 里做了一个贴心处理拉取每个季时直接把整部剧的 ProviderIds 复制给该季这样删某一部剧的一季时也能用 IMDB/TMDB 编号精准锁定而不依赖季自己那个孤零零的 TVDB 编号。三、第二道匹配关Seerr 申请的双轨匹配清理 Seerr 里的过期申请时Janitorr 用的是两级策略实现在 SeerrRestService.kt 首选外部服务 ID 直连Seerr 的每条申请都记录了externalServiceId——也就是当初处理这条申请的Radarr 或 Sonarr 里的影片 ID。Janitorr 直接把待清理条目的id与它比对一步到位最精确。 兜底元数据编号回退如果外部 ID 对不上例如申请被其他 *arr 实例处理过就回退到与 Jellyfin 相同的三编号比对imdbMatches || tmdbMatches || tvdbMatches命中任意一个即匹配。Seerr 侧的编号字段见 Media.kt。此外还有两道安全阀服务器校验若启用了matchServer还会校验该申请指向的 Radarr/Sonarr 实例是否就是你配置的那台防止多实例环境误删类型校验剧集申请必须带季信息且与条目季号一致电影申请则要求没有季信息避免电影误删成剧集。四、第三道匹配关*arr 侧的编号来源比对的起点是 Radarr/Sonarr 的影片数据Janitorr 把它们统一装进 LibraryItem.kt 这个身份证卡片里同时携带imdbId、tvdbId、tmdbId、season季号和路径等信息电影来自 Radarr 的影片列表天然带有imdbId和tmdbId见 MoviePayload.kt剧集来自 Sonarr 的剧集列表天然带有imdbId和tvdbId见 SeriesPayload.kt。也就是说*arr 提供删除目标清单 全球编号Jellyfin 和 Seerr 各自拿着同一套编号体系接招三方在同一把尺子下完成匹配。五、匹配规则速查表 ✅清理目标优先匹配方式兜底匹配方式Jellyfin 电影/剧集类型一致 IMDB/TMDB/TVDB 任一相等季的 ProviderIds 由整剧继承Seerr 申请id externalServiceId*arr 本地 IDIMDB/TMDB/TVDB 任一相等安全校验类型必须一致电影/剧集季号可选服务器实例校验六、小结Janitorr 的跨系统匹配核心思想一句话就能概括不信本机 ID只认全球编号。通过 IMDB/TMDB/TVDB 三编号任一命中策略加上 Seerr 侧的外部 ID 优先、元数据兜底双轨设计它能在 Radarr、Sonarr、Jellyfin、Seerr 四个系统之间准确锁定同一部影片把过期媒体连同元数据、申请记录一起清理干净——这正是它在你硬盘爆满之前完成打扫的关键所在。✨更多使用细节可参考 README.md 与 docs/local-development.md配置文件示例见 examples/example-compose.yml。【免费下载链接】janitorrCleans your Radarr, Sonarr, Jellyseerr and Jellyfin before you run out of space项目地址: https://gitcode.com/gh_mirrors/ja/janitorr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考