Ganymede is a free, self-hosted platform for archiving Twitch VODs and live streams, with a real-time chat experience attached to every recording. It watches channels on its own, pulls down past broadcasts and ongoing streams, and keeps the chat alongside the video: playback inside Ganymede replays the conversation in sync with the stream, and each archive can also carry a rendered chat video so the chat is watchable outside Ganymede entirely.
Everything is stored in a plain, predictable folder structure, which is the point — an archive outlasts the application that built it. The video files, the chat logs and the rendered chats stay usable without Ganymede installed. The project is the successor of Ceres and is built on yt-dlp and TwitchDownloader.
Ganymede runs on Linux with Docker and is two containers: the server and a PostgreSQL database. Images are published on ghcr.io and a docker-compose.yml is provided, so docker compose up -d is the whole install. Before starting you need a Twitch application — a client ID and secret from the Twitch developer console — and at least 50 GB of free storage for the archives, with a network mount the usual home for a real collection. The first login is admin / ganymede, and it should be changed immediately or replaced by a new admin account.
Mount the video, logs, temp and config volumes at paths that match their environment variables; the example keeps temp files on the host so an in-flight archive is recoverable if the container dies. Per-job concurrency is tuned with the MAX_*_EXECUTIONS variables, which matter on a small box: a chat download can take about 1.9 GB of memory each, and a chat render is CPU-heavy. Two operational details from the documentation are worth copying into any deployment — a clean shutdown can take up to about 80 seconds, so the compose file sets stop_grace_period: 90s (on Kubernetes, terminationGracePeriodSeconds: 90), and a fatal process error exits with code 0, so the restart policy should be unless-stopped or always, not on-failure. The API container can run as a non-root user by setting PUID and PGID.
Ganymede is released under the GNU General Public License v3.0, with the full source on GitHub — self-hosting, modifying and redistributing it are all permitted under that licence.
People who want to keep Twitch material they care about — their own streams, a community’s broadcasts, or a record of how a scene developed — without depending on Twitch’s retention window. It fits a home server or NAS with a few hundred gigabytes to spare and someone comfortable editing a compose file and registering a Twitch application. It is a service you run, not a desktop download, and it expects a real PostgreSQL alongside it.