Files
hottub/docs/provider-catalog.md
2026-06-20 12:03:23 +00:00

19 KiB

Provider And Proxy Catalog

This is the current implementation inventory as of this snapshot of the repo. Use it to find the nearest existing pattern before adding a new channel.

Providers

Provider Group /api/uploaders Uses local /proxy Notes
all meta-search no no Aggregates all compiled providers.
allpornstream mainstream-tube no yes Next.js App Router scraper; extracts cards via data-thumb-id/href/title/images attributes; redirect proxy lazy-resolves VOE/DoodStream/StreamTape/FileMoon embeds.
archivebate live-cams no no Livewire-backed cam archive listings with platform/gender/profile shortcuts.
beeg mainstream-tube no no Basic mainstream tube pattern.
blowjobspro mainstream-tube no no KVS-style HTML provider with async search pagination and category shortcut routing.
chaturbate live-cams no no Live cam channel.
clapdat amateur-homemade no yes Svelte/JSON-hydrated provider using home/recent/trending routes, Meilisearch keyword search, and /proxy/clapdat/... redirect playback resolution.
erome amateur-homemade no no HTML album scraper with hot/new feeds, keyword search, and uploader-slug shortcuts (uploader:<name>).
fikfap tiktok yes yes (thumbs only) JSON-API provider for fikfap.com (TikTok-style swipe short clips); anonymous auth via a client-generated Authorization-Anonymous UUID header (no real login needed); listing via GET api.fikfap.com/posts?sort=new|trending|random&amount=N&afterId=<lastPostId> (cursor pagination — page N costs N sequential requests); search via GET search?q= (single fixed-size batch, no pagination — page 2+ returns empty); hashtag feeds via GET hashtags/label/{label}/posts and creator feeds via GET profile/username/{user}/posts, both also cursor-paginated; tag:/hashtag:/# and user:/uploader: query prefixes route directly; categories option exposes a small curated static hashtag list (no full catalog endpoint exists anonymously); video.url is the fikfap.com/post/{id} page (a client-rendered SPA, not yt-dlp-resolvable on its own); videoStreamUrl from the JSON response is sent directly as formats[0].url (signed Bunny CDN HLS .m3u8, ~24h token expiry) with httpHeaders: {Referer: https://fikfap.com/} — Hot Tub clients apply a format's http_headers across the whole HLS playback session (manifest, sub-playlists, and segments), so no proxying of the media itself is needed; thumbnails have no per-field header mechanism, so they're proxied via /proxy/fikfap-thumb/... to inject the same Referer; get_uploader implemented (fikfap:<username> IDs) using GET profile/username/{user}.
freepornvideosxxx studio-network no no Studio-style scraper.
fyptt tiktok no no HTML scraper for fyptt.to (Beaver Builder/WordPress short-form TikTok-style vertical porn); card selector .fl-post-grid-post[class*="post-ID"] with category-{slug} CSS class doubling as both listing tag and category-archive route; latest feed / (page N: /page/N/), search /?s=query (page N: /page/N/?s=query), category archives at bare top-level slugs like /tiktok-ass/ (12 hardcoded categories exposed via the categories filter option, or via an explicit cat:/category: query prefix — bare keyword queries always go to WordPress search, never a category archive, because the category names ("sexy", "ass", "tiktok", "live", ...) are also the most common search terms); per-item enrichment fetches the detail page for the JSON-LD embedURL (one of three on-site player endpoints: fypttstr.php, fypttjwstr.php, or fypttjwstrhls.php) and datePublished, then fetches that embed URL to extract the actual signed stream.fyptt.to mp4 or /hls/*.m3u8 URL (token expires ~2h, no Referer required) for formats; thumbnails (fyptt.to/wp-content/uploads/...webp) need no proxy; no duration metadata available on listing or detail pages (set to 0); no real uploader/model identity (the girl-{slug} CSS class is cosmetic only, not a linkable archive) so /api/uploaders is not implemented; video.url is the detail page URL (not yt-dlp resolvable directly — the player is sandboxed-iframe-only) so formats are populated instead; no proxy needed.
freeuseporn fetish-kink no no Fetish archive pattern.
hanime hentai-animation no yes Uses proxied CDN/thumb handling.
heavyfetish fetish-kink no no Direct media handling.
hentaihaven hentai-animation no no HLS format builder pattern.
homoxxx gay-male no no Gay category grouping example.
hqporner studio-network no yes Uses thumb and redirect proxy helpers.
hsex chinese yes no Strong template for tags, uploaders, and direct HLS formats.
hypnotube fetish-kink no no Fetish/tube hybrid.
javtiful jav no no JAV channel family.
missav jav no no HLS format pattern.
noodlemagazine mainstream-tube no yes Best template for media and thumbnail proxying.
okporn mainstream-tube no no Simple mainstream archive.
okxxx mainstream-tube no no Mainstream search/archive pattern.
omgxxx studio-network yes no Best template for sites/networks/stars filter catalogs.
paradisehill mainstream-tube no no Simple page scraper.
perfectgirls studio-network no no Studio archive.
perverzija studio-network no no Multi-format/HLS examples.
pimpbunny onlyfans no yes Proxy-backed playback and thumbnail handling.
pmvhaven pmv-compilation no no PMV grouping example.
porn00 mainstream-tube no no Lightweight scraper.
porn4fans onlyfans no no KVS (Kernel Video Sharing) scraper for porn4fans.com (OnlyFans creator clips); Cloudflare-fronted but serves direct requests (no JS challenge), so the shared requester works without Jina/FlareSolverr and detail-page enrichment is safe; all feeds are fetched as KVS ?mode=async&function=get_block HTML fragments (cleaner + properly paginated vs the JS-filled full pages), parsed with scraper over div.item cards (a.img-wrap.video href→id/title, img.thumb data-webp/src, div.duration, li.video-item.views span, li.video-item.model a for uploader, div.preview-video[data-src] preview clip); latest feed is /onlyfans-videos/ block custom_list_videos_latest_videos_list paginated by from=N (12/page — note: NOT /latest-updates/, which 404s); search is /search/{dashed-query}/ block custom_list_videos_videos_list_search_result with q={query}&category_ids=&from_videos=N (24/page); category /categories/{slug}/ and tag /tags/{slug}/ share block custom_list_videos_common_videos_list (from=N, 12/page); model /models/{slug}/ uses block custom_list_videos_models_videos_list; sort maps new→post_date, popular→video_viewed, rated→rating, longest→duration; cat:/category:, tag:, and model:/uploader:/pornstar:/star: query prefixes route to the matching archive, and a bare query that exactly matches a background-loaded category title goes to that archive instead of keyword search; background-loads the 55-entry category title→slug map from /categories/ (#list_categories_categories_list_items a.item) for the categories filter option (sanitized out of /api/status like stars/networks, but honored in /api/videos); video.url is the /video/{id}/{slug}/ page URL (NOT yt-dlp-resolvable — yt-dlp's generic KVS extractor fails on this site's flashvars), so per-card enrichment fetches the detail page and pulls the direct video_url/video_alt_url flashvars (480p/720p) into formats (bounded buffered(8) concurrency); KVS get_file MP4 URLs come as …/ID.mp4/?v-acctoken=… with a trailing slash before the query — the provider strips it to …/ID.mp4?v-acctoken=… so the path ends in .mp4 (health-check/yt-dlp media detection keys off the extension); formats carry a Referer header (works with or without it); thumbnails (/contents/videos_screenshots/…) need no proxy or referer; uploader name on a card is the OnlyFans handle while the /models/{slug}/ URL slug is the canonical model name (they legitimately differ — e.g. handle "Blasianflexcouple" at slug nina-lee), so uploader uses the display handle and uploaderUrl/uploaderId (porn4fans:<slug>) use the slug; no /api/uploaders profile, no proxy; note "teen" and similar are compliance-blocked keywords that the site itself returns empty for.
porndish studio-network no yes Redirect proxy plus thumb proxy usage.
pornhat mainstream-tube no no Basic tube provider.
pornhd3x studio-network no yes Best template for complex catalogs and redirect proxy generation.
pornhub mainstream-tube no no Rich metadata and format examples.
pornhub-shorties tiktok no no Pornhub Shorties vertical short-form clips; parses JSON_SHORTIES JS variable embedded in HTML; fields: vkey, title, linkUrl, imageUrl, likeNumber, dislikeNumber, name/profileUrl (uploader), pillsData (tags), trackingTimeWatched.video_duration; pagination via ?page=N; search via ?search=query; sort via ?sort=trending|mostviewed|top_rated|hottest; phncdn thumbnails require Referer: https://www.pornhub.com/ (served via cdnReferrers in /api/status); yt-dlp resolves video.url natively (PornHub extractor); no proxy needed.
pornmz mainstream-tube no no Mainstream archive.
pornzog mainstream-tube no no Basic list/detail scraper.
porntrex mainstream-tube no no KVS-style HTML archive with direct MP4 formats and tag-aware search shortcuts.
redtube mainstream-tube no no Mainstream archive.
rule34gen ai no no AI group example.
rule34video hentai-animation no no Hentai group example.
sextb jav no no JAV family provider.
shooshtime onlyfans no yes Redirect proxy plus dedicated media route.
spankbang mainstream-tube no yes Best template for redirect proxy plus anti-bot fetches.
thaiporntv mainstream-tube no yes Decodes data-enc attribute for proxied HLS playback.
supjav jav no yes JAV/HLS provider; detail page URLs for video.url, proxied HLS format URLs via /proxy/supjav/....
sxyprn mainstream-tube no yes Redirect proxy helper usage.
tnaflix mainstream-tube no no Mainstream tube provider.
tokyomotion jav no no JAV/tube hybrid.
viralxxxporn mainstream-tube no no Basic parser with format extraction.
vjav jav yes no Best API-style template with uploaders and tag-id lookup maps.
vrporn studio-network no no Multi-format direct playback.
xfree tiktok no no Short-form grouping example.
xxdbx onlyfans no no OnlyFans-like grouping example.
xxthots onlyfans no no OnlyFans-like metadata example.
yesporn mainstream-tube no no Preview format examples.
youjizz mainstream-tube no no Mainstream tube provider.
youporn mainstream-tube no no Pornhub-network HTML provider with watch-page playback URLs and tag/channel/pornstar shortcuts.
tube8 mainstream-tube no yes Aylo/MindGeek platform scraper; redirect proxy fetches signed /media/hls/?s=TOKEN endpoint and returns highest-quality CDN HLS URL; supports tag/category/channel/pornstar shortcut queries.
jable jav no yes HTML JAV archive scraper; extracts var hlsUrl from detail pages; m3u8 format requires Referer + browser User-Agent; proxy route handles HEAD (200 OK) and GET (redirect to watch page) since yt-dlp blocks jable.tv; tag/category/model shortcut queries.
fullporner mainstream-tube no no HTML scraper for fullporner.com; thumbnail IDs derived from /thumb/{id}.jpg URLs and used to build direct xiaoshenke.net/vid/{id}/720 media redirect URLs (Referer + User-Agent headers required); supports cat:/category:/pornstar:/star: shortcut queries; no proxy needed.
thepornbunny mainstream-tube no yes KVS-style HTML scraper for thepornbunny.com; 24 items per site page; thumbnails at https://www.thepornbunny.com/images/thumb/{id}.webp from data-original attribute (no proxy needed); studio exposed as uploader; pornstar names in tags; /proxy/thepornbunny/{slug} fetches the video page, extracts generate_mp4(enc_data, key, rnd, video_id) args, decrypts enc_data via PBKDF2-HMAC-SHA512+AES-256-CBC to get an OK.ru session key, calls api.ok.ru/fb.do?method=video.get&session_key=KEY&vids=RND to get signed CDN URLs, and returns 302 to the best-quality okcdn.ru/vkuser.net MP4 URL (no special client headers needed); supports sort: new/popular/rated, 20 hardcoded categories via categories option, and tag:/category:/studio:/pornstar: query shortcuts.
eporner mainstream-tube no no HTML scraper for eporner.com (5M+ videos); card selector div.mb[data-id] with inline duration/rating/views/uploader; thumbnails at static-eu-cdn.eporner.com (no proxy needed); pagination uses /{N}/ suffix (page 1 = no suffix, page 2 = /2/); search queries map to /tag/{slug}/ (eporner redirects all keyword searches to tag pages — 404 tag pages still return related content); supports sort: new/popular/rated/best; 65 hardcoded categories via cat:, tag:, pornstar:, uploader: query shortcuts; background-loads pornstar name→URL map from /pornstar-list/; yt-dlp resolves video.url natively (Eporner extractor); no proxy needed.
xnxx mainstream-tube no no HTML scraper for xnxx.com (10M+ videos); unified card parser handles two formats: div.thumb-block[data-eid] (search) and div.thumb-block.video[data-video='{"id":...}'] (hits); eid extracted from /video-{eid}/{slug} URL path; thumbnails at thumb-cdn77.xnxx-cdn.com and thumbs-gcore.xnxx-cdn.com (no proxy, no Referer needed); 0-indexed pagination (page 1 = /hits, page N = /hits/{N-1}); default feed is /hits (most-viewed — xnxx has no chronological listing); search via /search/{slug} (works for keywords and tags); supports tag:, cat:, category: query shortcuts; yt-dlp resolves video.url natively (XNXX extractor, returns 4-7 HLS formats); no proxy needed.
xhamster mainstream-tube no no HTML scraper for xhamster.com; card selector div[data-video-type="video"] with data-video-id; thumbnails via img[data-role="thumb-preview-img"] at ic-vt-nss.xhcdn.com (no proxy, no Referer needed); pagination via ?page=N query param (browse feeds use infinite-scroll so only search reliably returns different content per page); feeds: /newest (default), /most-viewed, /best; categories via /categories/{slug}; channels via /channels/{slug}; 43 hardcoded categories as categories option; uploader type inferred from URL path (/channels/ → channel, /creators/ → creator, /pornstars/ → pornstar); supports cat:/category: and channel: query shortcuts, plus static category name matching; preview mp4 clips from data-previewvideo attribute; yt-dlp resolves video.url natively (xHamster extractor, 28 formats); no proxy needed.
camsoda live-cams no no HTML scraper for camsoda.com /media listing; CF-protected so relies on Jina HTML fallback (requester sends X-Return-Format: html); parses anchor tags with [class*="media-item-module__title"] / [class*="media-item-module__subtitle"] CSS selectors; video-specific thumbnails from media-secure.camsoda.com/user/videos/{id}/; video URLs are page URLs (/{username}/media/{slug}/{id}) — CF blocks direct access and yt-dlp; supports uploader:/model: query prefix to browse a model's media page; no search API — keyword queries fall through to client-side filtering; pagination via ?page=N but CamSoda serves the same 60 items regardless of page (JS-driven infinite scroll).
xvideos mainstream-tube no no HTML scraper for xvideos.com; handles two card formats: homepage (div.thumb-block[data-id][data-eid]) uses p.title a[title] + data-pvv on img, best-of-month page uses div.thumb-block.video[data-video=JSON] with div.title a text + previewVideo JSON key; thumbnails at thumb-cdn77.xvideos-cdn.com / thumbs-gcore.xvideos-cdn.com (no proxy needed); latest: / (page 1) / /new/{N-1} (page N≥2); best-of-month: /best/{YYYY-MM} (previous calendar month), page N: /best/{YYYY-MM}/{N-1}; search: /?k={query} / /?k={query}&p={N-1} (0-indexed); tag shortcuts: /tags/{slug}/{N-1}; category shortcuts: /c/{Name}-{ID}/{N-1} (38 hardcoded categories); cat:, tag:, uploader: query prefix routing; yt-dlp resolves video.url natively (XVideos extractor → HLS formats); CDN preview mp4 in preview field; no proxy needed.
wowxxx studio-network no no HTML scraper for wow.xxx premium aggregator; default feed /latest-updates/, page 2 /{N}/ suffix (for example /latest-updates/2/), search /search/{query}/relevance/ with the same page suffix; supports site:/studio:/network:/model:/pornstar:/tag:/cat: query shortcuts to direct archive routes; list cards expose preview clips (cast.wow.xxx/preview/*.mp4), thumbnails (img.wow.xxx/.../medium@2x/1.jpg), duration, rating, views, site (as uploader), and model tags; video.url is the detail page URL and yt-dlp resolves HTML5 MP4 formats dynamically; no proxy needed.

Proxy Routes

Redirect proxies

These resolve a provider-specific input into a 302 Location.

  • /proxy/doodstream/{endpoint}*
  • /proxy/sxyprn/{endpoint}*
  • /proxy/javtiful/{endpoint}*
  • /proxy/spankbang/{endpoint}*
  • /proxy/porndish/{endpoint}*
  • /proxy/hqporner/{endpoint}*
  • /proxy/heavyfetish/{endpoint}*
  • /proxy/vjav/{endpoint}*
  • /proxy/pornhd3x/{endpoint}*
  • /proxy/shooshtime/{endpoint}*
  • /proxy/pimpbunny/{endpoint}*
  • /proxy/allpornstream/{endpoint}*
  • /proxy/tube8/{endpoint}*
  • /proxy/supjav/{endpoint}*
  • /proxy/jable/{slug}*
  • /proxy/thepornbunny/{slug}*

Media/image proxies

These return binary media or images, sometimes rewriting manifests or forwarding cookies/referers.

  • /proxy/shooshtime-media/{endpoint}*
  • /proxy/noodlemagazine/{endpoint}*
  • /proxy/noodlemagazine-thumb/{endpoint}*
  • /proxy/hanime-cdn/{endpoint}*
  • /proxy/fikfap-thumb/{endpoint}*
  • /proxy/hqporner-thumb/{endpoint}*
  • /proxy/porndish-thumb/{endpoint}*
  • /proxy/pornhub-thumb/{endpoint}*

Best Copy Sources By Problem

  • Need uploader support: copy hsex, omgxxx, or vjav.
  • Need proxied media: copy noodlemagazine.
  • Need proxied redirect-only playback: copy spankbang or pornhd3x.
  • Need big background-loaded filter catalogs: copy pornhd3x or omgxxx.
  • Need tag title to site-ID lookup maps: copy vjav or hsex.