# Seamless query resolution todo Goal: a free-form query ("gal ritchie", "family strokes") should reach the matching pornstar / studio / channel / tag archive **without** a `pornstar:` / `studio:` / `tag:` prefix, by asking the site (probe) and falling back to keyword search. Prefixes stay as explicit overrides. Pattern (see `hooporn`, `cumlouder`): after known-category matching, probe page 1 of each entity archive for the slug with `Requester::get_probe` (404 = instant `None`, Cloudflare challenge goes to FlareSolverr, 5xx/429 retried once), use the first archive that yields cards (page N stays in that archive), else keyword search. A probe is only valid after checking what the site answers for an unknown slug (404 vs soft-404 that lists unrelated videos). Status: `[ ]` open, `[x]` done and verified live (feed of the archive + unknown name falls back), `[-]` not applicable (reason). | | Provider | Prefix kinds today | Plan / evidence | |---|---|---|---| | [x] | `hooporn` | cat, pornstar, studio | reference implementation | | [x] | `cumlouder` | cat, tag, series, girl | reference implementation (girl page, then tag) | | [x] | `fullporner` | cat, pornstar | probes `/pornstar/{slug}` (unknown = 404 with a suggestion grid, so status decides); `pornstar:` slug now dashed | | [x] | `fullpornerorg` | pornstar | probes `/videos/pornstar/{slug}/` (404 for unknown) | | [x] | `tube8` | tag, cat, channel, pornstar | probes pornstar then channel | | [x] | `youporn` | tag, channel, pornstar, amateur | probes pornstar, channel, amateur (plus existing background shortcut map) | | [x] | `porn4fans` | tag, cat, model | probes `/models/{slug}/` then `/tags/{slug}/` (both 404 when unknown) | | [x] | `xvideos` | tag, cat, uploader/channel/profile | probes `/channels/{slug}/videos/new/0` (JSON; pornstar profiles redirect there). **Also fixed**: the old `channel:`/`uploader:` prefix returned nothing (landing page cards are `/prof-video-click/` links); channels are now read from the JSON video list | | [x] | `xhamster` | cat, channel | added `Pornstar` target; probes pornstar then channel | | [x] | `xgroovy` | cat, pornstar, channel | probes pornstar then channel | | [x] | `thepornbunny` | tag, cat, studio, pornstar | probes pornstar, studio, tag (unknown slugs redirect home: `get_probe` now treats a redirect to another path as a miss) | | [x] | `pornhub` | channel, pornstar, model, user | background catalogs already matched listed names; unknown names are probed (`pornstar`, `model`, `channels`) and cached in `tag_map` (misses remembered) | | [x] | `clapdat` | tag, user | probes tag then user | | [x] | `fikfap` | tag, user | single-word query that is an existing profile (profile endpoint) goes to its posts, empty profile falls back to search | | [x] | `erome` | uploader, user | single-word query that is an existing `/{name}` with albums goes to the uploader | | [x] | `redgifs` | tag, user | single-word query that is an existing creator (users endpoint) goes to the creator, empty falls back | | [x] | `sextb` | (catalog matched) | catalog (actress/studio/genre) match first, then probes `/actress/{slug}` and `/studio/{slug}` for names outside the catalog | | [x] | `coomer` | u:, @service:user | single-word query that is an existing creator id (`/api/v1/{service}/user/{id}/profile`) goes to the creator. **Also fixed**: creator feeds are a bare JSON array, which the parser rejected (every creator feed was empty) | | [-] | `ripnsfw`, `hsex`, `omgxxx`, `eporner`, `borntobefuck`, `archivebate` | various | already seamless: bare names match background-loaded creator / studio / tag catalogs (or the whole catalog is filtered client-side) | | [-] | `perfectgirls`, `okxxx`, `pornhat`, `perverzija`, `porntrex` | sites/models/stars | bare names already resolve through the background-loaded `tag_map`; these clones build their own `wreq` client with no `ServerOptions`, so a live probe needs a separate refactor onto the shared requester | | [-] | `homoxxx` | models, pornstars, channels, categories, tags | legacy provider (own client, unpaginated archives, no `/models/` index on the site); not worth a probe until it is rewritten | | [-] | `kwiky`, `animeidhentai`, `hentaitv`, `xnxx`, `blowjobspro`, `txxx` | tag/cat | search already is the entity lookup, or the site has no pornstar/studio archives to probe (txxx: the API rejects `models`/`channels` sections) | | [-] | `fyptt` | cat | by design: bare category words are common search terms and must not be hijacked | | [-] | `notfans` | tag, category | tag URLs are hashed ids, so an unknown name cannot be probed; search covers it | | [-] | `allpornstream`, `jable`, `wowxxx`, `hornyleak`, `hotbunny`, `hentaimama`, `tikporn`, `camsoda` | actor/producer, model, studio, ... | Cloudflare-gated or down from this host (403/522, FlareSolverr wedged), so a probe cannot be verified here; each would add one or two FlareSolverr solves per search. Candidates for the same pattern once checked from the production network |