snapetech/seerrng

GitHub: snapetech/seerrng

SeerrNG 是一个自托管应用,用于扩展个人媒体库的请求管理,添加了音乐和书籍支持。

Stars: 0 | Forks: 0

SeerrNG

SeerrNG CI License Support on Discord

# themselves. SeerrNG 是一个用于个人媒体库的自托管请求与发现应用。它将 Seerr/Jellyseerr/Overseerr 的脉络从电影和电视剧拓展至音乐、电子书和有声读物,同时为 Plex、Jellyfin、Emby、Radarr 和 Sonarr 用户保留了熟悉的请求审批流程。 此分支由 snapetech 维护。上游 Seerr 项目是继承视频、用户、服务器及部署行为的基础项目;SeerrNG 特有的开发工作聚焦于多格式媒体请求、服务路由、缓存以及分支自有的打包与文档。详情请参阅 [NOTICE.md](./NOTICE.md) 的归属规则。 ## SeerrNG 的功能 - 对电影、剧集、音乐、电子书、有声读物以及电子书/有声读物组合请求的请求与审批。 - 与 Plex、Jellyfin 和 Emby 的媒体服务器集成。 - 与 Radarr、Sonarr、Lidarr 以及兼容 Bookshelf/Readarr 的 API 的自动化服务集成。 - 通过 MusicBrainz、ListenBrainz、Cover Art Archive、TheAudioDB 以及基于存档的艺术品源进行音乐发现与元数据获取。 - 通过 Open Library、ISBN-10/ISBN-13 标准化、外国图书 ID 以及版本 ID 进行图书发现与身份匹配。 - 独立的电子书与有声读物服务路由,使两种格式均可独立进行请求、审批、扫描、重试和移除。 - 关注列表、屏蔽列表、请求配额、覆盖规则、权限、通知、问题报告和请求管理。 - 针对浏览器、Service Worker、API、DNS、头像及图片代理进行缓存调优,以加速刷新和标签页恢复。 ## 项目状态 SeerrNG 是一个活跃的分支项目。电影和电视剧功能是继承而来,通常稳定可用。音乐和图书支持功能可用,但仍应视为在不断演进中,尤其是在服务提供商匹配和现实世界中 Bookshelf/Readarr 边缘情况方面。 当前重点: - 稳定 Lidarr 的请求、扫描、重试和移除流程。 - 稳定 Bookshelf 的电子书、有声读物及双格式请求流程。 - 保持图片/API 缓存快速响应,同时避免在刷新时阻塞可见页面。 - 用 SeerrNG 自有的资源和指南替换上游品牌和文档。 - 加强请求验证、通知设置、权限边界和服务输入的健壮性。 ## 截图 ### 发现 SeerrNG Discover page ### 图书 SeerrNG Books page ### 音乐 SeerrNG Music page ## 安装 ### Let's list them: 主容器镜像由此仓库发布: ``` docker run -d \ --name seerrng \ -e LOG_LEVEL=info \ -e PORT=5055 \ -p 5055:5055 \ -v /path/to/seerrng/config:/app/config \ --restart unless-stopped \ ghcr.io/snapetech/seerrng:main ``` 打开 `http://localhost:5055` 并完成设置。 ### - SeerrNG: This might be a specific software or service. Without more context, I'll assume it's a proper noun and keep it as "SeerrNG". ``` services: seerrng: image: ghcr.io/snapetech/seerrng:main container_name: seerrng environment: LOG_LEVEL: info PORT: 5055 TMDB_API_KEY: ${TMDB_API_KEY} TMDB_READ_ACCESS_TOKEN: ${TMDB_READ_ACCESS_TOKEN} ports: - 5055:5055 volumes: - /path/to/seerrng/config:/app/config restart: unless-stopped ``` ### Linux 软件包 此仓库包含用于 tarball、Debian、RPM、AppImage、Flatpak、Snap、AUR、PPA 和 COPR 风格分发的工作流和打包元数据。如有可用,请使用 GitHub Releases 获取生成的构件。 ## 必需配置 SeerrNG 需要与 Seerr 相同的、用于视频库的基础配置,外加用于音乐和图书的可选服务。 核心: - 一个 Plex、Jellyfin 或 Emby 服务器。 - 用于电影自动化的 Radarr。 - 用于电视剧自动化的 Sonarr。 - 用于应用程序数据库的 SQLite 或 PostgreSQL。 音乐: - 在 **设置 > 服务** 中配置一个 Lidarr 服务器。 - 从 Lidarr 服务设置中配置根文件夹、质量配置文件、元数据配置文件和标签。 - 如果希望用户无需每次选择服务即可请求音乐,则需要一个默认的 Lidarr 服务器。 图书: - 在 **设置 > 服务** 中配置 Bookshelf 或其他兼容 Readarr 的服务。 - 将一个服务标记为支持电子书以处理电子书请求。 - (可选)将第二个服务标记为支持有声读物以处理有声读物请求。 - 如果希望双格式请求能正常工作,请分别为电子书和有声读物设置默认服务。 ## 环境变量 常用运行时变量: | 变量 | 用途 | | --- | --- | | `PORT` | HTTP 端口。默认为 `5055`。 | | `LOG_LEVEL` | 服务器日志级别。 | | `CONFIG_DIRECTORY` | 非容器安装的备用配置目录。 | | `TMDB_API_KEY` | TMDB v3 API 密钥。 | | `TMDB_READ_ACCESS_TOKEN` | TMDB v4 令牌。 | | `SEERR_EXTERNAL_READ_ONLY` | 启用时,阻止对外部自动化 API 的变更请求。适用于测试/实验室环境。生产环境在未明确允许的情况下,启用此项将无法启动。 | | `SEERR_ALLOW_PRODUCTION_EXTERNAL_READ_ONLY` | 允许在生产环境中使用 `SEERR_EXTERNAL_READ_ONLY` 以创建有意的只读副本。请勿在可写的 request.snape.tech 部署上设置此项。 | 使用部署密钥、`.env` 文件或容器环境变量。请勿提交私有的 TMDB、Plex、Jellyfin、Emby、Radarr、Sonarr、Lidarr、Bookshelf、SMTP 或通知凭证。 ### Cypress 运行时配置 Cypress 测试数据生成使用 `cypress/config/settings.cypress.json`,这是一个仅用于测试的配置,不包含活动的 Radarr、Sonarr、Lidarr 或 Bookshelf 设置。 默认情况下,`pnpm cypress:prepare` 和 `pnpm cypress:start` 使用 `CONFIG_DIRECTORY=cypress/runtime-config`,这样测试数据生成就不会覆盖活动的 `config/settings.json`。请勿将 `CONFIG_DIRECTORY` 指向 Cypress 运行的活动 `config` 目录。如果您有意需要使用 Cypress 数据重置活动设置,请设置 `SEERR_ALLOW_LIVE_CONFIG_OVERWRITE=true`;否则准备脚本会拒绝覆盖一个已配置了自动化服务的活动配置。 ## 缓存与性能 SeerrNG 拥有多层缓存。它们旨在加快重复浏览、页面刷新和标签页恢复的速度,同时保持媒体数据相对新鲜。 - **Service Worker 运行时缓存** 使可缓存的 API 响应、静态资源、头像和图片代理响应可供浏览器使用。 - **陈旧-重新验证 API 响应** 允许可缓存的页面快速加载,同时后台请求刷新数据。 - **图片代理缓存** 将支持的外部图片存储在配置缓存目录下,并返回浏览器验证器以实现高效的 `304 Not Modified` 响应。 - **可见内容优先预热** 在首屏下方内容之前,为可见标题的图片进行预热。 - **隐藏标签页抑制** 在标签页隐藏时跳过图片预热,以便返回标签页时不会因过时的任务而使应用过载。 - **主机缓存** 覆盖 TMDB、MusicBrainz、ListenBrainz、Open Library、Cover Art Archive、TheAudioDB、Radarr、Sonarr、Lidarr、Readarr/Bookshelf、DNS 以及受支持的图片元数据。 - **任务与缓存设置** 提供缓存统计信息和清除控制。 如果 SeerrNG 在反向代理后运行,请勿全面剥离缓存头或对 `/imageproxy/*`、`/avatarproxy/*`、`/sw.js`、静态资源或可缓存的 API 响应强制设置 `Cache-Control: no-store`。应用页面和敏感路由可以保持不可缓存。 ## 开发 要求: - 与仓库/工具链版本匹配的 Node.js。 - `pnpm`。 - 用于本地开发的 SQLite,或用于测试该后端的 PostgreSQL。 安装依赖项: ``` pnpm install ``` 运行开发服务器: ``` pnpm dev ``` 有用的命令: ``` pnpm typecheck pnpm typecheck:client pnpm typecheck:server pnpm lint pnpm test pnpm build pnpm --dir gen-docs build ``` API 文档由运行的本地安装提供,地址为: ``` http://localhost:5055/api-docs ``` ## 测试真实集成 对于音乐和图书的更改,请尽可能针对真实服务进行测试: - 添加一个 Lidarr 服务器,将其设为默认,请求一张专辑,批准它,扫描它,重试失败案例,然后移除它。 - 添加一个兼容 Bookshelf/Readarr 的电子书服务器,通过搜索结果和特定版本/ISBN 请求一本书,批准它,扫描它,重试它,然后移除它。 - 添加一个独立的有声读物 Bookshelf 服务,测试纯有声读物请求以及双格式请求。 - 确认请求卡片、请求详情页、通知和后端链接指向正确的 SeerrNG 和服务页面。 请参阅 [docs/using-seerr/music-and-books-alpha.md](./docs/using-seerr/music-and-books-alpha.md) 获取当前的手动测试清单。 ## 法律用途 SeerrNG 旨在用于合法的个人媒体管理。本项目不提供媒体,不绕过 DRM,也不纵容盗版或侵权行为。用户有责任遵守其所在地区适用的法律、许可和服务条款。 ## 支持 - Discord:https://discord.gg/2N42G4RJCU - 问题:https://github.com/snapetech/seerrng/issues - 讨论:https://github.com/snapetech/seerrng/discussions 当您需要了解继承的部署或视频库行为背景时,请使用上游 Seerr 文档,但请在本仓库中报告 SeerrNG 特有的音乐、图书、缓存、打包和品牌问题。 ## 贡献 贡献应针对 SeerrNG 行为和本仓库当前的分支布局。在提交拉取请求之前: - 保持分支归属信息完整。 - 避免重新引入仅上游的品牌。 - 添加或更新用于请求、验证、服务路由、缓存和扫描器行为的测试。 - 运行相关的类型检查/测试命令。 - 按 [CONTRIBUTING.md](./CONTRIBUTING.md) 要求披露 AI 辅助情况。 ## 归属 SeerrNG 基于 Seerr、Jellyseerr 和 Overseerr 构建。继承的代码、文档和设计仍归功于其原始贡献者。除非另有说明,否则分支特定的更改归功于 snapetech 和 SeerrNG 贡献者。完整的归属政策请参阅 [NOTICE.md](./NOTICE.md)。
标签:Emby集成, Jellyfin集成, Lidarr集成, MITM代理, MusicBrainz, Open Library, Plex集成, Radarr集成, Readarr集成, Sonarr集成, 个人媒体库, 书籍请求, 元数据获取, 内容发现, 媒体管理, 媒体请求工具, 有声书管理, 测试用例, 用户权限, 电子书管理, 自托管媒体管理, 自托管应用, 请求批准, 请求拦截, 请求配额, 通知系统, 问题报告, 音乐请求