ryot 介绍与选型指南

自托管全类型媒体追踪系统 ryot(IgnisDa/ryot v10.5.6,GPL-3.0,3.7k★)的定位、架构、功能与限制,含 GraphQL 快速上手实测回显及与 Trakt/Simkl/AniList/Overseerr/Jellyseerr 的量化选型对比。

ryotryot自托管2026/11/03

ryot 介绍与选型指南

目标:回答「ryot 是什么、内部怎么组成、适合谁用、与 Trakt/Simkl/AniList/Overseerr/Jellyseerr 怎么选」。文中版本、星数、接口规模、快速上手回显均来自 2026-11-03 对运行实例 http://127.0.0.1:8141(v10.5.6)与 GitHub/shields.io 的实测实查。

一、环境信息

  • 操作系统:Ubuntu 24.04.5 LTS(x86_64)
  • ryot 版本:v10.5.6(GitHub 仓库 IgnisDa/ryot,GPL-3.0)
  • 依赖数据库:PostgreSQL 18(官方要求 ≥ 15)
  • 服务地址:http://127.0.0.1:8141(统一入口;GraphQL 端点 POST /backend/graphql)
  • 演示账号:admin / q1w2e3r4

二、软件概述

ryot 是一款自托管(self-hosted)媒体追踪服务:把电影、剧集、动漫、漫画、书籍、游戏、音乐、播客等所有「消费过的媒体」的评分、评论、观看进度、收藏集合集中记录在自己服务器上,数据完全自主。

  • 技术栈:Rust 后端(GraphQL)+ React 前端,打包为一体化可执行服务(内置反向代理统一入口)。
  • 开源与许可:GPL-3.0;社区版功能完整,SERVER_PRO_KEY 对应可选增值能力。
  • 仓库纠偏(实查 2026-11-03):历史资料中的 Synthead/ryot 已 404,真实仓库为 github.com/IgnisDa/ryot;shields.io 实测 3.7k stars / 145 forks。
  • 版本节奏:Releases 几乎每周发 v10.x.y 补丁,实测最新为 v10.5.6(releases.atom)。
  • 遥测:默认启用 Umami 匿名统计,可用 DISABLE_TELEMETRY=true 关闭(见 《ryot v10.5.6 配置参数详解》)。

三、核心架构

ryot 单进程组对外只暴露一个入口(内部 8000),由内置反向代理分流(Caddyfile 实查):

