Files
hottub/docs
Simon 29d526b5fc proxy pool: spread rule34video enrichment over checked public proxies
Rework the unused ALL_PROXIES list into util/proxy_pool.rs:
- hourly sweep of the public lists, TLS-verified cloudflare trace checks,
  >=2 successes with a median under 1.5s, one proxy per exit IP; proxies
  that show our own IP are dropped, two failures in a row evict
- per-site sets checked against a site URL (rule34video: robots.txt),
  round-robin, 10-min per-site cooldown on 429/challenge pages, live
  request outcomes fed back
- started from main (PROXY_POOL=0 disables; PROXY_POOL_LISTS,
  PROXY_POOL_CONCURRENCY), /api/proxies shows its status without credentials
- wreq "socks" feature enabled: SOCKS proxies silently failed before

rule34video enrichment is back, through the pool: full detail pages
(1080p..360p formats, tags, artist), 8 concurrent, one 4s deadline per
listing; late pages keep running and land in the 2h detail cache, which
cached listings are re-merged with on every serve. No ready proxies means
no enrichment (no direct fallback). Requester::get_via sends a pooled
request with certificate checks, sharing the session's cookie jar.

Also adds an ignored live probe showing /embed/ shares the 429 limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AEp724zDpCWNaSeCrMSvjx
2026-11-05 21:59:28 +00:00
..
2026-04-03 17:20:11 +00:00
2026-09-07 15:25:03 +00:00

Hottub Docs

This folder is the fastest handoff path for anyone adding or repairing a channel.

Start here:

  1. Read architecture.md for the server flow, request lifecycle, and core types.
  2. Read provider-playbook.md — its top "Best Practices (Living)" section is the cross-cutting rule set to internalize first, then follow the rest of the playbook for the exact process to add a new provider or proxy.
  3. Use provider-catalog.md to find the closest existing implementation to copy.
  4. Use docs/hottubapp/*.html when you need the client-facing API contract for status, videos, or uploaders.
  5. Only then touch prompts/new-channel.md; it assumes the docs above exist.

Recommended local workflow:

cargo check -q
HOT_TUB_PROVIDER=<channel_id> cargo check -q
HOT_TUB_PROVIDER=<channel_id> cargo run --features debug

Useful runtime baseline:

DATABASE_URL=hottub.db
RUST_LOG=info
PROXY=0
BURP_URL=http://127.0.0.1:8081
FLARE_URL=http://127.0.0.1:8191/v1
DOMAIN=127.0.0.1:18080
DISCORD_WEBHOOK=

Key facts:

  • Hottub is a Rust ntex server with providers under src/providers/.
  • build.rs controls compile-time provider registration.
  • /api/videos is the main provider execution path.
  • /proxy/... exists for sites whose direct media or thumbnails need a redirect/proxy layer.
  • Only three providers currently implement /api/uploaders: hsex, omgxxx, and vjav.
  • Uploader IDs should be namespaced like <channel>:<site-local-id> so /api/uploaders can route directly.