{"id":13819868,"url":"https://github.com/Zibbp/ganymede","last_synced_at":"2025-05-16T07:32:20.792Z","repository":{"id":40595841,"uuid":"506391611","full_name":"Zibbp/ganymede","owner":"Zibbp","description":"Twitch VOD and Live Stream archiving platform. Includes a rendered and real-time chat for each archive.","archived":false,"fork":false,"pushed_at":"2025-05-04T13:53:57.000Z","size":75628,"stargazers_count":694,"open_issues_count":17,"forks_count":37,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-04T14:29:55.520Z","etag":null,"topics":["archive","archived","chat","oauth2","selfhosted","stream","streaming","twitch","video","vod"],"latest_commit_sha":null,"homepage":"https://github.com/Zibbp/ganymede","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zibbp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-06-22T20:11:27.000Z","updated_at":"2025-05-04T13:38:48.000Z","dependencies_parsed_at":"2024-02-05T02:28:54.429Z","dependency_job_id":"5fecc225-ff6d-4ece-b10b-c2c0b45b38ad","html_url":"https://github.com/Zibbp/ganymede","commit_stats":{"total_commits":350,"total_committers":6,"mean_commits":"58.333333333333336","dds":0.07714285714285718,"last_synced_commit":"5d801d69bb87b26c7846749df7a52107740fe7e1"},"previous_names":[],"tags_count":66,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zibbp%2Fganymede","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zibbp%2Fganymede/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zibbp%2Fganymede/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zibbp%2Fganymede/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zibbp","download_url":"https://codeload.github.com/Zibbp/ganymede/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254488402,"owners_count":22079421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","archived","chat","oauth2","selfhosted","stream","streaming","twitch","video","vod"],"created_at":"2024-08-04T08:00:54.228Z","updated_at":"2025-05-16T07:32:20.779Z","avatar_url":"https://github.com/Zibbp.png","language":"Go","funding_links":[],"categories":["Go","Software","HarmonyOS"],"sub_categories":["Archiving and Digital Preservation (DP)","Windows Manager"],"readme":"\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca\u003e\n    \u003cimg src=\".github/ganymede-logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n  \u003ch2 align=\"center\"\u003eGanymede\u003c/h2\u003e\n\n  \u003cp align=\"center\"\u003e\n    Ganymede is a Twitch VOD and Live Stream archiving platform with a real-time chat experience. Every archive includes a rendered chat for viewing outside of Ganymede. Files are saved in a friendly format allowing for use without Ganymede.\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## Screenshot\n\n![ganymede-readme_landing](https://github.com/user-attachments/assets/b1c024f5-f5ad-4611-84db-42d599364a74)\n\nhttps://github.com/user-attachments/assets/184451f1-e3ce-4329-8516-a9842648c01b\n\n## About\n\nGanymede allows archiving of past streams (VODs) and live streams with a real-time chat playback along with a archival-friendly rendered chat. All files are saved in a friendly way that doesn't require Ganymede to view them (see [file structure](https://github.com/Zibbp/ganymede/wiki/File-Structure)). Ganymede is the successor of [Ceres](https://github.com/Zibbp/Ceres).\n\n## Features\n\n- Realtime Chat Playback\n- SSO / OAuth authentication ([wiki](https://github.com/Zibbp/ganymede/wiki/SSO---OpenID-Connect))\n- Light/dark mode toggle.\n- 'Watched channels'\n  - Allows watching channels for archiving past broadcasts and live streams. Includes advanced filtering options.\n- Twitch VOD/Livestream support.\n- Full VOD, Channel, and User management.\n- Custom post-download video FFmpeg parameters.\n- Custom chat render parameters.\n- Webhook notifications.\n- Simple file structure for long-term archival that will outlast Ganymede.\n- Recoverable queue system.\n- Playback / progress saving.\n- Playlists.\n\n## Documentation\n\nFor in-depth documentation on features visit the [wiki](https://github.com/Zibbp/ganymede/wiki).\n\n## API\n\nVisit the [docs](https://github.com/Zibbp/ganymede/tree/main/docs) folder for the API docs.\n\n## Translations\n\nSee the [messages](https://github.com/Zibbp/ganymede/tree/main/frontend/messages) directory for available translations. If you would like to add a new translation, please create a pull request with the new translation file. The file should be named `\u003clanguage\u003e.json` where `\u003clanguage\u003e` is the language code (e.g. `de.json` for German). Additionally the language needs to be added to the navbar in the `frontend/app/layout/Navbar.tsx` file in the `languages` array.\n\n## Installation\n\n### Requirements\n\n- Linux environment with Docker.\n- _Optional_ network mounted storage.\n- 50gb+ free storage, see [storage requirements](https://github.com/Zibbp/ganymede/wiki/Storage-Requirements).\n- A Twitch Application\n  - [Create an application](https://dev.twitch.tv/console/apps/create).\n\n### Installation\n\nGanymede consists of two docker containers:\n\n1. Server\n2. Postgres Database\n\nFeel free to use an existing Postgres database container if you don't want to spin new ones up.\n\n1. Download a copy of the `docker-compose.yml` file.\n2. Edit the `docker-compose.yml` file modifying the environment variables, see [environment variables](https://github.com/Zibbp/ganymede#environment-variables) for more information.\n3. Run `docker compose up -d`.\n4. Visit the address and port you specified for the frontend and login with username: `admin` password: `ganymede`.\n5. Change the admin password _or_ create a new user, grant admin permissions on that user, and delete the admin user.\n\n### Rootless\n\nThe API container can be run as a non root user. To do so add `PUID` and `PGID` environment variables, setting the value to your user. Read [linuxserver's docs](https://docs.linuxserver.io/general/understanding-puid-and-pgid) about this for more information.\n\nNote: On startup the container will `chown` the config, temp, and logs directory. It will not recursively `chown` the `/data/videos` directory. Ensure the mounted `/data/videos` directory is readable by the set user.\n\n### Config\n\nA configuration file is generate on initial start of Ganymede. By default the configuration is at `/data/config/config.json`. See the [config.go](https://github.com/Zibbp/ganymede/blob/main/internal/config/config.go) file for a full list of configuration settings. Most of the settings can be configured in the Web UI by navigating to Admin \u003e Settings.\n\n### Environment Variables\n\nThe `docker-compose.yml` file has comments for each environment variable. Below is a list of all environment variables and their descriptions. See the [env.go](https://github.com/Zibbp/ganymede/blob/main/internal/config/env.go) file for a full list of all environment variables and their default values.\n\n##### Server\n\n| ENV Name                                | Description                                                                                                                     |\n| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `DEBUG`                                 | Enable debug logging `true` or `false`.                                                                                         |\n| `VIDEOS_DIR`                            | Path inside the container to the videos directory. Default: `/data/videos`.                                                     |\n| `TEMP_DIR`                              | Path inside the container where temporary files are stored during archiving. Default: `/data/temp`.                             |\n| `LOGS_DIR`                              | Path inside the container where log files are stored. Default: `/data/logs`.                                                    |\n| `CONFIG_DIR`                            | Path inside the container where the config is stored. Default: `/data/config`.                                                  |\n| `PATH_MIGRATION_ENABLED`                | Enable path migration at startup. Default: `true`.                                                                              |\n| `TZ`                                    | Timezone.                                                                                                                       |\n| `DB_HOST`                               | Host of the database.                                                                                                           |\n| `DB_PORT`                               | Port of the database.                                                                                                           |\n| `DB_USER`                               | Username for the database.                                                                                                      |\n| `DB_PASS`                               | Password for the database.                                                                                                      |\n| `DB_NAME`                               | Name of the database.                                                                                                           |\n| `DB_SSL`                                | Whether to use SSL. Default: `disable`. See [DB SSL](https://github.com/Zibbp/ganymede/wiki/DB-SSL) for more information.       |\n| `DB_SSL_ROOT_CERT`                      | _Optional_ Path to DB SSL root certificate. See [DB SSL](https://github.com/Zibbp/ganymede/wiki/DB-SSL) for more information.   |\n| `TWITCH_CLIENT_ID`                      | Twitch application client ID.                                                                                                   |\n| `TWITCH_CLIENT_SECRET`                  | Twitch application client secret.                                                                                               |\n| `OAUTH_ENABLED`                         | _Optional_ Wether OAuth is enabled `true` or `false`. Must have the other OAuth variables set if this is enabled.               |\n| `OAUTH_PROVIDER_URL`                    | _Optional_ OAuth provider URL. See https://github.com/Zibbp/ganymede/wiki/SSO---OpenID-Connect                                  |\n| `OAUTH_CLIENT_ID`                       | _Optional_ OAuth client ID.                                                                                                     |\n| `OAUTH_CLIENT_SECRET`                   | _Optional_ OAuth client secret.                                                                                                 |\n| `OAUTH_REDIRECT_URL`                    | _Optional_ OAuth redirect URL, points to the API. Example: `http://localhost:4000/api/v1/auth/oauth/callback`.                  |\n| `MAX_CHAT_DOWNLOAD_EXECUTIONS`          | Maximum number of chat downloads that can be running at once. Live streams bypass this limit.                                   |\n| `MAX_CHAT_RENDER_EXECUTIONS`            | Maximum number of chat renders that can be running at once.                                                                     |\n| `MAX_VIDEO_DOWNLOAD_EXECUTIONS`         | Maximum number of video downloads that can be running at once. Live streams bypass this limit.                                  |\n| `MAX_VIDEO_CONVERT_EXECUTIONS`          | Maximum number of video conversions that can be running at once.                                                                |\n| `MAX_VIDEO_SPRITE_THUMBNAIL_EXECUTIONS` | Maximum number of video sprite thumbnail generation jobs that can be running at once. This is not very CPU intensive.           |\n| `SHOW_SSO_LOGIN_BUTTON`                 | Frontend: `true/false` Show a \"login via sso\" button on the login page (defaults to false).                                     |\n| `FORCE_SSO_AUTH`                        | Frontend: `true/false` Force users to login via SSO by bypassing the login page (defaults to false).                            |\n| `REQUIRE_LOGIN`                         | Frontend: `true/false` Require users to be logged in to view videos (defaults to false).                                        |\n| `SHOW_LOCALE_BUTTON`                    | Frontend: `true/false` Show the locale/language button on the navbar (defaults to true).                                        |\n| `DEFAULT_LOCALE`                        | Frontend: Sets the default locale/language. Must be the short code of the language. Example: `en` for English, `de` for German. |\n\n##### DB\n\n**Ensure these are the same in the API environment variables.**\n\n| ENV Name            | Description           |\n| ------------------- | --------------------- |\n| `POSTGRES_PASSWORD` | Database password     |\n| `POSTGRES_USER`     | Database username.    |\n| `POSTGRES_DB`       | Name of the database. |\n\n### Volumes\n\n##### API\n\n| Volume         | Description                                                                                                                                                                                       | Example                      |\n| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| `/data/videos` | Mount for video storage. This **must** match the `VIDEOS_DIR` environment variable.                                                                                                               | `/mnt/nas/vods:/data/videos` |\n| `/data/logs`   | Mount to store task logs. This **must** match the `LOGS_DIR` environment variable.                                                                                                                | `./logs:/data/logs`          |\n| `/data/temp`   | Mount to store temporary files during the archive process. This is mounted to the host so files are recoverable in the event of a crash. This **must** match the `TEMP_DIR` environment variable. | `./temp:/data/temp`          |\n| `/data/config` | Mount to store the config. This **must** match the `CONFIG_DIR` environment variable.                                                                                                             | `./config:/data/config`      |\n\n\n## Development\n\nA [devcontainer](https://containers.dev/) is included for development. This container includes all the necessary tools to develop Ganymede. Once setup, the [Makefile](/Makefile) can be used to run the development environment.\n\n- `make dev_server` - Starts the server.\n- `make dev_worker` - Starts the worker.\n- `make dev_web` - Starts the web server.\n\nView the [Makefile](/Makefile) for more commands.\n\n## Acknowledgements\n\n- [TwitchDownloader](https://github.com/lay295/TwitchDownloader)\n- [Streamlink](https://streamlink.github.io/)\n- [Chat-Downloader](https://github.com/xenova/chat-downloader)\n\n## License\n\n[GNU General Public License v3.0](https://github.com/Zibbp/ganymede/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZibbp%2Fganymede","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FZibbp%2Fganymede","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZibbp%2Fganymede/lists"}