Ryot
Self-hosted tracker for movies, shows, books, games, and more
Ryot is a self-hosted application for tracking everything you consume, including movies, TV shows, video games, books, podcasts, and fitness. It provides a unified dashboard with metadata from many providers.
Key features
- Tracks many media categories
- Unified consumption dashboard
- Fitness tracking included
- Multiple metadata sources
Pros & cons
Strengths
- Very broad tracking
- Active development
Trade-offs
- Not a media player
- Setup has options to learn
Ryot replaces
Last reviewed Sep 13, 2026 · 812 words
Ryot is for the person who has a Trakt account for shows, a Goodreads shelf for books, a games backlog somewhere, a podcast app that remembers episodes, and a workout app, and would like one database instead of five. It tracks all of those plus movies, audiobooks, anime, manga, visual novels and music, holds your fitness history with an exercise library, and wraps it in one dashboard with stats across categories. The trade is that it needs PostgreSQL, has more settings than any single-purpose tracker, and is a 2023 project still changing shape. If you only track films and shows, the smaller purpose-built tools are simpler, and I name them below.
One tracker, ten media types, many metadata sources
Every media type has its own provider: TMDB for film and TV, Open Library and Google Books for books, IGDB for games, Anilist and MyAnimeList for anime and manga, Audible for audiobooks, and podcast indexes for shows. That is what makes the breadth work; you search once, Ryot asks the right source, and the entry arrives with cover art, cast, runtime or page count, and release dates. A few providers need your own credentials (IGDB wants a Twitch developer client ID and secret, for instance), and the first hour of setup is mostly registering for those. The dashboard then answers the questions the separate apps never could: hours watched this year across everything, pages read per month, games finished against games abandoned, and a calendar of upcoming releases for anything you have marked as anticipated.
Imports are the make-or-break feature, and they mostly work
A tracker is worthless if you start at zero. Ryot imports from Goodreads and StoryGraph for books, Trakt and IMDb lists for film and TV, Movary and MediaTracker for people leaving other self-hosted trackers, Audiobookshelf, and a generic JSON path for the rest. Trakt import covers history, ratings and watchlist; Goodreads brings shelves, ratings and dates read. Expect a handful of unmatched items per hundred, mostly obscure editions and titles that TMDB and Open Library disagree on, and expect to fix those by hand. Run the import once, on a fresh instance, before you add anything manually, because re-running an import to fill gaps can duplicate entries.
Integrations turn it from a diary into a log
The part that makes Ryot stick is that you stop entering things. The Jellyfin integration marks episodes and films watched as you finish them on your media server; Plex, Emby and Kodi have equivalents. Audiobookshelf progress flows in for audiobooks and podcasts. A browser extension and a mobile-friendly web app cover the rest. For fitness, you log workouts directly in Ryot's UI, which is better than it sounds: the exercise library has several hundred movements, supersets and rest timers exist, and personal records get tracked per exercise. It is not a Strava replacement, since there is no GPS or device sync, but for gym logs it is a genuine app.
Deployment: Postgres, one container, one URL
services:
ryot-db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=ryot
- POSTGRES_PASSWORD=change-me
- POSTGRES_DB=ryot
volumes:
- ./postgres:/var/lib/postgresql/data
ryot:
image: ignisda/ryot:latest
environment:
- DATABASE_URL=postgres://ryot:change-me@ryot-db:5432/ryot
- FRONTEND_URL=https://ryot.example.com
ports:
- "8000:8000"
depends_on:
- ryot-db
The frontend and backend are one image on port 8000, so the reverse proxy work is a single upstream. The 512 MB minimum is for Ryot plus PostgreSQL together on a quiet instance; after a large import expect the database to sit at a few hundred MB on disk. Pin the image tag rather than tracking latest, because the project ships breaking releases with migration notes and you want to read those before, not after. Back up the Postgres volume; there is nothing else to back up.
When a smaller tracker is the better pick
If your world is films and television, Movary is lighter and focused on exactly that, with a Trakt import and a Plex scrobbler. Yamtrack sits between the two, covering TV, films, games, books and anime with no fitness and fewer settings. Watcharr is the minimal option. Ryot earns its complexity only when you actually want books or fitness in the same place as video; if you never open the Goodreads export, you are running a bigger tool than you need.
What I'd do
If three or more of the media types on the list are things you track today, deploy Ryot with pinned tags and Postgres, do all imports on day 1, wire Jellyfin and Audiobookshelf so it logs itself, and set a monthly reminder to read the release notes before updating. If it is just the watchlist, run Movary, keep your Trakt export as a backup, and revisit Ryot when your bookshelf needs a home too.
Compare Ryot
3 head-to-head comparisons.
Similar media servers apps
Jellyfin
Media ServersFree software media system for streaming your library
Replaces Plex, Emby
qBittorrent
Media ServersBittorrent client that aims to be a good alternative to all other
Replaces µTorrent
SRS
Media ServersA simple, high efficiency and real-time video server, supports RTMP,
Navidrome
Media ServersModern music streaming server for your collection
Replaces Spotify
Kodi
Media ServersOpen-source home theater and media center
Replaces Plex
Koel
Media ServersPersonal music streaming server with an elegant interface
Replaces Spotify