# 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:`). | | `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=` (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:` IDs) using `GET profile/username/{user}`. | | `freepornvideosxxx` | `studio-network` | no | no | Studio-style scraper. | | `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 | OnlyFans-like grouping example. | | `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`.