proxyraye-nextjs/README.md

4.5 KiB

Proxy Raye

Proxy Raye is an alternative front-end for adult websites. Watch videos on a clean UI without tracking and without annoying ads popping up from everywhere!

Currently supported platforms:

  • XVideos
  • XNXX
  • PornHub (experimental)
  • YouPorn
  • RedTube

How to switch between platforms

Click on settings icon (gear icon on top-right corner). A pop-up menu will let you choose platform and orientation.

Working demos

Vercel hosted demo can be found here.

Self-hosted demo can be found here.

Roadmap

This is the list of features that will be implemented in the future:

  • Search pagination
  • Search filters
  • Add support for bellesa.co
  • Add support for ohentai.org
  • Add support for iamsissy.com
  • Video results API
  • Favourite videos
  • Embed videos
  • Download videos
  • Share link button for videos

Quickstart

You can run the project on local by cloning the repo.

IMPORTANT: encoding key generation:

Since version 0.4.0 server-side video streaming is supported and mandatory for some platforms (like PornHub) in order to work properly. In order to avoid random video url injection, urls get encrypted/decrypted by using an encoding key.

For security reasons it's better to generate a new encoding key. It can be done via console/terminal by running pwgen 20 1 command. Make sure pwgen command is installed. This will generate an alphanumeric string.

Paste the string to ENCODING_KEY environment variable inside docker-compose.yaml if you are using Docker, or inside .env file if you run the project with npm. See detailed instructions below.

In case variable is not set, a default encoding key will be used (not recommended!).

Docker

You can run project via Docker with docker-compose by opening root folder via console and running:

docker-compose up -d

And head browser to localhost:8069.

Caching

Starting from version 0.3.0 caching is enabled by default inside docker-compose.yaml.

A base Redis image will be added to the network.

However, Proxy Raye can still work without Redis by setting ENABLE_REDIS=false under environment:.

Encoding urls

Please uncomment ENCODING_KEY= related line inside docker-compose.yaml (under environment:) and set value to the string obtained by running pwgen 20 1.

Node.js

You can also run project outside Docker via npm (tested with NodeJS 20.11 and above).

You can run the project by opening root folder via console and running:

npm install
npm run build
npm run start

And head browser to localhost:3000.

Encoding urls

Please rename .env.example to .env file inside root folder.

Please uncomment ENCODING_KEY= related line inside .env file and set value to the string obtained by running pwgen 20 1.

(optional) Enable caching

If you want to enable caching, please rename .env.example to .env file inside root folder. Inside .env file you will find following variables:

ENABLE_REDIS=true
REDIS_URL='redis://127.0.0.1:6379'

These values assume a basic Redis instance running on local machine. If your local setup is different, or your Redis instance is somewhere else, please change REDIS_URL accordingly.

Modify

If you want to edit the project you can start development mode by opening root folder via console and running:

npm install
npm run dev

The project uses following tech stack:

  • NextJS 14 (w/App router)
  • Typescript
  • Redux
  • Pico CSS with Sass
  • Next/Intl

It scrapes data server-side and return treated data to the frontend to be rendered.

Deploy

Vercel

You can deploy the app on Vercel by cloning this repo on your GitHub/Gitlab and making it private. Than create a new Vercel account and import it there. Vercel deploy doesn't need particular configuration.

Due to Vercel's serverless nature (which makes every request to XVideos and other platforms come from a different IP) it becomes very hard for web application firewalls to ban addresses effectively.

Self-host

You can self host the project on your local server via docker-compose and reverse-proxy exposed port to nginx.

Disabling platforms (both Vercel / Self-host)

For several reason you might want to disable some platforms. You can do it by adding DISABLED_PLATFORMS environment variable.

List of platform values can be found in Platforms enum inside src/meta/settings.ts

Please add platforms list comma separated. Example:

DISABLED_PLATFORMS='pornhub, xnxx'