Simon c244461d0b Resolve melonstube's top-20 destination hosts into direct formats
melonstube is a meta-search aggregator that redirects out to ~120
third-party hosts. A live crawl of /new, /popular, and /rating
(~3,350 out-links) found the previous "assume yt-dlp can resolve it"
fallback was hiding real failures on the highest-traffic hosts:

- eporner.com is ~34% of all melonstube traffic by itself, and like
  the eporner channel (fixed earlier), serves a restricted preview
  clip without its hash/xhr dance.
- fapcat.com/momvids.com 403 a plain fetch (Cloudflare).
- Several others just needed real extraction instead of a guess.

Per-card enrichment now dispatches by destination host to:
- Eporner: reuses eporner's own hash/xhr + Referer resolution, moved
  to src/util/eporner_resolve.rs so both providers' single-provider
  builds still compile (HOT_TUB_PROVIDER=<id> only compiles the one
  selected provider module; src/util/* always compiles).
- Kvs (pornfreenow, analdin, babepump, w1mp, fetishshrine, pervclips,
  xozilla, ok.xxx, ebonypeek, xgroovy): a shared get_file extractor,
  the same KVS backend several other Hot Tub providers already scrape.
- KvsCfGated (fapcat, momvids): same extractor via the Safari18
  bypass client melonstube.com itself already needs.
- XhamsterMirror (xh.partners): a genuine xHamster mirror instance,
  Referer built from the actual resolved host.
- SomePorn: HLS playlist URL built from the page's video id directly.
- Pornone: direct <source> tag extraction.

flirt4free.com (a live-cam page, not a VOD) moved into the dropped-
host bucket alongside the existing junk/join.* hosts.

Enrichment is bounded (concurrency, a 10s per-card timeout, and
capped to the requested perPage rather than the full ~240-card page)
so a slow or rate-limited destination can't stall the response.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 08:28:05 +00:00
2026-05-20 18:25:46 +00:00
2026-04-11 21:45:00 +00:00
2026-05-18 16:52:25 +00:00
2025-05-31 09:28:30 +00:00
2026-06-18 11:24:09 +00:00
2026-06-25 20:53:51 +00:00
2026-06-25 20:53:51 +00:00
2026-09-07 16:10:28 +00:00
2025-06-05 18:50:28 +00:00
2026-01-13 18:13:51 +00:00
2026-08-05 14:24:11 +00:00
2025-09-29 15:15:34 +00:00
2026-03-21 21:27:38 +00:00
2025-07-20 07:50:10 +00:00

hottub

Rust based hottub server

the following URL:

hottub.spacemoehre.de

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
Rust based hottub server
Readme 11 MiB
Languages
Rust 82.8%
Swift 16.4%
Python 0.8%