路径去向说明
/backend*Rust GraphQL 后端(内部 5000)剥 /backend 前缀;/backend/graphql 为 API 端点,/backend/config 为免认证配置核对端点
/_i/*后端 /webhooks/integrationsPlex/Jellyfin 等媒体服务器回调
/health内联 /actions + /backend/config聚合健康检查(实测 200)
其余React SSR 前端(内部 3000)未登录访问受保护页 302 跳 /auth(实测)

数据层:全部业务数据落 PostgreSQL(实测运行 7 小时数据目录 72M),上传/截图类文件可选走 S3 兼容对象存储。

接口规模(__type introspection 实测):QueryRoot 46 个查询字段、MutationRoot 70 个变更字段,完整 API 用法见 《ryot v10.5.6 API 使用详解》。

四、功能特性

  • 11 种媒体类型(MediaLot 枚举实测):BOOK / SHOW / MOVIE / ANIME / MANGA / MUSIC / PODCAST / AUDIO_BOOK / VIDEO_GAME / COMIC_BOOK / VISUAL_NOVEL。
  • 19 个外部元数据源(MediaSource 枚举实测):TMDB、TVDB、IGDB、AniList、MyAnimeList、Google Books、Hardcover、OpenLibrary、Spotify、ListenNotes、Metron、Giant Bomb、VNDB、iTunes、Audible、Manga Updates、YouTube Music、MusicBrainz、Custom。多数需自备 API key,ANILIST 等免 key 可用(实测搜索成功)。
  • 追踪模型:评分(Decimal)+ 评论 + 观看历史(SeenState:COMPLETED / IN_PROGRESS / ON_A_HOLD / DROPPED)+ 逐集/逐章进度。
  • 集合系统:新用户自动获得 7 个默认集合(Completed/In Progress/Monitoring/Reminders/Watchlist/Custom/Owned,实测 userCollectionsList 可见),可自建并异步批量加实体。
  • 日历与分析:userCalendarEvents、userAnalytics、trendingMetadata、peopleSearch(演职人员)等查询域。
  • 历史导入:Trakt、Plex、Jellyfin、AniList、MyAnimeList、Goodreads、Grouvee、Hardcover、Movary、Netflix、IMDb、Storygraph、Audiobookshelf、MediaTracker、Strong、OpenScale、Hevy、Watcharr 等专用导入器(源码 crates/services/importer/ 目录实查)。
  • 媒体服务器集成:Plex/Jellyfin/Emby/Kodi 观看事件回调入库,Sonarr/Radarr 状态联动(源码 crates/services/integration/ 实查)。
  • 企业级周边:OIDC 单点登录、两步验证(2FA)、SMTP 通知、S3 文件存储、多用户与管理员(usersList/updateUser)、定时任务(默认每 5 分钟/每晚)。

五、快速开始

部署全流程见 《ryot Docker Compose 部署指南》;服务就绪后,以下四条命令即可完成验证与首次使用(实测回显):

# 1. 健康检查
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:8141/health
# HTTP 200

# 2. GraphQL 端点探测(免认证)
curl -s http://127.0.0.1:8141/backend/graphql -H 'Content-Type: application/json' \
  -d '{"query":"query { __typename }"}'
# {"data":{"__typename":"QueryRoot"}}

# 3. 查看实例核心信息
curl -s http://127.0.0.1:8141/backend/graphql -H 'Content-Type: application/json' \
  -d '{"query":"query { coreDetails { version pageSize docsLink } }"}'
# {"data":{"coreDetails":{"version":"v10.5.6","pageSize":20,"docsLink":"https://docs.ryot.io"}}}

# 4. 登录取 API 令牌(管理员 admin/q1w2e3r4)
curl -s http://127.0.0.1:8141/backend/graphql -H 'Content-Type: application/json' \
  -d '{"query":"mutation { loginUser(input: {password: {username: \"admin\", password: \"q1w2e3r4\"}}) { __typename ... on ApiKeyResponse { apiKey } } }"}'
# {"data":{"loginUser":{"__typename":"ApiKeyResponse","apiKey":"UFPP7KKBIKI4P4NXZXVFX2Q2MNGWXODSEQ7TIOIKLWD7RNB6TVPQ===="}}}

⚠️ 注意:ryot 没有默认管理员账号,首次使用必须先 registerUser(携带 SERVER_ADMIN_ACCESS_TOKEN),详见 《ryot Docker Compose 部署指南》第 4.4 节。

六、适用场景与限制

适用:

  • 想在自建服务器上统一管理影视/动漫/书籍/游戏/播客追看与评分的个人与家庭(多用户 + 角色控制);
  • 已有 Plex/Jellyfin 媒体服务器,希望观看历史自动回流并联动 Sonarr/Radarr;
  • 需要程序化批量操作(GraphQL API 全覆盖,见 API 使用篇)。

限制(实测/实查):

  • 只做「追踪」,不播放、不管理媒体文件,不是媒体服务器;
  • 必须外部 PostgreSQL(≥15),不支持 SQLite/MySQL;
  • 无 REST API,程序化只有 GraphQL 单端点;
  • 影视主源 TMDB、游戏主源 IGDB(Twitch)等需自行申请 API key,未配置则对应源不可搜索;
  • 默认向作者 Umami 实例上报匿名统计,隐私敏感需显式关闭。

七、同类选型对比

方案形态定位开源自托管星数(shields.io 实测 2026-11-03)许可
ryot自托管服务全类型媒体追踪是3.7k(IgnisDa/ryot)GPL-3.0
Trakt云服务影视追踪 + 播放生态否(仅开放 API)—商业
Simkl云服务影视/动漫/游戏/书追踪否—商业
AniList云服务动漫/漫画社区追踪否(开放 GraphQL API;协议文档库 1.3k★)1.3k(AniList/ApiV2-GraphQL-Docs)商业(前端开源)
Overseerr自托管服务Plex/Jellyfin 请求管理是5k(sct/Overseerr)MIT
Jellyseerr自托管服务Jellyfin 请求管理(Overseerr 分支)是13k(fallenbagel/jellyseerr)MIT

解读:Trakt/Simkl/AniList 是「云端记录、随时可能被停服/改条款」的托管追踪;Overseerr/Jellyseerr 解决的是「让家人点播请求媒体」,不记录你看过什么、打几分。ryot 与它们不重叠——它是自托管的全类型追踪层,还能把 Plex/Jellyfin 的真实观看事件自动记进来。

选型建议:

  • 只追动漫、混社区 → AniList 够用;要影视多平台评分同步且不在乎数据主权 → Trakt/Simkl;
  • 家庭媒体服务器点播场景 → Overseerr/Jellyseerr(可与 ryot 并存);
  • 需要「所有类型媒体的评分/进度/历史都在自己手里 + 可编程」→ 选 ryot。

八、参考链接