Skip to content

sinkaroid/lustpress

lustpress

RESTful and experimental API for PornHub and other R18 websites

Lustpress stand for Lust and Express, rebuild from Jandapress with completely different approach. The motivation of this project is to bring you an actionable data related to pornhub and other r18 sites with gather, similar design pattern, endpoint bindings, and consistent structure in mind.

PlaygroundContributingReport Issues


The problem

Many developers consume r18 websites as a source of data when building web applications. However, most of these sites — such as pornhub, redtube, and others — do not provide official APIs or public resources that can be easily integrated into applications.

As a result, developers often need to implement their own scraping logic, build multiple abstractions, and manually maintain integrations for each site.

Lustpress aims to simplify this process by providing a unified interface for accessing data across multiple r18 sites. Instead of maintaining separate implementations, developers can rely on Lustpress to reduce complexity and development overhead.

The current state of the service is free to use, meaning anonymous usage is allowed. No authentication is required, and CORS is enabled to support browser-based applications.

The solution

Don't make it long, make it short. All processed through single rest endpoint bindings

Features

  • Aggregates data from multiple sites.
  • Provides a consistent and structured response format across all sources.
  • Extracted objects are normalized and reassembled to support extensibility.
  • Unified interface supporting get, search, and random methods.
  • Planned support for optional JWT authentication in future releases.
  • Primarily based on pure scraping techniques (with limited exceptions where required).

Running tests

Some tests may fail in CI environments because certain websites restrict or block automated requests originating from CI infrastructure and shared IP ranges, but trying to keep up

Site Status Get Search Random Related
pornhub pornhub Yes Yes Yes Yes
xnxx xnxx Yes Yes Yes Yes
redtube redtube Yes Yes Yes Yes
xvideos xvideos Yes Yes Yes Yes
xhamster xhamster Yes Yes Yes Yes
youporn youporn Yes Yes Yes Yes
eporner Eporner test Yes Yes Yes Yes
txxx Txxx test Yes Yes Yes Yes

Prerequisites

NOTE: NodeJS 22.x or higher

To handle several requests from each website, You will also need Redis for persistent caching, free tier is available on Redis Labs, You can also choose another adapters as we using keyv Key-value storage with support for multiple backends. When you choosing your own adapter, all data must be stored with <Buffer> type.

Installation

Rename .env.schema to .env and fill the value with your own

# railway, fly.dev, heroku, vercel or any free service
RAILWAY = sinkaroid

# default port
PORT = 3000

# backend storage, default is redis, if not set it will consume memory storage
REDIS_URL = redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.cloud.redislabs.com:1337

# ttl expire cache (in X hour)
EXPIRE_CACHE = 1

# you must identify your origin, if not set it will use default
USER_AGENT = "lustpress/8.0.1 Node.js/22.22.0"

Docker

docker pull ghcr.io/sinkaroid/lustpress:latest
docker run -p 3000:3000 -d ghcr.io/sinkaroid/lustpress:latest

Docker (adjust your own)

docker run -d \
  --name=lustpress \
  -p 3028:3000 \
  -e REDIS_URL='redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.cloud.redislabs.com:1337' \
  -e EXPIRE_CACHE='1' \
  -e USER_AGENT='lustpress/8.0.1 Node.js/22.22.0' \
  ghcr.io/sinkaroid/lustpress:latest

Manual

git clone https://github.com/sinkaroid/lustpress.git
  • Install dependencies
    • npm install / yarn install
  • Lustpress production
    • npm run start:prod
  • Lustpress testing and hot reload
    • npm run start:dev

Tests

Run the following commands to execute tests for each supported source:

# Check whether all supported sites are available for scraping
npm run test

# Check whether ph and (maybe the others do..) do Solving challenge in their website
npm run test:mock

# Run tests for individual sources
npm run test:pornhub
npm run test:xnxx
npm run test:redtube
npm run test:xvideos
npm run test:xhamster
npm run test:youporn
npm run test:eporner
npm run test:txxx

Start the production server

npm run start:prod

Running development server

npm run start:dev

Generating playground like swagger from apidoc definition

npm run build:apidoc

To running other tests, you can see object scripts in file package.json or modify the lustpress.test.ts according your needs

Playground

https://sinkaroid.github.io/lustpress

  • These parameter?: means is optional

  • / : index page

PornHub

The missing piece of pornhub.com - https://sinkaroid.github.io/lustpress/#api-pornhub

Xnxx

The missing piece of xnxx.com - https://sinkaroid.github.io/lustpress/#api-xnxx

RedTube

The missing piece of redtube.com - https://sinkaroid.github.io/lustpress/#api-redtube

Xvideos

The missing piece of xvideos.com - https://sinkaroid.github.io/lustpress/#api-xvideos

Xhamster

The missing piece of xhamster.com - https://sinkaroid.github.io/lustpress/#api-xhamster

YouPorn

The missing piece of youporn.com - https://sinkaroid.github.io/lustpress/#api-youporn

Eporner

https://sinkaroid.github.io/lustpress/#api-eporner

Txxx

https://sinkaroid.github.io/lustpress/#api-txxx

Status response

"success": true, or "success": false,

HTTP/1.1 200 OK
HTTP/1.1 400 Bad Request
HTTP/1.1 500 Fail to get data

Frequently asked questions

Q: The website response is slow

That's unfortunate, this repository was opensource already, You can host and deploy Lustpress with your own instance. Any fixes and improvements will updating to this repo.

March 11, 2026: We have discontinued providing public APIs and playground services due to ongoing abuse and excessive usage. To continue using Lustpress, please deploy and run your own self-hosted instance.

Pronunciation

en_US/lʌstˈprɛs/ — "lust" stand for this project and "press" for express.

Client libraries

Seamlessly integrate with the languages you love, simplified the usage, and intelisense definitions on your IDEs

Legal

This tool can be freely copied, modified, altered, distributed without any attribution whatsoever. However, if you feel like this tool deserves an attribution, mention it. It won't hurt anybody.

Licence: WTF.

Sponsor this project

 

Packages

 
 
 

Contributors

Languages