{"id":13551148,"url":"https://github.com/rivenmedia/riven","last_synced_at":"2026-03-12T16:32:04.741Z","repository":{"id":211388690,"uuid":"728999955","full_name":"rivenmedia/riven","owner":"rivenmedia","description":"Handle your Media Library with ease!","archived":false,"fork":false,"pushed_at":"2026-03-10T14:27:15.000Z","size":8064,"stargazers_count":759,"open_issues_count":52,"forks_count":98,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-11T13:42:24.688Z","etag":null,"topics":["comet","debridmediamanager","dmm","jackett","knightcrawler","orionoid","overseerr","plex","plex-media-server","real-debrid","realdebrid","riven","torrentio","trakt","zilean"],"latest_commit_sha":null,"homepage":"https://riven.tv","language":"Python","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/rivenmedia.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["dreulavelle"],"ko_fi":"spoked"}},"created_at":"2023-12-08T07:08:11.000Z","updated_at":"2026-03-10T21:59:45.000Z","dependencies_parsed_at":"2026-03-03T19:02:22.906Z","dependency_job_id":null,"html_url":"https://github.com/rivenmedia/riven","commit_stats":null,"previous_names":["dreulavelle/iceburg","dreulavelle/iceberg","rivenmedia/riven"],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/rivenmedia/riven","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivenmedia%2Friven","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivenmedia%2Friven/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivenmedia%2Friven/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivenmedia%2Friven/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rivenmedia","download_url":"https://codeload.github.com/rivenmedia/riven/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rivenmedia%2Friven/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30432963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["comet","debridmediamanager","dmm","jackett","knightcrawler","orionoid","overseerr","plex","plex-media-server","real-debrid","realdebrid","riven","torrentio","trakt","zilean"],"created_at":"2024-08-01T12:01:43.243Z","updated_at":"2026-03-12T16:32:04.718Z","avatar_url":"https://github.com/rivenmedia.png","language":"Python","funding_links":["https://github.com/sponsors/dreulavelle","https://ko-fi.com/spoked"],"categories":["Python","others","GUIs","*Arr Stack \u0026 Automation"],"sub_categories":["Hosting Providers (VPS, Seedbox..)"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/rivenmedia/riven\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/rivenmedia/riven/main/assets/riven-light.png\"\u003e\n      \u003cimg alt=\"riven\" src=\"https://raw.githubusercontent.com/rivenmedia/riven/main/assets/riven-dark.png\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/rivenmedia/riven/stargazers\"\u003e\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/rivenmedia/riven\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rivenmedia/riven/issues\"\u003e\u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues/rivenmedia/riven\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rivenmedia/riven/blob/main/LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/rivenmedia/riven\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/rivenmedia/riven/graphs/contributors\"\u003e\u003cimg alt=\"Contributors\" src=\"https://img.shields.io/github/contributors/rivenmedia/riven\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/rivenmedia\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/badge/Join%20discord-8A2BE2\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003ePlex torrent streaming through Real Debrid and 3rd party services like Overseerr, Mdblist, etc.\u003c/p\u003e\n\u003c/div\u003e\n\nServices currently supported:\n\n| Service            | Supported |\n| ------------------ | --------- |\n| Real Debrid        | ✅        |\n| Plex               | ✅        |\n| Overseerr          | ✅        |\n| Mdblist            | ✅        |\n| Trakt              | ✅        |\n| Jackett            | ✅        |\n| Plex Watchlist RSS | ✅        |\n| Torrentio          | ✅        |\n| Orionoid           | ✅        |\n| Listrr             | ✅        |\n\n| and more to come!\n\nCheck out out [Project Board](https://github.com/users/dreulavelle/projects/2) to stay informed!\n\nPlease add feature requests and issues over on our [Issue Tracker](https://github.com/rivenmedia/riven/issues) or join our [Discord](https://discord.gg/rivenmedia) to chat with us!\n\nWe are constantly adding features and improvements as we go along and squashing bugs as they arise.\n\n---\n\n## Table of Contents\n\n- [Table of Contents](#table-of-contents)\n- [ElfHosted](#elfhosted)\n- [Self Hosted](#self-hosted)\n  - [Docker Compose](#docker-compose)\n    - [What is ORIGIN ?](#what-is-origin-)\n  - [Running outside of Docker](#running-outside-of-docker)\n    - [First terminal:](#first-terminal)\n    - [Second terminal:](#second-terminal)\n  - [Symlinking settings](#symlinking-settings)\n- [Development](#development)\n  - [Prerequisites](#prerequisites)\n  - [Initial Setup](#initial-setup)\n  - [Using `make` for Development](#using-make-for-development)\n  - [Development without `make`](#development-without-make)\n  - [Additional Tips](#additional-tips)\n- [Contributing](#contributing)\n  - [Submitting Changes](#submitting-changes)\n  - [Code Formatting](#code-formatting)\n  - [Dependency Management](#dependency-management)\n    - [Setting Up Your Environment](#setting-up-your-environment)\n    - [Adding or Updating Dependencies](#adding-or-updating-dependencies)\n  - [Running Tests and Linters](#running-tests-and-linters)\n- [License](#license)\n\n---\n\n## ElfHosted\n\n[ElfHosted](https://elfhosted.com) is a geeky [open-source](https://elfhosted.com/open/) PaaS which provides all the \"plumbing\" (_hosting, security, updates, etc_) for your self-hosted apps.\n\n\u003e [!IMPORTANT]\n\u003e **ElfHosted ❤️ Riven 100%**\n\u003e \n\u003e [Riven](https://elfhosted.com/app/riven/) is an \"Elf-icial\" app in the [ElfHosted app catalogue](https://elfhosted.com/apps/) - A whopping :heart_eyes_cat::heart_eyes_cat: 100% :heart_eyes_cat::heart_eyes_cat: of your subscription goes directly to Riven developers, who can usually be found in the [#elf-riven](https://discord.com/channels/396055506072109067/1253110932062601276) channel in the [ElfHosted Discord Server](https://discord.elfhosted.com).\n\nCurious how it works? Here's an [explainer video](https://www.youtube.com/watch?v=ZHZAEhLuJqk)!\n\n\u003e [!TIP] \n\u003e **ElfHosted \"Infinite Streaming\" bundles**\n\u003e \n\u003e Riven is pre-packaged with Plex, Zurg, and symlinks, and ready-to-go, in these convenient bundles:\n\u003e * [Starter Kit](https://store.elfhosted.com/product/plex-riven-infinite-streaming-starter-kit) (*quick and easy setup*)\n\u003e * [Hobbit Bundle](https://store.elfhosted.com/product/hobbit-riven-real-debrid-infinite-streaming-bundle) (*12.5% dedicated node, with extras*)\n\u003e * [Ranger Bundle](https://store.elfhosted.com/product/plex-riven-infinite-streaming-plus-bundle) (*25% dedicated node, with extras*)\n\n## Self Hosted\n\n### Docker Compose\n\nCopy over the contents of [docker-compose.yml](docker-compose.yml) to your `docker-compose.yml` file.\n\n\u003e [!NOTE]\n\u003e You can check out the [docker-compose-full.yml](docker-compose-full.yml) file to get an idea of how things tie together.\n\nThen run `docker compose up -d` to start the container in the background. You can then access the web interface at `http://localhost:3000` or whatever port and origin you set in the `docker-compose.yml` file.\n\n\u003e [!TIP]\n\u003e On first run, Riven creates a `settings.json` file in the `data` directory. You can edit the settings from frontend, or manually edit the file and restart the container or use `.env` or docker-compose environment variables to set the settings (see `.env.example` for reference).\n\n#### What is ORIGIN ?\n\n`ORIGIN` is the URL of the frontend on which you will access it from anywhere. If you are hosting Riven on a vps with IP address `123.45.67.890` then you will need to set the `ORIGIN` to `http://123.45.67.890:3000` (no trailing slash). Similarly, if using a domain name, you will need to set the `ORIGIN` to `http://riven.example.com:3000` (no trailing slash). If you change the port in the `docker-compose.yml` file, you will need to change it in the `ORIGIN` as well.\n\n### Running outside of Docker\n\nTo run outside of docker you will need to have node (v18.13+) and python (3.10+) installed. Then clone the repository\n\n```sh\ngit clone https://github.com/rivenmedia/riven.git \u0026\u0026 cd riven\n```\n\nand open two terminals in the root of the project and run the following commands in each.\n\n#### First terminal:\n\n```sh\ncd frontend\nnpm install\nnpm run build\nORIGIN=http://localhost:3000 BACKEND_URL=http://127.0.0.1 node build\n```\n\nRead above for more info on `ORIGIN`.\n\n#### Second terminal:\n\n```sh\npip install poetry\npoetry install --without dev\npoetry run python backend/main.py\n```\n\n---\n\n### Symlinking settings\n\n`rclone_path` should point to your rclone mount that has your torrents on your host.\n\n`library_path` should point to the location of the mount in plex container\n\n```json\n    \"symlink\": {\n        \"rclone_path\": \"/mnt/zurg\",\n        \"library_path\": \"/mnt/library\"\n    }\n```\n\nPlex libraries that are currently required to have sections:\n\n| Type   | Categories               |\n| ------ | ------------------------ |\n| Movies | `movies`, `anime_movies` |\n| Shows  | `shows`, `anime_shows`   |\n\n\u003e [!NOTE]\n\u003e Currently, these Plex library requirements are mandatory. However, we plan to make them customizable in the future to support additional libraries as per user preferences.\n\n---\n\n## Development\n\nWelcome to the development section! Here, you'll find all the necessary steps to set up your development environment and start contributing to the project.\n\n### Prerequisites\n\nEnsure you have the following installed on your system:\n\n-   **Node.js** (v18.13+)\n-   **Python** (3.10+)\n-   **Poetry** (for Python dependency management)\n-   **Docker** (optional, for containerized development)\n\n### Initial Setup\n\n1. **Clone the Repository:**\n\n    ```sh\n    git clone https://github.com/rivenmedia/riven.git \u0026\u0026 cd riven\n    ```\n\n2. **Install Backend Dependencies:**\n\n    ```sh\n    pip install poetry\n    poetry install\n    ```\n\n3. **Install Frontend Dependencies:**\n    ```sh\n    cd frontend\n    npm install\n    cd ..\n    ```\n\n### Using `make` for Development\n\nWe provide a `Makefile` to simplify common development tasks. Here are some useful commands:\n\n-   **Initialize the Project:**\n\n    ```sh\n    make\n    ```\n\n-   **Start the Development Environment:**\n    This command stops any previous containers, removes old images, and rebuilds the image using cached layers. Any changes in the code will trigger a rebuild.\n\n    ```sh\n    make start\n    ```\n\n-   **Restart the Container:**\n\n    ```sh\n    make restart\n    ```\n\n-   **View Logs:**\n    ```sh\n    make logs\n    ```\n\n### Development without `make`\n\nIf you prefer not to use `make` and Docker, you can manually set up the development environment with the following steps:\n\n1. **Start the Backend:**\n\n    ```sh\n    poetry run python backend/main.py\n    ```\n\n2. **Start the Frontend:**\n    ```sh\n    cd frontend\n    npm run dev\n    ```\n\n### Additional Tips\n\n-   **Environment Variables:**\n    Ensure you set the `ORIGIN` environment variable to the URL where the frontend will be accessible. For example:\n\n    ```sh\n    export ORIGIN=http://localhost:3000\n    ```\n\n-   **Code Formatting:**\n    We use `Black` for Python and `Prettier` for JavaScript. Make sure to format your code before submitting any changes.\n\n-   **Running Tests:**\n    ```sh\n    poetry run pytest\n    ```\n\nBy following these guidelines, you'll be able to set up your development environment smoothly and start contributing to the project. Happy coding!\n\n---\n\n## Contributing\n\nWe welcome contributions from the community! To ensure a smooth collaboration, please follow these guidelines:\n\n### Submitting Changes\n\n1. **Open an Issue**: For major changes, start by opening an issue to discuss your proposed modifications. This helps us understand your intentions and provide feedback early in the process.\n2. **Pull Requests**: Once your changes are ready, submit a pull request. Ensure your code adheres to our coding standards and passes all tests. Commits should follow [conventional-commits](https://www.conventionalcommits.org/) specification.\n\n### Code Formatting\n\n-   **Backend**: We use [Black](https://black.readthedocs.io/en/stable/) for code formatting. Run `black` on your code before submitting.\n-   **Frontend**: We use [Prettier](https://prettier.io/) for code formatting. Run `prettier` on your code before submitting.\n-   **Line Endings**: Use CRLF line endings unless the file is a shell script or another format that requires LF line endings.\n\n### Dependency Management\n\nWe use [Poetry](https://python-poetry.org/) for managing dependencies. Poetry simplifies dependency management by automatically handling package versions and resolving conflicts, ensuring consistency across all environments.\n\n#### Setting Up Your Environment\n\n1. **Install Poetry**: If you haven't already, install Poetry using `pip install poetry`.\n2. **Install Dependencies**: After cloning the repository, navigate to the project's root directory and run `poetry install`. This command installs all necessary dependencies as defined in the `pyproject.toml` file and creates an isolated virtual environment.\n3. **Activate Virtual Environment**: You can activate the virtual environment using `poetry shell` or run commands directly using `poetry run \u003ccommand\u003e`.\n\n#### Adding or Updating Dependencies\n\n-   **Add a Dependency**: Use `poetry add \u003cpackage-name\u003e` to add a new dependency.\n-   **Update a Dependency**: Use `poetry update \u003cpackage-name\u003e` to update an existing dependency.\n\n### Running Tests and Linters\n\nBefore submitting a pull request, ensure your changes are compatible with the project's dependencies and coding standards. Use the following commands to run tests and linters:\n\n-   **Run Tests**: `poetry run pytest`\n-   **Run Linters**: `poetry run ruff check backend` and `poetry run isort --check-only backend`\n\nBy following these guidelines, you help us maintain a high-quality codebase and streamline the review process. Thank you for contributing!\n\n---\n\n\u003ca href=\"https://github.com/rivenmedia/riven/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=rivenmedia/riven\" /\u003e\n\u003c/a\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eRiven Analytics\u003c/h1\u003e\n  \u003cimg alt=\"Alt\" src=\"https://repobeats.axiom.co/api/embed/9a780bcd591b50aa26de6b8226b1de938bde5adb.svg\" title=\"Repobeats analytics image\"\u003e\n\u003c/div\u003e\n\n## License\n\nThis project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frivenmedia%2Friven","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frivenmedia%2Friven","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frivenmedia%2Friven/lists"}