Riven
Riven is a powerful media management and streaming solution designed to integrate with various media servers and third-party services. It automates the process of finding, downloading, and organizing media content, making it instantly available for streaming through your preferred media server.
-
Easy Installation
Get Riven up and running quickly with our comprehensive installation guide. Whether you're using Docker or running natively, we've got you covered.
-
Powerful Configuration
Customize Riven to fit your media management needs. Configure debrid services, media servers, and more with our user-friendly interface.
-
ElfHosted ❤️
ElfHosted is an open-source PaaS that provides all the "plumbing" (hosting, security, and updates, etc) for your self-hosted apps, leaving the fun stuff for you!
Sponsored
100% of your Riven subscription revenue goes directly to Riven developers!
-
Active Community
Join our vibrant community for support, updates, and contributions. Collaborate with other users and developers to make Riven even better.
Getting Started#
Beta
Riven is under active development, we are constantly working on new features and fixing bugs.
Riven streamlines your media consumption experience by:
- Automatically discovering new content based on your preferences and watchlists.
- Efficiently searching for and downloading high-quality media files.
- Organizing your media library using a smart symlink system.
- Seamlessly integrating with your chosen media server for immediate streaming access.
- Providing a user-friendly web interface for easy management and configuration.
Whether you're a casual viewer or a media enthusiast, Riven offers a powerful, automated solution to keep your media library up-to-date and easily accessible.
ElfHosted#
ElfHosted is a geeky open-source PaaS which provides all the "plumbing" (hosting, security, updates, etc) for your self-hosted apps.
Curious how it works? Here's an explainer video!
ElfHosted ❤️ Riven 100%
Riven is an "Elf-icial" app in the ElfHosted app catalogue - A whopping 100% of your subscription goes directly to Riven developers, who can usually be found in the #elf-riven channel in the ElfHosted Discord Server.
ElfHosted "Infinite Streaming" bundles
Riven comes pre-packaged with Zurg and your choice of Plex, Jellyfin, or Emby, and is available in the following convenient bundles:
- Starter Kit (quick and easy setup)
- Hobbit Bundle (12.5% dedicated node, GPU transcoding, 250Mbps shared, extra bundled apps, 22% off non-bundled)
- Ranger Bundle (25% dedicated node, GPU transcoding, 500Mbps shared, extra bundled apps, 44% off non-bundled)
- Halfling Bundle (50% dedicated node, GPU transcoding, 1Gbps shared, extra bundled apps, 66% off non-bundled)
- Nazgul Bundle (100% dedicated node, GPU transcoding, 1Gbps dedicated, extra bundled apps, 88% off non-bundled)
Setup#
Before we begin, we need to set up the required folders and files for Riven.
Grab the docker-compose.yml
file from the installation guide and then docker-compose up -d
to start the services.
Note
- Linux: Riven only supports Linux-based operating systems.
- Windows: Riven only supports Windows Subsystem for Linux (WSL) in Windows.
- Rclone: Required to mount debrid service. Additionally, Zurg is preferred for Real-Debrid users. Learn more
- Media Server: Plex, Jellyfin, and Emby are supported.
- Docker: Required to run Riven in a containerized environment. Learn more
Debrid Support
Currently only Real-Debrid, All-Debrid and Torbox are supported. More services will be added in the future!
Setup Directories#
For detailed information on the various services and configurations available in Riven, please refer to the symlink page. This page will help you understand how to configure and manage your media library using symlinks. It will help you understand why we map the Riven volumes to /mnt
and how you can modify this in the docker-compose.yml
file for the best outcome.
Installation#
Setup Rclone & Symlink Paths First!
This is incredibly important and must be setup first! When configuring the rclone mount path and library path, you need to make sure that the paths are correct for your system. More information can be found at the symlink page.
If your debrid files are found in your rclone path, and you can successfully ls -lh /mnt/zurg
your rclone path, you can skip this step.
docker-compose.yml
file is used to run Riven in a containerized environment. It consists of three services:
riven
: The main application (backend).riven-frontend
: The web interface (frontend).riven-db
: The database.
services:
riven-frontend:
image: spoked/riven-frontend:latest
container_name: riven-frontend
restart: unless-stopped
ports:
- "3000:3000"
tty: true
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- ORIGIN=http://localhost:3000
- BACKEND_URL=http://riven:8080
- DIALECT=postgres
- DATABASE_URL=postgres://postgres:postgres@riven-db/riven
depends_on:
riven:
condition: service_healthy
riven:
image: spoked/riven:latest
container_name: riven
restart: unless-stopped
ports:
- "8080:8080"
tty: true
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- RIVEN_FORCE_ENV=true
- RIVEN_DATABASE_HOST=postgresql+psycopg2://postgres:postgres@riven-db/riven
healthcheck:
test: curl -s http://localhost:8080 >/dev/null || exit 1
interval: 30s
timeout: 10s
retries: 10
volumes:
- ./data:/riven/data
- /mnt:/mnt
depends_on:
riven_postgres:
condition: service_healthy
riven_postgres:
image: postgres:16.3-alpine3.20
container_name: riven-db
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: riven
volumes:
- ./riven-db:/var/lib/postgresql/data/pgdata
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
Now this won't work as is, you need to modify the docker-compose.yml
file to match your setup.
- Change
TZ
to your timezone. - Change
ORIGIN
to the URL you will be accessing the web interface from. For example, if you are planning to run Riven onhttps://riven.example.com
, change it tohttps://riven.example.com
. This is not required if you are running riven behind a reverse proxy likenginx
,caddy
,cosmos
etc. - Change
BACKEND_URL
to the URL where the frontend can access the backend. This is not required here as we are running both frontend and backend in the same network (stack). - Change
RIVEN_DATABASE_HOST
to the URL where the backend can access the database. This is not required here as we are running both backend and database in the same network (stack). - Change
DIALECT
andDATABASE_URL
to use the same database as the backend. This is not required here as we are running both backend and database in the same network (stack). - Change
volumes
to match your setup. Riven requires access to the library folder and rclone mount path.
Running Riven#
Depending on how you installed Riven, execute the following command:
docker-compose up -d && docker-compose logs -f
Python Version
Riven requires Python 3.11 or higher and poetry
to be installed.
poetry install --without dev
poetry run python /src/main.py
You can access the Riven web interface by navigating to the specified ORIGIN
URL you entered in the docker-compose.yml
file or your reverse proxy URL.
- Example:
http://localhost:3000
Configuration#
Once Riven is running, you can configure it by accessing the web interface. You will be prompted with onboarding steps to set up your debrid service, media server, content services and scraper services.
There are 4 steps in the onboarding process.
Step 1: General Settings#
In this step you configure the downloaders (debrid services), rclone mount path, library path, subtitles, etc. See the image below for an example.
Step 2: Media Server#
In this step you configure the media server and updater settings. See the image below for an example.
Step 3: Content Services#
In this step you configure the content services like Trakt, Overseerr, etc. See the image below for an example.
Step 4: Scraper Services#
In this step you configure the scraper services like Torrentio, Zilean, Prowlarr, Jackett, etc. See the image below for an example.
Done!
Once you have completed the onboarding process, you will be greeted with a beautiful dashboard where you can manage your media library, request items, settings and many more in the future.
At this point you can take a look at the services page to learn more about the various services and how to configure them.
Frequently Asked Questions#
Cross-site POST form submissions are forbidden
The most common reason for this is that you may not have set up ORIGIN
correctly in the docker-compose.yml
file. If you are running Riven
behind a reverse proxy, you can remove the ORIGIN
environment variable
from the riven-frontend
service.
I am seeing an error when trying to save changes
If you are seeing an error when trying to save changes, it is most likely due to incorrect configuration or backend failure. Please check the logs of the Riven service to see the error message. If you are unable to resolve the issue, feel free to ask for help in the Riven Discord server.
I am stuck in an onboarding loop
If you are stuck in the onboarding loop, it is most likely due to incorrect symlink settings. Check your library path and rclone mount path. If they are correct, check the logs of the Riven service. If you are unable to resolve the issue, feel free to ask for help in the Riven Discord server.