9c078f1b608a14e6c07b00755bead1f2047f8c5a
item.formats was always null, leaving the client to open the bare
eporner.com page URL — which the site serves as a small
restricted/preview clip with an "only available on the website"
message instead of the real video.
Reverse-engineered the site's own player flow (matches yt-dlp's
EpornerIE extractor): derive calc_hash from the page's hash via
per-chunk base36 encoding, call the site's /xhr/video/{id} JSON API,
and populate formats[] with the real direct mp4 URLs across all
available resolutions, sorted highest first.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017haiuheHbREQdnh3B5rqgc
hottub
Rust based hottub server
the following URL:
build it yourself
Get, Build and Host the docker image:
git clone https://gitea.spacemoehre.de/simon/hottub
sudo docker build hottub
cd hottub && cargo build --release
nano docker-compose.yml # adjust compose file
sudo docker compose up -d
Verify setup, replace the url with your setup url
curl -v http://127.0.0.1
->
* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80
> GET / HTTP/1.1
> Host: 127.0.0.1:80
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 302 Found
< content-length: 0
< location: hottub://source?url=127.0.0.1:80
< date: Mon, 29 Sep 2025 14:58:15 GMT
<
* Connection #0 to host 127.0.0.1 left intact
make sure that you get a code 302 to a hottub:// url
Update via git pull
To Update (i.e. for new supported sites) do
cd /path/to/hottub && git pull && cargo build --release && sudo docker container restart hottub
Description
Languages
Rust
81.6%
Swift
17.7%
Python
0.7%