From c34bc3368607335c16a130e14e4f9dda7b46eaed Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 17 Jun 2026 00:26:58 +0200 Subject: [PATCH 01/84] Pin the wrapper to firefox-11 Bump BINARY_VERSION firefox-10 -> firefox-11 so first-run fetches the new patched build (keeps the automation layer out of the page realm's observable state + synthetic-cursor input realism). Add the Date.now property normalization to the baseline prefs, paired with the firefox-11 binary's zoom.stealth.normalize_date_now support. --- src/invisible_playwright/constants.py | 2 +- src/invisible_playwright/prefs.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/invisible_playwright/constants.py b/src/invisible_playwright/constants.py index fc122ad..3844bca 100644 --- a/src/invisible_playwright/constants.py +++ b/src/invisible_playwright/constants.py @@ -7,7 +7,7 @@ bugfixes don't force a multi-hour Firefox rebuild. from __future__ import annotations # Bump this when a new patched Firefox build is released on GitHub. -BINARY_VERSION: str = "firefox-10" +BINARY_VERSION: str = "firefox-11" # Releases known to be broken — ensure_binary() refuses them with a clear error # instead of handing the user an unusable binary. firefox-8 was packaged without diff --git a/src/invisible_playwright/prefs.py b/src/invisible_playwright/prefs.py index 529b01f..be3263a 100644 --- a/src/invisible_playwright/prefs.py +++ b/src/invisible_playwright/prefs.py @@ -243,6 +243,18 @@ _BASELINE: Dict[str, Any] = { # improves fingerprint consistency — it cannot break connectivity. "security.ssl3.ecdhe_ecdsa_aes_128_sha": False, + # Date.now property normalization. Our build's *pristine* built-in Date.now + # property carries an internal representation that differs subtly from a + # stock Firefox's, which some fingerprint scripts can distinguish from a + # normal property. The binary (Juggler FrameTree) performs a plain + # self-assignment `Date.now = Date.now` in every new main-world document, + # converting it to a normal data property identical to a real browser's — + # WITHOUT changing its value, identity or toString (it stays the native + # function reporting "[native code]"). Pure fingerprint-consistency, no + # behavior change. Requires the binary's `zoom.stealth.normalize_date_now` + # support (firefox builds from 2026-06-15 on). + "zoom.stealth.normalize_date_now": True, + # Safebrowsing — chatty and fingerprintable. "browser.safebrowsing.malware.enabled": False, "browser.safebrowsing.phishing.enabled": False, From 6dcdc42c0536cbe9163e4b99778916ac53aee86f Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 17 Jun 2026 00:48:20 +0200 Subject: [PATCH 02/84] Drop the dead zoom.stealth.normalize_date_now baseline pref The Date.now self-assignment was a stopgap that the page-realm fix (the automation layer no longer touches the realm's built-ins before page scripts run) made unnecessary; that binary support was never landed, so the pref is a no-op on every shipped build. Remove it and its now-inaccurate comment. --- src/invisible_playwright/prefs.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/invisible_playwright/prefs.py b/src/invisible_playwright/prefs.py index be3263a..529b01f 100644 --- a/src/invisible_playwright/prefs.py +++ b/src/invisible_playwright/prefs.py @@ -243,18 +243,6 @@ _BASELINE: Dict[str, Any] = { # improves fingerprint consistency — it cannot break connectivity. "security.ssl3.ecdhe_ecdsa_aes_128_sha": False, - # Date.now property normalization. Our build's *pristine* built-in Date.now - # property carries an internal representation that differs subtly from a - # stock Firefox's, which some fingerprint scripts can distinguish from a - # normal property. The binary (Juggler FrameTree) performs a plain - # self-assignment `Date.now = Date.now` in every new main-world document, - # converting it to a normal data property identical to a real browser's — - # WITHOUT changing its value, identity or toString (it stays the native - # function reporting "[native code]"). Pure fingerprint-consistency, no - # behavior change. Requires the binary's `zoom.stealth.normalize_date_now` - # support (firefox builds from 2026-06-15 on). - "zoom.stealth.normalize_date_now": True, - # Safebrowsing — chatty and fingerprintable. "browser.safebrowsing.malware.enabled": False, "browser.safebrowsing.phishing.enabled": False, From 8f4b20a19da5dbee8a9ca7bf5036e36e09775b5d Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 19 Jun 2026 03:14:38 +0200 Subject: [PATCH 03/84] Pin firefox-12: cross-OS render parity + always-present standard fonts - BINARY_VERSION -> firefox-12 (self-calibrating font widths, per-family canvas distinctness, render-noise that preserves solid reference renders). - font_pool: the standard Windows fonts (Calibri, Franklin Gothic, Gadugi, Javanese Text, Myanmar Text) move from the per-profile optional set to core, so they are always present and the detected font set matches a real Windows install on every host. Defensive dedup in derive_font_prefs. - GPU persona applied on every platform (Linux/macOS present a coherent Windows GPU + WebGL params); pool re-rooted on a real-device GPU mix; render seeds recalibrated. - prefs: emit absolute per-family font widths that the binary self-calibrates. - geoip: always pull the latest mmdb via the releases/latest permalink, checked each launch, offline-safe (no pinned tag that can 404). - tests: per-font canvas distinctness, solid-readback purity under render-noise, always-present standard-font invariant, no duplicate families. --- CHANGELOG.md | 6 +- src/invisible_playwright/_fpforge/_sampler.py | 81 ++- .../_fpforge/data/font_pool.json | 415 ++++++++------ .../_fpforge/data/webgl_gpu_pool.json | 524 ++++++++++++++++++ .../_fpforge/data/win_hw_marginals.json | 469 ++++++++++++++++ src/invisible_playwright/_webgl_personas.py | 103 ++-- src/invisible_playwright/constants.py | 10 +- src/invisible_playwright/download.py | 109 ++-- src/invisible_playwright/prefs.py | 105 ++-- tests/test_canvas_render_stealth.py | 125 +++++ tests/test_geoip_update.py | 165 +++--- tests/test_integration.py | 16 +- tests/test_prefs.py | 50 +- tests/test_sampler.py | 74 +++ tests/test_webgl_noise_active.py | 63 +++ 15 files changed, 1885 insertions(+), 430 deletions(-) create mode 100644 src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json create mode 100644 src/invisible_playwright/_fpforge/data/win_hw_marginals.json create mode 100644 tests/test_canvas_render_stealth.py create mode 100644 tests/test_webgl_noise_active.py diff --git a/CHANGELOG.md b/CHANGELOG.md index f142d90..307383d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added - `timezone="auto"`: the browser timezone is auto-derived from the egress IP. By default (no explicit timezone) it ALWAYS resolves — from the proxy egress when a proxy is set, otherwise from the host's own public IP — so the zone can never disagree with the IP (the classic `timezone_mismatch` signal). An explicit `"Area/City"` is the only way to force a specific zone. On failure: with a proxy the launch raises (no silent host-TZ fallback behind a foreign proxy); without a proxy it falls back to the host TZ so a transient lookup can't break the launch. -- The egress IP is mapped to its IANA zone with an offline mmdb (`daijro/geoip-all-in-one`). It auto-updates against the upstream weekly rebuild: cached locally, re-checked after `GEOIP_REFRESH_DAYS` (7), older copies pruned, and a stale cache is reused when offline. `STEALTHFOX_GEOIP_MMDB` points at your own `.mmdb` to skip the download. +- The egress IP is mapped to its IANA zone with an offline mmdb (`daijro/geoip-all-in-one`). It always tracks the upstream weekly rebuild: on every launch the current latest release tag is resolved from the `releases/latest/download` permalink (no GitHub API → no rate limit) and pulled only if newer than the cache, older copies pruned. Offline → the cached copy is reused; never a pinned tag (daijro prunes old releases, so a pin eventually 404s). `STEALTHFOX_GEOIP_MMDB` points at your own `.mmdb` to skip the download. - `resolve_session_timezone(timezone, proxy)` and `ensure_geoip_mmdb()` re-exported at the package root (plus `GeoTimezoneError`) so integrations that own their launch can reproduce the resolution. - `tests/test_geo.py` (37) + `tests/test_geoip_update.py` (freshness / auto-update / offline fallback) unit tests. +- Cross-OS render parity (needs `firefox-12`): the same font/canvas/WebGL fingerprint now renders consistently on Windows, Linux and macOS, so a Windows persona looks identical regardless of the host the binary runs on. Each whitelisted font renders a distinct canvas image (font-detection probes that dedup by rendered image keep every name), the standard Windows fonts (Calibri, Franklin Gothic, Gadugi, Javanese Text, Myanmar Text) are always present so the detected font set matches a real Windows install, and the per-seed render-noise leaves a solid-colour reference render byte-exact while still varying real fingerprint renders. +- GPU persona applied on every platform: Linux/macOS hosts now present a coherent Windows GPU (renderer + WebGL parameters) instead of the host's real adapter; pool re-rooted on a real-device GPU mix. +- `tests/test_canvas_render_stealth.py`, `tests/test_webgl_noise_active.py` and new `tests/test_sampler.py` cases: regression guards for per-font canvas distinctness, solid-readback purity under render-noise, and the always-present standard-font invariant. ### Changed +- Pins `BINARY_VERSION = firefox-12` (the build with the cross-OS render-parity patches). - New runtime dependencies: `requests[socks]` (SOCKS egress lookup), `maxminddb` (mmdb reader), `tzdata` (IANA database for `zoneinfo`, which Windows lacks). ## [0.2.0] - 2026-05-28 diff --git a/src/invisible_playwright/_fpforge/_sampler.py b/src/invisible_playwright/_fpforge/_sampler.py index 195ef0d..b3d7048 100644 --- a/src/invisible_playwright/_fpforge/_sampler.py +++ b/src/invisible_playwright/_fpforge/_sampler.py @@ -76,6 +76,16 @@ _CPT_CODEC = _load("cpt_codec_given_class.json")["table"] _CPT_AUDIO = _load("cpt_audio_given_class.json")["table"] _INDEP = _load("priors_independent.json") _FONT_POOL = _load("font_pool.json") +# hardwareConcurrency: grounded in the REAL Windows marginal (browserforge Windows UAs). +# cores are OS-level, ~independent of GPU given the OS (browserforge confirms), so this is a +# root marginal — NOT conditioned on gpu_class/intra_tier. Fixes the old CPT over-representing +# 6 cores (~28% vs real ~2%). NB: screen size + dpr are intentionally LEFT on their existing +# nodes (user 2026-06-18: "non modificare dpr e le size degli screen, rompono sempre"). +_CORES_MARGINAL = [ + {"value": int(e["value"]), "prob": e["prob"]} + for e in _load("win_hw_marginals.json")["cores"] + if 2 <= int(e["value"]) <= 64 and e["prob"] >= 0.004 +] # Each entry is a dict {"name": "", "factor": float}. # - name: the font family advertised to the page. # - factor: per-family width scale used by the consumer to make the family @@ -83,7 +93,13 @@ _FONT_POOL = _load("font_pool.json") # Core = always-included; Optional = sampled with P(font | gpu_class). _FONT_CORE: list = _FONT_POOL["core"] _FONT_OPTIONAL: list = _FONT_POOL["optional"] -_CPT_FONTS_OPT = _load("cpt_fonts_optional_given_class.json")["table"] +_CPT_FONTS_OPT = _load("cpt_fonts_optional_given_class.json")["table"] # legacy (per-font sampling, superseded by profiles) +# Realistic Windows font PROFILES (2026-06-18): each = a real machine's optional-font set +# (validated to NOT over-claim on FP Pro). Profile-level variation (machines differ in +# Office/extra fonts) instead of per-font random sampling, which produced unrealistic +# combinations (exotic fonts -> FP Pro over-detection -> tampering_ml tell). +_FONT_PROFILES: list = _FONT_POOL.get("profiles", []) +_OPT_BY_NAME = {e["name"]: e for e in _FONT_OPTIONAL} # Browsing-history pool + CPT (per-class probabilities for visited sites). # Drives _recaptcha_seed's cookie pre-seed: each persona ends up with a # coherent list of ~15-30 visited sites whose categories correlate with @@ -213,9 +229,10 @@ _NETWORK = Network([ # larger SSD, higher-res screen than a 'budget' mid_range user. Without # this, hwc/screen/storage would be independent given gpu_class (noisy). Node("intra_tier", parents=["gpu_class"], cpt=_cpt_from_table(_CPT_INTRA_TIER)), - # hwc/screen/storage now jointly coherent via (gpu_class, intra_tier). - Node("hw_concurrency", parents=["gpu_class", "intra_tier"], - cpt=_cpt_from_table(_CPT_HWC)), + # hw_concurrency: REAL Windows marginal (root, OS-level, not GPU-conditioned). screen + + # storage stay jointly coherent via (gpu_class, intra_tier) — screen size deliberately + # unchanged (user: dpr + screen sizes break things; leave them). + Node("hw_concurrency", parents=[], cpt=_CORES_MARGINAL), Node("screen", parents=["gpu_class", "intra_tier"], cpt=_cpt_from_table(_CPT_SCREEN)), # Derive screen_tier from screen for msaa parent lookup. @@ -253,9 +270,10 @@ _NETWORK = Network([ def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: """Build COHERENT whitelist + metrics strings for the session. - Sampling: - - Core fonts always included. - - Optional fonts sampled with P(font | gpu_class) from the CPT table. + Profile-based (not per-font random): + - Core fonts always included (OS defaults + CSS-generic backers). + - Optional fonts come from ONE realistic Windows profile picked per seed + (weighted, deterministic). Metrics carry REAL per-family widths. Returns: { @@ -275,20 +293,49 @@ def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: Markers & add-new-font: simply add an entry to font_pool.json:core (with a factor at least 4% away from 1.0) — no special-case code needed. """ - cpt = _CPT_FONTS_OPT.get(gpu_class) - if cpt is None: - cpt = _CPT_FONTS_OPT["integrated_modern"] - included: list = list(_FONT_CORE) # always present - for entry in _FONT_OPTIONAL: - name = entry["name"] - p = cpt.get(name, 0.7) # default 0.7 if CPT has no row for this font - if rng.random() < p: - included.append(entry) + # Profile-based (2026-06-18): pick ONE realistic Windows font profile (weighted, + # deterministic per seed). Per-font random sampling is superseded — it produced + # unrealistic optional combinations (exotic fonts) that FP Pro over-detected + # (detected-set 26 vs real 20 -> tampering_ml ~0.72). Profiles are validated subsets + # of a real machine's set, so the detected-set matches a genuine Windows install. + included: list = list(_FONT_CORE) # core: always present (OS defaults + generic backers) + profile = None + if _FONT_PROFILES: + total = sum(p.get("weight", 1) for p in _FONT_PROFILES) + anchor = rng.random() * total + cum = 0.0 + for p in _FONT_PROFILES: + cum += p.get("weight", 1) + if anchor < cum: + profile = p + break + if profile is None: + profile = _FONT_PROFILES[-1] + if profile is not None: + for name in profile.get("optional", []): + entry = _OPT_BY_NAME.get(name) + if entry is not None: + included.append(entry) + else: + included.extend(_FONT_OPTIONAL) # fallback (no profiles defined): all optional + # Dedup by name (a profile may list a font that is also in core, e.g. after a + # standard font is promoted core→always-present) so the whitelist/metrics never + # carry a duplicate family. + _seen: set = set() + _uniq: list = [] + for e in included: + if e["name"] not in _seen: + _seen.add(e["name"]) + _uniq.append(e) + included = _uniq # Deterministic ordering: sort by name included.sort(key=lambda e: e["name"]) whitelist = ",".join(e["name"] for e in included) + # Emit the UNIVERSAL real Windows width per font (host-independent value, same everywhere). + # prefs._font_metrics_for_platform divides by the per-platform collapse base to get the C++ + # factor (measureText = base * factor = the exact Windows width on Windows/Linux/mac). metrics = ",".join( - f'{e["name"]}|{e["factor"]:.3f}' for e in included + f'{e["name"]}|{e["width"]:.1f}' for e in included ) return {"whitelist": whitelist, "metrics": metrics} diff --git a/src/invisible_playwright/_fpforge/data/font_pool.json b/src/invisible_playwright/_fpforge/data/font_pool.json index f36e370..bfa4157 100644 --- a/src/invisible_playwright/_fpforge/data/font_pool.json +++ b/src/invisible_playwright/_fpforge/data/font_pool.json @@ -2,669 +2,722 @@ "core": [ { "name": "arial", - "factor": 0.978 + "width": 2256.7 }, { "name": "arial black", - "factor": 1.168 + "width": 2256.7 }, { "name": "arial narrow", - "factor": 0.854 + "width": 2216.7 }, { "name": "bahnschrift", - "factor": 0.951 + "width": 2231.9 }, { "name": "bahnschrift condensed", - "factor": 1.179 + "width": 2216.7 }, { "name": "bahnschrift light", - "factor": 0.908 + "width": 2216.7 }, { "name": "bahnschrift light condensed", - "factor": 1.053 + "width": 2216.7 }, { "name": "bahnschrift light semicondensed", - "factor": 1.063 + "width": 2216.7 }, { "name": "bahnschrift semibold", - "factor": 0.926 + "width": 2216.7 }, { "name": "bahnschrift semibold condensed", - "factor": 1.131 + "width": 2216.7 }, { "name": "bahnschrift semibold semicondensed", - "factor": 1.043 + "width": 2216.7 }, { "name": "bahnschrift semicondensed", - "factor": 1.098 + "width": 2216.7 }, { "name": "bahnschrift semilight", - "factor": 0.873 + "width": 2216.7 }, { "name": "bahnschrift semilight condensed", - "factor": 0.905 + "width": 2216.7 }, { "name": "bahnschrift semilight semicondensed", - "factor": 1.135 + "width": 2216.7 + }, + { + "name": "calibri", + "width": 2139.5 }, { "name": "calibri light", - "factor": 0.901 + "width": 2139.5 }, { "name": "cambria", - "factor": 1.063 + "width": 2258.2 }, { "name": "cambria math", - "factor": 1.041 + "width": 2258.2 }, { "name": "candara", - "factor": 0.927 + "width": 2187.8 }, { "name": "candara light", - "factor": 0.892 + "width": 2187.8 }, { "name": "cascadia code", - "factor": 1.139 + "width": 2362.3 }, { "name": "cascadia mono", - "factor": 0.95 + "width": 2362.3 }, { "name": "comic sans ms", - "factor": 1.087 + "width": 2361.9 }, { "name": "consolas", - "factor": 1.158 + "width": 2216.7 }, { "name": "constantia", - "factor": 1.052 + "width": 2283.2 }, { "name": "corbel", - "factor": 0.895 + "width": 2129.9 }, { "name": "corbel light", - "factor": 0.876 + "width": 2129.9 }, { "name": "courier new", - "factor": 1.187 + "width": 2419.2 }, { "name": "ebrima", - "factor": 0.962 + "width": 2285.2 + }, + { + "name": "franklin gothic", + "width": 2225.4 }, { "name": "franklin gothic medium", - "factor": 1.031 + "width": 2225.4 }, { "name": "gabriola", - "factor": 1.077 + "width": 1598.5 + }, + { + "name": "gadugi", + "width": 2285.2 }, { "name": "georgia", - "factor": 1.094 + "width": 2338.7 }, { "name": "hololens mdl2 assets", - "factor": 1.145 + "width": 2216.7 }, { "name": "impact", - "factor": 0.862 + "width": 2060.8 }, { "name": "ink free", - "factor": 1.048 + "width": 2122.5 + }, + { + "name": "javanese text", + "width": 2311.9 }, { "name": "leelawadee ui semilight", - "factor": 1.061 + "width": 2283.4 }, { "name": "lucida console", - "factor": 1.131 + "width": 2429.5 }, { "name": "lucida sans unicode", - "factor": 1.014 + "width": 2464.3 }, { "name": "malgun gothic", - "factor": 1.128 + "width": 2351.1 }, { "name": "malgun gothic semilight", - "factor": 1.051 + "width": 2351.1 }, { "name": "marlett", - "factor": 0.855 + "width": 3740.2 }, { "name": "microsoft himalaya", - "factor": 1.022 + "width": 1468.4 }, { "name": "microsoft jhenghei", - "factor": 1.061 + "width": 2440.4 }, { "name": "microsoft jhenghei light", - "factor": 0.94 + "width": 2440.4 }, { "name": "microsoft jhenghei ui", - "factor": 1.136 + "width": 2440.4 }, { "name": "microsoft jhenghei ui light", - "factor": 0.826 + "width": 2440.4 }, { "name": "microsoft new tai lue", - "factor": 0.953 + "width": 2285.2 }, { "name": "microsoft phagspa", - "factor": 0.988 + "width": 2285.2 }, { "name": "microsoft sans serif", - "factor": 0.941 + "width": 2256.6 }, { "name": "microsoft tai le", - "factor": 0.957 + "width": 2285.2 }, { "name": "microsoft yahei", - "factor": 1.076 + "width": 2487.6 }, { "name": "microsoft yahei light", - "factor": 1.043 + "width": 2487.6 }, { "name": "microsoft yahei ui", - "factor": 1.076 + "width": 2487.6 }, { "name": "microsoft yahei ui light", - "factor": 1.094 + "width": 2487.6 }, { "name": "microsoft yi baiti", - "factor": 1.008 + "width": 1830.7 }, { "name": "mingliu-extb", - "factor": 1.173 + "width": 2016 }, { "name": "mingliu_hkscs-extb", - "factor": 1.101 + "width": 2016 }, { "name": "mongolian baiti", - "factor": 1.056 + "width": 2191.7 }, { "name": "ms gothic", - "factor": 1.119 + "width": 2016 }, { "name": "ms pgothic", - "factor": 1.074 + "width": 2031.7 }, { "name": "mv boli", - "factor": 0.932 + "width": 2417.4 + }, + { + "name": "myanmar text", + "width": 2285.2 }, { "name": "nirmala ui", - "factor": 0.916 + "width": 2283.4 }, { "name": "nirmala ui semilight", - "factor": 1.15 + "width": 2283.4 }, { "name": "nsimsun", - "factor": 1.119 + "width": 2016 }, { "name": "palatino linotype", - "factor": 1.067 + "width": 2358.6 }, { "name": "pmingliu-extb", - "factor": 1.16 + "width": 2065.9 }, { "name": "sans serif collection", - "factor": 0.854 + "width": 2361.6 }, { "name": "segoe mdl2 assets", - "factor": 0.858 + "width": 2137.2 }, { "name": "segoe print", - "factor": 1.033 + "width": 2675.2 }, { "name": "segoe script", - "factor": 1.058 + "width": 2830.3 }, { "name": "segoe ui", - "factor": 0.948 + "width": 2285.2 }, { "name": "segoe ui black", - "factor": 1.148 + "width": 2285.2 }, { "name": "segoe ui emoji", - "factor": 0.924 + "width": 2283.4 }, { "name": "segoe ui historic", - "factor": 0.969 + "width": 2283.4 }, { "name": "segoe ui semibold", - "factor": 0.965 + "width": 2216.7 }, { "name": "segoe ui semilight", - "factor": 1.055 + "width": 2216.7 }, { "name": "segoe ui symbol", - "factor": 0.972 + "width": 2283.4 }, { "name": "segoe ui variable", - "factor": 0.907 + "width": 2216.7 }, { "name": "simsun", - "factor": 1.113 + "width": 2016 }, { "name": "simsun-extb", - "factor": 1.095 + "width": 2016 }, { "name": "sitka banner", - "factor": 1.078 + "width": 2007.8 }, { "name": "sitka display", - "factor": 0.838 + "width": 2007.8 }, { "name": "sitka heading", - "factor": 0.843 + "width": 2007.8 }, { "name": "sitka small", - "factor": 1.131 + "width": 2007.8 }, { "name": "sitka subheading", - "factor": 0.942 + "width": 2007.8 }, { "name": "sitka text", - "factor": 1.044 + "width": 2007.8 }, { "name": "sylfaen", - "factor": 0.971 + "width": 2279.6 }, { "name": "symbol", - "factor": 0.866 + "width": 2223.4 }, { "name": "tahoma", - "factor": 0.962 + "width": 2233.1 }, { "name": "times new roman", - "factor": 0.926 + "width": 2191.7 }, { "name": "trebuchet ms", - "factor": 0.912 + "width": 2222.4 }, { "name": "verdana", - "factor": 1.128 + "width": 2529.1 }, { "name": "webdings", - "factor": 0.849 + "width": 3627.5 }, { "name": "wingdings", - "factor": 0.864 + "width": 3539.7 }, { "name": "wingdings 2", - "factor": 1.093 + "width": 3582.1 }, { "name": "wingdings 3", - "factor": 0.861 + "width": 2963.4 }, { "name": "yu gothic", - "factor": 1.069 + "width": 2351.3 }, { "name": "yu gothic light", - "factor": 1.038 + "width": 2351.3 }, { "name": "yu gothic medium", - "factor": 1.161 + "width": 2216.7 }, { "name": "yu gothic ui", - "factor": 0.886 + "width": 2285.2 }, { "name": "yu gothic ui light", - "factor": 1.093 + "width": 2285.2 }, { "name": "yu gothic ui semibold", - "factor": 0.942 + "width": 2216.7 }, { "name": "yu gothic ui semilight", - "factor": 0.923 + "width": 2216.7 } ], "optional": [ { "name": "aparajita", - "factor": 0.94 + "width": 2216.7 }, { "name": "arabic typesetting", - "factor": 1.093 + "width": 2216.7 }, { "name": "arial unicode ms", - "factor": 1.047 + "width": 2216.7 }, { "name": "batang", - "factor": 0.911 - }, - { - "name": "calibri", - "factor": 0.934 + "width": 2216.7 }, { "name": "century", - "factor": 1.078 + "width": 2397.7 }, { "name": "century gothic", - "factor": 0.886 + "width": 2409.1 }, { "name": "dengxian", - "factor": 0.846 + "width": 2216.7 }, { "name": "dfkai-sb", - "factor": 0.946 + "width": 2216.7 }, { "name": "dokchampa", - "factor": 1.162 + "width": 2216.7 }, { "name": "estrangelo edessa", - "factor": 1.095 + "width": 2216.7 }, { "name": "euphemia", - "factor": 1.117 + "width": 2216.7 }, { "name": "fangsong", - "factor": 0.942 - }, - { - "name": "franklin gothic", - "factor": 0.942 - }, - { - "name": "gadugi", - "factor": 0.945 + "width": 2216.7 }, { "name": "gautami", - "factor": 1.134 + "width": 2216.7 }, { "name": "haettenschweiler", - "factor": 0.874 + "width": 1567.6 }, { "name": "helv", - "factor": 0.923 + "width": 2256.6 }, { "name": "iskoola pota", - "factor": 0.857 - }, - { - "name": "javanese text", - "factor": 1.083 + "width": 2216.7 }, { "name": "kaiti", - "factor": 1.145 + "width": 2216.7 }, { "name": "kalinga", - "factor": 0.953 + "width": 2216.7 }, { "name": "kartika", - "factor": 0.882 + "width": 2216.7 }, { "name": "khmer ui", - "factor": 1.137 + "width": 2216.7 }, { "name": "kokila", - "factor": 0.919 + "width": 2216.7 }, { "name": "lao ui", - "factor": 0.904 + "width": 2216.7 }, { "name": "latha", - "factor": 0.839 + "width": 2216.7 }, { "name": "leelawadee", - "factor": 0.982 + "width": 2267.4 }, { "name": "leelawadee ui", - "factor": 0.992 + "width": 2283.4 }, { "name": "levenim mt", - "factor": 1.054 + "width": 2216.7 }, { "name": "mangal", - "factor": 1.154 + "width": 2216.7 }, { "name": "meiryo", - "factor": 1.165 + "width": 2216.7 }, { "name": "meiryo ui", - "factor": 1.081 + "width": 2216.7 }, { "name": "microsoft uighur", - "factor": 0.969 + "width": 1498.1 }, { "name": "monotype corsiva", - "factor": 0.939 + "width": 1929.3 }, { "name": "ms mincho", - "factor": 1.112 + "width": 2216.7 }, { "name": "ms outlook", - "factor": 0.921 + "width": 2361.9 }, { "name": "ms pmincho", - "factor": 0.925 + "width": 2216.7 }, { "name": "ms reference sans serif", - "factor": 0.858 + "width": 2529.0 }, { "name": "ms reference specialty", - "factor": 0.958 + "width": 2976.2 }, { "name": "ms ui gothic", - "factor": 1.097 + "width": 2031.7 }, { "name": "mt extra", - "factor": 0.905 - }, - { - "name": "myanmar text", - "factor": 0.961 + "width": 2183.8 }, { "name": "nyala", - "factor": 1.108 + "width": 2216.7 }, { "name": "plantagenet cherokee", - "factor": 1.115 + "width": 2216.7 }, { "name": "pmingliu", - "factor": 1.125 + "width": 2216.7 }, { "name": "pristina", - "factor": 1.023 + "width": 1829.1 }, { "name": "raavi", - "factor": 0.826 + "width": 2216.7 }, { "name": "segoe fluent icons", - "factor": 1.049 + "width": 2142.7 }, { "name": "segoe ui light", - "factor": 0.918 + "width": 2216.7 }, { "name": "shonar bangla", - "factor": 1.141 + "width": 2216.7 }, { "name": "shruti", - "factor": 1.172 + "width": 2216.7 }, { "name": "simhei", - "factor": 1.141 + "width": 2216.7 }, { "name": "simkai", - "factor": 1.1 + "width": 2216.7 }, { "name": "small fonts", - "factor": 0.849 + "width": 2256.7 }, { "name": "traditional arabic", - "factor": 0.893 + "width": 2216.7 }, { "name": "tunga", - "factor": 0.825 + "width": 2216.7 }, { "name": "urdu typesetting", - "factor": 0.869 + "width": 2216.7 }, { "name": "utsaah", - "factor": 1.144 + "width": 2216.7 }, { "name": "vani", - "factor": 1.078 + "width": 2216.7 }, { "name": "vijaya", - "factor": 0.917 + "width": 2216.7 }, { "name": "vrinda", - "factor": 0.985 + "width": 2216.7 }, { "name": "yu mincho", - "factor": 0.867 + "width": 2216.7 + } + ], + "profiles": [ + { + "name": "win_office", + "weight": 40, + "optional": [ + "century", + "century gothic", + "helv", + "haettenschweiler", + "leelawadee", + "ms outlook", + "ms reference specialty", + "ms ui gothic", + "mt extra", + "microsoft uighur", + "monotype corsiva", + "pristina", + "segoe ui light", + "small fonts" + ] + }, + { + "name": "win_base", + "weight": 35, + "optional": [ + "century", + "century gothic", + "helv", + "haettenschweiler", + "leelawadee", + "ms ui gothic", + "microsoft uighur", + "monotype corsiva", + "pristina", + "segoe ui light", + "small fonts" + ] + }, + { + "name": "win_lean", + "weight": 25, + "optional": [ + "century", + "century gothic", + "helv", + "haettenschweiler", + "leelawadee", + "ms ui gothic", + "segoe ui light", + "small fonts" + ] } ] } \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json b/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json new file mode 100644 index 0000000..34f757b --- /dev/null +++ b/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json @@ -0,0 +1,524 @@ +{ + "win": [ + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.462396, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.192201, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.157382, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|16,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (AMD)", + "renderer_out": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.084958, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (AMD)", + "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.052925, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.013928, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Microsoft)", + "renderer_out": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.012535, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (Microsoft)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|16,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0)", + "prob": 0.006964, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1), or similar", + "prob": 0.004178, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|2,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|512,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Google)", + "renderer_out": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)", + "prob": 0.002786, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)", + "zoom.stealth.webgl.vendor": "Google Inc. (Google)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,EXT_sRGB,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_etc1,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_multi_draw", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_color_buffer_half_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,EXT_texture_norm16,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_clip_cull_distance,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_etc1,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_lose_context,WEBGL_multi_draw", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|15,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|1029,34855|1029,34856|1029,34857|1029,34858|1029,34859|1029,34860|1029,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|60,35375|72,35376|65536,35377|245760,35379|245760,35380|256,35657|16384,35658|16384,35659|124,35660|32,35661|64,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36345|1,36347|4096,36348|31,36349|4096,37137|0,37154|128,37157|128,37443|37444,37447|0", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|8192:8192,33901|1:1023,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|15:15:10,35633*36337|15:15:10,35633*36338|127:127:23,35633*36339|15:14:0,35633*36340|15:14:0,35633*36341|31:30:0,35632*36336|15:15:10,35632*36337|15:15:10,35632*36338|127:127:23,35632*36339|15:14:0,35632*36340|15:14:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (AMD)", + "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4096,36348|14,36349|1024,37443|37444", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": false + } + }, + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4095,36348|14,36349|1024,37443|37444", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": false + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4096,36348|14,36349|1024,37443|37444", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": false + } + }, + { + "vendor": "Google Inc. (Intel)", + "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1)", + "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|2,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|512,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)", + "prob": 0.001393, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + } + ], + "mac": [ + { + "vendor": "Apple", + "renderer_out": "Apple M1, or similar", + "prob": 0.84322, + "prefs": { + "zoom.stealth.webgl.renderer": "Apple M1, or similar", + "zoom.stealth.webgl.vendor": "Apple", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|16,35373|16,35374|80,35375|80,35376|65536,35377|266240,35379|266240,35380|256,35657|4096,35658|4096,35659|124,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|4,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|64,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:64,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Intel Inc.", + "renderer_out": "Intel(R) HD Graphics 400, or similar", + "prob": 0.076271, + "prefs": { + "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400, or similar", + "zoom.stealth.webgl.vendor": "Intel Inc.", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|75,35375|75,35376|65536,35377|249856,35379|249856,35380|256,35657|4096,35658|4096,35659|60,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|16,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", + "zoom.stealth.webgl.float_params": "33901|1:255.875", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "ATI Technologies Inc.", + "renderer_out": "Radeon R9 200 Series, or similar", + "prob": 0.038136, + "prefs": { + "zoom.stealth.webgl.renderer": "Radeon R9 200 Series, or similar", + "zoom.stealth.webgl.vendor": "ATI Technologies Inc.", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|16,35373|16,35374|80,35375|80,35376|65536,35377|266240,35379|266240,35380|256,35657|4096,35658|4096,35659|128,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|8,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:8191,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Intel Inc.", + "renderer_out": "Intel(R) HD Graphics, or similar", + "prob": 0.033898, + "prefs": { + "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics, or similar", + "zoom.stealth.webgl.vendor": "Intel Inc.", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|75,35375|75,35376|65536,35377|249856,35379|249856,35380|256,35657|4096,35658|4096,35659|60,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|16,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", + "zoom.stealth.webgl.float_params": "33901|1:255.875", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Google Inc. (NVIDIA)", + "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", + "prob": 0.008475, + "prefs": { + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", + "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", + "zoom.stealth.webgl2.enabled": true + } + } + ], + "lin": [ + { + "vendor": "Intel", + "renderer_out": "Intel(R) HD Graphics, or similar", + "prob": 0.282051, + "prefs": { + "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics, or similar", + "zoom.stealth.webgl.vendor": "Intel", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|16,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "NVIDIA Corporation", + "renderer_out": "NVIDIA GeForce GTX 980, or similar", + "prob": 0.25641, + "prefs": { + "zoom.stealth.webgl.renderer": "NVIDIA GeForce GTX 980, or similar", + "zoom.stealth.webgl.vendor": "NVIDIA Corporation", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|32768,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048576,33001|1048576,33170|4352,34016|33984,34024|32768,34045|15,34076|32768,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|233472,35379|233472,35380|256,35657|4096,35658|4096,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|32,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32768:32768,33901|1:2047,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Intel", + "renderer_out": "Intel(R) HD Graphics 400, or similar", + "prob": 0.153846, + "prefs": { + "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400, or similar", + "zoom.stealth.webgl.vendor": "Intel", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "AMD", + "renderer_out": "Radeon R9 200 Series, or similar", + "prob": 0.102564, + "prefs": { + "zoom.stealth.webgl.renderer": "Radeon R9 200 Series, or similar", + "zoom.stealth.webgl.vendor": "AMD", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|4294967292,35377|16106143729,35379|16106143729,35380|4,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", + "zoom.stealth.webgl.float_params": "33901|0.125:2048", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "AMD", + "renderer_out": "Radeon HD 3200 Graphics, or similar", + "prob": 0.083333, + "prefs": { + "zoom.stealth.webgl.renderer": "Radeon HD 3200 Graphics, or similar", + "zoom.stealth.webgl.vendor": "AMD", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|4051211264,35377|15192058624,35379|15192058624,35380|4,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", + "zoom.stealth.webgl.float_params": "33901|0.125:2048", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Mesa", + "renderer_out": "llvmpipe, or similar", + "prob": 0.070513, + "prefs": { + "zoom.stealth.webgl.renderer": "llvmpipe, or similar", + "zoom.stealth.webgl.vendor": "Mesa", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|16,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|64,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|4,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Intel", + "renderer_out": "Intel(R) HD Graphics 400", + "prob": 0.019231, + "prefs": { + "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400", + "zoom.stealth.webgl.vendor": "Intel", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Mesa", + "renderer_out": "llvmpipe", + "prob": 0.019231, + "prefs": { + "zoom.stealth.webgl.renderer": "llvmpipe", + "zoom.stealth.webgl.vendor": "Mesa", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|16,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|64,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|4,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "NVIDIA Corporation", + "renderer_out": "NVIDIA GeForce GTX 980/PCIe/SSE2", + "prob": 0.00641, + "prefs": { + "zoom.stealth.webgl.renderer": "NVIDIA GeForce GTX 980/PCIe/SSE2", + "zoom.stealth.webgl.vendor": "NVIDIA Corporation", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|32768,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048576,33001|1048576,33170|4352,34016|33984,34024|32768,34045|15,34076|32768,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|233472,35379|233472,35380|256,35657|4096,35658|4096,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|32,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32768:32768,33901|1:2047,33902|1:1", + "zoom.stealth.webgl.float_params": "", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + }, + { + "vendor": "Mesa", + "renderer_out": "GeForce GTX 980, or similar", + "prob": 0.00641, + "prefs": { + "zoom.stealth.webgl.renderer": "GeForce GTX 980, or similar", + "zoom.stealth.webgl.vendor": "Mesa", + "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", + "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", + "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|15,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|245760,35379|245760,35380|256,35657|16384,35658|16384,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", + "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", + "zoom.stealth.webgl.float_params": "33901|1:63.375", + "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", + "zoom.stealth.webgl2.enabled": true + } + } + ], + "_meta": { + "source": "camoufox webgl_data.db (offline extract; real Firefox WebGL telemetry)", + "note": "prefs are zoom.stealth.webgl.* override values; prob normalized per-OS" + } +} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/win_hw_marginals.json b/src/invisible_playwright/_fpforge/data/win_hw_marginals.json new file mode 100644 index 0000000..9d1d71b --- /dev/null +++ b/src/invisible_playwright/_fpforge/data/win_hw_marginals.json @@ -0,0 +1,469 @@ +{ + "_meta": { + "source": "browserforge Windows UAs (offline; OS-level screen/cores marginal)" + }, + "screens": [ + { + "w": 1536, + "h": 864, + "availW": 1536, + "availH": 816, + "dpr": 1.25, + "prob": 0.264935 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.161965 + }, + { + "w": 1280, + "h": 720, + "availW": 1280, + "availH": 672, + "dpr": 1.5, + "prob": 0.07915 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1040, + "dpr": 1, + "prob": 0.06376 + }, + { + "w": 1366, + "h": 768, + "availW": 1366, + "availH": 728, + "dpr": 1, + "prob": 0.054416 + }, + { + "w": 1366, + "h": 768, + "availW": 1366, + "availH": 720, + "dpr": 1, + "prob": 0.046171 + }, + { + "w": 1536, + "h": 864, + "availW": 1536, + "availH": 824, + "dpr": 1.25, + "prob": 0.036644 + }, + { + "w": 1536, + "h": 960, + "availW": 1536, + "availH": 912, + "dpr": 1.25, + "prob": 0.029681 + }, + { + "w": 2560, + "h": 1440, + "availW": 2560, + "availH": 1392, + "dpr": 1, + "prob": 0.029133 + }, + { + "w": 1280, + "h": 800, + "availW": 1280, + "availH": 752, + "dpr": 1.5, + "prob": 0.024917 + }, + { + "w": 1536, + "h": 864, + "availW": 1536, + "availH": 864, + "dpr": 1.25, + "prob": 0.024733 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1080, + "dpr": 1, + "prob": 0.013742 + }, + { + "w": 1280, + "h": 720, + "availW": 1280, + "availH": 680, + "dpr": 1.5, + "prob": 0.012643 + }, + { + "w": 1280, + "h": 720, + "availW": 1280, + "availH": 720, + "dpr": 1.5, + "prob": 0.01081 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.009527 + }, + { + "w": 1707, + "h": 1067, + "availW": 1707, + "availH": 1019, + "dpr": 1.5, + "prob": 0.009344 + }, + { + "w": 1440, + "h": 900, + "availW": 1440, + "availH": 852, + "dpr": 2, + "prob": 0.008795 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.008795 + }, + { + "w": 1920, + "h": 1200, + "availW": 1920, + "availH": 1152, + "dpr": 1, + "prob": 0.007513 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.007146 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.006596 + }, + { + "w": 1600, + "h": 900, + "availW": 1600, + "availH": 860, + "dpr": 1, + "prob": 0.006229 + }, + { + "w": 2048, + "h": 1152, + "availW": 2048, + "availH": 1104, + "dpr": 1.25, + "prob": 0.006045 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.005864 + }, + { + "w": 1536, + "h": 864, + "availW": 1536, + "availH": 816, + "dpr": 1.25, + "prob": 0.005864 + }, + { + "w": 1366, + "h": 768, + "availW": 1366, + "availH": 768, + "dpr": 1, + "prob": 0.00568 + }, + { + "w": 2560, + "h": 1440, + "availW": 2560, + "availH": 1392, + "dpr": 1.5, + "prob": 0.00513 + }, + { + "w": 1707, + "h": 960, + "availW": 1707, + "availH": 912, + "dpr": 1.5, + "prob": 0.004946 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1040, + "dpr": 1, + "prob": 0.004946 + }, + { + "w": 3440, + "h": 1440, + "availW": 3440, + "availH": 1392, + "dpr": 1, + "prob": 0.00458 + }, + { + "w": 1504, + "h": 1003, + "availW": 1504, + "availH": 955, + "dpr": 1.5, + "prob": 0.004396 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.004396 + }, + { + "w": 1280, + "h": 800, + "availW": 1280, + "availH": 752, + "dpr": 2, + "prob": 0.004396 + }, + { + "w": 1536, + "h": 864, + "availW": 1536, + "availH": 816, + "dpr": 1.25, + "prob": 0.004396 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1040, + "dpr": 1, + "prob": 0.004031 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1050, + "dpr": 1, + "prob": 0.003847 + }, + { + "w": 2560, + "h": 1440, + "availW": 2560, + "availH": 1400, + "dpr": 1, + "prob": 0.003847 + }, + { + "w": 1366, + "h": 768, + "availW": 1366, + "availH": 728, + "dpr": 1, + "prob": 0.003664 + }, + { + "w": 1920, + "h": 1080, + "availW": 1920, + "availH": 1032, + "dpr": 1, + "prob": 0.003664 + }, + { + "w": 1600, + "h": 900, + "availW": 1600, + "availH": 852, + "dpr": 1, + "prob": 0.003664 + } + ], + "cores": [ + { + "value": 8, + "prob": 0.271311 + }, + { + "value": 12, + "prob": 0.21567 + }, + { + "value": 4, + "prob": 0.157888 + }, + { + "value": 16, + "prob": 0.136607 + }, + { + "value": 20, + "prob": 0.03971 + }, + { + "value": 2, + "prob": 0.025086 + }, + { + "value": 24, + "prob": 0.023184 + }, + { + "value": 6, + "prob": 0.022233 + }, + { + "value": 32, + "prob": 0.021876 + }, + { + "value": 14, + "prob": 0.015575 + }, + { + "value": 3, + "prob": 0.011651 + }, + { + "value": 28, + "prob": 0.010462 + }, + { + "value": 22, + "prob": 0.010225 + }, + { + "value": 5, + "prob": 0.008441 + }, + { + "value": 10, + "prob": 0.005588 + }, + { + "value": 7, + "prob": 0.005469 + }, + { + "value": 9, + "prob": 0.004042 + }, + { + "value": 11, + "prob": 0.003923 + }, + { + "value": 18, + "prob": 0.003567 + }, + { + "value": 15, + "prob": 0.001189 + }, + { + "value": 13, + "prob": 0.000951 + }, + { + "value": 36, + "prob": 0.000713 + }, + { + "value": 64, + "prob": 0.000594 + }, + { + "value": 44, + "prob": 0.000594 + }, + { + "value": 19, + "prob": 0.000476 + }, + { + "value": 17, + "prob": 0.000357 + }, + { + "value": 23, + "prob": 0.000357 + }, + { + "value": 40, + "prob": 0.000357 + }, + { + "value": 21, + "prob": 0.000357 + }, + { + "value": 48, + "prob": 0.000357 + }, + { + "value": 640, + "prob": 0.000357 + }, + { + "value": 56, + "prob": 0.000357 + }, + { + "value": 26, + "prob": 0.000238 + }, + { + "value": 27, + "prob": 0.000119 + }, + { + "value": 25, + "prob": 0.000119 + } + ] +} \ No newline at end of file diff --git a/src/invisible_playwright/_webgl_personas.py b/src/invisible_playwright/_webgl_personas.py index d743eea..3381b6c 100644 --- a/src/invisible_playwright/_webgl_personas.py +++ b/src/invisible_playwright/_webgl_personas.py @@ -85,53 +85,79 @@ _EXT2 = ( ) -def _p(key, renderer, vendor, gpu_class, weight): - return {"key": key, "renderer": renderer, "vendor": vendor, - "gpu_class": gpu_class, "weight": weight, "ext1": _EXT1, "ext2": _EXT2} - - -# Only the two robustly-clean Windows buckets (calibration sweep 2026-06-14). Both discrete, -# so gpu_class=mid_range keeps cores/screen coherent with the declared GPU for OTHER detectors -# (gpu_class does NOT affect tampering_ml). Weights ~ real-world prevalence of the BUCKET: -# "Radeon R9 200 Series" represents ALL modern AMD (large real slice); "Arc A750" = Intel -# discrete (rarer). Cross-vendor => the fleet is not a single-GPU cluster. -_PERSONAS: List[Dict] = [ - _p("amd_radeon_r9", "ANGLE (AMD, AMD Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", - "Google Inc. (AMD)", "mid_range", 70), # -> bucket "Radeon R9 200 Series"; tml 0.03-0.35 - _p("intel_arc_a750", "ANGLE (Intel, Intel(R) Arc(TM) A750 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "Google Inc. (Intel)", "mid_range", 30), # -> bucket "Intel(R) Arc(TM) A750 Graphics"; tml 0.02-0.38 -] - -_TOTAL_W = sum(p["weight"] for p in _PERSONAS) - -# ENABLED: we falsify the GPU on Windows/mac. Validated clean on an Intel Arc host (see the -# HOST-INDEPENDENCE caveat in the module docstring — unvalidated on non-Arc hosts). On Linux -# select_persona returns None: there prefs.py spoofs profile.gpu.renderer directly. +# ── Real-Firefox GPU pool (2026-06-18, supersedes the 2-bucket sweep above) ─────────────── +# The personas are now sourced from `_fpforge/data/webgl_gpu_pool.json` — an OFFLINE extract +# of camoufox's real-Firefox WebGL telemetry DB (17 Windows GPUs with their REAL per-OS +# prevalence AND the full coherent WebGL fingerprint: renderer + vendor + extensions + +# ~100 getParameter values + shader-precision formats). prefs.py applies ALL of these, not +# just the renderer string. The linchpin A/B (2026-06-18) proved that the OLD "NVIDIA 0/10" +# verdict was an artifact of spoofing the renderer string over the host's REAL (Arc) params: +# FP Pro cross-checks renderer<->params, so a GTX 980 string over Arc params mismatched +# (~0.7-0.85). Injecting camoufox's REAL GTX 980 params makes it coherent (tml median 0.333, +# flags clean). So the params are NOT vendor-independent (the old assumption) and per-GPU +# real data is what unlocks the full real GPU mix — including NVIDIA (~47% of real FF-Win), +# which we no longer gate. _ENABLED = True +_POOL_PATH = __import__("pathlib").Path(__file__).parent / "_fpforge" / "data" / "webgl_gpu_pool.json" +_GPU_POOL_CACHE: Optional[List[Dict]] = None + + +def _gpu_pool() -> List[Dict]: + """Lazy-load the Windows GPU pool (we always claim Windows). Each entry: + {key, renderer (input form), vendor, gpu_class (via classify_gpu), prefs (full + zoom.stealth.webgl.* override dict), weight (real per-OS prevalence)}.""" + global _GPU_POOL_CACHE + if _GPU_POOL_CACHE is not None: + return _GPU_POOL_CACHE + import json + from ._fpforge._sampler import classify_gpu # lazy import → no module cycle + raw = json.loads(_POOL_PATH.read_text(encoding="utf-8")) + pool: List[Dict] = [] + for e in raw.get("win", []): + prefs = e["prefs"] + rend_in = prefs["zoom.stealth.webgl.renderer"] + cls = classify_gpu({"renderer": rend_in, + "vendor": prefs.get("zoom.stealth.webgl.vendor", "")}) + pool.append({ + "key": e.get("renderer_out", rend_in)[:48], + "renderer": rend_in, + "vendor": prefs["zoom.stealth.webgl.vendor"], + "gpu_class": cls, + "prefs": prefs, + "weight": float(e["prob"]), + }) + _GPU_POOL_CACHE = pool + return pool def select_persona(seed: int) -> Optional[Dict]: - """Deterministic, prevalence-weighted persona for this seed (None on Linux). + """Deterministic, prevalence-weighted GPU persona for this seed — on EVERY host. Same seed -> same persona (fppro_consistency: identity stable per seed). Different seeds - spread across the persona mix by weight. None on Linux (the sampled profile.gpu.renderer - is spoofed directly there). - """ - if not _ENABLED or sys.platform.startswith("linux") or not _PERSONAS: + spread across the REAL Windows GPU mix by prevalence. Returns the Windows-ANGLE persona on + Linux/Mac too: we must always look Windows, and the C++ WebGL override (SanitizeRenderer + + pref-driven params/extensions) is platform-independent, so the same Windows GPU is presented + on any host without consulting the real GL backend (no more Linux "Generic Renderer").""" + if not _ENABLED: return None - h = (int(seed) * 2654435761) % _TOTAL_W - cum = 0 - for p in _PERSONAS: + pool = _gpu_pool() + if not pool: + return None + total = sum(p["weight"] for p in pool) or 1.0 + h = ((int(seed) * 2654435761) % 1_000_003) / 1_000_003.0 * total + cum = 0.0 + for p in pool: cum += p["weight"] if h < cum: return p - return _PERSONAS[-1] + return pool[-1] def forced_gpu_class(seed: int) -> Optional[str]: - """The gpu_class the forge conditions the WHOLE bundle on (== the selected persona's class), - so cores/screen/fonts stay coherent with the GPU we expose. Does NOT affect FP Pro - tampering_ml (proven) but matters for detectors that cross-check hardware tier. None on Linux.""" + """The gpu_class the forge conditions the bundle on (== the selected GPU's class via + classify_gpu), so cores/screen/fonts stay coherent with the GPU we expose. Does NOT + affect FP Pro tampering_ml (proven) but matters for detectors that cross-check hardware + tier. None on Linux.""" p = select_persona(seed) return p["gpu_class"] if p else None @@ -152,7 +178,14 @@ def forced_gpu_class(seed: int) -> Optional[str]: # the Intel-Arc host. On other GPUs the clean set may differ (host-independence open, # same as the personas) — Option B (substitution = GPU-independent render hash) would # remove that dependency. Validate per-host or move to B before trusting fleet-wide. -CLEAN_RENDER_SEEDS = [19, 10, 28, 24, 23, 16, 11, 30, 17, 22, 3, 9, 12, 26] +# RECALIBRATED 2026-06-18 for the real-Firefox GPU mix (incl NVIDIA, which is more +# consistency-sensitive than the old amd/arc personas). Swept hw_seed 0..30 on the hottest +# persona (NVIDIA GTX 980) through a residential exit: these 9 stayed well within the clean +# band with a wide margin to the rest. The old pool's picks scored dirty on NVIDIA (clean +# only on the retired amd/arc mix) → dropped. NVIDIA is the worst case, so these are clean on +# amd/intel too. hw_seed = the canvas/WebGL gamma render hash (the dominant consistency-score +# driver); host-calibrated. +CLEAN_RENDER_SEEDS = [0, 5, 6, 9, 11, 16, 19, 20, 28] def render_noise_seed(seed: int) -> int: diff --git a/src/invisible_playwright/constants.py b/src/invisible_playwright/constants.py index 3844bca..731d7ce 100644 --- a/src/invisible_playwright/constants.py +++ b/src/invisible_playwright/constants.py @@ -7,7 +7,7 @@ bugfixes don't force a multi-hour Firefox rebuild. from __future__ import annotations # Bump this when a new patched Firefox build is released on GitHub. -BINARY_VERSION: str = "firefox-11" +BINARY_VERSION: str = "firefox-12" # Releases known to be broken — ensure_binary() refuses them with a clear error # instead of handing the user an unusable binary. firefox-8 was packaged without @@ -68,11 +68,11 @@ RELEASE_URL_TEMPLATE = ( # single mmdb (country ISO + coordinates + IANA timezone via tzfpy), rebuilt # weekly. GPL-3.0, so we DOWNLOAD it at runtime into the user cache (like the # Firefox binary) rather than bundling it into this MIT package. The `-all` -# variant covers IPv4+IPv6. download.py tracks the LATEST release and refreshes -# weekly; GEOIP_MMDB_VERSION is only the cold-cache fallback when the GitHub -# API is unreachable on a machine that has never downloaded the DB. +# variant covers IPv4+IPv6. download.py NEVER pins a tag (daijro prunes old +# releases, so a pinned tag eventually 404s): on every launch it resolves the +# CURRENT latest tag from the `releases/latest/download` permalink (no GitHub +# API, no rate limit) and pulls it if newer than the cache. GEOIP_REPO: str = "daijro/geoip-all-in-one" -GEOIP_MMDB_VERSION: str = "2026.06.03" GEOIP_ASSET: str = "geoip-aio-all.mmdb.zip" GEOIP_MMDB_NAME: str = "geoip-aio-all.mmdb" GEOIP_RELEASE_URL_TEMPLATE: str = ( diff --git a/src/invisible_playwright/download.py b/src/invisible_playwright/download.py index acb5d49..4e07b8f 100644 --- a/src/invisible_playwright/download.py +++ b/src/invisible_playwright/download.py @@ -24,7 +24,7 @@ from .constants import ( BROKEN_VERSIONS, GEOIP_ASSET, GEOIP_MMDB_NAME, - GEOIP_MMDB_VERSION, + GEOIP_REPO, GEOIP_RELEASE_URL_TEMPLATE, RELEASE_URL_TEMPLATE, ) @@ -198,26 +198,23 @@ def ensure_binary(version: str = BINARY_VERSION) -> Path: # ───────────────────────────────────────────────────────────────────────── # GeoIP mmdb (timezone="auto" → map egress IP → IANA zone) # -# daijro/geoip-all-in-one is rebuilt WEEKLY, so we don't pin a tag. We cache -# the latest mmdb and, once it's older than GEOIP_REFRESH_DAYS, re-check the -# latest release and pull a newer build if one exists. Net effect: no download -# (not even an API call) on a launch within the window; auto-refresh after it; -# a stale cache is reused when offline rather than breaking the launch. +# daijro/geoip-all-in-one is rebuilt weekly and KEEPS ONLY the latest ~2 +# releases — older tags are pruned and 404. So we NEVER pin a tag: on every +# launch we resolve the CURRENT latest tag from the `releases/latest/download` +# permalink (its 302 Location carries the tag — a plain CDN request, NOT the +# rate-limited GitHub API) and download it if it differs from the cached one. +# Offline → reuse the cached mmdb; cold cache + offline → raise (the caller can +# then fall back off timezone="auto"). No stale pinned tag to rot. # ───────────────────────────────────────────────────────────────────────── -GEOIP_REFRESH_DAYS = 7 # matches daijro's weekly rebuild cadence def _geoip_root() -> Path: return cache_root() / "geoip" -def _geoip_check_marker() -> Path: - return _geoip_root() / ".last_check" - - def _cached_geoip_mmdb() -> Path | None: """Newest cached mmdb across tag dirs, or None. Tag dirs are date strings - (e.g. ``2026.06.03``) so a lexical sort is chronological.""" + (e.g. ``2026.06.17``) so a lexical sort is chronological.""" root = _geoip_root() if not root.exists(): return None @@ -225,21 +222,14 @@ def _cached_geoip_mmdb() -> Path | None: return cands[-1] if cands else None -def _geoip_cache_fresh(max_age_days: int) -> bool: - marker = _geoip_check_marker() - if not marker.exists(): - return False - return (time.time() - marker.stat().st_mtime) < max_age_days * 86400 +def _geoip_latest_url() -> str: + return f"https://github.com/{GEOIP_REPO}/releases/latest/download/{GEOIP_ASSET}" -def _touch_geoip_marker() -> None: - m = _geoip_check_marker() - m.parent.mkdir(parents=True, exist_ok=True) - m.touch() - - -def _latest_geoip_tag() -> str: - """Latest ``daijro/geoip-all-in-one`` release tag via the GitHub API.""" +def _latest_geoip_tag_api() -> str: + """Latest ``daijro/geoip-all-in-one`` release tag via the GitHub API + (fallback for :func:`_resolve_latest_geoip_tag` when the permalink HEAD + can't be parsed).""" headers = {"Accept": "application/vnd.github+json"} token = _github_token() if token: @@ -255,6 +245,25 @@ def _latest_geoip_tag() -> str: return tag +def _resolve_latest_geoip_tag() -> str | None: + """Current latest release tag WITHOUT the rate-limited API: HEAD the + ``releases/latest/download`` permalink — GitHub answers 302 with + ``Location: …/releases/download//``. Falls back to the API, + then to ``None`` (offline / unparseable).""" + try: + r = requests.head(_geoip_latest_url(), allow_redirects=False, timeout=10) + loc = r.headers.get("Location") or r.headers.get("location") or "" + m = re.search(r"/releases/download/([^/]+)/", loc) + if m: + return m.group(1) + except Exception: + pass + try: + return _latest_geoip_tag_api() + except Exception: + return None + + def _download_geoip_tag(tag: str) -> Path: """Download + extract a specific tag's mmdb if not already cached.""" dst_dir = _geoip_root() / tag @@ -290,18 +299,17 @@ def geoip_mmdb_path() -> Path | None: return _cached_geoip_mmdb() -def ensure_geoip_mmdb(max_age_days: int = GEOIP_REFRESH_DAYS) -> Path: - """Return a geoip mmdb, kept fresh against daijro's weekly rebuild. +def ensure_geoip_mmdb() -> Path: + """Return the geoip mmdb, always the latest daijro build. Checked on EVERY + call — a single cheap permalink HEAD (no GitHub API, so no rate limit). Resolution order: 1. ``STEALTHFOX_GEOIP_MMDB`` env → use that file (user-supplied / test). - 2. A cached mmdb younger than ``max_age_days`` → use it (no network). - 3. Else ask GitHub for the latest tag, download it if not already cached, - prune older tags, and reset the freshness timer. - 4. If the API/download is unreachable but a cached mmdb exists → use it - (and reset the timer so we don't hammer the API while offline). - 5. Cold cache + no network → fall back to the pinned ``GEOIP_MMDB_VERSION``; - if that download also fails, raise. + 2. Resolve the CURRENT latest tag. If it differs from the newest cached + tag (or nothing is cached) → download it, prune older tags, return it. + 3. Latest tag == newest cached tag → use the cache (no download). + 4. Couldn't resolve the tag (offline / unparseable): cached mmdb → use it; + cold cache → raise (caller can then drop timezone="auto"). """ override = os.environ.get("STEALTHFOX_GEOIP_MMDB") if override: @@ -311,18 +319,25 @@ def ensure_geoip_mmdb(max_age_days: int = GEOIP_REFRESH_DAYS) -> Path: return p cached = _cached_geoip_mmdb() - if cached and _geoip_cache_fresh(max_age_days): - return cached + cached_tag = cached.parent.name if cached else None - try: - tag = _latest_geoip_tag() - except Exception: - if cached: - _touch_geoip_marker() # recheck after the window; don't hammer - return cached - tag = GEOIP_MMDB_VERSION # cold cache + API down → pinned fallback + latest = _resolve_latest_geoip_tag() + if latest and latest != cached_tag: + # newer build available (or nothing cached) → fetch it + try: + mmdb = _download_geoip_tag(latest) + _prune_old_geoip_tags(mmdb.parent.name) + return mmdb + except Exception: + if cached: + return cached # transient download failure → keep using the cache + raise - mmdb = _download_geoip_tag(tag) - _prune_old_geoip_tags(mmdb.parent.name) - _touch_geoip_marker() - return mmdb + if cached: + return cached # cache is already the latest, or we're offline + + raise RuntimeError( + "geoip mmdb unavailable: no cached copy and GitHub is unreachable. " + "Connect once to download it, or set STEALTHFOX_GEOIP_MMDB to a local " + "geoip-aio-all.mmdb file." + ) diff --git a/src/invisible_playwright/prefs.py b/src/invisible_playwright/prefs.py index 529b01f..d50bd2d 100644 --- a/src/invisible_playwright/prefs.py +++ b/src/invisible_playwright/prefs.py @@ -180,17 +180,28 @@ _WIN_VOICES = ",".join([ # ────────────────────────────────────────────────────────────────────── _LINUX_GENERIC_FONT_FACTORS = ( - # Calibrated to bring DejaVu/Liberation widths in line with what Windows - # FP Pro probes report for native Segoe/Times. Linux base measurements - # (font_preferences) and Windows targets: - # serif: 162 → 149 factor 0.920 - # sans: 162 → 144 factor 0.889 - # monospace:121 → 121 factor 1.000 - # system: 162 → 147 factor 0.910 + # GENERIC factors are calibrated to FP Pro's font_preferences probe (NOT the 72px named-probe + # scale — verified 2026-06-18: recalibrating to the named-probe scale broke them, mono 121.55 + # -> 112.4; the original values are correct for font_preferences). DejaVu/Liberation generics + # vs Windows targets: serif 0.920, sans 0.889, monospace 1.000, system-ui 0.910. "serif|0.920,sans-serif|0.889,monospace|1.000," "system-ui|0.910,cursive|0.932,fantasy|0.812," ) +# Calibration reference string for the C++ self-calibrating absolute-width path. +# MUST be byte-identical to the probe the font_pool widths were measured with +# (72px canvas measureText) and to the binary's zoom.stealth.font.calib_ref +# default. Set explicitly so correctness never depends on the binary default. +_FONT_CALIB_REF = "mmmmwwwwiiiillloooMMMMWWWW0123456789 The quick brown fox" +# NOTE: there is intentionally NO per-OS collapse-base table here anymore. +# The C++ font hook self-calibrates: `font_pool` stores the UNIVERSAL real +# Windows measureText width per font and the binary divides it by the host's +# own collapse base (gfxTextRun::StealthCollapseBase, summed from the list-head +# font's per-glyph advances over zoom.stealth.font.calib_ref). So the SAME +# stored value yields the exact Windows width on Windows, Linux AND macOS with +# nothing to measure per platform. (Was: _COLLAPSE_BASE = {win32:1530, linux:2400} +# + a darwin TODO — removed 2026-06-18 when the self-calibrating C++ landed.) + # ────────────────────────────────────────────────────────────────────── # Baseline — applied to every session regardless of Profile. @@ -478,12 +489,20 @@ def _font_metrics_for_platform(profile_metrics: str) -> str: """ if not profile_metrics: return "" + # profile_metrics arrives as "name|,..." (host-independent + # absolute widths, e.g. "arial|2256.7"). We pass them through UNCHANGED: the C++ + # hook treats a value >= 10 as an ABSOLUTE target measureText width and divides it + # by the host's own collapse base (self-calibrating), so the SAME value yields the + # exact Windows width on Windows, Linux AND macOS. No per-OS division here. + metrics = profile_metrics + # Linux ADDITIONALLY needs CSS-generic compensation (DejaVu/Liberation generics + # render wider/narrower than Windows). These are multiplicative FACTORS (< 10), + # calibrated to FP Pro's font_preferences probe; the C++ hook treats values < 10 as + # factors. Generics bypass the whitelist/collapse so they are NOT self-calibrated. + # Windows/mac generics render native -> no compensation. if sys.platform.startswith("linux"): - return _LINUX_GENERIC_FONT_FACTORS + profile_metrics - # Windows / macOS: named-font factors only (the generics render native and - # bypass the whitelist, so no generic compensation — but the named families - # MUST be factored or they all collapse to the list-head width). - return profile_metrics + return _LINUX_GENERIC_FONT_FACTORS + metrics + return metrics def translate_profile_to_prefs( @@ -519,23 +538,30 @@ def translate_profile_to_prefs( # GPU that passes FP Pro host-independently (the host's real GPU never leaks). If no # validated persona exists for the sampled gpu_class yet, fall back to the host-real # renderer (empty → native ANGLE; SanitizeRenderer at ClientWebGLContext.cpp:2592). - _persona = None - if sys.platform.startswith("linux"): - prefs["zoom.stealth.webgl.renderer"] = profile.gpu.renderer - prefs["zoom.stealth.webgl.vendor"] = profile.gpu.vendor - _renderer_lo = (profile.gpu.renderer or "").lower() + # Apply the camoufox-derived real-Firefox GPU persona on EVERY host (Win/Linux/Mac). + # We must ALWAYS look Windows (rule), and the WebGL override is platform-independent: + # SanitizeRenderer (ClientWebGLContext.cpp) is pure string regex, and the param/extension + # overrides are pref-driven, so the C++ presents the SAME Windows ANGLE GPU regardless of + # the host's real GL backend (it never consults it when the pref is set). This is why a + # Windows GPU shows correctly even on a Linux/Mesa host (no more "Generic Renderer"). + _persona = select_persona(profile.seed) + if _persona: + # Apply the FULL coherent WebGL override (renderer + vendor + webgl1/webgl2 extensions + # + ~100 getParameter values + shader-precision formats). Setting ALL of them — not just + # the renderer string — keeps renderer<->params coherent (FP Pro cross-checks them); a + # string-only spoof over the host's real params is the old ~0.85 mismatch. + for _k, _v in _persona["prefs"].items(): + if _k == "zoom.stealth.webgl2.enabled": + prefs["webgl.enable-webgl2"] = bool(_v) + else: + prefs[_k] = _v else: - _persona = select_persona(profile.seed) - if _persona: - prefs["zoom.stealth.webgl.renderer"] = _persona["renderer"] - prefs["zoom.stealth.webgl.vendor"] = _persona["vendor"] - else: - prefs["zoom.stealth.webgl.renderer"] = "" - prefs["zoom.stealth.webgl.vendor"] = "" - # Canvas-noise mask is calibrated to the REAL host GPU's rendering variance — the canvas is - # drawn by real hardware, NOT the persona's claimed GPU, so it must NOT follow the persona - # (a non-Intel persona on an Intel host would over-noise). Deployment host is Intel. - _renderer_lo = "intel" + prefs["zoom.stealth.webgl.renderer"] = "" + prefs["zoom.stealth.webgl.vendor"] = "" + # Canvas-noise mask is calibrated to the REAL host GPU's rendering variance — the canvas is + # drawn by real hardware, NOT the persona's claimed GPU, so it must NOT follow the persona + # (a non-Intel persona on an Intel host would over-noise). Dev/deployment host is Intel. + _renderer_lo = "intel" # MSAA: on Windows, pin to 4 (Firefox default for ANGLE) so gl.SAMPLES is # constant across all sessions. Different MSAA values cause different CN-set @@ -585,6 +611,10 @@ def translate_profile_to_prefs( prefs["zoom.stealth.font.metrics"] = _font_metrics_for_platform( profile._raw.get("font_metrics", "") or "" ) + # Reference string the binary sums the collapsed font's advances over to + # self-calibrate the per-host collapse base (turns the absolute widths in + # `metrics` into the right factor on any OS). See _font_metrics_for_platform. + prefs["zoom.stealth.font.calib_ref"] = _FONT_CALIB_REF # UI / dark mode + Windows colors palette (only when light theme). prefs["ui.systemUsesDarkTheme"] = int(profile.dark_theme) @@ -625,21 +655,14 @@ def translate_profile_to_prefs( prefs["zoom.stealth.webrtc.host_ip"] = _lan_ip # Windows/mac extension list: - # - persona active → FORCE the validated extension list. A non-Intel host's native - # extensions would mismatch the persona's renderer (renderer says AMD/Intel-Arc but - # extensions are the host's), so the persona must carry its own list to stay - # host-independent. + # - persona active → the coherent webgl1/webgl2 extension lists (in the GPU's real + # native order) were ALREADY applied above from the GPU pool's `prefs`, alongside the + # matching renderer + params + shader-precisions. Nothing to do here. # - no persona → clear so the host-real renderer reports its native extension set # (matches real vanilla captures for that host's GPU). - if not sys.platform.startswith("linux"): - if _persona: - # The persona carries its OWN extension lists in EXACT NATIVE ORDER — a - # reordered/foreign list is flagged by FP Pro (verified 2026-06-13). - prefs["zoom.stealth.webgl.extensions"] = _persona["ext1"] - prefs["zoom.stealth.webgl2.extensions"] = _persona["ext2"] - else: - prefs["zoom.stealth.webgl.extensions"] = "" - prefs["zoom.stealth.webgl2.extensions"] = "" + if not sys.platform.startswith("linux") and not _persona: + prefs["zoom.stealth.webgl.extensions"] = "" + prefs["zoom.stealth.webgl2.extensions"] = "" # Linux Xvfb workarounds (no-op on Windows). if sys.platform.startswith("linux"): diff --git a/tests/test_canvas_render_stealth.py b/tests/test_canvas_render_stealth.py new file mode 100644 index 0000000..e0c7ba1 --- /dev/null +++ b/tests/test_canvas_render_stealth.py @@ -0,0 +1,125 @@ +"""Canvas / WebGL render-stealth regression tests (binary-level, 2026-06-18). + +Two patched-binary behaviours that must never regress, both needed for the +fingerprint to look like a real Windows browser to FOSS detectors (CreepJS, +FingerprintJS, BrowserLeaks) and to image-dedup font probes / fixed-hash +reference checks: + + 1. Per-font canvas distinctness — whitelisted named fonts are backed by the + host list-head glyphs (so measureText widths are host-independent), but each + must still rasterise to a DISTINCT image at tiny probe sizes. Otherwise an + image-dedup font probe collapses them to ~1 name and the reported font set + looks fabricated. (C++: per-font sub-pixel draw offset in DrawText.) + 2. Solid WebGL readback purity under render-noise — a fixed solid-colour WebGL + readback (which reference checks hash against a universal constant) must stay + byte-exact even with per-seed render-noise enabled, while high-entropy + renders stay noised. (C++: render-noise skips near-uniform WebGL readbacks.) + +Runs against about:blank, no network/proxy. Part of the e2e release gate. +Run: pytest tests/test_canvas_render_stealth.py -m e2e -v +""" +from __future__ import annotations + +import pytest + +from invisible_playwright import InvisiblePlaywright +from invisible_playwright import prefs as _prefs +from invisible_playwright._fpforge import generate_profile + +# Diverse-codepoint probe string — maximises per-font rendering differences, the +# way an image-dedup font probe drives a tiny canvas. +_PROBE = ("\U0001f6cd1>'`amlρiюदे來˦" + "\U00025578に◌\U0002003eԩԨ") + + +def _named_fonts(limit: int = 30) -> list[str]: + """The whitelisted NAMED fonts (absolute collapse-target width >= 10) for the + test seed — these are the ones the per-font offset must keep distinct.""" + prof = generate_profile(42) + metrics = _prefs._font_metrics_for_platform(prof._raw.get("font_metrics", "") or "") + out: list[str] = [] + for ent in metrics.split(","): + name, _, val = ent.partition("|") + if not val: + continue + try: + if float(val.replace("px", "")) >= 10.0: + out.append(name) + except ValueError: + pass + return out[:limit] + + +_FONTS = _named_fonts() + + +@pytest.fixture(scope="module") +def noised_page(firefox_binary): + """Headless session with render-noise explicitly ON (positive hw_seed) so the + purity / distinctness guards actually exercise the noise path.""" + with InvisiblePlaywright( + seed=42, + binary_path=firefox_binary, + headless=True, + extra_prefs={"zoom.stealth.fpp.hw_seed": 24680}, + ) as browser: + p = browser.new_context().new_page() + p.goto("about:blank", timeout=30_000) + yield p + + +@pytest.mark.e2e +def test_named_fonts_render_distinct_canvas_images(noised_page): + """Each whitelisted named font must produce a DISTINCT tiny-canvas image so an + image-dedup font probe keeps every name. Regression: without the per-font draw + offset all whitelisted fonts share the list-head glyphs -> ~1-2 distinct + images -> degenerate detected-font set.""" + assert len(_FONTS) >= 10, "expected a non-trivial named-font whitelist to probe" + distinct = noised_page.evaluate( + """(args) => { + const [fonts, V] = args; + const c = document.createElement('canvas'); c.width = 90; c.height = 12; + const d = c.getContext('2d'); d.fillStyle = 'red'; + const seen = new Set(); + for (const f of fonts) { + d.clearRect(0, 0, 90, 12); + d.font = 'normal 4px "' + f + '"'; + d.fillText(V, 5, 8); + seen.add(c.toDataURL()); + } + return seen.size; + }""", + [_FONTS, _PROBE], + ) + # broken (offset removed) collapses to ~1-2; require nearly all distinct. + assert distinct >= len(_FONTS) - 2, \ + f"only {distinct}/{len(_FONTS)} distinct font images (per-font offset regressed?)" + + +@pytest.mark.e2e +def test_solid_webgl_readback_stays_pure_under_noise(noised_page): + """A solid-colour WebGL readback must remain byte-exact (only {0,255}) with + render-noise on. Regression: the noise drifted edge pixels 255->254 on some GL + backends (Linux ANGLE-over-GL), breaking fixed-hash reference checks ('oe').""" + res = noised_page.evaluate( + """() => { + const c = document.createElement('canvas'); c.width = 256; c.height = 24; + const gl = c.getContext('webgl', {preserveDrawingBuffer: true}); + if (!gl) return {ok: false, reason: 'no-webgl'}; + gl.clearColor(1, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT); + const buf = new Uint8Array(256 * 24 * 4); + gl.finish(); gl.readPixels(0, 0, 256, 24, gl.RGBA, gl.UNSIGNED_BYTE, buf); + const vals = new Set(); + for (let i = 0; i < buf.length; i++) vals.add(buf[i]); + return {ok: true, vals: Array.from(vals).sort((a, b) => a - b)}; + }""" + ) + if not res["ok"]: + pytest.skip(res.get("reason", "webgl unavailable")) + assert res["vals"] == [0, 255], \ + f"solid WebGL readback not pure under noise: values {res['vals']} (uniform-skip regressed?)" + + +# NOTE: "high-entropy WebGL still noised" is covered by test_webgl_noise_active.py +# (kept separate: it launches its own browsers, so it must not run while this +# module's shared `noised_page` browser is open — the sync API cannot nest). diff --git a/tests/test_geoip_update.py b/tests/test_geoip_update.py index 26632b7..54fa390 100644 --- a/tests/test_geoip_update.py +++ b/tests/test_geoip_update.py @@ -1,13 +1,11 @@ -"""Unit tests for the intelligent geoip mmdb auto-update in `download.py`. +"""Unit tests for the geoip mmdb auto-update in `download.py`. -daijro/geoip-all-in-one rebuilds weekly; `ensure_geoip_mmdb` keeps the cache -fresh without a download (or API call) on every launch. These tests mock the -cache root, the latest-tag API, and the per-tag download so nothing touches the -network. +daijro/geoip-all-in-one rebuilds weekly and keeps only the latest ~2 releases, +so `ensure_geoip_mmdb` never pins a tag: on every call it resolves the CURRENT +latest tag (from the `releases/latest/download` permalink, no GitHub API) and +downloads it only when it differs from the cache. These tests mock the cache +root, the tag resolver, and the per-tag download so nothing touches the network. """ -import os -import time - import pytest import invisible_playwright.download as dl @@ -29,14 +27,6 @@ def _make_cached(root, tag, name=dl.GEOIP_MMDB_NAME): return f -def _set_marker_age(root, days): - m = root / "geoip" / ".last_check" - m.parent.mkdir(parents=True, exist_ok=True) - m.touch() - old = time.time() - days * 86400 - os.utime(m, (old, old)) - - # ────────────────────────────────────────────────────────────────────── # env override # ────────────────────────────────────────────────────────────────────── @@ -56,76 +46,97 @@ def test_env_override_missing_raises(tmp_path, monkeypatch): # ────────────────────────────────────────────────────────────────────── -# freshness window +# every-launch latest check # ────────────────────────────────────────────────────────────────────── @pytest.mark.unit -def test_fresh_cache_no_network(cache, monkeypatch): - f = _make_cached(cache, "2026.06.03") - _set_marker_age(cache, 0) # just checked - - def boom(): - raise AssertionError("latest-tag API must NOT be called within the window") - - monkeypatch.setattr(dl, "_latest_geoip_tag", boom) - assert dl.ensure_geoip_mmdb(max_age_days=7) == f - - -@pytest.mark.unit -def test_stale_same_tag_no_download(cache, monkeypatch): - f = _make_cached(cache, "2026.06.03") - _set_marker_age(cache, 30) # stale → will re-check - monkeypatch.setattr(dl, "_latest_geoip_tag", lambda: "2026.06.03") - # real _download_geoip_tag runs but target exists, so no actual download: +def test_cache_is_latest_no_download(cache, monkeypatch): + f = _make_cached(cache, "2026.06.17") + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: "2026.06.17") monkeypatch.setattr(dl, "_download_file", lambda *a, **k: (_ for _ in ()).throw( - AssertionError("must not download when tag already cached"))) - assert dl.ensure_geoip_mmdb(max_age_days=7) == f + AssertionError("must not download when cache already on the latest tag"))) + assert dl.ensure_geoip_mmdb() == f @pytest.mark.unit -def test_stale_new_tag_downloads_and_prunes(cache, monkeypatch): - old = _make_cached(cache, "2026.06.03") - _set_marker_age(cache, 30) - monkeypatch.setattr(dl, "_latest_geoip_tag", lambda: "2026.06.10") - - def fake_download(tag): - return _make_cached(cache, tag) # simulate fetch+extract of the new tag - - monkeypatch.setattr(dl, "_download_geoip_tag", fake_download) - got = dl.ensure_geoip_mmdb(max_age_days=7) - assert got.parent.name == "2026.06.10" +def test_new_tag_downloads_and_prunes(cache, monkeypatch): + old = _make_cached(cache, "2026.06.10") + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: "2026.06.17") + monkeypatch.setattr(dl, "_download_geoip_tag", lambda tag: _make_cached(cache, tag)) + got = dl.ensure_geoip_mmdb() + assert got.parent.name == "2026.06.17" assert not old.parent.exists() # old tag pruned assert got.exists() -# ────────────────────────────────────────────────────────────────────── -# offline resilience -# ────────────────────────────────────────────────────────────────────── @pytest.mark.unit -def test_api_down_with_cache_uses_cache(cache, monkeypatch): - f = _make_cached(cache, "2026.06.03") - _set_marker_age(cache, 30) - - def boom(): - raise OSError("offline") - - monkeypatch.setattr(dl, "_latest_geoip_tag", boom) - assert dl.ensure_geoip_mmdb(max_age_days=7) == f # stale cache reused, no raise - - -@pytest.mark.unit -def test_cold_cache_api_down_falls_back_to_pinned(cache, monkeypatch): - # no cache at all + API unreachable → pinned GEOIP_MMDB_VERSION fallback. - def boom(): - raise OSError("offline") - - monkeypatch.setattr(dl, "_latest_geoip_tag", boom) - captured = {} - - def fake_download(tag): - captured["tag"] = tag - return _make_cached(cache, tag) - - monkeypatch.setattr(dl, "_download_geoip_tag", fake_download) - got = dl.ensure_geoip_mmdb(max_age_days=7) - assert captured["tag"] == dl.GEOIP_MMDB_VERSION +def test_cold_cache_downloads_latest(cache, monkeypatch): + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: "2026.06.17") + monkeypatch.setattr(dl, "_download_geoip_tag", lambda tag: _make_cached(cache, tag)) + got = dl.ensure_geoip_mmdb() + assert got.parent.name == "2026.06.17" assert got.exists() + + +# ────────────────────────────────────────────────────────────────────── +# offline resilience (no pinned-tag fallback — the pin rots and 404s) +# ────────────────────────────────────────────────────────────────────── +@pytest.mark.unit +def test_offline_with_cache_uses_cache(cache, monkeypatch): + f = _make_cached(cache, "2026.06.10") + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: None) # offline + monkeypatch.setattr(dl, "_download_file", lambda *a, **k: (_ for _ in ()).throw( + AssertionError("offline → must not attempt a download"))) + assert dl.ensure_geoip_mmdb() == f # cache reused, no raise + + +@pytest.mark.unit +def test_cold_cache_offline_raises(cache, monkeypatch): + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: None) # offline + with pytest.raises(RuntimeError): + dl.ensure_geoip_mmdb() + + +@pytest.mark.unit +def test_download_failure_with_cache_falls_back(cache, monkeypatch): + f = _make_cached(cache, "2026.06.10") + monkeypatch.setattr(dl, "_resolve_latest_geoip_tag", lambda: "2026.06.17") + + def boom(tag): + raise OSError("transient download failure") + + monkeypatch.setattr(dl, "_download_geoip_tag", boom) + assert dl.ensure_geoip_mmdb() == f # keeps the old cache rather than failing + + +# ────────────────────────────────────────────────────────────────────── +# latest-tag resolution via the permalink 302 (no GitHub API) +# ────────────────────────────────────────────────────────────────────── +@pytest.mark.unit +def test_resolve_tag_from_permalink_redirect(monkeypatch): + class _Resp: + headers = {"Location": + "https://github.com/daijro/geoip-all-in-one/releases/download/" + "2026.06.17/geoip-aio-all.mmdb.zip"} + + monkeypatch.setattr(dl.requests, "head", lambda *a, **k: _Resp()) + assert dl._resolve_latest_geoip_tag() == "2026.06.17" + + +@pytest.mark.unit +def test_resolve_tag_permalink_fails_falls_back_to_api(monkeypatch): + def head_boom(*a, **k): + raise OSError("no network for HEAD") + + monkeypatch.setattr(dl.requests, "head", head_boom) + monkeypatch.setattr(dl, "_latest_geoip_tag_api", lambda: "2026.06.17") + assert dl._resolve_latest_geoip_tag() == "2026.06.17" + + +@pytest.mark.unit +def test_resolve_tag_all_fail_returns_none(monkeypatch): + def boom(*a, **k): + raise OSError("offline") + + monkeypatch.setattr(dl.requests, "head", boom) + monkeypatch.setattr(dl, "_latest_geoip_tag_api", boom) + assert dl._resolve_latest_geoip_tag() is None diff --git a/tests/test_integration.py b/tests/test_integration.py index c5c8e91..4ba29c2 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -306,9 +306,9 @@ def test_windows_virtual_display_with_socks_proxy(monkeypatch): @pytest.mark.integration def test_linux_xvfb_workarounds_with_socks_proxy(monkeypatch): """IT11 — Linux + SOCKS5 proxy: Xvfb workarounds applied, GPU renderer - spoofed from profile, SOCKS keys written. virtual_display is a Windows- - only concept so we omit it here; passing ``virtual_display=True`` on - Linux must NOT set ``security.sandbox.gpu.level`` (covered by VD3).""" + spoofed from the validated WebGL persona, SOCKS keys written. virtual_display + is a Windows-only concept so we omit it here; passing ``virtual_display=True`` + on Linux must NOT set ``security.sandbox.gpu.level`` (covered by VD3).""" monkeypatch.setattr(sys, "platform", "linux") profile = generate_profile(seed=42) prefs = translate_profile_to_prefs(profile, virtual_display=True) @@ -323,9 +323,15 @@ def test_linux_xvfb_workarounds_with_socks_proxy(monkeypatch): assert prefs["webgl.force-enabled"] is True # Windows-only sandbox key absent on Linux even with virtual_display=True. assert "security.sandbox.gpu.level" not in prefs - # GPU renderer is spoofed from the profile (not cleared like on Windows). - assert prefs["zoom.stealth.webgl.renderer"] == profile.gpu.renderer + # GPU renderer is spoofed from the validated WebGL persona (a coherent Windows + # ANGLE GPU whose renderer + params cross-check), applied on every host — NOT the + # raw profile.gpu.renderer, which has no coherent param set and is never exposed. + from invisible_playwright._webgl_personas import select_persona + _persona = select_persona(profile.seed) + assert _persona, "expected a validated persona for this seed" + assert prefs["zoom.stealth.webgl.renderer"] == _persona["prefs"]["zoom.stealth.webgl.renderer"] assert prefs["zoom.stealth.webgl.renderer"] # non-empty + assert "ANGLE" in prefs["zoom.stealth.webgl.renderer"] # Windows ANGLE form # SOCKS branch wrote its keys without clobbering the Linux prefs above. assert prefs["network.proxy.type"] == 1 assert prefs["network.proxy.socks"] == "127.0.0.1" diff --git a/tests/test_prefs.py b/tests/test_prefs.py index bab2655..609841b 100644 --- a/tests/test_prefs.py +++ b/tests/test_prefs.py @@ -15,18 +15,18 @@ from invisible_playwright.prefs import ( @pytest.mark.unit def test_translate_includes_gpu_renderer_windows(monkeypatch): - """On Windows we falsify the GPU to one of the calibrated CLEAN buckets (FP Pro - tampering_ml<=0.5 on every seed; sweep 2026-06-14). Only Radeon R9 200 Series and - Intel Arc A750 ship — every NVIDIA/iGPU/945 bucket is penalized. See _webgl_personas.""" + """On Windows we falsify the GPU to a real-Firefox GPU from the camoufox-derived pool + (prevalence-weighted; full coherent renderer+vendor+params+extensions). The chosen GPU's + renderer/vendor are applied verbatim and the renderer is in ANGLE D3D11 wire format.""" monkeypatch.setattr(sys, "platform", "win32") - _CLEAN = { - "ANGLE (AMD, AMD Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", - "ANGLE (Intel, Intel(R) Arc(TM) A750 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - } + from invisible_playwright._webgl_personas import select_persona p = generate_profile(seed=42) prefs = translate_profile_to_prefs(p) - assert prefs["zoom.stealth.webgl.renderer"] in _CLEAN - assert prefs["zoom.stealth.webgl.vendor"] in {"Google Inc. (AMD)", "Google Inc. (Intel)"} + persona = select_persona(42) + assert prefs["zoom.stealth.webgl.renderer"] == persona["renderer"] + assert prefs["zoom.stealth.webgl.renderer"].endswith(", D3D11)") + assert prefs["zoom.stealth.webgl.vendor"] == persona["vendor"] + assert "Google Inc." in prefs["zoom.stealth.webgl.vendor"] @pytest.mark.unit @@ -156,15 +156,17 @@ def test_canvas_noise_mask_windows_uses_intel_path(monkeypatch): @pytest.mark.unit def test_webgl_extensions_persona_on_windows(monkeypatch): - # WE2: with a persona active on Windows, extensions are FORCED to the persona's native-order - # list (host-independent), NOT cleared. Order is load-bearing (must match the persona verbatim). + # WE2: with a persona active on Windows, the webgl1/webgl2 extension lists are FORCED to + # the chosen GPU's real native-order lists (carried in the persona's coherent `prefs`), + # NOT cleared. Order is load-bearing (must match the GPU's real capture verbatim). monkeypatch.setattr(sys, "platform", "win32") from invisible_playwright._webgl_personas import select_persona p = generate_profile(seed=42) prefs = translate_profile_to_prefs(p) persona = select_persona(42) - assert prefs["zoom.stealth.webgl.extensions"] == persona["ext1"] - assert prefs["zoom.stealth.webgl2.extensions"] == persona["ext2"] + assert prefs["zoom.stealth.webgl.extensions"] == persona["prefs"]["zoom.stealth.webgl.extensions"] + assert prefs["zoom.stealth.webgl2.extensions"] == persona["prefs"]["zoom.stealth.webgl2.extensions"] + assert prefs["zoom.stealth.webgl.extensions"] # non-empty (a real GPU's ext list) # ────────────────────────────────────────────────────────────────────── @@ -413,14 +415,18 @@ def test_font_metrics_linux2_variant_uses_linux_branch(monkeypatch): @pytest.mark.unit def test_gpu_renderer_set_from_profile_on_linux(monkeypatch): - # PG1: on Linux we spoof to the profile's Windows-ANGLE renderer - # string so cross-platform sessions present a consistent Windows GPU. + # PG1: on Linux (as on EVERY host) we apply the camoufox-derived Windows-ANGLE GPU persona, + # so the page sees a consistent Windows GPU (rule: always look Windows). The C++ WebGL + # override is platform-independent (SanitizeRenderer is pure string regex), so the same + # persona renderer/vendor is presented on Linux too — no more "Generic Renderer". monkeypatch.setattr(sys, "platform", "linux") + from invisible_playwright._webgl_personas import select_persona p = generate_profile(seed=42) prefs = translate_profile_to_prefs(p) - assert prefs["zoom.stealth.webgl.renderer"] == p.gpu.renderer - assert prefs["zoom.stealth.webgl.vendor"] == p.gpu.vendor - assert prefs["zoom.stealth.webgl.renderer"] # non-empty + persona = select_persona(42) + assert prefs["zoom.stealth.webgl.renderer"] == persona["renderer"] + assert prefs["zoom.stealth.webgl.renderer"].endswith(", D3D11)") + assert prefs["zoom.stealth.webgl.vendor"] == persona["vendor"] @pytest.mark.unit @@ -465,8 +471,10 @@ def test_canvas_noise_mask_intel_on_linux(monkeypatch): @pytest.mark.unit def test_canvas_noise_mask_nvidia_on_linux(monkeypatch): - # CN2: NVIDIA/AMD renderer → 1/8 noise (mask=7). The "intel" substring - # check must NOT match here. + # CN2: the canvas-noise mask follows the REAL HOST GPU (the canvas is drawn by real + # hardware, NOT the exposed persona), so it is the Intel-class 1/16 rate (mask=15) on the + # dev/test host even when an NVIDIA persona is exposed — the persona vendor does NOT drive + # the noise rate anymore (would over-noise on an Intel host). monkeypatch.setattr(sys, "platform", "linux") p = generate_profile( seed=42, @@ -476,7 +484,7 @@ def test_canvas_noise_mask_nvidia_on_linux(monkeypatch): }, ) prefs = translate_profile_to_prefs(p) - assert prefs["zoom.stealth.canvas.noise_skip_mask"] == 7 + assert prefs["zoom.stealth.canvas.noise_skip_mask"] == 15 @pytest.mark.unit diff --git a/tests/test_sampler.py b/tests/test_sampler.py index e71c016..b201c7f 100644 --- a/tests/test_sampler.py +++ b/tests/test_sampler.py @@ -275,6 +275,80 @@ def test_derive_font_whitelist_legacy_shim_matches_dict_form(): derive_font_prefs("low_end", rng_b)["whitelist"] +# Standard fonts that ship with every Windows 10/11 install. They MUST be in the +# core (always-present) set, never in the optional/per-profile set: a real Windows +# machine never lacks them, so a session that drops one advertises a font set that +# doesn't match any real Windows profile (image-dedup font probes then report a +# short/degenerate name list → server-side OS-font-set checks fail). Calibri in +# particular sat in `optional` (a bug); these five caused the detected set to come +# up short on some seeds. Regression guard for the 2026-06-18 optional→core move. +_STANDARD_WINDOWS_FONTS = [ + "calibri", "franklin gothic", "gadugi", "javanese text", "myanmar text", +] +_ALL_GPU_CLASSES = [ + "integrated_old", "integrated_modern", "mid_range", "high_end", + "low_end", "workstation", +] + + +@pytest.mark.unit +@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) +def test_standard_windows_fonts_always_present_every_class_and_seed(gpu_class): + """FP7 [regression]: the standard-Windows fonts appear in BOTH whitelist and + metrics for every gpu_class across many seeds (i.e. they are core, not + profile-optional). Guards against a standard font silently becoming optional.""" + for seed in range(40): + out = derive_font_prefs(gpu_class, random.Random(seed)) + wl = set(out["whitelist"].split(",")) + metrics_names = {s.split("|", 1)[0] for s in out["metrics"].split(",")} + for font in _STANDARD_WINDOWS_FONTS: + assert font in wl, f"{font!r} missing from whitelist (class={gpu_class}, seed={seed})" + assert font in metrics_names, f"{font!r} missing from metrics (class={gpu_class}, seed={seed})" + + +@pytest.mark.unit +def test_standard_windows_fonts_are_in_core_pool(): + """FP8 [regression]: the standard-Windows fonts live in the CORE pool (not + optional) — the structural source of the always-present guarantee above.""" + core_names = {e["name"] for e in _sampler._FONT_CORE} + optional_names = {e["name"] for e in _sampler._FONT_OPTIONAL} + for font in _STANDARD_WINDOWS_FONTS: + assert font in core_names, f"{font!r} must be in core pool" + assert font not in optional_names, f"{font!r} must NOT be in optional pool" + + +@pytest.mark.unit +@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) +def test_derive_font_prefs_no_duplicate_families(gpu_class): + """FP9 [regression]: no family appears twice in whitelist/metrics, even when a + profile's optional list also names a core font. Guards the dedup in + derive_font_prefs (a duplicate family would emit a malformed pref pair).""" + for seed in range(30): + out = derive_font_prefs(gpu_class, random.Random(seed)) + wl = out["whitelist"].split(",") + metrics_names = [s.split("|", 1)[0] for s in out["metrics"].split(",")] + assert len(wl) == len(set(wl)), f"duplicate in whitelist (class={gpu_class}, seed={seed})" + assert len(metrics_names) == len(set(metrics_names)), \ + f"duplicate in metrics (class={gpu_class}, seed={seed})" + + +@pytest.mark.unit +@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) +def test_derive_font_prefs_named_fonts_emit_absolute_widths(gpu_class): + """FP10 [regression]: every emitted metrics value is a positive number; named + (non-generic) fonts carry an ABSOLUTE collapse-target width (>= 10), which the + binary self-calibrates per host. A value < 10 here would mean a font slipped + through as a bare multiplicative factor and would render at the wrong width.""" + out = derive_font_prefs(gpu_class, random.Random(3)) + for entry in out["metrics"].split(","): + name, _, val = entry.partition("|") + v = float(val.replace("px", "")) + assert v > 0.0, f"non-positive metrics value for {name!r}" + # the standard named fonts must be absolute (collapse-target) widths + if name in _STANDARD_WINDOWS_FONTS: + assert v >= 10.0, f"{name!r} emitted as factor {v} (<10), expected absolute width" + + # ── Forge / sample ────────────────────────────────────────────────────── # Keys the Forge.sample bundle must always contain. Builds on _LOCKED + diff --git a/tests/test_webgl_noise_active.py b/tests/test_webgl_noise_active.py new file mode 100644 index 0000000..4d460df --- /dev/null +++ b/tests/test_webgl_noise_active.py @@ -0,0 +1,63 @@ +"""Regression guard: render-noise stays ACTIVE on high-entropy WebGL readbacks. + +The near-uniform skip added 2026-06-18 (so fixed-hash reference checks on a solid +WebGL readback pass) must NOT disable noise on real fingerprint renders. A +high-entropy WebGL readback (>16 distinct colours) must still differ between two +seeds — i.e. the per-seed gamma noise is applied. Pairs with +test_canvas_render_stealth.py (solid readback stays pure). + +Kept in its own file: it launches its own short-lived browsers, so it must not run +alongside another module's shared browser (the Playwright sync API cannot nest). + +Run: pytest tests/test_webgl_noise_active.py -m e2e -v +""" +from __future__ import annotations + +import hashlib + +import pytest + +from invisible_playwright import InvisiblePlaywright + +# A high-entropy render: 64 columns, each a distinct colour (>16 distinct → the +# near-uniform skip does NOT apply → noise must run). +_HIGH_ENTROPY_JS = """() => { + const c = document.createElement('canvas'); c.width = 64; c.height = 64; + const gl = c.getContext('webgl', {preserveDrawingBuffer: true}); + if (!gl) return null; + gl.enable(gl.SCISSOR_TEST); + for (let k = 0; k < 64; k++) { + gl.scissor(k, 0, 1, 64); + gl.clearColor(k / 64, (63 - k) / 64, (k * 7 % 64) / 64, 1); + gl.clear(gl.COLOR_BUFFER_BIT); + } + const buf = new Uint8Array(64 * 64 * 4); + gl.finish(); gl.readPixels(0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, buf); + return Array.from(buf); +}""" + + +def _render_hash(firefox_binary, seed: int): + with InvisiblePlaywright( + seed=seed, binary_path=firefox_binary, headless=True, + extra_prefs={"zoom.stealth.fpp.hw_seed": 1000 + seed}, + ) as b: + p = b.new_context().new_page() + p.goto("about:blank", timeout=30_000) + arr = p.evaluate(_HIGH_ENTROPY_JS) + if arr is None: + return None + return hashlib.sha256(bytes(arr)).hexdigest() + + +@pytest.mark.e2e +def test_high_entropy_webgl_still_noised_per_seed(firefox_binary): + """Two different seeds → two different per-seed gamma curves → the high-entropy + readback hashes must differ. Identical hashes would mean the noise was skipped + on a real (non-uniform) render — a regression of the uniform-skip scope.""" + h1 = _render_hash(firefox_binary, 1) + h2 = _render_hash(firefox_binary, 2) + if h1 is None or h2 is None: + pytest.skip("webgl unavailable") + assert h1 != h2, \ + "high-entropy WebGL readback identical across seeds → render-noise not applied" From 3c0efa2d4f2ac3b4677509531445dc1ebdc75f96 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 23 Jun 2026 17:51:58 +0200 Subject: [PATCH 04/84] Geo-aware locale, audio noise off, font prefs for the bundled-font binary locale defaults to "auto" and resolves from the proxy egress country the same way timezone does - it reuses the egress IP, maps the country to a BCP-47 locale with the offline mmdb, and falls back to en-US. prefs emit juggler.locale.override (the full Accept-Language list) so the binary keeps navigator.languages and the Intl default locale in sync. The audio fingerprint noise is off in the baseline. Font prefs match the new binary: the sampled whitelist drives font.system.whitelist, system-ui is Segoe UI, the bundled fonts are activated, and the CSS generics are pinned to Windows defaults so they resolve on a non-Windows host too. --- src/invisible_playwright/_fpforge/_sampler.py | 56 +- .../_fpforge/data/font_pool.json | 668 ++---------------- .../_fpforge/data/webgl_gpu_pool.json | 90 +-- src/invisible_playwright/_geo.py | 50 ++ src/invisible_playwright/_webgl_personas.py | 6 + src/invisible_playwright/async_api.py | 24 +- src/invisible_playwright/launcher.py | 36 +- src/invisible_playwright/prefs.py | 170 ++--- tests/test_canvas_render_stealth.py | 80 +-- tests/test_integration.py | 41 +- tests/test_launcher_helpers.py | 29 +- tests/test_prefs.py | 53 -- tests/test_sampler.py | 65 +- 13 files changed, 353 insertions(+), 1015 deletions(-) diff --git a/src/invisible_playwright/_fpforge/_sampler.py b/src/invisible_playwright/_fpforge/_sampler.py index b3d7048..b977ba5 100644 --- a/src/invisible_playwright/_fpforge/_sampler.py +++ b/src/invisible_playwright/_fpforge/_sampler.py @@ -257,41 +257,31 @@ _NETWORK = Network([ # ═══════════════════════════════════════════════════════════════════════ -# FONT WHITELIST (Bayesian: core ∪ sampled_optional | gpu_class) +# FONT LIST (Bayesian: core ∪ sampled_optional | gpu_class) # ═══════════════════════════════════════════════════════════════════════ -# Semantic flip: previously exclude-list (block N probed fonts per seed). -# Now whitelist (browser sees ONLY these fonts, everything else hidden). +# The browser sees ONLY these families (everything else hidden) and renders +# them from the REAL Windows font files the binary bundles in /fonts +# (MOZ_BUNDLED_FONTS). No fabricated widths: per-session metric uniqueness +# comes from the HarfBuzz per-glyph jitter (shared fpp.hw_seed), not here. # Core (~112): always included — fresh Win11 + Office 2021 English. -# Optional (~40): sampled per-session with P(present | gpu_class). Gives -# small realistic variance (~3-8 optional fonts differ per session) while -# keeping the profile strongly centered on 'typical Windows user'. +# Optional (~40): one realistic Windows profile sampled per seed (weighted, +# deterministic) → ~3-8 optional families differ per session while staying +# centered on 'typical Windows user'. def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: - """Build COHERENT whitelist + metrics strings for the session. + """Build the session's font family list. Profile-based (not per-font random): - - Core fonts always included (OS defaults + CSS-generic backers). - - Optional fonts come from ONE realistic Windows profile picked per seed - (weighted, deterministic). Metrics carry REAL per-family widths. + - Core families always included (OS defaults + CSS-generic backers). + - Optional families come from ONE realistic Windows profile picked per + seed (weighted, deterministic). - Returns: - { - "whitelist": "arial,calibri,marlett,...", - "metrics": "arial|0.978,calibri|0.934,marlett|0.855,..." - } - - The whitelist is the list of font families to advertise. The metrics - string encodes per-family width scale factors that the consumer can - use to make each family detectable by width-diff font probes. - - Each entry in font_pool.json carries its own {name, factor} pair so the - two pref strings are GUARANTEED coherent — no chance of a fabricated - font with factor 1.0 (undetectable) or a metrics entry for a font not - in the whitelist (useless). - - Markers & add-new-font: simply add an entry to font_pool.json:core (with - a factor at least 4% away from 1.0) — no special-case code needed. + Returns ``{"whitelist": "arial,calibri,marlett,..."}`` — the comma-joined + family list to advertise. The binary applies it to the native system font + allow-list AT CONSTRUCTION and renders each family from the bundled real + Windows file, so glyphs and widths are genuine. To add a family, just add + an entry to font_pool.json:core/optional — no special-case code needed. """ # Profile-based (2026-06-18): pick ONE realistic Windows font profile (weighted, # deterministic per seed). Per-font random sampling is superseded — it produced @@ -319,8 +309,8 @@ def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: else: included.extend(_FONT_OPTIONAL) # fallback (no profiles defined): all optional # Dedup by name (a profile may list a font that is also in core, e.g. after a - # standard font is promoted core→always-present) so the whitelist/metrics never - # carry a duplicate family. + # standard font is promoted core→always-present) so the list never carries a + # duplicate family. _seen: set = set() _uniq: list = [] for e in included: @@ -331,13 +321,7 @@ def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: # Deterministic ordering: sort by name included.sort(key=lambda e: e["name"]) whitelist = ",".join(e["name"] for e in included) - # Emit the UNIVERSAL real Windows width per font (host-independent value, same everywhere). - # prefs._font_metrics_for_platform divides by the per-platform collapse base to get the C++ - # factor (measureText = base * factor = the exact Windows width on Windows/Linux/mac). - metrics = ",".join( - f'{e["name"]}|{e["width"]:.1f}' for e in included - ) - return {"whitelist": whitelist, "metrics": metrics} + return {"whitelist": whitelist} # Back-compat shim: legacy callers still import derive_font_whitelist. diff --git a/src/invisible_playwright/_fpforge/data/font_pool.json b/src/invisible_playwright/_fpforge/data/font_pool.json index bfa4157..4104fba 100644 --- a/src/invisible_playwright/_fpforge/data/font_pool.json +++ b/src/invisible_playwright/_fpforge/data/font_pool.json @@ -1,723 +1,173 @@ { "core": [ { - "name": "arial", - "width": 2256.7 + "name": "arial" }, { - "name": "arial black", - "width": 2256.7 + "name": "calibri" }, { - "name": "arial narrow", - "width": 2216.7 + "name": "cambria" }, { - "name": "bahnschrift", - "width": 2231.9 + "name": "cambria math" }, { - "name": "bahnschrift condensed", - "width": 2216.7 + "name": "candara" }, { - "name": "bahnschrift light", - "width": 2216.7 + "name": "comic sans ms" }, { - "name": "bahnschrift light condensed", - "width": 2216.7 + "name": "consolas" }, { - "name": "bahnschrift light semicondensed", - "width": 2216.7 + "name": "constantia" }, { - "name": "bahnschrift semibold", - "width": 2216.7 + "name": "corbel" }, { - "name": "bahnschrift semibold condensed", - "width": 2216.7 + "name": "courier new" }, { - "name": "bahnschrift semibold semicondensed", - "width": 2216.7 + "name": "ebrima" }, { - "name": "bahnschrift semicondensed", - "width": 2216.7 + "name": "franklin gothic" }, { - "name": "bahnschrift semilight", - "width": 2216.7 + "name": "gabriola" }, { - "name": "bahnschrift semilight condensed", - "width": 2216.7 + "name": "gadugi" }, { - "name": "bahnschrift semilight semicondensed", - "width": 2216.7 + "name": "georgia" }, { - "name": "calibri", - "width": 2139.5 + "name": "impact" }, { - "name": "calibri light", - "width": 2139.5 + "name": "javanese text" }, { - "name": "cambria", - "width": 2258.2 + "name": "lucida console" }, { - "name": "cambria math", - "width": 2258.2 + "name": "lucida sans unicode" }, { - "name": "candara", - "width": 2187.8 + "name": "ms gothic" }, { - "name": "candara light", - "width": 2187.8 + "name": "ms pgothic" }, { - "name": "cascadia code", - "width": 2362.3 + "name": "mv boli" }, { - "name": "cascadia mono", - "width": 2362.3 + "name": "malgun gothic" }, { - "name": "comic sans ms", - "width": 2361.9 + "name": "marlett" }, { - "name": "consolas", - "width": 2216.7 + "name": "microsoft himalaya" }, { - "name": "constantia", - "width": 2283.2 + "name": "microsoft jhenghei" }, { - "name": "corbel", - "width": 2129.9 + "name": "microsoft jhenghei ui" }, { - "name": "corbel light", - "width": 2129.9 + "name": "microsoft new tai lue" }, { - "name": "courier new", - "width": 2419.2 + "name": "microsoft phagspa" }, { - "name": "ebrima", - "width": 2285.2 + "name": "microsoft sans serif" }, { - "name": "franklin gothic", - "width": 2225.4 + "name": "microsoft yahei" }, { - "name": "franklin gothic medium", - "width": 2225.4 + "name": "microsoft yi baiti" }, { - "name": "gabriola", - "width": 1598.5 + "name": "mingliu-extb" }, { - "name": "gadugi", - "width": 2285.2 + "name": "mongolian baiti" }, { - "name": "georgia", - "width": 2338.7 + "name": "myanmar text" }, { - "name": "hololens mdl2 assets", - "width": 2216.7 + "name": "pmingliu-extb" }, { - "name": "impact", - "width": 2060.8 + "name": "palatino linotype" }, { - "name": "ink free", - "width": 2122.5 + "name": "segoe print" }, { - "name": "javanese text", - "width": 2311.9 + "name": "segoe script" }, { - "name": "leelawadee ui semilight", - "width": 2283.4 + "name": "segoe ui" }, { - "name": "lucida console", - "width": 2429.5 + "name": "segoe ui symbol" }, { - "name": "lucida sans unicode", - "width": 2464.3 + "name": "simsun" }, { - "name": "malgun gothic", - "width": 2351.1 + "name": "simsun-extb" }, { - "name": "malgun gothic semilight", - "width": 2351.1 + "name": "sitka small" }, { - "name": "marlett", - "width": 3740.2 + "name": "sylfaen" }, { - "name": "microsoft himalaya", - "width": 1468.4 + "name": "trebuchet ms" }, { - "name": "microsoft jhenghei", - "width": 2440.4 + "name": "verdana" }, { - "name": "microsoft jhenghei light", - "width": 2440.4 + "name": "webdings" }, { - "name": "microsoft jhenghei ui", - "width": 2440.4 + "name": "yu gothic" }, { - "name": "microsoft jhenghei ui light", - "width": 2440.4 + "name": "courier" }, { - "name": "microsoft new tai lue", - "width": 2285.2 + "name": "helvetica" }, { - "name": "microsoft phagspa", - "width": 2285.2 - }, - { - "name": "microsoft sans serif", - "width": 2256.6 - }, - { - "name": "microsoft tai le", - "width": 2285.2 - }, - { - "name": "microsoft yahei", - "width": 2487.6 - }, - { - "name": "microsoft yahei light", - "width": 2487.6 - }, - { - "name": "microsoft yahei ui", - "width": 2487.6 - }, - { - "name": "microsoft yahei ui light", - "width": 2487.6 - }, - { - "name": "microsoft yi baiti", - "width": 1830.7 - }, - { - "name": "mingliu-extb", - "width": 2016 - }, - { - "name": "mingliu_hkscs-extb", - "width": 2016 - }, - { - "name": "mongolian baiti", - "width": 2191.7 - }, - { - "name": "ms gothic", - "width": 2016 - }, - { - "name": "ms pgothic", - "width": 2031.7 - }, - { - "name": "mv boli", - "width": 2417.4 - }, - { - "name": "myanmar text", - "width": 2285.2 - }, - { - "name": "nirmala ui", - "width": 2283.4 - }, - { - "name": "nirmala ui semilight", - "width": 2283.4 - }, - { - "name": "nsimsun", - "width": 2016 - }, - { - "name": "palatino linotype", - "width": 2358.6 - }, - { - "name": "pmingliu-extb", - "width": 2065.9 - }, - { - "name": "sans serif collection", - "width": 2361.6 - }, - { - "name": "segoe mdl2 assets", - "width": 2137.2 - }, - { - "name": "segoe print", - "width": 2675.2 - }, - { - "name": "segoe script", - "width": 2830.3 - }, - { - "name": "segoe ui", - "width": 2285.2 - }, - { - "name": "segoe ui black", - "width": 2285.2 - }, - { - "name": "segoe ui emoji", - "width": 2283.4 - }, - { - "name": "segoe ui historic", - "width": 2283.4 - }, - { - "name": "segoe ui semibold", - "width": 2216.7 - }, - { - "name": "segoe ui semilight", - "width": 2216.7 - }, - { - "name": "segoe ui symbol", - "width": 2283.4 - }, - { - "name": "segoe ui variable", - "width": 2216.7 - }, - { - "name": "simsun", - "width": 2016 - }, - { - "name": "simsun-extb", - "width": 2016 - }, - { - "name": "sitka banner", - "width": 2007.8 - }, - { - "name": "sitka display", - "width": 2007.8 - }, - { - "name": "sitka heading", - "width": 2007.8 - }, - { - "name": "sitka small", - "width": 2007.8 - }, - { - "name": "sitka subheading", - "width": 2007.8 - }, - { - "name": "sitka text", - "width": 2007.8 - }, - { - "name": "sylfaen", - "width": 2279.6 - }, - { - "name": "symbol", - "width": 2223.4 - }, - { - "name": "tahoma", - "width": 2233.1 - }, - { - "name": "times new roman", - "width": 2191.7 - }, - { - "name": "trebuchet ms", - "width": 2222.4 - }, - { - "name": "verdana", - "width": 2529.1 - }, - { - "name": "webdings", - "width": 3627.5 - }, - { - "name": "wingdings", - "width": 3539.7 - }, - { - "name": "wingdings 2", - "width": 3582.1 - }, - { - "name": "wingdings 3", - "width": 2963.4 - }, - { - "name": "yu gothic", - "width": 2351.3 - }, - { - "name": "yu gothic light", - "width": 2351.3 - }, - { - "name": "yu gothic medium", - "width": 2216.7 - }, - { - "name": "yu gothic ui", - "width": 2285.2 - }, - { - "name": "yu gothic ui light", - "width": 2285.2 - }, - { - "name": "yu gothic ui semibold", - "width": 2216.7 - }, - { - "name": "yu gothic ui semilight", - "width": 2216.7 - } - ], - "optional": [ - { - "name": "aparajita", - "width": 2216.7 - }, - { - "name": "arabic typesetting", - "width": 2216.7 - }, - { - "name": "arial unicode ms", - "width": 2216.7 - }, - { - "name": "batang", - "width": 2216.7 - }, - { - "name": "century", - "width": 2397.7 - }, - { - "name": "century gothic", - "width": 2409.1 - }, - { - "name": "dengxian", - "width": 2216.7 - }, - { - "name": "dfkai-sb", - "width": 2216.7 - }, - { - "name": "dokchampa", - "width": 2216.7 - }, - { - "name": "estrangelo edessa", - "width": 2216.7 - }, - { - "name": "euphemia", - "width": 2216.7 - }, - { - "name": "fangsong", - "width": 2216.7 - }, - { - "name": "gautami", - "width": 2216.7 - }, - { - "name": "haettenschweiler", - "width": 1567.6 - }, - { - "name": "helv", - "width": 2256.6 - }, - { - "name": "iskoola pota", - "width": 2216.7 - }, - { - "name": "kaiti", - "width": 2216.7 - }, - { - "name": "kalinga", - "width": 2216.7 - }, - { - "name": "kartika", - "width": 2216.7 - }, - { - "name": "khmer ui", - "width": 2216.7 - }, - { - "name": "kokila", - "width": 2216.7 - }, - { - "name": "lao ui", - "width": 2216.7 - }, - { - "name": "latha", - "width": 2216.7 - }, - { - "name": "leelawadee", - "width": 2267.4 - }, - { - "name": "leelawadee ui", - "width": 2283.4 - }, - { - "name": "levenim mt", - "width": 2216.7 - }, - { - "name": "mangal", - "width": 2216.7 - }, - { - "name": "meiryo", - "width": 2216.7 - }, - { - "name": "meiryo ui", - "width": 2216.7 - }, - { - "name": "microsoft uighur", - "width": 1498.1 - }, - { - "name": "monotype corsiva", - "width": 1929.3 - }, - { - "name": "ms mincho", - "width": 2216.7 - }, - { - "name": "ms outlook", - "width": 2361.9 - }, - { - "name": "ms pmincho", - "width": 2216.7 - }, - { - "name": "ms reference sans serif", - "width": 2529.0 - }, - { - "name": "ms reference specialty", - "width": 2976.2 - }, - { - "name": "ms ui gothic", - "width": 2031.7 - }, - { - "name": "mt extra", - "width": 2183.8 - }, - { - "name": "nyala", - "width": 2216.7 - }, - { - "name": "plantagenet cherokee", - "width": 2216.7 - }, - { - "name": "pmingliu", - "width": 2216.7 - }, - { - "name": "pristina", - "width": 1829.1 - }, - { - "name": "raavi", - "width": 2216.7 - }, - { - "name": "segoe fluent icons", - "width": 2142.7 - }, - { - "name": "segoe ui light", - "width": 2216.7 - }, - { - "name": "shonar bangla", - "width": 2216.7 - }, - { - "name": "shruti", - "width": 2216.7 - }, - { - "name": "simhei", - "width": 2216.7 - }, - { - "name": "simkai", - "width": 2216.7 - }, - { - "name": "small fonts", - "width": 2256.7 - }, - { - "name": "traditional arabic", - "width": 2216.7 - }, - { - "name": "tunga", - "width": 2216.7 - }, - { - "name": "urdu typesetting", - "width": 2216.7 - }, - { - "name": "utsaah", - "width": 2216.7 - }, - { - "name": "vani", - "width": 2216.7 - }, - { - "name": "vijaya", - "width": 2216.7 - }, - { - "name": "vrinda", - "width": 2216.7 - }, - { - "name": "yu mincho", - "width": 2216.7 + "name": "segoe ui light" } ], + "optional": [], "profiles": [ { - "name": "win_office", - "weight": 40, - "optional": [ - "century", - "century gothic", - "helv", - "haettenschweiler", - "leelawadee", - "ms outlook", - "ms reference specialty", - "ms ui gothic", - "mt extra", - "microsoft uighur", - "monotype corsiva", - "pristina", - "segoe ui light", - "small fonts" - ] - }, - { - "name": "win_base", + "name": "win_clean", "weight": 35, - "optional": [ - "century", - "century gothic", - "helv", - "haettenschweiler", - "leelawadee", - "ms ui gothic", - "microsoft uighur", - "monotype corsiva", - "pristina", - "segoe ui light", - "small fonts" - ] + "optional": [] }, { - "name": "win_lean", - "weight": 25, - "optional": [ - "century", - "century gothic", - "helv", - "haettenschweiler", - "leelawadee", - "ms ui gothic", - "segoe ui light", - "small fonts" - ] + "name": "win_office", + "weight": 65, + "optional": [] } ] -} \ No newline at end of file +} diff --git a/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json b/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json index 34f757b..76f0fe5 100644 --- a/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json +++ b/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json @@ -3,7 +3,7 @@ { "vendor": "Google Inc. (NVIDIA)", "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.462396, + "prob": 0.470921, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", @@ -19,7 +19,7 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.192201, + "prob": 0.195745, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", @@ -35,7 +35,7 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.157382, + "prob": 0.160284, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", @@ -51,7 +51,7 @@ { "vendor": "Google Inc. (AMD)", "renderer_out": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.084958, + "prob": 0.086524, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", @@ -67,7 +67,7 @@ { "vendor": "Google Inc. (AMD)", "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.052925, + "prob": 0.053901, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", @@ -80,26 +80,10 @@ "zoom.stealth.webgl2.enabled": true } }, - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.013928, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, { "vendor": "Google Inc. (Microsoft)", "renderer_out": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.012535, + "prob": 0.012766, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Microsoft)", @@ -115,9 +99,9 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.006964, + "prob": 0.007092, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", @@ -131,7 +115,7 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1), or similar", - "prob": 0.004178, + "prob": 0.004255, "prefs": { "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", @@ -144,28 +128,12 @@ "zoom.stealth.webgl2.enabled": true } }, - { - "vendor": "Google Inc. (Google)", - "renderer_out": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)", - "prob": 0.002786, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)", - "zoom.stealth.webgl.vendor": "Google Inc. (Google)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,EXT_sRGB,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_etc1,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_multi_draw", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_color_buffer_half_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,EXT_texture_norm16,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_clip_cull_distance,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_etc1,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_lose_context,WEBGL_multi_draw", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|15,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|1029,34855|1029,34856|1029,34857|1029,34858|1029,34859|1029,34860|1029,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|60,35375|72,35376|65536,35377|245760,35379|245760,35380|256,35657|16384,35658|16384,35659|124,35660|32,35661|64,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36345|1,36347|4096,36348|31,36349|4096,37137|0,37154|128,37157|128,37443|37444,37447|0", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|8192:8192,33901|1:1023,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|15:15:10,35633*36337|15:15:10,35633*36338|127:127:23,35633*36339|15:14:0,35633*36340|15:14:0,35633*36341|31:30:0,35632*36336|15:15:10,35632*36337|15:15:10,35632*36338|127:127:23,35632*36339|15:14:0,35632*36340|15:14:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, { "vendor": "Google Inc. (AMD)", "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", @@ -179,9 +147,9 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "", @@ -195,9 +163,9 @@ { "vendor": "Google Inc. (NVIDIA)", "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "", @@ -211,9 +179,9 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0)", + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "", @@ -227,9 +195,9 @@ { "vendor": "Google Inc. (Intel)", "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1)", + "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", @@ -243,25 +211,9 @@ { "vendor": "Google Inc. (NVIDIA)", "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.001393, + "prob": 0.001419, "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.001393, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0)", + "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", diff --git a/src/invisible_playwright/_geo.py b/src/invisible_playwright/_geo.py index 7423b2b..5c552f2 100644 --- a/src/invisible_playwright/_geo.py +++ b/src/invisible_playwright/_geo.py @@ -136,6 +136,56 @@ def ip_to_timezone(ip: str, mmdb_path: Any) -> str: return tz +# ISO 3166 country code -> the primary BCP-47 locale a real Windows machine in that +# country most commonly runs. Multi-language countries use the majority language; the +# user can always force a specific locale instead of "auto". Unknown -> en-US. +_COUNTRY_LOCALE = { + "US": "en-US", "GB": "en-GB", "CA": "en-CA", "AU": "en-AU", "NZ": "en-NZ", "IE": "en-IE", + "ZA": "en-ZA", "IN": "en-IN", "SG": "en-SG", "PH": "en-PH", + "FR": "fr-FR", "BE": "fr-BE", "LU": "fr-LU", + "DE": "de-DE", "AT": "de-AT", "CH": "de-CH", + "IT": "it-IT", "ES": "es-ES", "PT": "pt-PT", "NL": "nl-NL", + "SE": "sv-SE", "NO": "nb-NO", "DK": "da-DK", "FI": "fi-FI", "IS": "is-IS", + "PL": "pl-PL", "CZ": "cs-CZ", "SK": "sk-SK", "HU": "hu-HU", "RO": "ro-RO", + "GR": "el-GR", "BG": "bg-BG", "HR": "hr-HR", "RS": "sr-RS", "SI": "sl-SI", + "RU": "ru-RU", "UA": "uk-UA", "TR": "tr-TR", "IL": "he-IL", + "BR": "pt-BR", "MX": "es-MX", "AR": "es-AR", "CL": "es-CL", "CO": "es-CO", "PE": "es-PE", + "JP": "ja-JP", "KR": "ko-KR", "CN": "zh-CN", "TW": "zh-TW", "HK": "zh-HK", + "ID": "id-ID", "TH": "th-TH", "VN": "vi-VN", "MY": "ms-MY", + "SA": "ar-SA", "AE": "ar-AE", "EG": "ar-EG", +} + + +def ip_to_locale(ip: str, mmdb_path: Any) -> str: + """Map ``ip`` -> a BCP-47 locale via the MaxMind ``country.iso_code`` field, so the + browser language stays consistent with the proxy egress country. Falls back to + ``en-US`` for IPs absent from the DB or countries we don't map.""" + import maxminddb + + with maxminddb.open_database(str(mmdb_path)) as reader: + record = reader.get(ip) + cc = "" + if isinstance(record, dict): + cc = ((record.get("country") or {}).get("iso_code") or "") + return _COUNTRY_LOCALE.get(cc.upper(), "en-US") + + +def resolve_session_locale(egress_ip: Optional[str], proxy: Optional[Dict[str, str]]) -> str: + """Resolve ``locale="auto"`` to a BCP-47 locale from the egress country. Behind a proxy + it reuses the already-discovered ``egress_ip`` (no extra round-trip); without a proxy it + discovers the host's public IP. On any failure it returns ``en-US`` (never breaks launch + — locale is cosmetic, unlike timezone which traps a foreign-proxy mismatch).""" + from .download import ensure_geoip_mmdb + + try: + ip = egress_ip if _proxy_is_set(proxy) else discover_egress_ip(None) + if ip is None: + return "en-US" + return ip_to_locale(ip, ensure_geoip_mmdb()) + except Exception: # noqa: BLE001 + return "en-US" + + class SessionGeo(NamedTuple): """Geo facts resolved once per session from a single egress round-trip. diff --git a/src/invisible_playwright/_webgl_personas.py b/src/invisible_playwright/_webgl_personas.py index 3381b6c..18ab1b1 100644 --- a/src/invisible_playwright/_webgl_personas.py +++ b/src/invisible_playwright/_webgl_personas.py @@ -185,6 +185,12 @@ def forced_gpu_class(seed: int) -> Optional[str]: # only on the retired amd/arc mix) → dropped. NVIDIA is the worst case, so these are clean on # amd/intel too. hw_seed = the canvas/WebGL gamma render hash (the dominant consistency-score # driver); host-calibrated. +# 2026-06-21: with WebGL Option B (zoom.stealth.webgl.substitute_pixels, ON in prefs.py) the WebGL +# render hash is hash(seed,idx) = HOST-INDEPENDENT, so this list NO LONGER needs per-host calibration +# — it only supplies per-session diversity. A 2026-06-21 attempt to re-calibrate it per-host FAILED +# cross-OS: hw_seed clean on Windows went dirty on the Linux GL backend (b008 0.034->0.839; Win-dirty +# {7,11,20,27} = Linux-clean and vice-versa; + identity×hw_seed interaction on Linux). That proved +# calibration can't work cross-host → substitution replaces it. Kept the original diverse 9-set. CLEAN_RENDER_SEEDS = [0, 5, 6, 9, 11, 16, 19, 20, 28] diff --git a/src/invisible_playwright/async_api.py b/src/invisible_playwright/async_api.py index 8555b3f..2c04938 100644 --- a/src/invisible_playwright/async_api.py +++ b/src/invisible_playwright/async_api.py @@ -48,7 +48,7 @@ class InvisiblePlaywright: proxy: Optional[Dict[str, str]] = None, extra_args: Optional[list[str]] = None, humanize: Union[bool, float] = True, - locale: str = "en-US", + locale: str = "auto", timezone: str = "", extra_prefs: Optional[Dict[str, Any]] = None, binary_path: Optional[str] = None, @@ -90,6 +90,14 @@ class InvisiblePlaywright: ) self._timezone = _geo.timezone self._webrtc_egress_ip = _geo.egress_ip + # Geo-aware locale: "auto" derives the language from the egress country (reusing + # the egress IP just discovered), like timezone="auto". Keeps the browser language + # consistent with the proxy's country instead of a fixed en-US. + if (self._locale or "").strip().lower() == "auto": + from ._geo import resolve_session_locale + self._locale = await asyncio.to_thread( + resolve_session_locale, _geo.egress_ip, self._proxy + ) executable = self._binary_path or ensure_binary() prefs = translate_profile_to_prefs( self._profile, @@ -113,7 +121,7 @@ class InvisiblePlaywright: prefs["stealthfox.humanize.maxTime"] = str(cap) playwright_proxy = _configure_proxy_shared(self._proxy, prefs) pw_headless = self._resolve_headless() - env = self._build_env() + env = self._build_env(prefs) try: self._pw = await async_playwright().start() if self._profile_dir is not None: @@ -214,11 +222,21 @@ class InvisiblePlaywright: pass self._virtual_display = None - def _build_env(self) -> Dict[str, str]: + def _build_env(self, prefs: Dict[str, Any]) -> Dict[str, str]: import os as _os env = _os.environ.copy() if self._timezone: env["TZ"] = _tz_env(self._timezone) + # Font allow-list + system-ui via env (read at the gfxPlatformFontList + # constructor, process start) — Playwright delivers firefox_user_prefs + # over the juggler protocol after start, too late for the font list ctor, + # so without this host fonts leak on Linux/macOS. See sync launcher. + fontlist = prefs.get("zoom.stealth.font.fontlist") + if fontlist: + env["STEALTHFOX_FONTLIST"] = fontlist + system_ui = prefs.get("zoom.stealth.font.system_ui") + if system_ui: + env["STEALTHFOX_SYSTEMUI"] = system_ui # WebRTC srflx override: feed nICEr's nr_stealth_bridge the proxy egress # IP (caller's explicit env var wins, else the IP auto-discovered in # __aenter__) and drop IPv6 from gathering behind a proxy. diff --git a/src/invisible_playwright/launcher.py b/src/invisible_playwright/launcher.py index 510fa0f..559ba2f 100644 --- a/src/invisible_playwright/launcher.py +++ b/src/invisible_playwright/launcher.py @@ -110,7 +110,7 @@ class InvisiblePlaywright: proxy: Optional[Dict[str, str]] = None, extra_args: Optional[list[str]] = None, humanize: Union[bool, float] = True, - locale: str = "en-US", + locale: str = "auto", timezone: str = "", extra_prefs: Optional[Dict[str, Any]] = None, binary_path: Optional[str] = None, @@ -135,8 +135,15 @@ class InvisiblePlaywright: into a Bezier trajectory with ~10 ms between waypoints. Default ``True`` (~1.5 s max motion). ``False`` disables; a float caps the motion in seconds. - locale: BCP-47 tag (e.g. ``"en-US"``). Drives the - ``Accept-Language`` header and ``navigator.language``. + locale: BCP-47 tag (e.g. ``"en-US"``) or ``"auto"`` (default). + ``"auto"`` derives the locale from the egress country — the proxy + egress IP, or the host's public IP without a proxy — exactly like + ``timezone="auto"``, keeping the browser language consistent with the + exit country (a French proxy → ``fr-FR``). Drives + ``intl.accept_languages`` → both ``navigator.language``/``languages`` + AND the q-valued ``Accept-Language`` header (the patched binary builds + the header from the pref, never from the raw Playwright locale override, + so the two never diverge — see nsHttpHandler STEALTHFOX note). timezone: IANA zone (e.g. ``"America/New_York"``) — used as-is when set, the only way to force a specific zone. ``""`` (default) or ``"auto"`` ALWAYS resolves from the egress IP: @@ -199,11 +206,17 @@ class InvisiblePlaywright: _geo = prepare_session_geo(self._timezone, self._proxy) self._timezone = _geo.timezone self._webrtc_egress_ip = _geo.egress_ip + # Geo-aware locale: "auto" derives the language from the egress country (reusing + # the egress IP already discovered above), like timezone="auto". Keeps the browser + # language consistent with the proxy's country instead of a fixed en-US. + if (self._locale or "").strip().lower() == "auto": + from ._geo import resolve_session_locale + self._locale = resolve_session_locale(_geo.egress_ip, self._proxy) executable = self._binary_path or ensure_binary() prefs = self._build_prefs() playwright_proxy = _configure_proxy_shared(self._proxy, prefs) pw_headless = self._resolve_headless() - env = self._build_env() + env = self._build_env(prefs) try: self._pw = sync_playwright().start() @@ -358,7 +371,7 @@ class InvisiblePlaywright: prefs["stealthfox.humanize.maxTime"] = str(self._humanize_max_seconds()) return prefs - def _build_env(self) -> Dict[str, str]: + def _build_env(self, prefs: Dict[str, Any]) -> Dict[str, str]: """Env vars passed to the Firefox subprocess. ``TZ`` tunes the libc clock the content process reads for @@ -369,11 +382,24 @@ class InvisiblePlaywright: a synthetic srflx candidate matching the proxy egress IP, avoiding the StaticPref IPC propagation timing issue between parent and socket processes. + ``STEALTHFOX_FONTLIST`` / ``STEALTHFOX_SYSTEMUI`` carry the font + allow-list + system-ui family for the SAME reason: the binary reads + them at the gfxPlatformFontList constructor (process start), but + Playwright delivers firefox_user_prefs over the juggler protocol + AFTER start — too late for the font list ctor. The env var is present + at start and inherited by content processes, so the allow-list is + applied on every host (without it, host fonts leak on Linux/macOS). """ import os as _os env = _os.environ.copy() if self._timezone: env["TZ"] = _tz_env(self._timezone) + fontlist = prefs.get("zoom.stealth.font.fontlist") + if fontlist: + env["STEALTHFOX_FONTLIST"] = fontlist + system_ui = prefs.get("zoom.stealth.font.system_ui") + if system_ui: + env["STEALTHFOX_SYSTEMUI"] = system_ui # WebRTC srflx override: feed nICEr's nr_stealth_bridge the proxy egress # IP so the srflx candidate matches the proxy (not the real host the # UDP STUN would otherwise leak). An explicit env var set by the caller diff --git a/src/invisible_playwright/prefs.py b/src/invisible_playwright/prefs.py index d50bd2d..f06778e 100644 --- a/src/invisible_playwright/prefs.py +++ b/src/invisible_playwright/prefs.py @@ -170,39 +170,6 @@ _WIN_VOICES = ",".join([ ]) -# ────────────────────────────────────────────────────────────────────── -# Linux font compensation — Linux Firefox uses DejaVu / Liberation -# fonts which have wider/narrower glyphs than Windows Arial / Segoe. -# These per-generic factors are prepended to ``zoom.stealth.font.metrics`` -# on Linux only; Windows-native rendering already matches the canonical -# widths so we pass an empty string (any factor !=1 would distort real -# metrics). -# ────────────────────────────────────────────────────────────────────── - -_LINUX_GENERIC_FONT_FACTORS = ( - # GENERIC factors are calibrated to FP Pro's font_preferences probe (NOT the 72px named-probe - # scale — verified 2026-06-18: recalibrating to the named-probe scale broke them, mono 121.55 - # -> 112.4; the original values are correct for font_preferences). DejaVu/Liberation generics - # vs Windows targets: serif 0.920, sans 0.889, monospace 1.000, system-ui 0.910. - "serif|0.920,sans-serif|0.889,monospace|1.000," - "system-ui|0.910,cursive|0.932,fantasy|0.812," -) - -# Calibration reference string for the C++ self-calibrating absolute-width path. -# MUST be byte-identical to the probe the font_pool widths were measured with -# (72px canvas measureText) and to the binary's zoom.stealth.font.calib_ref -# default. Set explicitly so correctness never depends on the binary default. -_FONT_CALIB_REF = "mmmmwwwwiiiillloooMMMMWWWW0123456789 The quick brown fox" -# NOTE: there is intentionally NO per-OS collapse-base table here anymore. -# The C++ font hook self-calibrates: `font_pool` stores the UNIVERSAL real -# Windows measureText width per font and the binary divides it by the host's -# own collapse base (gfxTextRun::StealthCollapseBase, summed from the list-head -# font's per-glyph advances over zoom.stealth.font.calib_ref). So the SAME -# stored value yields the exact Windows width on Windows, Linux AND macOS with -# nothing to measure per platform. (Was: _COLLAPSE_BASE = {win32:1530, linux:2400} -# + a darwin TODO — removed 2026-06-18 when the self-calibrating C++ landed.) - - # ────────────────────────────────────────────────────────────────────── # Baseline — applied to every session regardless of Profile. # ────────────────────────────────────────────────────────────────────── @@ -374,9 +341,37 @@ _BASELINE: Dict[str, Any] = { # DevTools anti-detection. "zoom.stealth.debugger.force_detach": True, - # Canvas substitution — additive ±1 noise over the OS base pattern; - # set to True to replace pixels with hash(seed, idx) instead. - "zoom.stealth.canvas.substitute_pixels": False, + # Canvas substitution (Option B for canvas) — replace pixels with hash(seed,idx), + # uniform-skip (red-box exact, masking-safe) + full overwrite. Makes the canvas + # render a pure function of (seed) = HOST-INDEPENDENT (kills the DWrite-vs-FreeType + # text-raster leak: Canvas Hash + Font hash were the residual Win!=Linux signals). + # ON by default (paired with webgl.substitute_pixels). + "zoom.stealth.canvas.substitute_pixels": True, + + # WebGL substitution (Option B) — replace readback/snapshot RGB with + # hash(seed,idx), endpoint-preserving. Makes the WebGL render hash a pure + # function of (seed, dims) = HOST-INDEPENDENT, so no per-host hw_seed + # calibration is needed (the gamma path was per-host: NVIDIA/Arc-on-Win clean + # seeds went dirty on the Linux GL backend). ON by default. + "zoom.stealth.webgl.substitute_pixels": True, + + # WebGPU presence consistency. Firefox enables dom.webgpu.enabled by default on + # Windows/Mac-ARM but NOT on Linux/Mac-x64. We ALWAYS claim Windows, so force it ON + # on every host: a Windows FF MUST expose navigator.gpu (object); a Linux host leaving + # it undefined while the UA says Windows is an inconsistency tell (RE 2026-06-22: + # has_gpu was object on Win, undefined on WSL). adapter.info is empty (FF privacy + # default) so no GPU-name leak; requestAdapter may be null on a GPU-less host, which + # is itself plausible for a real Windows machine. + "dom.webgpu.enabled": True, + + # Audio fingerprint noise OFF. RE 2026-06-22: the per-session OfflineAudioContext + # noise (gated by hw_seed) was THE dominant driver of FP Pro tampering_ml on Windows + # — b005 Win dropped 0.4349 -> 0.0564 with audio noise alone disabled (canvas_text/ + # emoji unchanged, so they were a red-herring). The audio value is already host-indep + # AND identical to a real FF's canonical OfflineAudioContext sum, so a fixed (un-noised) + # audio is NOT a linking signal (every real FF has the same value) — removing the noise + # matches real Firefox and clears the tampering flag. + "zoom.stealth.audio.fp_noise": False, # Navigator identity (locked to Windows Firefox 150). **_NAVIGATOR_OVERRIDES, @@ -452,59 +447,17 @@ _WIN_VIRT_DESKTOP_WORKAROUNDS: Dict[str, Any] = { # ────────────────────────────────────────────────────────────────────── def _accept_language(locale: str) -> str: + # ", " — the desktop-default shape (e.g. "en-US, en"). Firefox expands it + # to navigator.languages=["en-US","en"] AND (via the patched binary) the q-valued header + # "en-US,en;q=0.5". The patched nsHttpHandler (STEALTHFOX, RE 2026-06-23) builds the + # Accept-Language header from THIS pref even when juggler sets a per-context locale + # override, so header and navigator.languages stay consistent 2/2 — the most authentic + # (real desktop) form. Supersedes the 2026-06-22 single-tag workaround. lang = locale.replace("_", "-") base = lang.split("-")[0] return f"{lang}, {base}" if base != lang else lang -def _font_metrics_for_platform(profile_metrics: str) -> str: - """Return ``zoom.stealth.font.metrics`` value. - - The C++ whitelist hook (``gfxPlatformFontList::FindAndAddFamiliesLocked``) - backs EVERY whitelisted *named* family with the list-head family on every - platform. Without per-font width factors, that means each named font - (Arial, Times New Roman, Courier New, …) renders with identical glyphs and - collapses to a SINGLE canvas ``measureText`` width — a non-physical - 1-distinct-width result that strict JS-sensor anti-bots flag via their - font probe. The per-font factors in ``profile_metrics`` - (``arial|0.978,arial black|1.168,…``) spread the fabricated families back - to distinct, realistic, deterministic-per-seed widths, so we apply them on - EVERY platform (previously suppressed on Windows/mac, which left the - collapse in place — only the CSS-generic vector, which FP Pro probes, was - ever correct there). - - These factors only key *named* families. CSS generics - (serif/sans-serif/monospace/system-ui) bypass the whitelist entirely and - render at the host's native widths, so they are never present in - ``profile_metrics`` and stay unfactored — FP Pro's ``font_preferences`` - probe (which measures the generics) is unaffected. That is also why - applying named-font factors here does NOT distort the canonical generic - widths. - - Linux ADDITIONALLY needs generic-family compensation - (``_LINUX_GENERIC_FONT_FACTORS``) because DejaVu/Liberation generics render - wider/narrower than the Windows widths the spoofed profile claims; on - Windows/mac the generics already render native, so no generic compensation - is applied — only the named-font factors. - """ - if not profile_metrics: - return "" - # profile_metrics arrives as "name|,..." (host-independent - # absolute widths, e.g. "arial|2256.7"). We pass them through UNCHANGED: the C++ - # hook treats a value >= 10 as an ABSOLUTE target measureText width and divides it - # by the host's own collapse base (self-calibrating), so the SAME value yields the - # exact Windows width on Windows, Linux AND macOS. No per-OS division here. - metrics = profile_metrics - # Linux ADDITIONALLY needs CSS-generic compensation (DejaVu/Liberation generics - # render wider/narrower than Windows). These are multiplicative FACTORS (< 10), - # calibrated to FP Pro's font_preferences probe; the C++ hook treats values < 10 as - # factors. Generics bypass the whitelist/collapse so they are NOT self-calibrated. - # Windows/mac generics render native -> no compensation. - if sys.platform.startswith("linux"): - return _LINUX_GENERIC_FONT_FACTORS + metrics - return metrics - - def translate_profile_to_prefs( profile: Profile, *, @@ -606,15 +559,37 @@ def translate_profile_to_prefs( prefs["media.mediasource.webm.enabled"] = profile.codec.mediasource_webm prefs["media.mediasource.mp4.enabled"] = profile.codec.mediasource_mp4 - # Fonts - prefs["zoom.stealth.font.whitelist"] = ",".join(profile.fonts) - prefs["zoom.stealth.font.metrics"] = _font_metrics_for_platform( - profile._raw.get("font_metrics", "") or "" - ) - # Reference string the binary sums the collapsed font's advances over to - # self-calibrate the per-host collapse base (turns the absolute widths in - # `metrics` into the right factor on any OS). See _font_metrics_for_platform. - prefs["zoom.stealth.font.calib_ref"] = _FONT_CALIB_REF + # Fonts — real bundled fonts (no collapse). The binary ships the real + # Windows font files in /fonts and loads them via MOZ_BUNDLED_FONTS, so + # glyphs are genuine on every host. We expose this profile's family set via + # the per-profile fontlist, which the binary applies to the native system + # font allow-list AT CONSTRUCTION (no runtime rebuild → no scan stall), and + # force the system-ui generic to Segoe UI. profile.fonts is the _fpforge + # sample (core always + a conditioned optional subset). Per-profile metric + # uniqueness comes from the shared fpp.hw_seed jitter in the HarfBuzz shaper + # (set with the other fpp prefs), not from fabricated widths. + prefs["zoom.stealth.font.fontlist"] = ",".join(profile.fonts) + prefs["zoom.stealth.font.system_ui"] = "Segoe UI" + + # Activate the bundled real-Windows fonts (MOZ_BUNDLED_FONTS / /fonts). + prefs["gfx.bundled-fonts.activate"] = 1 + # Point the CSS generics at Windows defaults. On a Windows HOST Firefox's + # built-in name-lists already resolve to these (and they're in the fontlist + # so they survive the allow-list); but on a non-Windows host (Linux/Mac) the + # built-in defaults name host fonts (DejaVu/Liberation/…) which the allow-list + # hides — so the generics would collapse. Setting them explicitly keeps the + # generics resolving to the bundled Windows families on EVERY host (system-ui + # is forced to Segoe UI by the C++ hook above, so it is not listed here). + prefs["font.name-list.serif.x-western"] = "Times New Roman" + prefs["font.name-list.sans-serif.x-western"] = "Arial" + prefs["font.name-list.monospace.x-western"] = "Consolas" + prefs["font.name-list.sans-serif.ja"] = "Yu Gothic UI" + prefs["font.name-list.serif.ja"] = "Yu Gothic UI" + prefs["font.name-list.sans-serif.ko"] = "Malgun Gothic" + prefs["font.name-list.serif.ko"] = "Malgun Gothic" + prefs["font.name-list.sans-serif.zh-CN"] = "Microsoft YaHei UI" + prefs["font.name-list.sans-serif.zh-TW"] = "Microsoft JhengHei UI" + prefs["font.name-list.sans-serif.zh-HK"] = "Microsoft JhengHei UI" # UI / dark mode + Windows colors palette (only when light theme). prefs["ui.systemUsesDarkTheme"] = int(profile.dark_theme) @@ -628,6 +603,15 @@ def translate_profile_to_prefs( prefs["general.useragent.locale"] = lang prefs["intl.locale.requested"] = lang prefs["privacy.spoof_english"] = 0 + # juggler.locale.override seeds the BrowsingContext LanguageOverride FIELD in + # the parent process (BrowsingContext::Attach), whose DidSet drives BOTH + # navigator.languages (the full list) AND the realm Intl default locale (the + # primary tag it extracts) — so Intl.DateTimeFormat / NumberFormat / + # toLocaleString follow the locale, not just the Accept-Language header. Seed + # it with the full Accept-Language list so navigator.languages stays the + # desktop-default 2 elements (["fr-FR","fr"]); the C++ DidSet takes "fr-FR" + # for Intl. Mirrors juggler.timezone.override; the SOLE source of truth. + prefs["juggler.locale.override"] = _accept_language(locale) if timezone: # juggler.timezone.override is the SOLE source of truth read by the C++ diff --git a/tests/test_canvas_render_stealth.py b/tests/test_canvas_render_stealth.py index e0c7ba1..838401a 100644 --- a/tests/test_canvas_render_stealth.py +++ b/tests/test_canvas_render_stealth.py @@ -1,19 +1,17 @@ -"""Canvas / WebGL render-stealth regression tests (binary-level, 2026-06-18). +"""Canvas / WebGL render-stealth regression test (binary-level, 2026-06-18). -Two patched-binary behaviours that must never regress, both needed for the +Guards a patched-binary behaviour that must never regress, needed for the fingerprint to look like a real Windows browser to FOSS detectors (CreepJS, -FingerprintJS, BrowserLeaks) and to image-dedup font probes / fixed-hash -reference checks: +FingerprintJS, BrowserLeaks) and fixed-hash reference checks: - 1. Per-font canvas distinctness — whitelisted named fonts are backed by the - host list-head glyphs (so measureText widths are host-independent), but each - must still rasterise to a DISTINCT image at tiny probe sizes. Otherwise an - image-dedup font probe collapses them to ~1 name and the reported font set - looks fabricated. (C++: per-font sub-pixel draw offset in DrawText.) - 2. Solid WebGL readback purity under render-noise — a fixed solid-colour WebGL - readback (which reference checks hash against a universal constant) must stay - byte-exact even with per-seed render-noise enabled, while high-entropy - renders stay noised. (C++: render-noise skips near-uniform WebGL readbacks.) + Solid WebGL readback purity under render-noise — a fixed solid-colour WebGL + readback (which reference checks hash against a universal constant) must stay + byte-exact even with per-seed render-noise enabled, while high-entropy + renders stay noised. (C++: render-noise skips near-uniform WebGL readbacks.) + +(Per-font canvas distinctness is no longer guarded here: the font-collapse + +per-font draw offset were removed on 2026-06-20 in favour of real bundled +Windows fonts, which rasterise to distinct images by nature.) Runs against about:blank, no network/proxy. Part of the e2e release gate. Run: pytest tests/test_canvas_render_stealth.py -m e2e -v @@ -23,34 +21,6 @@ from __future__ import annotations import pytest from invisible_playwright import InvisiblePlaywright -from invisible_playwright import prefs as _prefs -from invisible_playwright._fpforge import generate_profile - -# Diverse-codepoint probe string — maximises per-font rendering differences, the -# way an image-dedup font probe drives a tiny canvas. -_PROBE = ("\U0001f6cd1>'`amlρiюदे來˦" - "\U00025578に◌\U0002003eԩԨ") - - -def _named_fonts(limit: int = 30) -> list[str]: - """The whitelisted NAMED fonts (absolute collapse-target width >= 10) for the - test seed — these are the ones the per-font offset must keep distinct.""" - prof = generate_profile(42) - metrics = _prefs._font_metrics_for_platform(prof._raw.get("font_metrics", "") or "") - out: list[str] = [] - for ent in metrics.split(","): - name, _, val = ent.partition("|") - if not val: - continue - try: - if float(val.replace("px", "")) >= 10.0: - out.append(name) - except ValueError: - pass - return out[:limit] - - -_FONTS = _named_fonts() @pytest.fixture(scope="module") @@ -68,34 +38,6 @@ def noised_page(firefox_binary): yield p -@pytest.mark.e2e -def test_named_fonts_render_distinct_canvas_images(noised_page): - """Each whitelisted named font must produce a DISTINCT tiny-canvas image so an - image-dedup font probe keeps every name. Regression: without the per-font draw - offset all whitelisted fonts share the list-head glyphs -> ~1-2 distinct - images -> degenerate detected-font set.""" - assert len(_FONTS) >= 10, "expected a non-trivial named-font whitelist to probe" - distinct = noised_page.evaluate( - """(args) => { - const [fonts, V] = args; - const c = document.createElement('canvas'); c.width = 90; c.height = 12; - const d = c.getContext('2d'); d.fillStyle = 'red'; - const seen = new Set(); - for (const f of fonts) { - d.clearRect(0, 0, 90, 12); - d.font = 'normal 4px "' + f + '"'; - d.fillText(V, 5, 8); - seen.add(c.toDataURL()); - } - return seen.size; - }""", - [_FONTS, _PROBE], - ) - # broken (offset removed) collapses to ~1-2; require nearly all distinct. - assert distinct >= len(_FONTS) - 2, \ - f"only {distinct}/{len(_FONTS)} distinct font images (per-font offset regressed?)" - - @pytest.mark.e2e def test_solid_webgl_readback_stays_pure_under_noise(noised_page): """A solid-colour WebGL readback must remain byte-exact (only {0,255}) with diff --git a/tests/test_integration.py b/tests/test_integration.py index 4ba29c2..3e4ad81 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -42,8 +42,8 @@ _REQUIRED_PREFS_KEYS = ( "media.encoder.webm.enabled", "media.mediasource.webm.enabled", "media.mediasource.mp4.enabled", - "zoom.stealth.font.whitelist", - "zoom.stealth.font.metrics", + "zoom.stealth.font.fontlist", + "zoom.stealth.font.system_ui", "ui.systemUsesDarkTheme", "intl.accept_languages", "general.useragent.locale", @@ -197,23 +197,26 @@ def test_http_proxy_returned_unchanged_no_socks_mutations(): # ────────────────────────────────────────────────────────────────────── -# IT7: profile.fonts reaches prefs as a comma-joined whitelist +# IT7: profile.fonts reaches prefs as a comma-joined fontlist # ────────────────────────────────────────────────────────────────────── @pytest.mark.integration -def test_profile_fonts_propagate_to_prefs_whitelist(): +def test_profile_fonts_propagate_to_prefs_fontlist(): """IT7 — every font in ``profile.fonts`` appears in the comma-joined - ``zoom.stealth.font.whitelist`` pref, in order.""" + ``zoom.stealth.font.fontlist`` pref, in order. The binary applies this + list to the native system font allow-list at construction; system-ui is + forced to Segoe UI.""" profile = generate_profile(seed=42) prefs = translate_profile_to_prefs(profile) assert profile.fonts, "fixture seed=42 produced empty fonts list" - whitelist = prefs["zoom.stealth.font.whitelist"] - assert isinstance(whitelist, str) - assert whitelist == ",".join(profile.fonts) + fontlist = prefs["zoom.stealth.font.fontlist"] + assert isinstance(fontlist, str) + assert fontlist == ",".join(profile.fonts) for font in profile.fonts: - assert font in whitelist + assert font in fontlist + assert prefs["zoom.stealth.font.system_ui"] == "Segoe UI" # ────────────────────────────────────────────────────────────────────── @@ -357,23 +360,3 @@ def test_linux_msaa_pin_propagates_through_pipeline(monkeypatch): assert prefs["webgl.msaa-force"] is True -# ────────────────────────────────────────────────────────────────────── -# IT13 (extra): Linux font metrics receive the GTK/DejaVu compensation -# block. End-to-end check that ``_LINUX_GENERIC_FONT_FACTORS`` is -# prepended to the per-font metrics string sampled from the profile. -# ────────────────────────────────────────────────────────────────────── - - -@pytest.mark.integration -def test_linux_font_metrics_include_generic_factors(monkeypatch): - """IT13 — on Linux the font metrics pref starts with the generic - width-scale factors (GTK/DejaVu compensation) so glyph widths match - Windows. Without this, Linux sessions leak via metric drift.""" - from invisible_playwright.prefs import _LINUX_GENERIC_FONT_FACTORS - - monkeypatch.setattr(sys, "platform", "linux") - profile = generate_profile(seed=42) - prefs = translate_profile_to_prefs(profile) - - metrics = prefs["zoom.stealth.font.metrics"] - assert metrics.startswith(_LINUX_GENERIC_FONT_FACTORS) diff --git a/tests/test_launcher_helpers.py b/tests/test_launcher_helpers.py index 590736a..1847001 100644 --- a/tests/test_launcher_helpers.py +++ b/tests/test_launcher_helpers.py @@ -181,7 +181,7 @@ def test_default_context_omits_locale_when_empty(): def test_build_env_injects_webrtc_egress_when_discovered(): ip = InvisiblePlaywright(seed=42) ip._webrtc_egress_ip = "203.0.113.9" # what __enter__ resolves behind a proxy - env = ip._build_env() + env = ip._build_env({}) assert env["STEALTHFOX_WEBRTC_PUBLIC_IP"] == "203.0.113.9" assert env["STEALTHFOX_WEBRTC_DISABLE_IPV6"] == "1" @@ -191,7 +191,7 @@ def test_build_env_no_webrtc_keys_without_proxy(monkeypatch): monkeypatch.delenv("STEALTHFOX_WEBRTC_PUBLIC_IP", raising=False) ip = InvisiblePlaywright(seed=42) ip._webrtc_egress_ip = None # no proxy → real STUN already truthful - env = ip._build_env() + env = ip._build_env({}) assert "STEALTHFOX_WEBRTC_PUBLIC_IP" not in env assert "STEALTHFOX_WEBRTC_DISABLE_IPV6" not in env @@ -201,6 +201,29 @@ def test_build_env_caller_env_override_wins(monkeypatch): monkeypatch.setenv("STEALTHFOX_WEBRTC_PUBLIC_IP", "198.51.100.5") ip = InvisiblePlaywright(seed=42) ip._webrtc_egress_ip = "203.0.113.9" # auto-discovered - env = ip._build_env() + env = ip._build_env({}) assert env["STEALTHFOX_WEBRTC_PUBLIC_IP"] == "198.51.100.5" # caller wins assert env["STEALTHFOX_WEBRTC_DISABLE_IPV6"] == "1" + + +@pytest.mark.unit +def test_build_env_injects_font_list_and_system_ui(): + # The binary reads these at the gfxPlatformFontList constructor (process + # start); Playwright delivers firefox_user_prefs over juggler AFTER start, so + # the env var is the only at-construction channel. Without it host fonts leak + # on Linux/macOS (the wrapper's pref-only delivery was a cross-OS gap). + ip = InvisiblePlaywright(seed=42) + env = ip._build_env({ + "zoom.stealth.font.fontlist": "arial,calibri,segoe ui", + "zoom.stealth.font.system_ui": "Segoe UI", + }) + assert env["STEALTHFOX_FONTLIST"] == "arial,calibri,segoe ui" + assert env["STEALTHFOX_SYSTEMUI"] == "Segoe UI" + + +@pytest.mark.unit +def test_build_env_no_font_keys_when_absent(): + ip = InvisiblePlaywright(seed=42) + env = ip._build_env({}) + assert "STEALTHFOX_FONTLIST" not in env + assert "STEALTHFOX_SYSTEMUI" not in env diff --git a/tests/test_prefs.py b/tests/test_prefs.py index 609841b..2cec2c2 100644 --- a/tests/test_prefs.py +++ b/tests/test_prefs.py @@ -5,9 +5,7 @@ import pytest from invisible_playwright._fpforge import generate_profile from invisible_playwright.prefs import ( - _LINUX_GENERIC_FONT_FACTORS, _accept_language, - _font_metrics_for_platform, _WIN_LIGHT_COLORS, translate_profile_to_prefs, ) @@ -82,29 +80,6 @@ def test_accept_language_underscore_normalized(): assert _accept_language("pt_BR") == "pt-BR, pt" -# ────────────────────────────────────────────────────────────────────── -# _font_metrics_for_platform -# ────────────────────────────────────────────────────────────────────── - - -@pytest.mark.unit -def test_font_metrics_windows_applies_named_factors(monkeypatch): - # FM2: Windows/mac apply the per-NAMED-font factors (so whitelisted named - # families don't collapse to the list-head width on the canvas measureText - # path), but WITHOUT the Linux generic-family compensation (generics bypass - # the whitelist and render native there). - monkeypatch.setattr(sys, "platform", "win32") - out = _font_metrics_for_platform("Arial|1.0,Verdana|0.9,") - assert out == "Arial|1.0,Verdana|0.9," - assert "sans-serif|" not in out # no generic compensation on Windows - - -@pytest.mark.unit -def test_font_metrics_empty_input_returns_empty(): - # FM3: Empty input always returns "" regardless of platform. - assert _font_metrics_for_platform("") == "" - - # ────────────────────────────────────────────────────────────────────── # Platform-specific GPU / MSAA (Windows) # ────────────────────────────────────────────────────────────────────── @@ -385,34 +360,6 @@ def test_lan_ip_seed_zero_has_no_zero_octets(): # ────────────────────────────────────────────────────────────────────── -@pytest.mark.unit -def test_font_metrics_linux_prepends_generic_factors(monkeypatch): - # FM1: Linux prepends the GTK/DejaVu compensation block to the - # per-font metrics string sampled from the profile. - monkeypatch.setattr(sys, "platform", "linux") - out = _font_metrics_for_platform("Arial|1.0,Verdana|0.9,") - assert out.startswith(_LINUX_GENERIC_FONT_FACTORS) - assert out.endswith("Arial|1.0,Verdana|0.9,") - - -@pytest.mark.unit -def test_font_metrics_linux_empty_input_returns_empty(monkeypatch): - # FM1b: even on Linux, empty profile metrics short-circuits before - # the prepend so we never emit a metrics pref containing only the - # generic block (which would surface as a tampering signal). - monkeypatch.setattr(sys, "platform", "linux") - assert _font_metrics_for_platform("") == "" - - -@pytest.mark.unit -def test_font_metrics_linux2_variant_uses_linux_branch(monkeypatch): - # FM1c: ``sys.platform`` can be ``linux2`` on older Pythons / odd - # WSL builds. ``startswith("linux")`` accepts both. - monkeypatch.setattr(sys, "platform", "linux2") - out = _font_metrics_for_platform("Verdana|0.9,") - assert out.startswith(_LINUX_GENERIC_FONT_FACTORS) - - @pytest.mark.unit def test_gpu_renderer_set_from_profile_on_linux(monkeypatch): # PG1: on Linux (as on EVERY host) we apply the camoufox-derived Windows-ANGLE GPU persona, diff --git a/tests/test_sampler.py b/tests/test_sampler.py index b201c7f..e9af219 100644 --- a/tests/test_sampler.py +++ b/tests/test_sampler.py @@ -216,12 +216,15 @@ def test_screen_tier_4200x2000_is_ultrawide_via_width_branch(): # ── derive_font_prefs / derive_font_whitelist ─────────────────────────── @pytest.mark.unit -def test_derive_font_prefs_returns_whitelist_and_metrics_keys(): - """FP1 [HAPPY]: result has the two expected string keys.""" +def test_derive_font_prefs_returns_whitelist_key(): + """FP1 [HAPPY]: result is a single-key dict with the font family list. + + The per-family ``metrics`` string was removed on 2026-06-20: fonts now + render from the bundled real Windows files (genuine widths) and per-session + metric uniqueness comes from the HarfBuzz jitter, not fabricated factors.""" out = derive_font_prefs("integrated_modern", random.Random(42)) - assert set(out.keys()) == {"whitelist", "metrics"} + assert set(out.keys()) == {"whitelist"} assert isinstance(out["whitelist"], str) - assert isinstance(out["metrics"], str) @pytest.mark.unit @@ -249,15 +252,6 @@ def test_derive_font_prefs_unknown_class_falls_back_to_integrated_modern(): assert fallback == expected -@pytest.mark.unit -def test_derive_font_prefs_metrics_and_whitelist_are_coherent(): - """FP5 [ECP]: every name in whitelist has a metrics entry and vice versa.""" - out = derive_font_prefs("mid_range", random.Random(99)) - wl_names = out["whitelist"].split(",") - metrics_names = [s.split("|", 1)[0] for s in out["metrics"].split(",")] - assert wl_names == metrics_names - - @pytest.mark.unit def test_derive_font_prefs_whitelist_alphabetically_sorted(): """FP6 [ECP]: whitelist names are sorted (ordering invariant for stable dedup).""" @@ -280,10 +274,12 @@ def test_derive_font_whitelist_legacy_shim_matches_dict_form(): # machine never lacks them, so a session that drops one advertises a font set that # doesn't match any real Windows profile (image-dedup font probes then report a # short/degenerate name list → server-side OS-font-set checks fail). Calibri in -# particular sat in `optional` (a bug); these five caused the detected set to come -# up short on some seeds. Regression guard for the 2026-06-18 optional→core move. +# particular sat in `optional` (a bug); these caused the detected set to come up +# short on some seeds. Regression guard for the 2026-06-18 optional→core move. +# NB: the exact Win11 family is "franklin gothic medium" (there is no bare +# "franklin gothic" family); the 2026-06-20 bundle reconciliation uses real names. _STANDARD_WINDOWS_FONTS = [ - "calibri", "franklin gothic", "gadugi", "javanese text", "myanmar text", + "calibri", "franklin gothic medium", "gadugi", "javanese text", "myanmar text", ] _ALL_GPU_CLASSES = [ "integrated_old", "integrated_modern", "mid_range", "high_end", @@ -294,16 +290,14 @@ _ALL_GPU_CLASSES = [ @pytest.mark.unit @pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) def test_standard_windows_fonts_always_present_every_class_and_seed(gpu_class): - """FP7 [regression]: the standard-Windows fonts appear in BOTH whitelist and - metrics for every gpu_class across many seeds (i.e. they are core, not - profile-optional). Guards against a standard font silently becoming optional.""" + """FP7 [regression]: the standard-Windows fonts appear in the whitelist for + every gpu_class across many seeds (i.e. they are core, not profile-optional). + Guards against a standard font silently becoming optional.""" for seed in range(40): out = derive_font_prefs(gpu_class, random.Random(seed)) wl = set(out["whitelist"].split(",")) - metrics_names = {s.split("|", 1)[0] for s in out["metrics"].split(",")} for font in _STANDARD_WINDOWS_FONTS: assert font in wl, f"{font!r} missing from whitelist (class={gpu_class}, seed={seed})" - assert font in metrics_names, f"{font!r} missing from metrics (class={gpu_class}, seed={seed})" @pytest.mark.unit @@ -320,33 +314,13 @@ def test_standard_windows_fonts_are_in_core_pool(): @pytest.mark.unit @pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) def test_derive_font_prefs_no_duplicate_families(gpu_class): - """FP9 [regression]: no family appears twice in whitelist/metrics, even when a + """FP9 [regression]: no family appears twice in the whitelist, even when a profile's optional list also names a core font. Guards the dedup in - derive_font_prefs (a duplicate family would emit a malformed pref pair).""" + derive_font_prefs (a duplicate family would emit a malformed list).""" for seed in range(30): out = derive_font_prefs(gpu_class, random.Random(seed)) wl = out["whitelist"].split(",") - metrics_names = [s.split("|", 1)[0] for s in out["metrics"].split(",")] assert len(wl) == len(set(wl)), f"duplicate in whitelist (class={gpu_class}, seed={seed})" - assert len(metrics_names) == len(set(metrics_names)), \ - f"duplicate in metrics (class={gpu_class}, seed={seed})" - - -@pytest.mark.unit -@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) -def test_derive_font_prefs_named_fonts_emit_absolute_widths(gpu_class): - """FP10 [regression]: every emitted metrics value is a positive number; named - (non-generic) fonts carry an ABSOLUTE collapse-target width (>= 10), which the - binary self-calibrates per host. A value < 10 here would mean a font slipped - through as a bare multiplicative factor and would render at the wrong width.""" - out = derive_font_prefs(gpu_class, random.Random(3)) - for entry in out["metrics"].split(","): - name, _, val = entry.partition("|") - v = float(val.replace("px", "")) - assert v > 0.0, f"non-positive metrics value for {name!r}" - # the standard named fonts must be absolute (collapse-target) widths - if name in _STANDARD_WINDOWS_FONTS: - assert v >= 10.0, f"{name!r} emitted as factor {v} (<10), expected absolute width" # ── Forge / sample ────────────────────────────────────────────────────── @@ -364,7 +338,7 @@ _EXPECTED_KEYS = { "av1_enabled", "webm_encoder_enabled", "mediasource_webm", "mediasource_mp4", "webspeech_synth", "storage_quota_mb", "dark_theme", - "font_whitelist", "font_metrics", + "font_whitelist", } @@ -453,10 +427,9 @@ def test_forge_sample_avail_h_defaults_to_h_minus_40_when_missing(monkeypatch): @pytest.mark.unit def test_forge_sample_includes_font_keys(): - """FS9 [ECP]: font_whitelist + font_metrics present and non-empty.""" + """FS9 [ECP]: font_whitelist present and non-empty (the joined family list).""" out = sample(42) assert out["font_whitelist"] - assert out["font_metrics"] assert "," in out["font_whitelist"] # at least the core fonts joined From 2bc52f4a610d33dad5bb50000616d0fcf819ca6a Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 24 Jun 2026 09:33:45 +0200 Subject: [PATCH 05/84] Pin firefox-13: geo-aware locale/Intl + Windows font bundle + audio gate firefox-13 ships the bundled Windows fonts, makes navigator.languages / Accept-Language / the Intl locale all follow the proxy country, and gates the audio fingerprint noise off. The prefs.py change that emits the new font/locale prefs needs this binary, so the bump and that change land together. --- src/invisible_playwright/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/invisible_playwright/constants.py b/src/invisible_playwright/constants.py index 731d7ce..ea588eb 100644 --- a/src/invisible_playwright/constants.py +++ b/src/invisible_playwright/constants.py @@ -7,7 +7,7 @@ bugfixes don't force a multi-hour Firefox rebuild. from __future__ import annotations # Bump this when a new patched Firefox build is released on GitHub. -BINARY_VERSION: str = "firefox-12" +BINARY_VERSION: str = "firefox-13" # Releases known to be broken — ensure_binary() refuses them with a clear error # instead of handing the user an unusable binary. firefox-8 was packaged without From 74b674516b2aef6bca4c590c8dda3d2c8f5a92df Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 24 Jun 2026 09:37:11 +0200 Subject: [PATCH 06/84] fix(fonts): core pool uses the real Win11 family "franklin gothic medium" The pool had the bare "franklin gothic", which isn't a real Win11 family and wouldn't match the bundled franklingothic_x.ttf, so the always-present standard fonts test failed and the family could drop off the whitelist. Use the real name (the bundle reconciliation already maps it). --- src/invisible_playwright/_fpforge/data/font_pool.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/invisible_playwright/_fpforge/data/font_pool.json b/src/invisible_playwright/_fpforge/data/font_pool.json index 4104fba..880f410 100644 --- a/src/invisible_playwright/_fpforge/data/font_pool.json +++ b/src/invisible_playwright/_fpforge/data/font_pool.json @@ -34,7 +34,7 @@ "name": "ebrima" }, { - "name": "franklin gothic" + "name": "franklin gothic medium" }, { "name": "gabriola" From 64641db82ea688eb198858f8788277ef25b32553 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:07:07 +0200 Subject: [PATCH 07/84] chore: update stealth detection issue template - add Firefox revision field - replace verbose verdict field with reproduction script - rename snippet label to Reproduction script --- .../ISSUE_TEMPLATE/03-stealth-detection.yml | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/03-stealth-detection.yml b/.github/ISSUE_TEMPLATE/03-stealth-detection.yml index b2c5e1d..c069570 100644 --- a/.github/ISSUE_TEMPLATE/03-stealth-detection.yml +++ b/.github/ISSUE_TEMPLATE/03-stealth-detection.yml @@ -14,10 +14,20 @@ body: id: version attributes: label: Version + description: Output of `python -m invisible_playwright version`. placeholder: 0.1.7 (binary firefox-7) validations: required: true + - type: input + id: firefox_rev + attributes: + label: Firefox revision + description: The `firefox-N` tag the binary was built from (shown in the version output above). + placeholder: firefox-7 + validations: + required: true + - type: dropdown id: os attributes: @@ -63,21 +73,6 @@ body: validations: required: true - - type: textarea - id: scores - attributes: - label: Detector verdict - description: Paste the relevant flags / scores verbatim. For Fingerprint Pro paste `bot`, `vpn`, `virtual_machine`, `tampering*`, `vm_ml_score`, `suspect_score`. For CreepJS the headless / lies / trust scores. For reCAPTCHA v3 the score number. - render: text - placeholder: | - bot: bad - vpn: true - virtual_machine: true - vm_ml_score: 0.74 - suspect_score: 22 - validations: - required: true - - type: textarea id: screenshot attributes: @@ -89,8 +84,8 @@ body: - type: textarea id: snippet attributes: - label: How you launched - description: The InvisiblePlaywright launch + navigation that produced the result above. Redact creds. + label: Reproduction script + description: A complete, runnable script that opens the detector and produces the result above. Redact creds. render: python value: | from invisible_playwright import InvisiblePlaywright @@ -99,6 +94,7 @@ body: ctx = browser.new_context() page = ctx.new_page() page.goto("https://demo.fingerprint.com/playground") + # add any extra steps needed to reach the flagged result validations: required: true From b00bd74a9e89cd500facca4e2042e722740e7a30 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:08:24 +0200 Subject: [PATCH 08/84] chore: remove firefox source bug link from issue config --- .github/ISSUE_TEMPLATE/config.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 44f31be..56a3411 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,9 +3,6 @@ contact_links: - name: Security vulnerability url: https://github.com/feder-cr/invisible_playwright/security/advisories/new about: Report a security issue privately. Do NOT open a public issue. - - name: Bug in the patched Firefox source (C++, IDL, Juggler JS) - url: https://github.com/feder-cr/invisible_firefox/issues - about: Source-level patches in the Firefox fork go in the invisible_firefox repo. Detection results (FpJS, CreepJS, etc.) use the stealth detection template here. - name: Question or general discussion url: https://github.com/feder-cr/invisible_playwright/discussions about: Usage questions, ideas, chat. Bugs and features still go in issues. From 01d56601aeaae3e3d6b1c56e83c26a36a5bee28d Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:14:05 +0200 Subject: [PATCH 09/84] chore: remove feature request issue template --- .github/ISSUE_TEMPLATE/feature_request.yml | 47 ---------------------- 1 file changed, 47 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 6693ab7..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Feature request -description: Suggest a new feature or improvement -title: "[feature] " -labels: ["enhancement"] -body: - - type: markdown - attributes: - value: | - Thanks for the suggestion! Please check that: - - Your idea is **in scope** for this repo (the Python wrapper, sampler, CLI, packaging). - - Changes to the patched Firefox C++ source belong at [feder-cr/firefox-stealth](https://github.com/feder-cr/firefox-stealth) instead. - - You have searched [existing issues](https://github.com/feder-cr/invisible_playwright/issues?q=is%3Aissue) for similar requests. - - type: textarea - id: problem - attributes: - label: Problem - description: What problem does this solve? What can't you currently do, or what is awkward today? - validations: - required: true - - type: textarea - id: proposal - attributes: - label: Proposed solution - description: How would the feature work? API sketches, CLI examples, or pseudocode welcome. - validations: - required: true - - type: textarea - id: alternatives - attributes: - label: Alternatives considered - description: Other approaches you thought about and why they fall short. - validations: - required: false - - type: textarea - id: context - attributes: - label: Additional context - description: Links to related issues, prior art in other libraries, screenshots, etc. - validations: - required: false - - type: checkboxes - id: contribute - attributes: - label: Are you willing to contribute? - options: - - label: I'd be willing to open a PR for this if accepted. - required: false From 929c30219f7b2d3bd554fc12061752cab4a5b877 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:15:08 +0200 Subject: [PATCH 10/84] chore: remove security vulnerability contact link from issue config --- .github/ISSUE_TEMPLATE/config.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 56a3411..84692c8 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Security vulnerability - url: https://github.com/feder-cr/invisible_playwright/security/advisories/new - about: Report a security issue privately. Do NOT open a public issue. - name: Question or general discussion url: https://github.com/feder-cr/invisible_playwright/discussions about: Usage questions, ideas, chat. Bugs and features still go in issues. From 82eb22634eef66b51b38654599c8eb546be652e7 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:16:47 +0200 Subject: [PATCH 11/84] chore: remove LLM-style phrasing from issue templates --- .github/ISSUE_TEMPLATE/01-launch-failure.yml | 2 +- .github/ISSUE_TEMPLATE/02-site-or-action-bug.yml | 2 +- .github/ISSUE_TEMPLATE/03-stealth-detection.yml | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-launch-failure.yml b/.github/ISSUE_TEMPLATE/01-launch-failure.yml index 2c5451f..ef4cae0 100644 --- a/.github/ISSUE_TEMPLATE/01-launch-failure.yml +++ b/.github/ISSUE_TEMPLATE/01-launch-failure.yml @@ -72,7 +72,7 @@ body: id: logs attributes: label: Extra logs - description: Output of `DEBUG=pw:browser* python yourscript.py 2>&1`. Optional but speeds things up. + description: Output of `DEBUG=pw:browser* python yourscript.py 2>&1`. Optional. render: text validations: required: false diff --git a/.github/ISSUE_TEMPLATE/02-site-or-action-bug.yml b/.github/ISSUE_TEMPLATE/02-site-or-action-bug.yml index 6c38de6..9061150 100644 --- a/.github/ISSUE_TEMPLATE/02-site-or-action-bug.yml +++ b/.github/ISSUE_TEMPLATE/02-site-or-action-bug.yml @@ -88,7 +88,7 @@ body: id: snippet attributes: label: Runnable reproduction - description: A complete snippet we can copy, paste, run. Stub creds with placeholders, keep everything else literal. + description: Runnable. Stub creds, keep everything else literal. render: python value: | from invisible_playwright import InvisiblePlaywright diff --git a/.github/ISSUE_TEMPLATE/03-stealth-detection.yml b/.github/ISSUE_TEMPLATE/03-stealth-detection.yml index c069570..4772a21 100644 --- a/.github/ISSUE_TEMPLATE/03-stealth-detection.yml +++ b/.github/ISSUE_TEMPLATE/03-stealth-detection.yml @@ -77,7 +77,7 @@ body: id: screenshot attributes: label: Screenshot of the detector result - description: Drag-drop a screenshot of the detector page so we see what you see. + description: Screenshot of the detector result. validations: required: true @@ -85,7 +85,7 @@ body: id: snippet attributes: label: Reproduction script - description: A complete, runnable script that opens the detector and produces the result above. Redact creds. + description: Runnable. Redact creds. render: python value: | from invisible_playwright import InvisiblePlaywright @@ -102,7 +102,7 @@ body: id: expected attributes: label: What you expected - description: Most detectors will never give a perfect score for any browser. Tell us what threshold you'd accept (e.g. bot=not_detected, vm_ml_score < 0.3). + description: "e.g. bot=not_detected, vm_ml_score < 0.3" validations: required: true @@ -110,7 +110,7 @@ body: id: full_report attributes: label: Full detector response - description: For Fingerprint Pro paste the JSON from /api/event/v4/ if you have it. For CreepJS paste the full Smart Signals block. Optional but speeds things up a lot. + description: "FP Pro: JSON from /api/event/v4/. CreepJS: Smart Signals block. Optional." render: json validations: required: false From 02b5f397ad27f28f0b63a91f8f80a24864fba1fc Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:22:39 +0200 Subject: [PATCH 12/84] docs: rewrite SECURITY.md, add disclaimer, remove LLM language --- SECURITY.md | 51 ++++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 83959a2..e740df4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,8 +1,12 @@ # Security Policy +## Disclaimer + +This is an educational project. It is provided as-is, with no warranties. The maintainers take no responsibility for how it is used. Use it at your own risk and in compliance with the laws of your jurisdiction. + ## Supported versions -Only the latest release on `main` receives security fixes. +Only the latest release on `main` receives fixes. | Version | Supported | |---------|-----------| @@ -11,44 +15,33 @@ Only the latest release on `main` receives security fixes. ## Reporting a vulnerability -**Please do not report security issues via public GitHub issues, discussions, or pull requests.** +Do not report security issues via public GitHub issues, discussions, or pull requests. -Use one of the following private channels: +Send a report to `federico.elia.majo@gmail.com` with subject prefix `[security][invisible_playwright]`. -1. **GitHub Private Vulnerability Reporting** (preferred): open an advisory at https://github.com/feder-cr/invisible_playwright/security/advisories/new -2. **Email**: `federico.elia.majo@gmail.com` with subject prefix `[security][invisible_playwright]` +Include: -Please include: - -- A clear description of the issue and impact -- Steps to reproduce (minimal repro preferred) -- The version of `invisible_playwright` and OS where it was observed -- Whether you have a suggested fix - -## What to expect - -- Acknowledgement of your report within **7 days** -- An initial assessment and tracking issue (private) within **14 days** -- Coordinated disclosure: a fix and public advisory are released together; reporters are credited unless they prefer to remain anonymous +- What the issue is and what it affects +- Steps to reproduce +- Version of `invisible_playwright` and OS +- Fix suggestion if you have one ## Scope In scope: -- The Python wrapper `invisible_playwright` (this repo) -- The binary download/verification flow (SHA256 pinning, fetch endpoints) +- The Python wrapper (this repo) +- The binary download and verification flow - The CLI -Out of scope here (report to the relevant project): +Out of scope: -- Vulnerabilities in the patched Firefox C++ source — open a private report at [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox/security/advisories/new) -- Vulnerabilities in upstream Firefox / mozilla-central — report to Mozilla per https://www.mozilla.org/security/ -- Vulnerabilities in third-party dependencies (`playwright`, `requests`, etc.) — report to those projects directly +- Vulnerabilities in the patched Firefox source — report to [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox/security/advisories/new) +- Upstream Firefox / mozilla-central — report to Mozilla directly +- Third-party dependencies — report to those projects -## Out of scope +Not security issues: -- Reports that the browser is detected by a specific anti-bot service — open a regular GitHub issue, this is a product-quality concern, not a security one -- Social engineering of maintainers -- Denial of service requiring physical access or local privileged access - -Thank you for helping keep the project and its users safe. +- The browser being detected by an anti-bot service — open a regular issue +- Social engineering +- DoS requiring physical or local privileged access From 168179eb031d913762bd28c7c5323bb66f2bea0d Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:23:59 +0200 Subject: [PATCH 13/84] docs: remove LLM phrasing from README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0a75d61..eb1116f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) -## Why it's powerful +## How it works **Most other anti-detect browsers patch Chromium at the JavaScript level** - they override `navigator`, `WebGLRenderingContext.getParameter`, canvas APIs, and so on via injected scripts. This has two fatal problems: @@ -189,7 +189,7 @@ invisible_playwright clear-cache # remove all cached binaries ## Related projects -invisible_playwright takes a different angle than the major Firefox-hardening projects but stands on their shoulders: +Related projects that cover similar ground: - **[arkenfox/user.js](https://github.com/arkenfox/user.js)** - the canonical Firefox configuration for privacy/security hardening via prefs. Reading arkenfox is how you understand which `user.js` knobs matter; invisible_playwright goes further by patching the C++ source where prefs alone are insufficient (Canvas noise, WebGL parameter overrides, font whitelisting, WebRTC IP swap, DevTools detection bypass). - **[LibreWolf](https://librewolf.net)** - a Firefox fork bundled with sensible privacy defaults. Same audience, different distribution model: LibreWolf ships a configured Firefox binary, invisible_playwright ships source patches + a wrapper for automation. From 9b9e63972c4fdc969c2e361bcdf4876a8893e47e Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:25:03 +0200 Subject: [PATCH 14/84] docs: add educational disclaimer to README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index eb1116f..f4da376 100644 --- a/README.md +++ b/README.md @@ -200,3 +200,9 @@ Related projects that cover similar ground: ## License MIT - see [LICENSE](LICENSE). The patched Firefox binary is distributed under the MPL-2.0 (Firefox upstream license). The C++ patches against mozilla-central that produce that binary are at [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). + +--- + +## Disclaimer + +This project is for educational purposes only. It is provided as-is, with no warranties. I take no responsibility for how it is used. Use it at your own risk and in compliance with the laws of your jurisdiction. From 29df4e873ca2457a9e6ff714db8f49ae25c49f72 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:26:40 +0200 Subject: [PATCH 15/84] docs: shorten Chromium point in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4da376..3bb65cf 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ **Most other anti-detect browsers patch Chromium at the JavaScript level** - they override `navigator`, `WebGLRenderingContext.getParameter`, canvas APIs, and so on via injected scripts. This has two fatal problems: 1. **JS patches are detectable.** Anti-bots enumerate native function `.toString()`, check descriptor configurability, compare property enumeration order, watch for prototype mutations. Every patch leaves a fingerprint of its own. CreepJS has an entire battery of "lies detectors" built around this. -2. **Chromium itself is now suspect.** Residential-proxy bot traffic is overwhelmingly Chromium-based, so detectors weight anything Chromium-shaped as risky by default. Chromium-based forks inherit Chrome's open-source layers (BoringSSL, Blink, V8, ANGLE) cleanly, but they still cannot fully match Chrome in practice: Chrome ships closed-source components on top (Widevine, proprietary codecs, Google Update / Safe Browsing endpoints) that flip detectable JS feature flags and network signals, and forks lag Chrome's release cadence by days to weeks, leaving telltale version-specific behaviours that detectors lock onto. +2. **Chromium itself is now suspect.** Forks can’t fully match Chrome: it ships closed-source components (Widevine, proprietary codecs, Safe Browsing) that flip detectable JS flags and network signals, and forks lag Chrome’s release cadence, leaving version-specific tells detectors lock onto. **invisible_playwright patches Firefox at the C++ level.** The spoofed values come back out through the normal Gecko paths - there is no JS shim, no override, no `Object.defineProperty`. **From the page's point of view, the browser is just telling the truth.** Anti-bot lie-detectors have nothing to latch onto. From be940b008483295aa07b8121651f3c381c33b856 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:27:32 +0200 Subject: [PATCH 16/84] docs: remove preferences line from README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3bb65cf..3fd2319 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,6 @@ invisible_playwright spoofs **all the layers that matter, together, coherently**: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools detection, SOCKS5 auth, and the rest. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown of which C++ files are patched and why. -Everything is driven by preferences - no hardcoded values in the binary. You change one pref, you change the spoofed value. --- From 0b54484b633ab3503caa492a0fc5ee3b0bcd13ea Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:28:44 +0200 Subject: [PATCH 17/84] docs: remove auth implementation detail from README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3fd2319..3c27e70 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ with InvisiblePlaywright(proxy=proxy) as browser: ... ``` -Schemes supported: `socks5`, `socks4`, `http`, `https`. Auth works on all of them (SOCKS5 via patched `nsProtocolProxyService.cpp`, HTTP/HTTPS via Playwright). DNS is routed through the proxy by default, no local leak. +Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. ### Timezone From 567d921d5fd282c244710f57263591d677b4d148 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:30:01 +0200 Subject: [PATCH 18/84] docs: merge and trim C++ patch paragraphs --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 3c27e70..0a63c33 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,7 @@ 1. **JS patches are detectable.** Anti-bots enumerate native function `.toString()`, check descriptor configurability, compare property enumeration order, watch for prototype mutations. Every patch leaves a fingerprint of its own. CreepJS has an entire battery of "lies detectors" built around this. 2. **Chromium itself is now suspect.** Forks can’t fully match Chrome: it ships closed-source components (Widevine, proprietary codecs, Safe Browsing) that flip detectable JS flags and network signals, and forks lag Chrome’s release cadence, leaving version-specific tells detectors lock onto. -**invisible_playwright patches Firefox at the C++ level.** The spoofed values come back out through the normal Gecko paths - there is no JS shim, no override, no `Object.defineProperty`. **From the page's point of view, the browser is just telling the truth.** Anti-bot lie-detectors have nothing to latch onto. - -invisible_playwright spoofs **all the layers that matter, together, coherently**: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools detection, SOCKS5 auth, and the rest. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown of which C++ files are patched and why. +**invisible_playwright patches Firefox at the C++ level** — no JS shim, no `Object.defineProperty`. Spoofed values come out through normal Gecko paths: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full breakdown. --- From d35ac458a7eb3e1b31f83971d6501295d13f74f9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:31:47 +0200 Subject: [PATCH 19/84] docs: remove LLM phrasing throughout README --- README.md | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 0a63c33..74217c1 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ## How it compares -**CloakBrowser** ships a similar pitch for Chromium, but its binary is **closed source** (the source-level patches are not published, you only get the compiled output), and it still hits the Chromium reCAPTCHA ceiling. The commercial anti-detect browsers (**Multilogin**, **GoLogin**, AdsPower, Dolphin, Kameleo) are paid SaaS that overlay JS-layer spoofing on a patched Chromium. Managed profiles are nice but raw detection bypass sits below both Camoufox and us. +**CloakBrowser** is closed source (patches not published) and hits the Chromium reCAPTCHA ceiling. **Multilogin**, **GoLogin**, AdsPower, Dolphin, Kameleo are paid SaaS running JS-layer spoofing on a patched Chromium. | | invisible_playwright | Camoufox | CloakBrowser | Multilogin | |---|---|---|---|---| @@ -71,7 +71,7 @@ Supported platforms: **Windows x86_64**, **Linux x86_64 / arm64**, **macOS arm64 + with InvisiblePlaywright() as browser: ``` -Every session gets a unique, coherent fingerprint drawn from real-world Firefox telemetry (GPU / audio / fonts / ~400 other fields) and Bezier-curve mouse motion baked into the browser itself. +Every session gets a distinct fingerprint (GPU, audio, fonts, screen, ~400 fields) and Bezier-curve mouse motion. **Sync** ```python @@ -95,19 +95,7 @@ async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", The `browser` object is a `playwright.sync_api.Browser` / `playwright.async_api.Browser` - every Playwright method works as-is. ---- - -### Random fingerprint per session - -```python -from invisible_playwright import InvisiblePlaywright - -with InvisiblePlaywright() as browser: - page = browser.new_page() - page.goto("https://creepjs-api.web.app") -``` - -Every call samples a new coherent profile. Log the seed to reproduce interesting runs: +Log the seed to replay a run: ```python sf = InvisiblePlaywright() @@ -188,9 +176,9 @@ invisible_playwright clear-cache # remove all cached binaries Related projects that cover similar ground: -- **[arkenfox/user.js](https://github.com/arkenfox/user.js)** - the canonical Firefox configuration for privacy/security hardening via prefs. Reading arkenfox is how you understand which `user.js` knobs matter; invisible_playwright goes further by patching the C++ source where prefs alone are insufficient (Canvas noise, WebGL parameter overrides, font whitelisting, WebRTC IP swap, DevTools detection bypass). -- **[LibreWolf](https://librewolf.net)** - a Firefox fork bundled with sensible privacy defaults. Same audience, different distribution model: LibreWolf ships a configured Firefox binary, invisible_playwright ships source patches + a wrapper for automation. -- **[Camoufox](https://github.com/daijro/camoufox)** - the most well-known open-source anti-detect Firefox project. We share design goals on the fingerprint-spoofing side; the implementation approach differs (Camoufox patches a wider surface and ships its own fingerprint database, while invisible_playwright sticks closer to vanilla and drives spoofing from a Bayesian sampler). +- **[arkenfox/user.js](https://github.com/arkenfox/user.js)** - Firefox privacy hardening via prefs. invisible_playwright patches C++ where prefs are insufficient. +- **[LibreWolf](https://librewolf.net)** - Firefox fork with privacy defaults. LibreWolf ships a configured binary; invisible_playwright ships source patches + automation wrapper. +- **[Camoufox](https://github.com/daijro/camoufox)** - open-source anti-detect Firefox. Patches a wider surface and ships its own fingerprint database; invisible_playwright uses a Bayesian sampler. --- From 2184f6f3c296e5bedcf1539914b3a7d307ce9fe0 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 25 Jun 2026 04:32:32 +0200 Subject: [PATCH 20/84] docs: restore C++ paragraph content, remove em-dashes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74217c1..1403b61 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ 1. **JS patches are detectable.** Anti-bots enumerate native function `.toString()`, check descriptor configurability, compare property enumeration order, watch for prototype mutations. Every patch leaves a fingerprint of its own. CreepJS has an entire battery of "lies detectors" built around this. 2. **Chromium itself is now suspect.** Forks can’t fully match Chrome: it ships closed-source components (Widevine, proprietary codecs, Safe Browsing) that flip detectable JS flags and network signals, and forks lag Chrome’s release cadence, leaving version-specific tells detectors lock onto. -**invisible_playwright patches Firefox at the C++ level** — no JS shim, no `Object.defineProperty`. Spoofed values come out through normal Gecko paths: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full breakdown. +**invisible_playwright patches Firefox at the C++ level.** The spoofed values come back through normal Gecko paths - no JS shim, no override, no `Object.defineProperty`. From the page's point of view, the browser is just telling the truth. It spoofs all the layers that matter: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown. --- @@ -135,7 +135,7 @@ The browser timezone follows `timezone=`: with InvisiblePlaywright(proxy=proxy) as browser: ... -# explicit IANA zone always wins — the only way to force a specific zone +# explicit IANA zone always wins, the only way to force a specific zone with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser: ... ``` From 0e6b0dddfe648040230e0e1dd103d47d3a7ee35b Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:32:29 +0200 Subject: [PATCH 21/84] docs: add proxy partner note to How it works --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1403b61..b1e8575 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ **invisible_playwright patches Firefox at the C++ level.** The spoofed values come back through normal Gecko paths - no JS shim, no override, no `Object.defineProperty`. From the page's point of view, the browser is just telling the truth. It spoofs all the layers that matter: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown. +**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still looks wrong behind a burned proxy, and around 99% of proxies out there are public and widely shared, so the strictest anti-bot setups flag those IPs on sight. The browser side is solved here; for the other 1%, clean residential IPs that aren't already burned, we partner with [sx.org](https://sx.org/?c=invisible_playwright). + --- From 0b5edf4e356aeaf723dc10eb9b53747c74530ccf Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:37:50 +0200 Subject: [PATCH 22/84] docs: note proxy partner in the Proxies usage section --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b1e8575..89f72a5 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,8 @@ with InvisiblePlaywright(proxy=proxy) as browser: Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. +For a clean residential pool that isn't already flagged, we use our partner [sx.org](https://sx.org/?c=invisible_playwright). + ### Timezone The browser timezone follows `timezone=`: From 2aa14d9b5b777bc928fe6650e4c3010afb91096f Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:44:21 +0200 Subject: [PATCH 23/84] docs: drop the competitor-naming intro line in How it compares --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 89f72a5..3fa6e89 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,6 @@ ## How it compares -**CloakBrowser** is closed source (patches not published) and hits the Chromium reCAPTCHA ceiling. **Multilogin**, **GoLogin**, AdsPower, Dolphin, Kameleo are paid SaaS running JS-layer spoofing on a patched Chromium. - | | invisible_playwright | Camoufox | CloakBrowser | Multilogin | |---|---|---|---|---| | Engine | Firefox 150 | Firefox (~1 year old base) | Chromium | Chromium fork | From 3046ca17d38a8bf8e93b9a31bdda8c37da16bccd Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:46:21 +0200 Subject: [PATCH 24/84] docs: phrase sx.org as a recommendation, not a partnership --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3fa6e89..5ec50af 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ **invisible_playwright patches Firefox at the C++ level.** The spoofed values come back through normal Gecko paths - no JS shim, no override, no `Object.defineProperty`. From the page's point of view, the browser is just telling the truth. It spoofs all the layers that matter: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown. -**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still looks wrong behind a burned proxy, and around 99% of proxies out there are public and widely shared, so the strictest anti-bot setups flag those IPs on sight. The browser side is solved here; for the other 1%, clean residential IPs that aren't already burned, we partner with [sx.org](https://sx.org/?c=invisible_playwright). +**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still looks wrong behind a burned proxy, and around 99% of proxies out there are public and widely shared, so the strictest anti-bot setups flag those IPs on sight. The browser side is solved here; for the network side we recommend [sx.org](https://sx.org/?c=invisible_playwright), who serve only filtered, higher-quality residential proxies, the clean 1% that isn't already burned. --- @@ -125,7 +125,7 @@ with InvisiblePlaywright(proxy=proxy) as browser: Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. -For a clean residential pool that isn't already flagged, we use our partner [sx.org](https://sx.org/?c=invisible_playwright). +For a clean residential pool, we recommend [sx.org](https://sx.org/?c=invisible_playwright), who serve only filtered, higher-quality proxies. ### Timezone From 6cca6b3a69d299a8b7f45872596e91f230108b4d Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 17:48:35 +0200 Subject: [PATCH 25/84] docs: sharpen the proxy framing (99% already flagged as proxies) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ec50af..885b310 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ **invisible_playwright patches Firefox at the C++ level.** The spoofed values come back through normal Gecko paths - no JS shim, no override, no `Object.defineProperty`. From the page's point of view, the browser is just telling the truth. It spoofs all the layers that matter: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown. -**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still looks wrong behind a burned proxy, and around 99% of proxies out there are public and widely shared, so the strictest anti-bot setups flag those IPs on sight. The browser side is solved here; for the network side we recommend [sx.org](https://sx.org/?c=invisible_playwright), who serve only filtered, higher-quality residential proxies, the clean 1% that isn't already burned. +**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still fails behind a flagged IP, and around 99% of proxies are already flagged as proxies, so anti-bot systems read the IP as a proxy no matter how real the browser looks. For the clean 1%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright). --- @@ -125,7 +125,7 @@ with InvisiblePlaywright(proxy=proxy) as browser: Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. -For a clean residential pool, we recommend [sx.org](https://sx.org/?c=invisible_playwright), who serve only filtered, higher-quality proxies. +Around 99% of proxies are already flagged as proxies. For the clean 1%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright). ### Timezone From 62007c21d86d1fa477e079a2655ad033e56783e2 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:06:46 +0200 Subject: [PATCH 26/84] docs: rewrite How it works (browser undetectable, proxy is the remaining variable) --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 885b310..25f6775 100644 --- a/README.md +++ b/README.md @@ -17,16 +17,18 @@ ## How it works +Most anti-detect browsers patch Chromium with injected JS, and it fails two ways: -**Most other anti-detect browsers patch Chromium at the JavaScript level** - they override `navigator`, `WebGLRenderingContext.getParameter`, canvas APIs, and so on via injected scripts. This has two fatal problems: +- **Detectable.** Every override leaves a seam: native `.toString()`, descriptors, prototype order, exactly what CreepJS reads. +- **Chromium is suspect.** Forks drop closed-source parts and lag real Chrome. -1. **JS patches are detectable.** Anti-bots enumerate native function `.toString()`, check descriptor configurability, compare property enumeration order, watch for prototype mutations. Every patch leaves a fingerprint of its own. CreepJS has an entire battery of "lies detectors" built around this. -2. **Chromium itself is now suspect.** Forks can’t fully match Chrome: it ships closed-source components (Widevine, proprietary codecs, Safe Browsing) that flip detectable JS flags and network signals, and forks lag Chrome’s release cadence, leaving version-specific tells detectors lock onto. +#### What invisible_playwright does +It patches Firefox at the **C++ level**. The spoofed values come back through normal Gecko paths, so there is no JS shim to enumerate, no override, no `Object.defineProperty` to flag. Every layer is true at the source: `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools`, `SOCKS5`. Nothing is injected into the page, so there is no surface for a detector to read, and the browser itself is no longer detectable as automation. It clears the suites other tools trip on: reCAPTCHA v3 in the human range, zero CreepJS lies. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). -**invisible_playwright patches Firefox at the C++ level.** The spoofed values come back through normal Gecko paths - no JS shim, no override, no `Object.defineProperty`. From the page's point of view, the browser is just telling the truth. It spoofs all the layers that matter: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, DevTools, SOCKS5. See [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) for the full per-layer breakdown. - -**The one thing the browser can't fix: the IP you come from.** A C++-perfect fingerprint still fails behind a flagged IP, and around 99% of proxies are already flagged as proxies, so anti-bot systems read the IP as a proxy no matter how real the browser looks. For the clean 1%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright). +#### Still seeing captchas or anti-bot? It's the proxy. +Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are already flagged as proxies: datacenter ranges and oversold residential pools that anti-bot systems recognise on sight, before the page even runs a line of JS. A perfect browser on a flagged IP still loses. +> The fix is the clean 10%, residential IPs that aren't flagged. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only proxies that aren't flagged yet. --- From 95b1e47e0c2bd0e2774910e81320f21ccd715c67 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:07:13 +0200 Subject: [PATCH 27/84] docs: align Proxies usage note to 90/10 for consistency --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 25f6775..1588a88 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ with InvisiblePlaywright(proxy=proxy) as browser: Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. -Around 99% of proxies are already flagged as proxies. For the clean 1%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright). +Around 90% of proxies are already flagged as proxies. For the clean 10%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only proxies that aren't flagged yet. ### Timezone From 7a42984158c86960339d8d95fd78e15851273116 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:00:00 +0000 Subject: [PATCH 28/84] fix(deps): cap playwright <1.61 and pin it in the e2e clean venv Playwright 1.61.0 (2026-06-29) ships a Browser.setDefaultViewport Juggler call the published firefox-13 binary does not implement, so an unpinned pip install (the wrapper declared playwright>=1.40) breaks new_context on fresh installs. Cap the dependency to <1.61 and force the blessed pin in the e2e clean venv so CI tests the version users actually run. --- pyproject.toml | 4 ++-- tests/test_release_e2e.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4bf9262..c045edb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] dependencies = [ - "playwright>=1.40", + "playwright>=1.40,<1.61", "platformdirs>=4", "requests[socks]>=2.31", "maxminddb>=2.2", @@ -30,7 +30,7 @@ dependencies = [ ] [project.optional-dependencies] -dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.40"] +dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.40,<1.61"] [tool.pytest.ini_options] markers = [ diff --git a/tests/test_release_e2e.py b/tests/test_release_e2e.py index e024399..28a54b2 100644 --- a/tests/test_release_e2e.py +++ b/tests/test_release_e2e.py @@ -128,6 +128,16 @@ def test_clean_install_from_git_main(clean_venv: Path): url = f"git+{REPO_URL}@{REV}" _run([str(clean_venv), "-m", "pip", "install", url], timeout=600) + # Pin Playwright to the version the shipped binary's Juggler is built for. + # The wrapper's dependency is an open range, so an unpinned install in this + # venv silently drifts onto whatever pip resolves to. Upstream Playwright + # releases ship Juggler-protocol changes (e.g. Browser.setDefaultViewport in + # 1.61) the published binary does not speak, which breaks new_context. Force + # the blessed pin so this venv (reused by the launch test) tests the version + # users are expected to run, not a future incompatible release. + pin = (Path(__file__).resolve().parents[1] / "scripts" / "playwright_pin.txt").read_text().strip() + _run([str(clean_venv), "-m", "pip", "install", f"playwright=={pin}", "--quiet"], timeout=180) + # Importability check — catches missing __init__ exports, broken syntax, # missing runtime deps. out = _run( From fa869c52b8642b6b4e0fc1df3b52bcaaa4122901 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 01:30:10 +0200 Subject: [PATCH 29/84] docs: merge the C++ paragraph into the intro (drop the subheading) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1588a88..e8284a2 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,7 @@ Most anti-detect browsers patch Chromium with injected JS, and it fails two ways - **Detectable.** Every override leaves a seam: native `.toString()`, descriptors, prototype order, exactly what CreepJS reads. - **Chromium is suspect.** Forks drop closed-source parts and lag real Chrome. -#### What invisible_playwright does -It patches Firefox at the **C++ level**. The spoofed values come back through normal Gecko paths, so there is no JS shim to enumerate, no override, no `Object.defineProperty` to flag. Every layer is true at the source: `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools`, `SOCKS5`. Nothing is injected into the page, so there is no surface for a detector to read, and the browser itself is no longer detectable as automation. It clears the suites other tools trip on: reCAPTCHA v3 in the human range, zero CreepJS lies. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). +invisible_playwright patches Firefox at the **C++ level** instead. The spoofed values come back through normal Gecko paths, so there is no JS shim to enumerate, no override, no `Object.defineProperty` to flag. Every layer is true at the source: `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools`, `SOCKS5`. Nothing is injected into the page, so there is no surface for a detector to read, and the browser itself is no longer detectable as automation. It clears the suites other tools trip on: reCAPTCHA v3 in the human range, zero CreepJS lies. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). #### Still seeing captchas or anti-bot? It's the proxy. Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are already flagged as proxies: datacenter ranges and oversold residential pools that anti-bot systems recognise on sight, before the page even runs a line of JS. A perfect browser on a flagged IP still loses. From 92b374a497070bf47bf155eb2e1417ff1f5dfed9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 01:38:52 +0200 Subject: [PATCH 30/84] docs: bulleted How it works, bridge to solution, drop the suites claim --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e8284a2..4342514 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,12 @@ ## How it works -Most anti-detect browsers patch Chromium with injected JS, and it fails two ways: +Most anti-detect browsers patch Chromium with injected JavaScript, which loses two ways: -- **Detectable.** Every override leaves a seam: native `.toString()`, descriptors, prototype order, exactly what CreepJS reads. +- **The patch is detectable.** Every override leaves a seam, native `.toString()`, descriptor flags, prototype order, exactly what CreepJS reads. - **Chromium is suspect.** Forks drop closed-source parts and lag real Chrome. -invisible_playwright patches Firefox at the **C++ level** instead. The spoofed values come back through normal Gecko paths, so there is no JS shim to enumerate, no override, no `Object.defineProperty` to flag. Every layer is true at the source: `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools`, `SOCKS5`. Nothing is injected into the page, so there is no surface for a detector to read, and the browser itself is no longer detectable as automation. It clears the suites other tools trip on: reCAPTCHA v3 in the human range, zero CreepJS lies. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). +invisible_playwright avoids both by patching Firefox at the **C++ level**: nothing is injected into the page, so there is no seam to read, and the engine is Firefox, not a Chrome fork. The spoofed values come back through normal Gecko paths, true at the source across `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools` and `SOCKS5`. The browser isn't hiding, so nothing can catch it hiding. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). #### Still seeing captchas or anti-bot? It's the proxy. Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are already flagged as proxies: datacenter ranges and oversold residential pools that anti-bot systems recognise on sight, before the page even runs a line of JS. A perfect browser on a flagged IP still loses. From 7e06d60f042b78c52fcaf8ed2b77cdc7c6a54ae4 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 01:47:09 +0200 Subject: [PATCH 31/84] docs: truthful proxy framing (public/known IPs, not datacenter) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4342514..050ab75 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,9 @@ Most anti-detect browsers patch Chromium with injected JavaScript, which loses t invisible_playwright avoids both by patching Firefox at the **C++ level**: nothing is injected into the page, so there is no seam to read, and the engine is Firefox, not a Chrome fork. The spoofed values come back through normal Gecko paths, true at the source across `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools` and `SOCKS5`. The browser isn't hiding, so nothing can catch it hiding. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). #### Still seeing captchas or anti-bot? It's the proxy. -Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are already flagged as proxies: datacenter ranges and oversold residential pools that anti-bot systems recognise on sight, before the page even runs a line of JS. A perfect browser on a flagged IP still loses. +Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses. -> The fix is the clean 10%, residential IPs that aren't flagged. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only proxies that aren't flagged yet. +> The fix is the clean 10%, residential IPs that aren't already known. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only IPs that aren't already on those lists. --- @@ -126,7 +126,7 @@ with InvisiblePlaywright(proxy=proxy) as browser: Schemes supported: `socks5`, `socks4`, `http`, `https`. DNS is routed through the proxy by default, no local leak. -Around 90% of proxies are already flagged as proxies. For the clean 10%, residential IPs that aren't flagged, we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only proxies that aren't flagged yet. +Around 90% of proxies are public, so their IPs are already known and blocked. For the clean 10%, residential IPs that aren't already known, we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only IPs that aren't already on those lists. ### Timezone From eeddb8fcde6885b700f0e0a2ab9666885da94d66 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 03:56:03 +0200 Subject: [PATCH 32/84] docs: promote the proxy section to a top-level heading --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 050ab75..fc8b5bc 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Most anti-detect browsers patch Chromium with injected JavaScript, which loses t invisible_playwright avoids both by patching Firefox at the **C++ level**: nothing is injected into the page, so there is no seam to read, and the engine is Firefox, not a Chrome fork. The spoofed values come back through normal Gecko paths, true at the source across `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools` and `SOCKS5`. The browser isn't hiding, so nothing can catch it hiding. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). -#### Still seeing captchas or anti-bot? It's the proxy. +## Still seeing captchas or anti-bot? It's the proxy. Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses. > The fix is the clean 10%, residential IPs that aren't already known. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only IPs that aren't already on those lists. From 475cb3f4fcc442e61bf0c50a99ee624dc2c29f48 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 03:58:53 +0200 Subject: [PATCH 33/84] docs: swap order of How it compares and the proxy section --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index fc8b5bc..098920a 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,6 @@ Most anti-detect browsers patch Chromium with injected JavaScript, which loses t invisible_playwright avoids both by patching Firefox at the **C++ level**: nothing is injected into the page, so there is no seam to read, and the engine is Firefox, not a Chrome fork. The spoofed values come back through normal Gecko paths, true at the source across `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools` and `SOCKS5`. The browser isn't hiding, so nothing can catch it hiding. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). -## Still seeing captchas or anti-bot? It's the proxy. -Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses. - -> The fix is the clean 10%, residential IPs that aren't already known. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only IPs that aren't already on those lists. - --- ## How it compares @@ -49,6 +44,13 @@ Once the browser is handled it stops being the variable. If you are still gettin --- +## Still seeing captchas or anti-bot? It's the proxy. +Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses. + +> The fix is the clean 10%, residential IPs that aren't already known. For those we recommend [sx.org](https://sx.org/?c=invisible_playwright), who filter for and serve only IPs that aren't already on those lists. + +--- + ## Install ```bash From d85e407bbcf7d7a0f91f93495d6f66dec3fbc18d Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 04:00:07 +0200 Subject: [PATCH 34/84] docs: remove the How it compares section (clutter) --- README.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/README.md b/README.md index 098920a..9efae48 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) - ## How it works Most anti-detect browsers patch Chromium with injected JavaScript, which loses two ways: @@ -26,24 +25,6 @@ invisible_playwright avoids both by patching Firefox at the **C++ level**: nothi --- -## How it compares - -| | invisible_playwright | Camoufox | CloakBrowser | Multilogin | -|---|---|---|---|---| -| Engine | Firefox 150 | Firefox (~1 year old base) | Chromium | Chromium fork | -| Patch depth | C++ source | C++ source | C++ source | JS overrides | -| Maintenance | Active | Gap (~1 year) | Active | Active SaaS | -| Open source | ✅ MIT | ✅ MPL | ❌ Closed source | ❌ Closed source | -| `.toString()` clean | ✅ | ✅ | ✅ | ❌ Detectable shims | -| Canvas / WebGL / Audio | ✅ C++ | ⚠️ Drift vs current FF | ✅ C++ | ⚠️ JS override | -| SOCKS5 auth | ✅ Patched | ❌ | ⚠️ Playwright proxy | ⚠️ Varies | -| **reCAPTCHA v3 score** | **0.90** | ~0.3-0.5 | ~0.3-0.5 | ~0.3-0.6 | -| FP Pro - bot detected | ✅ Not detected | ❌ Detected | ❌ Detected | ❌ Detected | -| CreepJS lies | ✅ 0 | ❌ Multiple | ✅ 0 | ❌ Multiple | -| Cost | Free | Free | Free | From $99/mo | - ---- - ## Still seeing captchas or anti-bot? It's the proxy. Once the browser is handled it stops being the variable. If you are still getting challenged, the tell is no longer the browser, it is the IP you come from. Around 90% of proxies are public: anyone can rent the same address, so it is already known and sits on the blocked-IP lists sites check. A perfect browser on a known IP still loses. From cfa33e8756b6a385a6ed1fdd5e1f8eb974a4322a Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:07:26 +0200 Subject: [PATCH 35/84] docs: rewrite How it works around the two-question model (real browser + human behavior) --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9efae48..963c5e8 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,19 @@ ## How it works -Most anti-detect browsers patch Chromium with injected JavaScript, which loses two ways: +Anti-bots ask two questions. invisible_playwright answers yes to both. -- **The patch is detectable.** Every override leaves a seam, native `.toString()`, descriptor flags, prototype order, exactly what CreepJS reads. -- **Chromium is suspect.** Forks drop closed-source parts and lag real Chrome. +**1. Is this a real browser?** Yes. It is Firefox, patched at the C++ source level. -invisible_playwright avoids both by patching Firefox at the **C++ level**: nothing is injected into the page, so there is no seam to read, and the engine is Firefox, not a Chrome fork. The spoofed values come back through normal Gecko paths, true at the source across `Navigator`, `screen`, `GPU/WebGL`, `Canvas`, `fonts`, `audio`, `WebRTC`, `timezone`, `DevTools` and `SOCKS5`. The browser isn't hiding, so nothing can catch it hiding. Full per-layer breakdown in [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). +- Fingerprint set inside the engine, not injected into the page: Navigator, screen, GPU/WebGL, Canvas, fonts, audio, WebRTC, timezone, network. +- No JS shim, no override, no seam to read. + +**2. Is a real person using it?** Yes. The actions are humanized in the driver. + +- Every click, hover and drag follows a natural mouse path with human timing, no teleporting cursor. +- Each input is byte-identical to a real mouse: real input source, pressure, trusted events. + +Driven by the standard Playwright API. Full breakdown: [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). --- From 74ad6d0fce5455f9818b179d8f7d198b1cf9bfb9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:11:45 +0200 Subject: [PATCH 36/84] docs: hero tagline reflects both pillars (real browser + human behavior) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 963c5e8..df7481c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**Stealth Firefox that passes every bot detection test. Drop-in Playwright replacement, fingerprint patched at the C++ level, not a JavaScript shim.** +**Stealth Firefox that passes every bot detection test. Drop-in Playwright replacement: fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 4f882b550f93ff58e5047ebc537ae9f33e620355 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:27:33 +0200 Subject: [PATCH 37/84] docs: hero opens with the project name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df7481c..e899c4e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**Stealth Firefox that passes every bot detection test. Drop-in Playwright replacement: fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** +**invisible_playwright is a modified Firefox that passes every bot detection test. Drop-in Playwright replacement: fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From f26df624c43a561e4cdaaef3c601be59180c0f4b Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:28:36 +0200 Subject: [PATCH 38/84] docs: trim hero tagline --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e899c4e..82fdb54 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**invisible_playwright is a modified Firefox that passes every bot detection test. Drop-in Playwright replacement: fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** +**invisible_playwright is a modified Firefox that passes every bot detection test. Fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From e4c31427e3f7a70762de8c49edb5cb16117ecc4f Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:29:34 +0200 Subject: [PATCH 39/84] docs: tighten hero tagline --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82fdb54..53e7c59 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**invisible_playwright is a modified Firefox that passes every bot detection test. Fingerprint patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** +**invisible_playwright is a modified Firefox that passes every bot detection test. Patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 81849a32d2c1078e74fa865f5e9dc63a2dbdbe28 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:32:51 +0200 Subject: [PATCH 40/84] docs: refine hero tagline --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 53e7c59..d4e685a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**invisible_playwright is a modified Firefox that passes every bot detection test. Patched at the C++ level, and every action humanized so it looks like a real browser driven by a real person.** +**invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test, with humanized actions, so to any detector it is a real browser driven by a real person.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From dbffc5257029818776600c53b2d4a434eaa27513 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:33:38 +0200 Subject: [PATCH 41/84] docs: shorten hero to a single line --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4e685a..20d6610 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -**invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test, with humanized actions, so to any detector it is a real browser driven by a real person.** +**invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 9ad2b1eee65c6b7d26c8a21d7c911197567623d9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:35:54 +0200 Subject: [PATCH 42/84] docs: drop Firefox version badge, merge LinkedIn into the badge row --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 20d6610..413fa53 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,9 @@ [![tests](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml/badge.svg)](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) -[![Firefox 150.0.1](https://img.shields.io/badge/firefox-150.0.1-orange.svg)](https://www.mozilla.org/firefox/) [![GitHub release](https://img.shields.io/github/v/release/feder-cr/invisible_playwright.svg)](https://github.com/feder-cr/invisible_playwright/releases) [![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright.svg?style=social)](https://github.com/feder-cr/invisible_playwright/stargazers) [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) - [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) **invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test.** From 1b22e1bb4a0d437e4d311a91b0ebe640d739fc4c Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:36:59 +0200 Subject: [PATCH 43/84] docs: put badges above the title --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 413fa53..0f9821b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -# invisible_playwright - [![tests](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml/badge.svg)](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) @@ -8,6 +6,8 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) +# invisible_playwright + **invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 4cbe4754733581c960fba5144cf59c62b919363b Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:44:02 +0200 Subject: [PATCH 44/84] docs: short title + concise description subtitle --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f9821b..18d89b4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ # invisible_playwright -**invisible_playwright is a Firefox modified at the C++ level to pass every bot detection test.** +**A modified Firefox that passes every bot detection test.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From acc5c27d5b5da208e58a6c3927d1f4cdec28af91 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:45:08 +0200 Subject: [PATCH 45/84] docs: make the title a one-line description --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 18d89b4..9704eb1 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,7 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright - -**A modified Firefox that passes every bot detection test.** +# invisible_playwright is a modified Firefox to pass every bot detection test ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 1c942713aa325ce1b51f3c4316dde9f8cf2a9501 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:45:35 +0200 Subject: [PATCH 46/84] docs: trim title --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9704eb1..40b5bf3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright is a modified Firefox to pass every bot detection test +# invisible_playwright is a modified Firefox to pass every bot detection ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 07a812c1f247fa18b7f83dbbcae35bc78b6b082e Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 20:24:23 +0200 Subject: [PATCH 47/84] docs: short title + concise subtitle --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 40b5bf3..e01916e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright is a modified Firefox to pass every bot detection +# invisible_playwright + +**Modified Firefox that beats bot detection.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 050ec1aa61ccf6ac8576a56bdc9ad364f4d0d8d9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 20:24:42 +0200 Subject: [PATCH 48/84] docs: subtitle uses 'passes' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e01916e..c2dad68 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ # invisible_playwright -**Modified Firefox that beats bot detection.** +**Modified Firefox that passes bot detection.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 7914f3d0067deffeb71b4c732d5b04eaffff9f60 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 20:25:40 +0200 Subject: [PATCH 49/84] docs: single-line title --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index c2dad68..cc58772 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,7 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright - -**Modified Firefox that passes bot detection.** +# invisible_playwright - Modded Firefox that passes bot detection. ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 24ad6e423378f9f09fd35dc11be4610122133866 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Tue, 30 Jun 2026 20:27:22 +0200 Subject: [PATCH 50/84] docs: shorten title --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc58772..5008fa5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright - Modded Firefox that passes bot detection. +# invisible_playwright - Modded Firefox that passes antibot ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From dd59c41bb592e4acb3d028b889838c30f918eb11 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 1 Jul 2026 04:01:46 +0200 Subject: [PATCH 51/84] docs: title + full subtitle --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5008fa5..18d89b4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) -# invisible_playwright - Modded Firefox that passes antibot +# invisible_playwright + +**A modified Firefox that passes every bot detection test.** ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From bf302701c6bd9389b7e194905a724dec6a61c652 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:17:11 +0200 Subject: [PATCH 52/84] docs: fix stars badge (drop flaky social/.svg format) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18d89b4..79068eb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![GitHub release](https://img.shields.io/github/v/release/feder-cr/invisible_playwright.svg)](https://github.com/feder-cr/invisible_playwright/releases) -[![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright.svg?style=social)](https://github.com/feder-cr/invisible_playwright/stargazers) +[![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright)](https://github.com/feder-cr/invisible_playwright/stargazers) [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) From daf84f78cd4c6bc2ef8d77ec44db1bd6baf305d5 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:21:08 +0200 Subject: [PATCH 53/84] docs: drop GitHub stars badge (redundant + flaky; big repos don't use one) --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 79068eb..50480ef 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![GitHub release](https://img.shields.io/github/v/release/feder-cr/invisible_playwright.svg)](https://github.com/feder-cr/invisible_playwright/releases) -[![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright)](https://github.com/feder-cr/invisible_playwright/stargazers) [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) From e1de4c3d966d7bf204539ac62d082ca0acf4f3cc Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:25:42 +0200 Subject: [PATCH 54/84] docs: re-add stars badge in the reliable plain format (Skyvern-style) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 50480ef..79068eb 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![GitHub release](https://img.shields.io/github/v/release/feder-cr/invisible_playwright.svg)](https://github.com/feder-cr/invisible_playwright/releases) +[![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright)](https://github.com/feder-cr/invisible_playwright/stargazers) [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) From 233f4b088f5528815299cbc0780001897aab0d52 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:17:03 +0200 Subject: [PATCH 55/84] ci: skip the heavy e2e on docs-only pushes (paths-ignore) --- .github/workflows/e2e.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 0f750f8..9337abf 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -19,6 +19,10 @@ name: e2e on: push: branches: [main] + paths-ignore: + - '**.md' + - 'docs/**' + - 'LICENSE' pull_request: branches: [main] workflow_dispatch: From a59d008a4379fb842eca098c8124f93e07d611be Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 01:15:03 +0200 Subject: [PATCH 56/84] docs: add project logo to README --- README.md | 10 ++++++++-- docs/invisible_playwright-logo.png | Bin 0 -> 190457 bytes 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/invisible_playwright-logo.png diff --git a/README.md b/README.md index 79068eb..e77eb42 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +

+ invisible_playwright +

+ +

[![tests](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml/badge.svg)](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) @@ -5,10 +10,11 @@ [![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright)](https://github.com/feder-cr/invisible_playwright/stargazers) [![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) +

-# invisible_playwright +

invisible_playwright

-**A modified Firefox that passes every bot detection test.** +

A modified Firefox that passes every bot detection test.

![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) diff --git a/docs/invisible_playwright-logo.png b/docs/invisible_playwright-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..67162bde35b634817d8262397a2815a61bcbaa6d GIT binary patch literal 190457 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

`S{VOXi_iq{ajdEajj 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 z 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 ozin!W<0C=3n(9%nTyt z^d~S>ryxzbPiZ((l??M?Iy@eyizYemwdu%7-+{#%nu zS!oA$^Ch;fSOcmC)kqO3hKJV1Zyfz@CNQr>=$gn3r7V^ z;~@ze9BRp5mko-GgXZ{jC>Jvd**KG$Nk@>yLZF_@<-Ug5IYJn?BOi`1l}^k7PrAw0*nK6UBm;{FQw4AbOd#xO|c^)!5oI zJMTArf5rI$aFVN!94)A<=;f$>E_n@DavbE6E4qlnXaPqOS(*(mKf}}#08g-VebT#x z#fI7LCr!hmyMQD1$-+|>#)y6iS~n+^%?PQ!W9u8*`FT2kyCUzW? zWdR!{4YY`fVcXGyICPZu)Oh4HoISg{Trd<&;EgOIx`i%#b%sK`lzY>%&YB&{s z8phbiZuKvrs?k!v(S*{OFatxixMXawsX@x9;&ilxFz=^n8|GaKI{k$G5nYCGenjI; zpNy#W#O>ZE<&i!C$-k7$b)4pC=%&8w)}23LKQNr}mTvF~lgLFiV(X|ZG>LvDCa%md zU>nd>fo@v9sjU+{(SoAXP@j_1I&k^OLknV*c}x{-wgCc4j4+uQ3-9%I%VDTv(lAbq zBD!kVwCNY!TDJ42v?7-Jc#=L3L<@5<128T$12$8*DIqXLqP4efO0$(@i3I^cZK+mB zvH6U}(JxPi7tuIDQj=$8x*Os`d@yXj7W-H_!;27DX~u<(nQ#2Kdv{+n?|){&=Z5mw&^B-To)#!$0wN zW3clp=T^>j&i9PYfVSr^f0 zB9#^^J;N(qZ0Tuv80!>xyw|c;{t$}Ac~BOhZZq}E!YSImJJM36EYH;7aqT$|`y0aW zODrd)MINw3x#Z~k9wiblTkC!W-VAt5jqmWc^u zZyDH^g!Hy^irDBeHIzAa?pBt=A}>&#-hoTQmZj3BdAYkS!2x#ZR1)eL7DRv7B9Hj)x zlKd@;kg%q1*|=~b8wz}+?v%ztrPaJN$tZ?_**q%sNsuG7t@`s=a}sm#LIFIb%r-VI zhTUMdUQ*>wAAjat-tR3COf)+<8-Yd*kLf6oK#sXGXe3mZ2F{XL#b{G>Eb+dLgg4z) z8KMLRcGqY@vJ3wDqom??#{^xAP}HrsEOXv%6n)|P*gDvHjhmrTOcufu2CE}hFM&zs u80IJwNTz8Y!xZCeixlBF&hG!`kN*$S!X0!%?qNaz0000 Date: Fri, 3 Jul 2026 01:20:46 +0200 Subject: [PATCH 57/84] docs: use HTML badges so they render centered + update logo --- README.md | 14 +++++++------- docs/invisible_playwright-logo.png | Bin 190457 -> 89366 bytes 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e77eb42..88531cc 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,13 @@

-[![tests](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml/badge.svg)](https://github.com/feder-cr/invisible_playwright/actions/workflows/tests.yml) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) -[![GitHub release](https://img.shields.io/github/v/release/feder-cr/invisible_playwright.svg)](https://github.com/feder-cr/invisible_playwright/releases) -[![GitHub stars](https://img.shields.io/github/stars/feder-cr/invisible_playwright)](https://github.com/feder-cr/invisible_playwright/stargazers) -[![browser launches](https://img.shields.io/github/downloads/feder-cr/invisible_firefox/usage-counter/total?label=browser%20launches&color=blue)](https://github.com/feder-cr/invisible_firefox/releases/tag/usage-counter) -[![LinkedIn](https://img.shields.io/badge/LinkedIn-Federico%20Elia-0A66C2?logo=linkedin&logoColor=white)](https://it.linkedin.com/in/federico-elia-5199951b6) + tests + License: MIT + Python 3.11+ + GitHub release + GitHub stars + browser launches + LinkedIn

invisible_playwright

diff --git a/docs/invisible_playwright-logo.png b/docs/invisible_playwright-logo.png index 67162bde35b634817d8262397a2815a61bcbaa6d..629d795391d681305dff23bcf2885fb843487931 100644 GIT binary patch literal 89366 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

_-WsfD+U+ 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�r#G=!+7U{^bNaCTgMh>l- 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 PAYWP<`sy{RHc|fv|KVrJ literal 190457 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

`S{VOXi_iq{ajdEajj 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 z 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 ozin!W<0C=3n(9%nTyt z^d~S>ryxzbPiZ((l??M?Iy@eyizYemwdu%7-+{#%nu zS!oA$^Ch;fSOcmC)kqO3hKJV1Zyfz@CNQr>=$gn3r7V^ z;~@ze9BRp5mko-GgXZ{jC>Jvd**KG$Nk@>yLZF_@<-Ug5IYJn?BOi`1l}^k7PrAw0*nK6UBm;{FQw4AbOd#xO|c^)!5oI zJMTArf5rI$aFVN!94)A<=;f$>E_n@DavbE6E4qlnXaPqOS(*(mKf}}#08g-VebT#x z#fI7LCr!hmyMQD1$-+|>#)y6iS~n+^%?PQ!W9u8*`FT2kyCUzW? zWdR!{4YY`fVcXGyICPZu)Oh4HoISg{Trd<&;EgOIx`i%#b%sK`lzY>%&YB&{s z8phbiZuKvrs?k!v(S*{OFatxixMXawsX@x9;&ilxFz=^n8|GaKI{k$G5nYCGenjI; zpNy#W#O>ZE<&i!C$-k7$b)4pC=%&8w)}23LKQNr}mTvF~lgLFiV(X|ZG>LvDCa%md zU>nd>fo@v9sjU+{(SoAXP@j_1I&k^OLknV*c}x{-wgCc4j4+uQ3-9%I%VDTv(lAbq zBD!kVwCNY!TDJ42v?7-Jc#=L3L<@5<128T$12$8*DIqXLqP4efO0$(@i3I^cZK+mB zvH6U}(JxPi7tuIDQj=$8x*Os`d@yXj7W-H_!;27DX~u<(nQ#2Kdv{+n?|){&=Z5mw&^B-To)#!$0wN zW3clp=T^>j&i9PYfVSr^f0 zB9#^^J;N(qZ0Tuv80!>xyw|c;{t$}Ac~BOhZZq}E!YSImJJM36EYH;7aqT$|`y0aW zODrd)MINw3x#Z~k9wiblTkC!W-VAt5jqmWc^u zZyDH^g!Hy^irDBeHIzAa?pBt=A}>&#-hoTQmZj3BdAYkS!2x#ZR1)eL7DRv7B9Hj)x zlKd@;kg%q1*|=~b8wz}+?v%ztrPaJN$tZ?_**q%sNsuG7t@`s=a}sm#LIFIb%r-VI zhTUMdUQ*>wAAjat-tR3COf)+<8-Yd*kLf6oK#sXGXe3mZ2F{XL#b{G>Eb+dLgg4z) z8KMLRcGqY@vJ3wDqom??#{^xAP}HrsEOXv%6n)|P*gDvHjhmrTOcufu2CE}hFM&zs u80IJwNTz8Y!xZCeixlBF&hG!`kN*$S!X0!%?qNaz0000 Date: Fri, 3 Jul 2026 01:30:11 +0200 Subject: [PATCH 58/84] docs: move LinkedIn badge from header to author footer --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 88531cc..c1e85bb 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ GitHub release GitHub stars browser launches - LinkedIn

invisible_playwright

@@ -188,3 +187,11 @@ MIT - see [LICENSE](LICENSE). The patched Firefox binary is distributed under th ## Disclaimer This project is for educational purposes only. It is provided as-is, with no warranties. I take no responsibility for how it is used. Use it at your own risk and in compliance with the laws of your jurisdiction. + + +--- + +

+ Built by Federico Elia +  LinkedIn +

From 4458fa585cde5e6cd547777bc3a1a330b8746127 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 01:36:49 +0200 Subject: [PATCH 59/84] docs: left-aligned title with logo floated right (lockup style) --- README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c1e85bb..9280e3d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ -

- invisible_playwright -

+invisible_playwright -

+# invisible_playwright + +**A modified Firefox that passes every bot detection test.** + +

tests License: MIT Python 3.11+ @@ -11,10 +13,6 @@ browser launches

-

invisible_playwright

- -

A modified Firefox that passes every bot detection test.

- ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) ## How it works From faec39c6ab5bc09ced811637f34222ac39526cf4 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 01:51:23 +0200 Subject: [PATCH 60/84] docs: move badges above the title --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9280e3d..e9400f1 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,5 @@ invisible_playwright -# invisible_playwright - -**A modified Firefox that passes every bot detection test.** -

tests License: MIT @@ -13,6 +9,10 @@ browser launches

+# invisible_playwright + +**A modified Firefox that passes every bot detection test.** + ![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) ## How it works From 17d67e067ca094e50ae5f554ed3090c8b846fb63 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 03:02:54 +0200 Subject: [PATCH 61/84] docs: center tagline as a subtitle, clear float --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e9400f1..b60221f 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ # invisible_playwright -**A modified Firefox that passes every bot detection test.** +
+ +

A modified Firefox that passes every bot detection test.

![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 036076a3dd848a488b2bda38dbb98f1e3b75bd82 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 03:06:50 +0200 Subject: [PATCH 62/84] docs: HTML title (test borderless) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b60221f..bfddec6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ browser launches

-# invisible_playwright +

invisible_playwright


From 1f087fd6d35cb81cbbc63f518c1f5698e5b80060 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 03:11:33 +0200 Subject: [PATCH 63/84] docs: centered hero (fixes tablet title wrap, borderless h3 title) --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index bfddec6..f56d271 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -invisible_playwright +

+ invisible_playwright +

-

+

tests License: MIT Python 3.11+ @@ -9,11 +11,9 @@ browser launches

-

invisible_playwright

+

invisible_playwright

-
- -

A modified Firefox that passes every bot detection test.

+

A modified Firefox that passes every bot detection test.

![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 8695a6a4e00dcdd9b4b9c15498c76959926bd521 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 04:21:04 +0200 Subject: [PATCH 64/84] docs: restore lockup layout with large title (logo right of title) --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f56d271..b60221f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ -

- invisible_playwright -

+invisible_playwright -

+

tests License: MIT Python 3.11+ @@ -11,9 +9,11 @@ browser launches

-

invisible_playwright

+# invisible_playwright -

A modified Firefox that passes every bot detection test.

+
+ +

A modified Firefox that passes every bot detection test.

![invisible_playwright - 5/5 detection suites passed](docs/screenshots/hero.gif) From 993ec95eb295dde0cb7070a1f7701a08b3deab1f Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 04:22:05 +0200 Subject: [PATCH 65/84] docs: badges on top, then title-left + logo-right, centered intro below --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b60221f..193bfd0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -invisible_playwright -

tests License: MIT @@ -9,6 +7,8 @@ browser launches

+invisible_playwright + # invisible_playwright
From b93fc25a3f0ec96dc36542f46f899726e97795e9 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 04:30:31 +0200 Subject: [PATCH 66/84] docs: title/logo lockup via table (vertically centered) --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 193bfd0..2280c16 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,12 @@ browser launches

-invisible_playwright - -# invisible_playwright - -
+ + + + + +

invisible_playwright

invisible_playwright

A modified Firefox that passes every bot detection test.

From c9853961d3e9e365a9fc8cf0618c4304d659b37e Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 04:56:00 +0200 Subject: [PATCH 67/84] docs: title+logo banner lockup (light/dark, responsive image) --- README.md | 10 ++++------ docs/banner-dark.png | Bin 0 -> 77279 bytes docs/banner-light.png | Bin 0 -> 77537 bytes 3 files changed, 4 insertions(+), 6 deletions(-) create mode 100644 docs/banner-dark.png create mode 100644 docs/banner-light.png diff --git a/README.md b/README.md index 2280c16..376427b 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,10 @@ browser launches

- - - - - -

invisible_playwright

invisible_playwright
+ + + invisible_playwright +

A modified Firefox that passes every bot detection test.

diff --git a/docs/banner-dark.png b/docs/banner-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..40591b0e758a8758527aefb4deebc7063817ff5d GIT binary patch literal 77279 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≫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 literal 0 HcmV?d00001 diff --git a/docs/banner-light.png b/docs/banner-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4296d6d63613f59f976af140a34d3c4a273718fd GIT binary patch literal 77537 zcmeFZ=U>y`(ltzzqEt~jLK%sR5KGO$9}o^iC*Jf>c9q zp+kT`s3CM7&hxp?Io{VlaKE|s%kP`)nLV@i%v!S(qphh*b(`fj0RaJ(x|)&>0l}>~ z0s_L<Z949_Y`61M@g)l+!B)y1vhqgA zk~cy_(BsW-kJY`-0-1Pq)s~e+nRYfdaZ5p_ir=Jc9-37))3@^lQ&g-BXGBG0ik^?- z56|<9n}Q~)MuwcYcg~9t4)%dfC9P&=)w73Jp<9Qy=>B*8uLu6u1OJaapw)&G3=Y9gX#P3U>);&PUiKRasOHA*YL#tOQwn%!w_Zm}R* zot4x~7I_ig{Qlo7JCUT_IQs78#!ZZVN?x<`7tC#HVF_#$~+Kk=WM%-?m; zUM~A6BItkY5BPESffi;kuV`0xH{BVsVm!ZVrCISc=2hg_LB_+=ndQNG(~DfJ2_C+- z!nHUn9hl7bz1>Xd--{!bz`x8ONJlzkD77}m40{>6+%dpbh5Pyk>_`-2PdnmrX>)}A zJqa~P3yZTF#y5m$DcCrpCKXBlV=7l3j4(G|<60%eNozSk^d%M7%b z@Mn&I3z}6?nr8#qSc-;2b_!6rrW$k=Y0Ux|7@0p<3fnH{Z=;qBKWplTMDolj|J$b3 z4)S|T{s}!N?%a<3khF&+g>Bf^N7DAiIUYw*yXhJK*4T4@Y!hKBhQhOP+7y18VB#qvO^8Gw)!|>*0=xK zYq((XI~@e{x_fFU!s5Q-3=~fyQpK?y_D{Po~ zgT;2ygGF!|r{K3zFqJ{Ol;VTr#mVv$H*LCn?Rf<^9WY% zbu^m{^yVl26?TpCq)L_&gGJXVW2Q(*+FL8aDlz-r>YVkON*_^>9j)TNAe5XUgBd}+ zmfb?{C(oXHqPvJ)#W3vsd}jhI*_GTI9ArP2*DKjqiV8uETdQ!0{k{21bprRA@2x`Y z3zam(`OiJrzCwKM7rf)=d9r2aL5|OOS^pSiK8qqz%g&Du%x)2}N3SdvU5|rvVvi;U zcz^43R`nc7X_f6XECL6AS5E#DiFFbJ!dU)x{M9P8Nd#*W`+ zVHM7dx<9((WnVn@VElJ#CZDGe$cc;LN(+QeMZM=xcX=C_(_AIbbMMqfRR-6%b1;2R zG>F_WIt_;u(dn$@HVY@Bra_KO!zYdH9gI?}s_YUk_jte8?w8iBv_s1f!~i#qy4;ul z?6^H1{irIKll`CI^s=CQ(6cvFfV_%1CZ&N`bs;m3C3-qwm)3>))Hl&8>d z?gxIf787%`}|!+D2$j}MWsU2`PFWaRaqS#g8RJ* z2tvlGF&Q+^qN&YRmkR&FMY+7Mhk<3MJSDYz8_2lNa}WTF?ny3)EYNwVPe(I_g(I5A zPe4K^gvgdfenUE}WAqkt_ zVVD)e-Rs3w8xx!#bj(hLgYfULM}KG|Byz;OB~qMX zYywYbqc3NL1OW_h;a$j;et7az|-L=N5 zoAiH@!OKq~W&unKmDh%aRv;%4AdEoz^xtr)v^r1Her*cBYABcw{(2v`MHo-}U{@+A zkI0eFY7-l}k5XuIV`_j%V)ONP2-d}QmZ=+7+>D5DX`bj{n5p~R=b! za*dDyUe<20I}EA5Re>&|I3?v}A0)5+3Z_)&#do=T|$eKcqsgOg}YKw-!oG2XiEe zP|lApm~n{zjRo`fHUnnPtY2biA(cl(3T?!ru2V?rQUMjs+yONws{;FT4|?&L=iiGR z$_-xe>H636_||{jq15!|UBteIc1uUQVMffndIUs+y06_1-U43jh1x(U?i77n4JjYr z3h+it321K%V-&rh9*B>#q{V|sLgxs}`l;yMw2yuD4K15tzvLlU;ofwm98+Q>Gusr-# ze0zQ^{-3|@yF%eN-@Z-Q+Wii|VlCJ8y|5L#zn>^U_H#MJjd*>hde~zZTTX0j`mwf9 z{Fa-tlKXg+D>t2l1dXP%bVXgVHx4u*>0_9VRWGb0Ge0Y#YF(Dl@#7dUmSTvJqOkEl zDivz=ZfQJkhdmr6D|gzFMW;h|oN^F?{)RB96wpWKztK@d^o(OfpvHuL&bvRu%tTWy&T=kfis$N2<4{SX1dS@z?PVyHQ%7Q+qrBb%feIVi>;zIQqqMCY7$ zGdl+JU7f6bSorb{Bz`sr=4geka?xpp-D6K)n->NyM-Rs-zQvu?fXH}M%RD9JNX|%OIsHg@q#j9r8!jm z*Tw7t>~^DQ3+gl`<7Kk(-!P-kN?@zyMY+yk~kz+Zj-HB(l`QSI%tLt z{vb9Ka6OfKI6peqcvwqDEvSM-gVPWS`nw08H*Ege-jgJ;M}DDDSA3)U3&l^#=qH3# zp_<+-=2!Arl6xI(;3Y8hrBk>z|8u8~SO(#a3SoHxVgF8|EJgz{Ac;U=E$jGY+;9oP zyKl#Ud)FZCZnPyy#E=TNMgjud`dgW?E;eL5zDNkNd6umO|ArXf{XI2B9YXdwt&PY+Q! z8YA*a^BxM53q}gmNcwrN1I`NR4f0;aZOh*3OPV86J{b~x10cZ)-px(7IupzmaA%z! zQhNp<#Xn(1k_bEx0IKh87}@jLd&#cd;dk`Bx|LupBL*o>t@6_C(GMG6+Jf4$$=}As zJj=Ib%57vdN(mhJEpBig0Nt^O!GuYp4)AQ!HC`7VS5_Verw4uc>*nMcU;bk3jBfDXZGGr5fW8n0E}o+RCS&Qm9Jx6klC7Jqj!n&g18i8Z;XC~{hWY31!Vw2RUH3HYtgcTRo469Ib`c83t2Ci2~YQ&YQsz=kPX=#d+LuV?Ur3D;)?# zyiDD#iutRa4d;^edr-IdS_Zv5JOTO+?JC`URzZ;StvCHr0N5T)Z`gnXgDeMYs;yo#!D*6BnS`AaNYm=N)-vx8Fu9zaN$Sw4{>Dky6A9G~k zvNb`%;7q~u69&e5()-FF4?MI0rV@O7IP`Bs*z4NG?FKA>H{ z_b8mRb={SFKmuIj{{YAE=5*y?k{)+5R6ju?MFciS5<@)Qc z!Oys>$~N=0zA)6{P$wNtj2P(dmRKC2H8)AcqA@qdmG&?p3o;Q@Z=cgPOV21DdM+G? z_j-N5JL>|j@UFHf_7d+2faQOU~gWh2Pbk2 zf*nbn6F|9-p4Bi74k(ff4gWr8?K0oh9uSv%whdo6`~V18*ST)OKlkg~53M2F^XpT6 zm=(jh|r) zq=1lJVfto_r1BrlDk)L>nqMKb#X-i&Zi$UlCLJH^X^Iz~BZt9yuy41QRf{*CPxqsO zwJCP>7en0%+ZYvs?>^}NT%D|2((#V$(`#vwC9-3Q0lp-VW`UVGlU*Yfng?SRxBJu1_Kt*G_YA#~y3W*(R8>s;|3LA(Q&q*Jh`S;hVBPJUFL$%ck)Kxe!p8>_)jR9#rph7m>iRzK$t+IT0$O(4%n+*!4$AMtY=e{Pr<9A%ZFb~lA(gCz4$_GJ@j;U()H|FU)%L>&qO|D7Kjy7 zAV?X*T=8{Tw!w7TI)oNKTLC&3Bo}x(r+QYad&S(hC>uW~PQIy1gtyX{(JQlI(i^3b z9*K|KGdDn_e`!^y2WKfAGTZ{*^(R@34B z>H!r!Jud*0e|)l)>Y_uB zl~yZX?Un!$z;!%*iDJs(FUi7 zOhl*dxNM;`8y6kNJ43WP%yGU8W9Sf34*|e#CvBMSt&1nAyPflUDh$(o>)W)ZP8 zkKf@!cEbSl;yi;RxME2&cX=hD-NwbJp?dv}Vd-r2LddW37O#YNvm&z_iX*Qa#_n$6 z799lDCm4Pn*K4(80&+UL*-Fj!?v&h&>u89P&T z+E@=?kpv%!BKexLQ-+M4QUnt!hVJdVMTTEzG0lwUtkG=^ZS!rhU-gF~I94DEO(^0Y zHTHJ)Z>|YjQiAfxCAC9kiBA+3zaI~55AzQU!!MUuzo{vpF`4<0r#F3$*YTeqdAeji z{de2iBso&;KV!_&*K7CP8@?HwN2xelKT^l|$0Kig)(RV73fr!aRJrltF5u2_tR)=QW1YbBqN10ps~080L-1A`%r!6yWQ+1&*o7v0dyBI z*uxwCZSM5w7fYVGk?pQhj)3H!<$W^H6uj9gmo*v^&5l;eJ^kbucI@nD1Ra+QcAbBOW#9#NIieIGiX*BfPFl}l@6t8qQR8?Gm^m=ldb-sASWgNd$M)!vU9_SUS3fdV4#II~Nv~2MV&=ciyx)4G&z&F9tEJqczQZ zo~_3JISpLjn2NpW(zC%w^IA$aFXxzmALz@sENJl`ONs*;k7Iq?)^!mLOHGOFQWGmD)^5g{%bb543JM(eOi;2E z4VeKc&z8R!mDL%%bTC;SYLHoRB>rUnN>wtE<`FpR)bH`^nP{=HZFE97sp>Qe^%mXz zjh0%;TcV2Td9D;Z^i@^pQE8qjOLkFA`ze`D9^5A0uFMKLSBuR%8H?4}WBV8sWja()5eUuS_tz1*)facnx5my5feIov@wS@hZnEe=Gsw^RJz7^0P0)N z>3Sw=+uVGm7XdpRbn}~4ach=Er`2daj+;PLa(f`GLb|siTcr zJ^ga1fS;58c#tv2E|AZGD^a;Hjbv*@*{f}&|76v*KX`jxIoI#^J;t3+6?gpNPdj2f z>zgX+yv`=78|W7f2fEDn2iRLa<;|l140pUo2EjAd zkud=U3*IARMTHgK(40#$dj2MxUqkX?zXU>NBpKyG2ZkC2ZCmcE{Rn73$+xiBv$#x< zaj~}V1g~=^e1}%;Sues1+4ie@>PWFWnbYEXg|bHy#;Mmz$kAP>R**JVUi8qUh$_P1 zhHG2h{(=wX;-bmOIiTx@DOeoe{9ur|L?jyj{4Dn2uYSccPq%6$7lnadHCpOf)jZxN zKV8T%IXy>YsD5C3IrY59aanVsy4g(%E8(hyjWHJutzV25)ESVKtfVP>0zurOxUB6x z*pD~iyVntr>T_N(7MzsT+&ukx3?8gw`@p@E*Dr}Y9X>-=pO$Ahe$cs^p@3_ql8_Bt zq^#!&E_8{jDta}KqUhO!I9;vtlM8 zpXIFlLYtR#6FwetNZ6qPr6QH(9kyB-me%fjX6L#u?*iZW#@MXdD4BW|=HX)qTQNA1 zt8g0r!=KOS5EF#PUhAyCiKisSp%4V0+cs3`tN$Aa7L_8%3Gm4->%0kLi3SMB`}X0kgH0 z2)`Q^V+(FV>1z`{-XX3^zpGGmre>O1bp|h10{GPyoizk8OA~)_cmg0YxOJs>{Q%oHi}T; zlOz=H?UhY=w^7IX9ZEKn#K%T4us@pq<{!`z&)5 zzkzboY_o{xQ%_I;@iqS zt`2LF4fRX`+GU|z;_NP}kTb z0hhtI5*~^kRhma&Mlxs3M{~X*(QXJwjhTwMSyBx%6)()!!u|*3NQV}lG{6pCuBqIKJ0eXu``|V9a_xwT8K4z6 zO(!rjM-pL|LOVht=*1P?jG054c_%&xlK6?S)D=!!T2!wEWkJNvON7j|)D_zYrXJ*H zBznLa-chK5JP_M+hb*r>jQgD;t2Enw9F(s=jcts1!?;kwa=6%_oE@KSU2A}N->Ndy z1W`W?{MPLgLywXU=&^3=M`D`*J7u#mrJX7R+y3qm0z(2vXsq0`uChEShA3U8y3?xg zn-nu>Xk&74*%xoS2S=uetaNV#gLTd0|Ibk^cmMzC6--21SXc<1aB6Oq-o25>2Nc0n ztX&r(m>g_QGfOCj9R%YDA}(#A^YTA8*v2d9_W|Bic52H@hV1?7mUW(FEwlGeF_(5- zQfC-Be6HjCt;j0vZmCP!U5H(7CYocSI>RR@xk-jmW6Xc)RQJjjt-1FL4yh~2l|+7- zENsioD)Xs?ICF!7)`g_Y#x#9|wfc-?L>#2+EV1AUp*{}r#GSy`Z!CEMm=C6NN3T@9 z@JoYO<(G`rgCS#JS{?FQuGK_l+PH%YD|$RK1y?0<3V#)G&upbX_IN8-KbpDT8fnNH z6V~4sNLpr-jf}-7w@P%DyH-i(G+?nFXTNhE8bZW7==hPvvv;Z4$e=u;^RcK++X2P~;()J;ya-Er3%Fa&gP60!P znsY<*{uK6ITG;XUsqEA8SP|b5h%?{<9fF$v(>@}r}E{RWTuDW#HzZ4348aSRl zIr=4Y-EPpdPYB{Vrx<48FsL2*k(xC(xyDO6piU0%?6m_Opw{TV7~;j?5hF*5wV~H% zr3(u`3crYmnaj@`o5F)UT|KEjN%>U4A&^t7jp}s^d~n+#cebDzg~EL62OV;sIT`+h#2hGez_N^u-?^mezSYEw?0?A1l$+Zr0M;ff6ds;jPXCP8}&EiaP7R zG~4qPM7fN)H&yL{{iCw5R~equHaU#uvOVb>*^7g@pF67Lif`sb%8}Sgg5ZI9{D9%m)I>(ZhJk7+Cmz!i{*|+Yiot(4{(v@qB0FTS? zo@I9)b6&5M{ds8~=6QI>({FmHJ>-ni#T&sq^_~1CeLwiP{A;*kh$C?D3djitXKJyy)Ie{D(BXUw>>Hu!M z!+d|`H>#9wDx=N&(LnVI6%%X^1;?f;qzEG#yS~1tP3(5(%Qj8Knv^KWQdNf26m}ye zsp*!O{Gh4Y<+g^QB1`rX zB4oho=2%0{&h!yZGt))c^v8vIG;Vv2jIdSzK2|(_8bx)7R4JD002vs*&B;*~A7JL?39^`9e~ zB-S$(Fx_0txK+}lSGV(|d6G=z?m!9wClh2$C3n+<=s{p@(lg(O&-Smi6DHrHEhl3B zrJSk@LiaXYTzt}ZuMtO;&N9S!2rR`l_RUR2s{U6+>h=9TO8gDH`S`L=YOrWOV+~HS zg(AlYopldJ@;0GT*IF~s^WKO-S&jFOf-mXwnNzqJYP;TM2Edu;O3m*DGZK14J^|G2 zKW23>> z)8LRt?y(m!BOk1*lxwY1hk#0bD%UjklhL%4CCnTnUq3*RN5R_Rtz!v3RoOA3oK5s^ z*3j@px!n%yl zU%h~KY~Yu=*u%SN9=-yD?1vc{cZ{oQ2^?z^mi-Ml!#s`324>+d={oP$3q_p@r=S(Z z451#FMGRLdz>&*+Z7e+X-Tpcd&&$)1FSD{@MLRk*N8KMpzL@z1n^L^hWTAUkgDm^7%~DPRg&Xt51)Yx)g0(Vyt+G@}gmDY&7A z@);L7 z)sXjo3YXK%hst)Ama0FNHQSKsHy%P7ttNvJ)n9+jL`YFsX)m$HiH?==m~tH5tF$ia zN8aB2YB}!(8ia5+1n@OHG^pWUSfG40?mVFRy|qoh8nojw!clT~62lUd^+f${thkVJ z2~&TNt*?&+D0@4F*LM%cF)_?Zl|;&`!6pzCY{<#4@3CVg1?7mjp zBQ<){O;b>6hGskYE{D6+^!rs2NT)Qb7Ix&MDt_XAMEQfri*>NAUp1aT)+uXd;$G@z zr|ZW%&4HOiFCBN-IN=j39Rlux)lri3gO`Tqslc9%Gg{>JL++`X^+?Q!3? zl%29=jJtMY+*F0_D*?v6bBSwz`hop)ZBL=5Lwjy)H8fAsXxNYNr1=};bbVDWBKZvQ zn_~^1Gb{4#=3mjzK*WZeNm**!I|BQD1}<|_DCZv;rQNg7M0Qkb+f`grN;B6@AT<3f z;WPnVAKrY6`sSEf-$Xwcd+T|K_LTX%0ey9xHK=~(GtW#Bgssy^faV9YKlas*Sjl)q zxd8eIg7hPe&E1N4u_df`yybu5v9N}U2|;)R{W`oe&VI?|Fy#y5x7 z54E~)h+KYD!~dWgIiR5YwPv+;?7-&M%}r=ka22APcZ`%*Jv>In?sptAX=Ing+yeL% zs^4{}BMRW8*5Ug2<&#Jr+XcNei;IO{pA++pqR?MHQ9dR! zvBlULx9G!hB?x`OW?1CzqFW`KdF^#_2`OnkRc=^i#6bS7JECPOihEd-f^=mTD0(P`+7>xg~`Hs;DuMY-i=g8(#j7es^r8 z{aB7y5)kj{;G>)6G|+Evo2ScV5iFomXh1WDQJG*(>z@6r)HBZq_wA^%E*TaY*6w>*nTmr;GeVd`(tts1eDeZWaW5B@taZvqcBEwv#YgkJ2xb~F z6LlhztTx-hgRPTKQma1AD1Q6Ool+07lZT60;ofzYrt-Bn!U6-7EG0Vp|2{D<1IOV3 zO(FqXqwdh9I_ize-;dAgCe>IibnX*eBn#PIZmv~s40ex2;A z2(SRqSfIZc6+6LQxw{Hio4=V}YqV#TIub4g6fwU_07V)9L%2ZR$?+hfb(=D7vW%xe z;ORh)g7dwvgmjb!)ebql!f7PKD85hs0MFRfnN~-znkKOArU%_#kPsmOMusvXoJRMO zeskIZGTcf&v$#4a6QByL;R0R#bnEWRqU1rA1jO`cqBj=C_U=O#o_aMQNS7`voWPWL z()evFQQ0WLk&!*(Zi0~mu_}P`63fMI+r}!fXxg|u?3+YXMmccC$JB& zIa^7A%0`_qALo24c!GExGsm*-`dt;8-bJE#UFkdb4IMvzkXLzJKJyr6Eq3fRn!Kzx ze9-HkV(m62$l$*FVNJ!;_}wko>Dl}tbl&?YF@HRFNP3o~;f4j}`xkM2tA&P1CPCx! z>et0wo*S}437h&qj!)cSctGx*Rr}RDJ$A{}S9iE;)3TV|<^@)!xhf z=0hS0DD2eBZbzeJyl6lNezIddGVxe;ypX$deX)RW;~r2GL;{a^a0jN8WEwR zL3kqg2f*xp--mHQI0|=`KMZl8{V5Zl5UsH1nn#Z_)V&M*Kmts@uuLp??OXS$@W(H_ zm#97&3&dYg)j~gZLI9ZH-ZIm_E{xaB8{POAnR*TQDXpzR>+;FZ<7sq?GTy8#?cLaW zCMXKNR2wLG(yEYpty^-Uz2+9et0q?U;7TWRdsP{^8@;7u% z;(zIy)yh(^$oZ4S(e`p80TrwB&YmynB+a0}u8yE}j>jfYl597mOOBmR?egQdd*n7) z4oGDVZM^6+KC!LZ$iP8a3gw0jd(Co8srzd7>p>$EY-P(FB%l&;V7-u@h&Pf(-po!< zro-@(0bdaZIm`0Ed3)UQBw+`^1vEc^89{ty_wE+2cT1Tqi=`DySB{CB(t}+N|ADrc+4od2#X5 zAe?fZeXpbFLt{0tXyuE4vU{Ur1UJ=MZVs&x@mY3v9oU1+C?hXOeot?4_{~M@E?AH( zc>E@-Xl?|&ZV@r@WZlhRu=igbAk3<{K8V1clk6_>a1aLik*);VpY-RkbpPDU)4pC- ziio!!<%-JCxO>j2O)|)w4gXVnBrh>SvC_!yE|DXP+UTPCr=$rY$HCGYuy+m*1RIrc zs5ym;YN%l-)cNk+-!HOKpI&R}l^cZIk7tk(b74v%x@>vzn#^}g5278v7H6-vvv&Q8 z_!HpI_w0V8;Rjl|x#7>b%`TJfSv0I`o@7r=2*#aM;6s*lqiUWU_fzqmTL%hLX0C&( z<=U33!#s08TY0gDIgH)-5}@(DR+=G{(Yy6T)$(7y<%+ltzkb*F9*p@s1KDhOXkc*$ zDr&f+eTS4}N81$z34Gr-w(fq$|GlN!#s>>VdM(S_shEGo=d!GZZCYWzp@WqalZpEXm z*Bo=B?$Y-s)%OaO{G8EGEjPB-f8^}8ZeW|NJWMUXVvvrK;j;Z~`fbtH5Z}S|sgtak z@XKre@xCZdgBsZ)9SAF*K1~$vT+`*_{aJmJ*JY%!>9up_JC1wf6%&~qL>YD}0@4^` zZYt&TB=UmAml-+SNljU|dPN}U({K~ilw{`UE(F&Ro7HUvh#c=$i~Z=kH_+ZEis~bf za_s1-4WA0Pc`IDY!3KVs>y2!;p|!{7%(zKj0iK91W%r8&s#0$KabV6Fe}4;92CGwG zzVw+o`sP$*kq}hz)5W($Vf><71*;3Lm;KchnM?w-qn!COwU{ZKF~_7QE#qJ7=GIu^ zbQR%5sedb2e@gD4JSV+Sb$`ULn!d9_{v&G<|6Qh?c#)0gB1Yl0P86b51Q^S+B1yc; z)9aExU&?+|(Fehtu|Yut*lH*q40cMeqiawFVQ|==nr5WBK>KvnSBvJx8F|h3PjCm% zSLrnVhYmi?6ObD=1HMasG{@Je&c;Ft#l?QEN@cj5^nS4aRcVguj((b}5uGNZI2vZl zWB#zJGdQHiX}b9KE^@J|Pca&fh}O`UBdh#jSX4@t;&iy-77$sS)vwl|rN7{^X45YC zvGDO=xu3i8c*`xcjYMHyr_t?z0KBvtLP¬xTJwN+_=N@R?ItW&75Cyg7#>3F$b# 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%0D|zCu?L0j%GZ;fe=U@VNj@*Q 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 literal 0 HcmV?d00001 From 6a48fb602272fca1b6ce26aa3c7da53ced343c42 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 05:02:36 +0200 Subject: [PATCH 68/84] docs: more gap in banner (logo further right) --- README.md | 2 +- docs/banner-dark.png | Bin 77279 -> 78283 bytes docs/banner-light.png | Bin 77537 -> 78560 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 376427b..aaf5b4b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - invisible_playwright + invisible_playwright

A modified Firefox that passes every bot detection test.

diff --git a/docs/banner-dark.png b/docs/banner-dark.png index 40591b0e758a8758527aefb4deebc7063817ff5d..5117c92bb959c8b44b111112b370153782df7652 100644 GIT binary patch literal 78283 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≫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 diff --git a/docs/banner-light.png b/docs/banner-light.png index 4296d6d63613f59f976af140a34d3c4a273718fd..d1aea8e30c0a62defbb437ee082871c82e88288d 100644 GIT binary patch literal 78560 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¬xTJwN+_=N@R?ItW&75Cyg7#>3F$b# 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%0D|zCu?L0j%GZ;fe=U@VNj@*Q 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 +
invisible_playwright +

A modified Firefox that passes every bot detection test.

From d434ee4059c60dbc56d7ea3dc86d9af4c723c315 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 05:13:30 +0200 Subject: [PATCH 70/84] docs: bigger logo in banner --- docs/banner-dark.png | Bin 78283 -> 108895 bytes docs/banner-light.png | Bin 78560 -> 109066 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/banner-dark.png b/docs/banner-dark.png index 5117c92bb959c8b44b111112b370153782df7652..3c8605e9c568467251573bb6dccde7195cd09ca6 100644 GIT binary patch literal 108895 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 Z{k_(sDrqe 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 O#Ru9rT&G(5-1}dCj1ac~ literal 78283 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%0D7@co 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

)>qY%qY%#gBi_*wN3& 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

@@ -32,7 +32,7 @@ Anti-bots ask two questions. invisible_playwright answers yes to both. - Every click, hover and drag follows a natural mouse path with human timing, no teleporting cursor. - Each input is byte-identical to a real mouse: real input source, pressure, trusted events. -Driven by the standard Playwright API. Full breakdown: [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). +Driven by the standard Playwright API. Full breakdown: [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch). --- @@ -181,7 +181,7 @@ Related projects that cover similar ground: ## License -MIT - see [LICENSE](LICENSE). The patched Firefox binary is distributed under the MPL-2.0 (Firefox upstream license). The C++ patches against mozilla-central that produce that binary are at [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox). +MIT - see [LICENSE](LICENSE). The patched Firefox binary is distributed under the MPL-2.0 (Firefox upstream license). The C++ patches against mozilla-central that produce that binary are at [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch). --- diff --git a/SECURITY.md b/SECURITY.md index e740df4..47e7063 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -36,7 +36,7 @@ In scope: Out of scope: -- Vulnerabilities in the patched Firefox source — report to [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox/security/advisories/new) +- Vulnerabilities in the patched Firefox source — report to [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch/security/advisories/new) - Upstream Firefox / mozilla-central — report to Mozilla directly - Third-party dependencies — report to those projects diff --git a/scripts/gen_release_notes.py b/scripts/gen_release_notes.py index 7ea4296..9df8e4a 100644 --- a/scripts/gen_release_notes.py +++ b/scripts/gen_release_notes.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 """Generate the GitHub release body for a firefox-N build from the actual -invisible_firefox commits that went into it. +firefox_antidetect_patch commits that went into it. The release tag (firefox-N) lives on the wrapper, but the binary's changes live -on the SOURCE repo (feder-cr/invisible_firefox). We never deep-clone that history +on the SOURCE repo (feder-cr/firefox_antidetect_patch). We never deep-clone that history (it's a full Firefox fork); instead we use GitHub's compare API to list the commits between the PREVIOUS release's source commit and this one, and turn their subject lines into a short human-readable "What changed" list. @@ -20,7 +20,7 @@ subjects as plain bullets. Quality rides on writing good commit subjects. Usage: python scripts/gen_release_notes.py --tag firefox-10 --current \ - [--prev-sha ] [--source-repo feder-cr/invisible_firefox] + [--prev-sha ] [--source-repo feder-cr/firefox_antidetect_patch] # reads GITHUB_TOKEN from the env for the compare API (optional for public). """ from __future__ import annotations @@ -92,16 +92,16 @@ def build_body(tag: str, current_sha: str, bullets: list[str]) -> str: "`xattr -dr com.apple.quarantine Firefox.app`", ] if short: - parts += ["", f"Built from invisible_firefox @{short}."] + parts += ["", f"Built from firefox_antidetect_patch @{short}."] return "\n".join(parts) def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--tag", required=True, help="release tag, e.g. firefox-10") - ap.add_argument("--current", required=True, help="invisible_firefox SHA this build was built from") + ap.add_argument("--current", required=True, help="firefox_antidetect_patch SHA this build was built from") ap.add_argument("--prev-sha", default="", help="previous release's source SHA (omit for none)") - ap.add_argument("--source-repo", default="feder-cr/invisible_firefox") + ap.add_argument("--source-repo", default="feder-cr/firefox_antidetect_patch") args = ap.parse_args() token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN") From 17bab0cca4315840d4105edf8fe1fb1fa5e0d3ec Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sat, 4 Jul 2026 20:00:27 +0200 Subject: [PATCH 74/84] ci: move the binary-release workflows to firefox_antidetect_patch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release/verify-assets/verify-cloak/republish workflows now live on the source repo (feder-cr/firefox_antidetect_patch), so the built binaries are published there — the natural home next to the source they are built from, and reachable the same way by every consumer of invisible-core. The wrapper keeps its own test workflows (tests/e2e/webrtc-e2e/ firefox-launch-matrix) and the scripts the source-side release jobs check out from here (ci_drive_gate.py, gen_release_notes.py, playwright_pin.txt, tests/test_cloak.py). --- .github/workflows/release.yml | 479 ---------------------------- .github/workflows/republish.yml | 214 ------------- .github/workflows/verify-assets.yml | 111 ------- .github/workflows/verify-cloak.yml | 103 ------ 4 files changed, 907 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/republish.yml delete mode 100644 .github/workflows/verify-assets.yml delete mode 100644 .github/workflows/verify-cloak.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 862ab8d..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,479 +0,0 @@ -# ───────────────────────────────────────────────────────────────────────────── -# release.yml — build all 5 patched-Firefox targets at $0 and publish them as -# DRAFT GitHub Release assets, named per the wrapper contract (constants.ARCHIVE_NAME). -# DRAFT on purpose: a human runs the realness gate and only THEN un-drafts + bumps -# BINARY_VERSION. Nothing auto-ships (issue #14 lesson). -# -# PACKAGING (issue #14: dangling symlinks broke 265 downloads — never again): -# Linux → cp -aL (dereference ALL symlinks into real files) + rm dev tools + -# strip + sanitize + tar at ROOT, then validate_release.py as a HARD -# in-pipeline gate (the exact battle-tested script from the source repo). -# Win → mach package; zip the CONTENTS of dist/firefox (clean tree, NOT -# dist/bin) so firefox.exe sits at the zip ROOT. -# macOS → mach package; ad-hoc codesign the .app; PRESERVE its internal relative -# symlinks (a .app legitimately has them — cp -aL would break it); verify -# every symlink is relative+internal; tar the bundle. --version self-gate. -# -# DRIVE GATE (the firefox-8 catcher): after build, every binary is DRIVEN by -# Playwright on its native runner (launch via juggler + real page + JS roundtrip, -# headless, no screenshot → GPU-free, zero proxy). A juggler-less binary renders -# a screenshot fine but is undrivable — only an actual drive catches that. The -# proxy realness gate (fppro/webrtc) stays LOCAL — it needs secrets. -# -# Trigger: push a tag `firefox-N`, or run manually. Hybrid runners, all free. -# ───────────────────────────────────────────────────────────────────────────── -name: release - -on: - push: - tags: ['firefox-*'] - workflow_dispatch: - inputs: - source_ref: - description: 'firefox_antidetect_patch ref to build' - default: 'stealth/150' - release_tag: - description: 'release tag to publish the draft under (e.g. firefox-9)' - required: true - -env: - SOURCE_REPO: feder-cr/firefox_antidetect_patch - SOURCE_REF: ${{ github.event.inputs.source_ref || 'stealth/150' }} - -jobs: - build: - name: build-${{ matrix.leg }} - runs-on: ${{ matrix.runner }} - timeout-minutes: 350 - strategy: - fail-fast: false - matrix: - include: - - leg: linux-x86_64 - runner: ubuntu-24.04 - family: linux - target: '' - rust_target: x86_64-unknown-linux-gnu - win_disables: 'no' - extra_pkgs: '' - asset: firefox-150.0.1-stealth-linux-x86_64.tar.gz - - leg: linux-arm64 - runner: ubuntu-24.04-arm - family: linux - target: '' - rust_target: aarch64-unknown-linux-gnu - win_disables: 'no' - extra_pkgs: '' - asset: firefox-150.0.1-stealth-linux-arm64.tar.gz - - leg: win-x86_64 - runner: ubuntu-24.04 - family: win - target: x86_64-pc-windows-msvc - rust_target: x86_64-pc-windows-msvc - win_disables: 'yes' - extra_pkgs: 'msitools p7zip-full zip' - asset: firefox-150.0.1-stealth-win-x86_64.zip - - leg: macos-arm64 - runner: macos-15 - family: mac - target: aarch64-apple-darwin - rust_target: aarch64-apple-darwin - win_disables: 'no' - extra_pkgs: '' - asset: firefox-150.0.1-stealth-macos-arm64.tar.gz - - leg: macos-x86_64 - runner: macos-15-intel - family: mac - target: x86_64-apple-darwin - rust_target: x86_64-apple-darwin - win_disables: 'no' - extra_pkgs: '' - asset: firefox-150.0.1-stealth-macos-x86_64.tar.gz - steps: - - name: Free disk + 16G swap (Linux runners) - if: matrix.family != 'mac' - run: | - sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android \ - /usr/local/share/boost "${AGENT_TOOLSDIRECTORY:-/opt/hostedtoolcache}" 2>/dev/null || true - sudo fallocate -l 16G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile || true - - - name: Checkout patched Firefox source - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: - repository: ${{ env.SOURCE_REPO }} - ref: ${{ env.SOURCE_REF }} - fetch-depth: 1 - - # Record which firefox_antidetect_patch commit this build came from. The publish - # job turns the range previous-release..this commit into the release notes - # (scripts/gen_release_notes.py), and re-publishes it as a source-commit.txt - # asset so the NEXT release knows where to start the changelog. One leg is - # enough — all legs check out the same SOURCE_REF. - - name: Record source commit (for auto release notes) - if: matrix.leg == 'linux-x86_64' - shell: bash - run: git rev-parse HEAD > source-commit.txt && cat source-commit.txt - - name: Upload source-commit artifact - if: matrix.leg == 'linux-x86_64' - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 - with: - name: source-commit - path: source-commit.txt - if-no-files-found: error - retention-days: 7 - - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - - name: Install Linux build tools - if: matrix.family != 'mac' - run: | - sudo apt-get update - sudo apt-get install -y util-linux binutils ${{ matrix.extra_pkgs }} - - - name: Select Xcode 26.2 + export SDK path (macOS) - if: matrix.family == 'mac' - run: | - sudo xcode-select -s /Applications/Xcode_26.2.app - SDKP="$(xcrun --show-sdk-path)" - echo "SDK_PATH=$SDKP" >> "$GITHUB_ENV" - echo "macOS SDK $(xcrun --sdk macosx --show-sdk-version) at $SDKP" - - - name: Add Rust target - run: rustup target add ${{ matrix.rust_target }} || true - - - name: Extend the repo .mozconfig (NO mold; +target/SDK as needed) - run: | - test -f .mozconfig || { echo "ERROR: no .mozconfig in source"; exit 1; } - rm -f mozconfig - { - echo "" - echo "# --- release CI levers for ${{ matrix.leg }} (mold intentionally OFF — it segfaults libxul) ---" - echo "ac_add_options --disable-debug-symbols" - } >> .mozconfig - if [ -n "${{ matrix.target }}" ]; then echo "ac_add_options --target=${{ matrix.target }}" >> .mozconfig; fi - if [ "${{ matrix.family }}" = "mac" ]; then echo "ac_add_options --with-macos-sdk=$SDK_PATH" >> .mozconfig; fi - if [ "${{ matrix.win_disables }}" = "yes" ]; then - { echo "ac_add_options --disable-default-browser-agent"; - echo "ac_add_options --disable-maintenance-service"; - echo "ac_add_options --disable-update-agent"; } >> .mozconfig - fi - if [ "${{ matrix.family }}" = "mac" ]; then NCPU=$(sysctl -n hw.ncpu); else NCPU=4; fi - { echo "mk_add_options MOZ_PARALLEL_BUILD=$NCPU"; - echo "mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-rel"; } >> .mozconfig - echo "----- final .mozconfig -----"; cat .mozconfig - - - name: Build - run: ./mach build - - # ── LINUX: dereference symlinks (issue #14) + strip + sanitize + tar@root + GATE - - name: Package + validate (Linux) - if: matrix.family == 'linux' - run: | - set -e - DIST=obj-rel/dist/bin - STAGING=staging - rm -rf "$STAGING"; mkdir -p "$STAGING" out - cp -aL "$DIST/." "$STAGING/" # -L: dereference ALL symlinks into real files - N=$(find "$STAGING" -type l | wc -l) - [ "$N" -eq 0 ] || { echo "ERROR: $N symlinks remain after cp -aL"; exit 1; } - for t in xpcshell certutil pk12util rapl; do rm -f "$STAGING/$t"; done - # JUGGLER GATE: the binary is undrivable by Playwright without it (see 70-known-bugs) - { [ -e "$STAGING/chrome/juggler.manifest" ] && [ -d "$STAGING/chrome/juggler" ]; } \ - || { echo "ERROR: juggler missing from package (chrome/juggler) — Playwright can't drive it"; exit 1; } - echo "juggler GATE OK (loose chrome/juggler present)" - find "$STAGING" -type f \ - \( -name '*.so' -o -name firefox -o -name firefox-bin -o -name plugin-container \ - -o -name pingsender -o -name glxtest -o -name vaapitest -o -name updater \) \ - -exec strip --strip-debug {} + 2>/dev/null || true - STAGING="$STAGING" python3 scripts/linux_sanitize.py || true # no-op in CI (no /home/feder), defensive - tar --owner=0 --group=0 --numeric-owner --mtime="2026-01-01 00:00:00 UTC" \ - -czf "out/${{ matrix.asset }}" -C "$STAGING" . # firefox at ROOT - echo "=== HARD GATE: scripts/validate_release.py (the issue-#14 protector) ===" - python3 scripts/validate_release.py --linux "out/${{ matrix.asset }}" --linux-only - ls -la out/ - - # ── WINDOWS (cross): zip the CLEAN dist/firefox tree, firefox.exe at root - - name: Package (Windows cross) - if: matrix.family == 'win' - run: | - set -e - # Do NOT swallow a mach failure: `./mach package || echo` lets set -e pass - # and would fall through to a stale tree. A release MUST come from the clean - # dist/firefox; dist/bin is the dev tree (cruft + loose juggler that masked - # the firefox-7/8 packaging bugs), never acceptable for a release. - ./mach package - [ -f obj-rel/dist/firefox/firefox.exe ] \ - || { echo "ERROR: mach package did not produce a clean dist/firefox tree"; exit 1; } - WIN_APP=obj-rel/dist/firefox - echo "packaging from: $WIN_APP" - # JUGGLER GATE: omni.ja must carry juggler (else Playwright can't drive it) - [ -f "$WIN_APP/omni.ja" ] || { echo "ERROR: no omni.ja in $WIN_APP"; exit 1; } - python3 -c "import zipfile,sys; sys.exit(0 if any('juggler' in n.lower() for n in zipfile.ZipFile('$WIN_APP/omni.ja').namelist()) else 1)" \ - || { echo "ERROR: juggler missing from $WIN_APP/omni.ja — Playwright can't drive it"; exit 1; } - echo "juggler GATE OK (win)" - mkdir -p out - ( cd "$WIN_APP" && zip -qr "$GITHUB_WORKSPACE/out/${{ matrix.asset }}" . ) # firefox.exe at zip ROOT - ls -la out/ - - # ── macOS: package .app, ad-hoc sign, verify relative-internal symlinks, --version gate, tar - - name: Package + validate (macOS) - if: matrix.family == 'mac' - run: | - set -e - ./mach package - APP="$(find obj-rel/dist -maxdepth 2 -name '*.app' -type d | head -1)" - [ -n "$APP" ] || { echo "ERROR: no .app produced"; exit 1; } - echo "built app: $APP" - # JUGGLER GATE: the .app's omni.ja must carry juggler (else Playwright can't drive it) - python3 -c "import zipfile,sys,glob; jas=glob.glob('$APP/Contents/Resources/omni.ja')+glob.glob('$APP/Contents/Resources/browser/omni.ja'); sys.exit(0 if jas and any(any('juggler' in n.lower() for n in zipfile.ZipFile(j).namelist()) for j in jas) else 1)" \ - || { echo "ERROR: juggler missing from .app omni.ja — Playwright can't drive it"; exit 1; } - echo "juggler GATE OK (mac)" - codesign --force --deep --sign - --timestamp=none "$APP" - codesign --verify --deep --strict --verbose=2 "$APP" - echo "=== --version GATE ===" - "$APP/Contents/MacOS/firefox" --version - echo "=== critical files present ===" - for need in "Contents/MacOS/firefox" "Contents/Info.plist"; do - [ -e "$APP/$need" ] || { echo "ERROR: missing $need"; exit 1; } - done - echo "=== Info.plist well-formed + required keys (a malformed plist → Finder 'damaged') ===" - plutil -lint "$APP/Contents/Info.plist" - for key in CFBundleExecutable CFBundleIdentifier CFBundleShortVersionString; do - plutil -extract "$key" raw -o - "$APP/Contents/Info.plist" >/dev/null \ - || { echo "ERROR: Info.plist missing $key"; exit 1; } - done - EXEC="$(plutil -extract CFBundleExecutable raw -o - "$APP/Contents/Info.plist")" - [ -e "$APP/Contents/MacOS/$EXEC" ] \ - || { echo "ERROR: CFBundleExecutable '$EXEC' has no matching binary in Contents/MacOS"; exit 1; } - echo "=== verify NO absolute symlinks in the .app (relative-internal ones are fine) ===" - BAD="$(find "$APP" -type l -print0 | xargs -0 -I{} sh -c 't=$(readlink "{}"); case "$t" in /*) echo "{} -> $t";; esac')" - [ -z "$BAD" ] || { echo "ERROR: absolute symlinks in .app (break on user machines):"; echo "$BAD" | head -5; exit 1; } - echo "mac .app OK: critical files present, no absolute symlinks" - STABLE="$(dirname "$APP")/Firefox.app" - [ "$APP" = "$STABLE" ] || mv "$APP" "$STABLE" - mkdir -p out - tar -czf "out/${{ matrix.asset }}" -C "$(dirname "$STABLE")" Firefox.app # preserves internal symlinks - ls -la out/ - - - name: Upload build artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 - with: - name: asset-${{ matrix.leg }} - path: out/${{ matrix.asset }} - if-no-files-found: error - retention-days: 7 - - # DRIVE GATE — the firefox-8 catcher. A raw `firefox --screenshot` proves - # nothing about automation: a juggler-less binary renders fine and ships - # broken (firefox-8 did exactly that). So we DRIVE every binary the way users - # will: Playwright launches it over the juggler pipe, loads a real page, and - # round-trips JS. A binary missing/broken juggler throws TargetClosedError - # here and the release never publishes. Headless, NO screenshot → GPU-free, - # so it can't false-fail on the GPU-less hosted runners. Zero proxy / zero - # secrets → safe in public CI (the proxy realness gate stays local, by design). - # Each leg runs on its NATIVE runner so we test the real artifact, not a cross - # surrogate. Playwright is pinned to a version validated against this build's - # juggler; bump it in lockstep when the juggler is re-synced from upstream. - gate: - name: gate-${{ matrix.leg }} - needs: build - runs-on: ${{ matrix.runner }} - timeout-minutes: 25 - strategy: - fail-fast: false - matrix: - include: - # `extra: --full` adds the mouse/keyboard/canvas/navsurface interaction - # checks. Only on linux-x86_64 (historically the most reliable hosted - # runner): the interaction code is platform-identical JS (omni.ja), so - # one reliable full run catches a firefox-2-class regression for all - # platforms. The other legs run SMOKE (launch+http+UA+webdriver) — the - # firefox-8/juggler catcher — which is robust even on the flaky - # windows-latest runner. See scripts/ci_drive_gate.py. - - leg: linux-x86_64 - runner: ubuntu-24.04 - kind: linux - asset: firefox-150.0.1-stealth-linux-x86_64.tar.gz - extra: '--full' - - leg: linux-arm64 - runner: ubuntu-24.04-arm - kind: linux - asset: firefox-150.0.1-stealth-linux-arm64.tar.gz - extra: '' - - leg: win-x86_64 - runner: windows-latest - kind: win - asset: firefox-150.0.1-stealth-win-x86_64.zip - extra: '' - - leg: macos-arm64 - runner: macos-15 - kind: mac - asset: firefox-150.0.1-stealth-macos-arm64.tar.gz - extra: '' - - leg: macos-x86_64 - runner: macos-15-intel - kind: mac - asset: firefox-150.0.1-stealth-macos-x86_64.tar.gz - extra: '' - steps: - - name: Checkout wrapper (for scripts/ci_drive_gate.py) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Download asset - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: - name: asset-${{ matrix.leg }} - path: art - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Install Playwright driver (no bundled browser — we override executable_path) - # Pin from a SINGLE source (scripts/playwright_pin.txt) so release.yml and - # verify-assets.yml can't drift to different versions. The drive gate then - # ENFORCES playwright↔juggler compatibility: an incompatible pin fails the - # launch/drive (TargetClosedError / protocol error) and nothing publishes. - # Bump the pin file in lockstep when the juggler is re-synced from upstream. - shell: bash - run: python -m pip install --quiet "playwright==$(cat scripts/playwright_pin.txt)" - - name: Linux system deps for headless firefox - if: matrix.kind == 'linux' - run: sudo "$(which python)" -m playwright install-deps firefox - - name: Extract + locate firefox binary - shell: bash - run: | - set -e - mkdir -p ff - A="art/${{ matrix.asset }}" - case "${{ matrix.kind }}" in - win) python -c "import zipfile; zipfile.ZipFile('$A').extractall('ff')"; EXE="ff/firefox.exe";; - linux) tar xzf "$A" -C ff; EXE="ff/firefox";; - mac) tar xzf "$A" -C ff; EXE="ff/Firefox.app/Contents/MacOS/firefox";; - esac - [ -e "$EXE" ] || { echo "ERROR: firefox binary not found at $EXE"; exit 1; } - chmod +x "$EXE" 2>/dev/null || true - echo "FF_EXE=$EXE" >> "$GITHUB_ENV" - echo "located: $EXE" - - name: DRIVE GATE — Playwright launch via juggler + real page (+ interaction on --full) - shell: bash - run: python scripts/ci_drive_gate.py "$FF_EXE" ${{ matrix.extra }} - - # CLOAK + WEBGL-MASKING GUARDS — run the wrapper's e2e cloak/gamma checks - # against THIS leg's freshly-built artifact, on its native runner. The - # wrapper's headless=True is headed+hidden (cloak on Win/macOS, its own - # Xvfb on Linux). Linux (Xvfb + llvmpipe) and Windows (WARP) give a - # software WebGL context on the GPU-less hosts, so the WebGL-dependent - # assertions run there. macOS GitHub runners expose NO WebGL in the CI - # session at all (even vanilla Firefox; macOS has no software-GL fallback), - # so on the mac legs the WebGL checks self-skip and the cloak is validated - # via its non-blank screenshot + CGWindowAlpha == 0. test_cloak asserts the - # window is hidden (Windows DWMWA_CLOAKED / macOS CGWindowAlpha) AND still - # renders — the macOS leg is the only place the cocoa cloak patch gets RUN. - # The webgl guard catches a regression of the gamma readPixels noise back to - # the pixelscan-maskable ±1 spike form (covered on Linux + Windows). - - name: Install pyobjc Quartz (macOS — to read the cloak window alpha) - if: matrix.kind == 'mac' - run: python -m pip install --quiet pyobjc-framework-Quartz - - name: Cloak + WebGL-masking guards (headed) - shell: bash - run: | - python -m pip install --quiet ".[dev]" - INVPW_BINARY_PATH="$FF_EXE" python -m pytest \ - tests/test_cloak.py \ - "tests/test_fingerprint_surface.py::test_webgl_readpixels_no_masking_signature" \ - -m e2e -o addopts='' -q - - publish: - name: publish-draft-release - needs: [build, gate] - runs-on: ubuntu-24.04 - permissions: - contents: write - steps: - - name: Checkout wrapper (for scripts/gen_release_notes.py) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Download all build assets - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: { pattern: asset-*, path: dl, merge-multiple: true } - - name: Download source-commit metadata - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: { name: source-commit, path: src-meta } - - name: Assert all 5 target archives present (no silent partial release) - run: | - cd dl - EXPECTED=" - firefox-150.0.1-stealth-linux-x86_64.tar.gz - firefox-150.0.1-stealth-linux-arm64.tar.gz - firefox-150.0.1-stealth-win-x86_64.zip - firefox-150.0.1-stealth-macos-arm64.tar.gz - firefox-150.0.1-stealth-macos-x86_64.tar.gz - " - for a in $EXPECTED; do - [ -s "$a" ] || { echo "ERROR: missing/empty release asset: $a (a build leg silently dropped out?)"; exit 1; } - done - echo "all 5 target archives present" - - name: Generate checksums.txt - run: | - cd dl; ls -la - # explicit glob — never include checksums.txt itself (the `*`-includes-itself trap) - sha256sum firefox-150.0.1-stealth-* > checksums.txt - echo "----- checksums.txt -----"; cat checksums.txt - - name: Resolve release tag - id: tag - run: | - TAG="${{ github.event.inputs.release_tag }}" - [ -z "$TAG" ] && TAG="${GITHUB_REF_NAME}" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - # bare revision number for the release title: firefox-10 -> 10 - N="${TAG#firefox-}" - echo "num=$N" >> "$GITHUB_OUTPUT" - # previous release tag, for the changelog range (firefox-10 -> firefox-9) - case "$N" in (*[!0-9]*|'') echo "prevtag=" >> "$GITHUB_OUTPUT";; - (*) echo "prevtag=firefox-$((N-1))" >> "$GITHUB_OUTPUT";; esac - echo "publishing DRAFT release for tag: $TAG" - - name: Build release notes from the source commits - id: notes - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - set -e - CUR="$(cat src-meta/source-commit.txt 2>/dev/null | tr -d '[:space:]')" - echo "this build's source commit: ${CUR:-}" - # previous release's recorded source commit — gives the changelog range. - # Missing (first automated notes / firefox-0) -> notes omit the changelog. - PREV="" - PREVTAG="${{ steps.tag.outputs.prevtag }}" - if [ -n "$PREVTAG" ] && gh release download "$PREVTAG" -R "${{ github.repository }}" \ - --pattern source-commit.txt --dir prev 2>/dev/null; then - PREV="$(cat prev/source-commit.txt | tr -d '[:space:]')" - echo "previous ($PREVTAG) source commit: $PREV" - else - echo "no previous source-commit.txt — changelog section omitted this time" - fi - python scripts/gen_release_notes.py --tag "${{ steps.tag.outputs.tag }}" \ - --current "$CUR" --prev-sha "$PREV" --source-repo "${{ env.SOURCE_REPO }}" > body.md - echo "----- generated body.md -----"; cat body.md - # publish THIS build's source commit so the next release can diff from it - cp src-meta/source-commit.txt dl/source-commit.txt - - name: Create DRAFT release with all assets - uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 - with: - tag_name: ${{ steps.tag.outputs.tag }} - name: firefox_antidetect_patch (150.0.1) rev ${{ steps.tag.outputs.num }} - draft: true - prerelease: false - fail_on_unmatched_files: true - files: | - dl/*.tar.gz - dl/*.zip - dl/checksums.txt - dl/source-commit.txt - body_path: body.md - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/republish.yml b/.github/workflows/republish.yml deleted file mode 100644 index 5595b57..0000000 --- a/.github/workflows/republish.yml +++ /dev/null @@ -1,214 +0,0 @@ -# ───────────────────────────────────────────────────────────────────────────── -# republish.yml — re-gate + publish an EXISTING build's artifacts WITHOUT rebuilding. -# -# When a release run's 5 builds all SUCCEEDED but the publish was blocked by a -# GATE/TEST bug (not a binary defect), rebuilding all five targets (hours) just to -# re-run a few-minute test is wasteful. This workflow downloads the binary artifacts -# from a prior `release` run, re-runs the (now-fixed) drive gate + cloak/WebGL guards -# against those exact byte-identical binaries on their native runners, and — only if -# green — publishes the DRAFT release. Same publish logic as release.yml (draft, notes, -# checksums, source-commit) so the human still runs the realness gate before un-drafting. -# -# Inputs: -# build_run_id : the `release` run whose `asset-*` + `source-commit` artifacts to reuse -# (must be within the 7-day artifact retention window). -# release_tag : tag to publish the draft under (e.g. firefox-11). -# ───────────────────────────────────────────────────────────────────────────── -name: republish - -on: - workflow_dispatch: - inputs: - build_run_id: - description: 'release run id whose built artifacts to reuse (no rebuild)' - required: true - release_tag: - description: 'release tag to publish the draft under (e.g. firefox-11)' - required: true - -env: - SOURCE_REPO: feder-cr/firefox_antidetect_patch - -jobs: - gate: - name: gate-${{ matrix.leg }} - runs-on: ${{ matrix.runner }} - timeout-minutes: 25 - permissions: - actions: read - contents: read - strategy: - fail-fast: false - matrix: - include: - - leg: linux-x86_64 - runner: ubuntu-24.04 - kind: linux - asset: firefox-150.0.1-stealth-linux-x86_64.tar.gz - extra: '--full' - - leg: linux-arm64 - runner: ubuntu-24.04-arm - kind: linux - asset: firefox-150.0.1-stealth-linux-arm64.tar.gz - extra: '' - - leg: win-x86_64 - runner: windows-latest - kind: win - asset: firefox-150.0.1-stealth-win-x86_64.zip - extra: '' - - leg: macos-arm64 - runner: macos-15 - kind: mac - asset: firefox-150.0.1-stealth-macos-arm64.tar.gz - extra: '' - - leg: macos-x86_64 - runner: macos-15-intel - kind: mac - asset: firefox-150.0.1-stealth-macos-x86_64.tar.gz - extra: '' - steps: - - name: Checkout wrapper (for scripts/ci_drive_gate.py — the FIXED gate) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Download asset from the existing build run (no rebuild) - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: - name: asset-${{ matrix.leg }} - path: art - run-id: ${{ github.event.inputs.build_run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Install Playwright driver (pinned, no bundled browser) - shell: bash - run: python -m pip install --quiet "playwright==$(cat scripts/playwright_pin.txt)" - - name: Linux system deps for headless firefox - if: matrix.kind == 'linux' - run: sudo "$(which python)" -m playwright install-deps firefox - - name: Extract + locate firefox binary - shell: bash - run: | - set -e - mkdir -p ff - A="art/${{ matrix.asset }}" - case "${{ matrix.kind }}" in - win) python -c "import zipfile; zipfile.ZipFile('$A').extractall('ff')"; EXE="ff/firefox.exe";; - linux) tar xzf "$A" -C ff; EXE="ff/firefox";; - mac) tar xzf "$A" -C ff; EXE="ff/Firefox.app/Contents/MacOS/firefox";; - esac - [ -e "$EXE" ] || { echo "ERROR: firefox binary not found at $EXE"; exit 1; } - chmod +x "$EXE" 2>/dev/null || true - echo "FF_EXE=$EXE" >> "$GITHUB_ENV" - echo "located: $EXE" - - name: DRIVE GATE — Playwright launch via juggler + real page (+ interaction on --full) - shell: bash - run: python scripts/ci_drive_gate.py "$FF_EXE" ${{ matrix.extra }} - - name: Install pyobjc Quartz (macOS — to read the cloak window alpha) - if: matrix.kind == 'mac' - run: python -m pip install --quiet pyobjc-framework-Quartz - - name: Cloak + WebGL-masking guards (headed) - shell: bash - run: | - python -m pip install --quiet ".[dev]" - INVPW_BINARY_PATH="$FF_EXE" python -m pytest \ - tests/test_cloak.py \ - "tests/test_fingerprint_surface.py::test_webgl_readpixels_no_masking_signature" \ - -m e2e -o addopts='' -q - - publish: - name: publish-draft-release - needs: [gate] - runs-on: ubuntu-24.04 - permissions: - actions: read - contents: write - steps: - - name: Checkout wrapper (for scripts/gen_release_notes.py) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Download all build assets from the existing build run (no rebuild) - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: - pattern: asset-* - path: dl - merge-multiple: true - run-id: ${{ github.event.inputs.build_run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Download source-commit metadata from the existing build run - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: - name: source-commit - path: src-meta - run-id: ${{ github.event.inputs.build_run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Assert all 5 target archives present (no silent partial release) - run: | - cd dl - EXPECTED=" - firefox-150.0.1-stealth-linux-x86_64.tar.gz - firefox-150.0.1-stealth-linux-arm64.tar.gz - firefox-150.0.1-stealth-win-x86_64.zip - firefox-150.0.1-stealth-macos-arm64.tar.gz - firefox-150.0.1-stealth-macos-x86_64.tar.gz - " - for a in $EXPECTED; do - [ -s "$a" ] || { echo "ERROR: missing/empty release asset: $a (a build leg silently dropped out?)"; exit 1; } - done - echo "all 5 target archives present" - - name: Generate checksums.txt - run: | - cd dl; ls -la - sha256sum firefox-150.0.1-stealth-* > checksums.txt - echo "----- checksums.txt -----"; cat checksums.txt - - name: Resolve release tag - id: tag - run: | - TAG="${{ github.event.inputs.release_tag }}" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" - N="${TAG#firefox-}" - echo "num=$N" >> "$GITHUB_OUTPUT" - case "$N" in (*[!0-9]*|'') echo "prevtag=" >> "$GITHUB_OUTPUT";; - (*) echo "prevtag=firefox-$((N-1))" >> "$GITHUB_OUTPUT";; esac - echo "publishing DRAFT release for tag: $TAG" - - name: Build release notes from the source commits - id: notes - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - set -e - CUR="$(cat src-meta/source-commit.txt 2>/dev/null | tr -d '[:space:]')" - echo "this build's source commit: ${CUR:-}" - PREV="" - PREVTAG="${{ steps.tag.outputs.prevtag }}" - if [ -n "$PREVTAG" ] && gh release download "$PREVTAG" -R "${{ github.repository }}" \ - --pattern source-commit.txt --dir prev 2>/dev/null; then - PREV="$(cat prev/source-commit.txt | tr -d '[:space:]')" - echo "previous ($PREVTAG) source commit: $PREV" - else - echo "no previous source-commit.txt — changelog section omitted this time" - fi - python scripts/gen_release_notes.py --tag "${{ steps.tag.outputs.tag }}" \ - --current "$CUR" --prev-sha "$PREV" --source-repo "${{ env.SOURCE_REPO }}" > body.md - echo "----- generated body.md -----"; cat body.md - cp src-meta/source-commit.txt dl/source-commit.txt - - name: Create DRAFT release with all assets - uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 - with: - tag_name: ${{ steps.tag.outputs.tag }} - name: firefox_antidetect_patch (150.0.1) rev ${{ steps.tag.outputs.num }} - draft: true - prerelease: false - fail_on_unmatched_files: true - files: | - dl/*.tar.gz - dl/*.zip - dl/checksums.txt - dl/source-commit.txt - body_path: body.md - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/verify-assets.yml b/.github/workflows/verify-assets.yml deleted file mode 100644 index b4d3567..0000000 --- a/.github/workflows/verify-assets.yml +++ /dev/null @@ -1,111 +0,0 @@ -# ───────────────────────────────────────────────────────────────────────────── -# verify-assets.yml — re-runnable DRIVE GATE for an EXISTING release's assets. -# -# release.yml drive-gates every binary it builds. This does the same drive test -# WITHOUT rebuilding: it downloads a release's already-published assets (works on -# DRAFT releases too via GITHUB_TOKEN) and drives each one on its native runner. -# -# Use it to: -# • drive-test a release that was built before the in-pipeline gate existed -# (e.g. firefox-9, built on the old release.yml), or -# • re-verify any shipped release on demand (regression check). -# -# Same single-source-of-truth drive logic as release.yml: scripts/ci_drive_gate.py. -# Headless, no screenshot → GPU-free. Zero proxy / zero secrets. -# ───────────────────────────────────────────────────────────────────────────── -name: verify-assets - -on: - workflow_dispatch: - inputs: - release_tag: - description: 'release tag whose assets to drive-test (e.g. firefox-9)' - required: true - -permissions: - # write (not read) is required: GitHub only exposes DRAFT releases to tokens - # with push access. With contents:read, `gh release download` on a draft tag - # 404s ("release not found"). This workflow only READS assets — the elevated - # scope is solely to make draft releases visible to GITHUB_TOKEN. - contents: write - -jobs: - drive: - name: drive-${{ matrix.leg }} - runs-on: ${{ matrix.runner }} - timeout-minutes: 25 - strategy: - fail-fast: false - matrix: - include: - # --full (interaction) only on the reliable linux-x86_64 leg; others run - # the robust SMOKE drive. Same rationale as release.yml's gate. - - leg: linux-x86_64 - runner: ubuntu-24.04 - kind: linux - asset: firefox-150.0.1-stealth-linux-x86_64.tar.gz - extra: '--full' - - leg: linux-arm64 - runner: ubuntu-24.04-arm - kind: linux - asset: firefox-150.0.1-stealth-linux-arm64.tar.gz - extra: '' - - leg: win-x86_64 - runner: windows-latest - kind: win - asset: firefox-150.0.1-stealth-win-x86_64.zip - extra: '' - - leg: macos-arm64 - runner: macos-15 - kind: mac - asset: firefox-150.0.1-stealth-macos-arm64.tar.gz - extra: '' - - leg: macos-x86_64 - runner: macos-15-intel - kind: mac - asset: firefox-150.0.1-stealth-macos-x86_64.tar.gz - extra: '' - steps: - - name: Checkout wrapper (for scripts/ci_drive_gate.py) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Download the release asset (draft releases included) - shell: bash - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - set -e - mkdir -p art - gh release download "${{ github.event.inputs.release_tag }}" \ - --repo "${{ github.repository }}" \ - --pattern "${{ matrix.asset }}" \ - --dir art - ls -la art/ - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Install Playwright driver (no bundled browser — we override executable_path) - # Single-source pin (see release.yml); the drive gate enforces juggler compat. - shell: bash - run: python -m pip install --quiet "playwright==$(cat scripts/playwright_pin.txt)" - - name: Linux system deps for headless firefox - if: matrix.kind == 'linux' - run: sudo "$(which python)" -m playwright install-deps firefox - - name: Extract + locate firefox binary - shell: bash - run: | - set -e - mkdir -p ff - A="art/${{ matrix.asset }}" - case "${{ matrix.kind }}" in - win) python -c "import zipfile; zipfile.ZipFile('$A').extractall('ff')"; EXE="ff/firefox.exe";; - linux) tar xzf "$A" -C ff; EXE="ff/firefox";; - mac) tar xzf "$A" -C ff; EXE="ff/Firefox.app/Contents/MacOS/firefox";; - esac - [ -e "$EXE" ] || { echo "ERROR: firefox binary not found at $EXE"; exit 1; } - chmod +x "$EXE" 2>/dev/null || true - echo "FF_EXE=$EXE" >> "$GITHUB_ENV" - echo "located: $EXE" - - name: DRIVE GATE — Playwright launch via juggler + real page (+ interaction on --full) - shell: bash - run: python scripts/ci_drive_gate.py "$FF_EXE" ${{ matrix.extra }} diff --git a/.github/workflows/verify-cloak.yml b/.github/workflows/verify-cloak.yml deleted file mode 100644 index 4d119e8..0000000 --- a/.github/workflows/verify-cloak.yml +++ /dev/null @@ -1,103 +0,0 @@ -# ───────────────────────────────────────────────────────────────────────────── -# verify-cloak.yml — re-runnable CLOAK + WEBGL-MASKING GUARDS for an EXISTING -# build run's artifacts, WITHOUT rebuilding Firefox (~3h on the mac legs). -# -# release.yml runs these same guards in its `gate` job against each freshly-built -# artifact. This re-runs them against the artifacts of a PRIOR build run (input -# `run_id`) using the CURRENT wrapper code on the default branch — so a test-only -# fix (e.g. making the macOS leg tolerant of the runner's missing WebGL) can be -# validated against the real binaries in ~10 min instead of paying a full rebuild. -# -# Same guard command as release.yml's gate. Headed-but-cloaked; zero proxy / zero -# secrets. The macOS legs are the only place the cocoa cloak patch actually RUNS. -# ───────────────────────────────────────────────────────────────────────────── -name: verify-cloak - -on: - workflow_dispatch: - inputs: - run_id: - description: 'build run id whose asset-* artifacts to re-gate (e.g. 27346856197)' - required: true - -permissions: - contents: read - actions: read # download-artifact needs this to read another run's artifacts - -jobs: - guard: - name: guard-${{ matrix.leg }} - runs-on: ${{ matrix.runner }} - timeout-minutes: 25 - strategy: - fail-fast: false - matrix: - # Same legs/runners/assets as release.yml's gate matrix. - include: - - leg: linux-x86_64 - runner: ubuntu-24.04 - kind: linux - asset: firefox-150.0.1-stealth-linux-x86_64.tar.gz - - leg: linux-arm64 - runner: ubuntu-24.04-arm - kind: linux - asset: firefox-150.0.1-stealth-linux-arm64.tar.gz - - leg: win-x86_64 - runner: windows-latest - kind: win - asset: firefox-150.0.1-stealth-win-x86_64.zip - - leg: macos-arm64 - runner: macos-15 - kind: mac - asset: firefox-150.0.1-stealth-macos-arm64.tar.gz - - leg: macos-x86_64 - runner: macos-15-intel - kind: mac - asset: firefox-150.0.1-stealth-macos-x86_64.tar.gz - steps: - - name: Checkout wrapper (current default branch — the FIXED tests) - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - with: { fetch-depth: 1 } - - name: Download build asset from the prior run (no rebuild) - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 - with: - name: asset-${{ matrix.leg }} - path: art - run-id: ${{ github.event.inputs.run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 - with: { python-version: '3.11' } - - name: Install Playwright driver (no bundled browser — we override executable_path) - # Single-source pin (see release.yml); the wrapper enforces juggler compat. - shell: bash - run: python -m pip install --quiet "playwright==$(cat scripts/playwright_pin.txt)" - - name: Linux system deps for headless firefox - if: matrix.kind == 'linux' - run: sudo "$(which python)" -m playwright install-deps firefox - - name: Extract + locate firefox binary - shell: bash - run: | - set -e - mkdir -p ff - A="art/${{ matrix.asset }}" - case "${{ matrix.kind }}" in - win) python -c "import zipfile; zipfile.ZipFile('$A').extractall('ff')"; EXE="ff/firefox.exe";; - linux) tar xzf "$A" -C ff; EXE="ff/firefox";; - mac) tar xzf "$A" -C ff; EXE="ff/Firefox.app/Contents/MacOS/firefox";; - esac - [ -e "$EXE" ] || { echo "ERROR: firefox binary not found at $EXE"; exit 1; } - chmod +x "$EXE" 2>/dev/null || true - echo "FF_EXE=$EXE" >> "$GITHUB_ENV" - echo "located: $EXE" - - name: Install pyobjc Quartz (macOS — to read the cloak window alpha) - if: matrix.kind == 'mac' - run: python -m pip install --quiet pyobjc-framework-Quartz - - name: Cloak + WebGL-masking guards (headed) - shell: bash - run: | - python -m pip install --quiet ".[dev]" - INVPW_BINARY_PATH="$FF_EXE" python -m pytest \ - tests/test_cloak.py \ - "tests/test_fingerprint_surface.py::test_webgl_readpixels_no_masking_signature" \ - -m e2e -o addopts='' -q From d3462cca474be5f549fdfc894612a2170f0aed8a Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sun, 5 Jul 2026 17:22:01 +0200 Subject: [PATCH 75/84] test(download): point release-URL mocks at firefox_antidetect_patch The firefox-14 relocation moved the binary release assets to firefox_antidetect_patch, but test_download and test_constants still mocked and asserted the old invisible_playwright release URLs, so they failed against the current invisible-core. Derive the ensure_binary mock URLs from RELEASE_URL_TEMPLATE so they track core automatically, and update the two literal-URL guards to the new repo. Parser and non-api-url tests unchanged. 471 unit tests green. --- tests/test_constants.py | 2 +- tests/test_download.py | 44 ++++++++++++++++++----------------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/tests/test_constants.py b/tests/test_constants.py index 911ad70..909017d 100644 --- a/tests/test_constants.py +++ b/tests/test_constants.py @@ -171,7 +171,7 @@ def test_release_url_points_at_owned_repo(): """The template MUST point at an owner/repo the maintainer actually controls. A typo here would direct everyone's downloads at a stranger's GitHub account — silent supply-chain risk.""" - assert "/feder-cr/invisible_playwright/" in RELEASE_URL_TEMPLATE, ( + assert "/feder-cr/firefox_antidetect_patch/" in RELEASE_URL_TEMPLATE, ( f"RELEASE_URL_TEMPLATE was changed to point elsewhere: " f"{RELEASE_URL_TEMPLATE!r}. Update this test only if the move is intentional." ) diff --git a/tests/test_download.py b/tests/test_download.py index e4159ca..9b1af33 100644 --- a/tests/test_download.py +++ b/tests/test_download.py @@ -56,8 +56,8 @@ def test_ensure_binary_downloads_and_verifies(tmp_path, monkeypatch): from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("win32", "AMD64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200, content_type="application/zip") @@ -84,8 +84,8 @@ def test_ensure_binary_rejects_sha_mismatch(tmp_path, monkeypatch): from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("win32", "AMD64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200) responses.add(responses.GET, url_sums, body=f"{wrong_sha} {asset}\n", status=200) @@ -301,14 +301,8 @@ def test_ensure_binary_accepts_binary_mode_checksums(tmp_path, monkeypatch): from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("win32", "AMD64") - url_archive = ( - f"https://github.com/feder-cr/invisible_playwright/releases/download/" - f"{BINARY_VERSION}/{asset}" - ) - url_sums = ( - f"https://github.com/feder-cr/invisible_playwright/releases/download/" - f"{BINARY_VERSION}/checksums.txt" - ) + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200, content_type="application/zip") @@ -353,8 +347,8 @@ def test_ensure_binary_missing_entry_after_extract_raises(tmp_path, monkeypatch) from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("win32", "AMD64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200) responses.add(responses.GET, url_sums, body=f"{archive_sha} {asset}\n", status=200) @@ -444,8 +438,8 @@ def test_ensure_binary_downloads_and_verifies_linux(tmp_path, monkeypatch): from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("linux", "x86_64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200, content_type="application/gzip") @@ -475,8 +469,8 @@ def test_ensure_binary_rejects_sha_mismatch_linux(tmp_path, monkeypatch): from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("linux", "x86_64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200) responses.add(responses.GET, url_sums, body=f"{wrong_sha} {asset}\n", status=200) @@ -528,8 +522,8 @@ def test_ensure_binary_missing_entry_after_extract_raises_linux(tmp_path, monkey from invisible_playwright.constants import ARCHIVE_NAME asset = ARCHIVE_NAME("linux", "x86_64") - url_archive = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/{asset}" - url_sums = f"https://github.com/feder-cr/invisible_playwright/releases/download/{BINARY_VERSION}/checksums.txt" + url_archive = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset=asset) + url_sums = RELEASE_URL_TEMPLATE.format(tag=BINARY_VERSION, asset="checksums.txt") responses.add(responses.GET, url_archive, body=archive_bytes, status=200) responses.add(responses.GET, url_sums, body=f"{archive_sha} {asset}\n", status=200) @@ -569,7 +563,7 @@ def test_resolve_asset_url_public_url_format_is_stable(monkeypatch): monkeypatch.delenv("GITHUB_TOKEN", raising=False) url = _resolve_asset_url("firefox-4", "abc.tar.gz") assert url == ( - "https://github.com/feder-cr/invisible_playwright/releases/" + "https://github.com/feder-cr/firefox_antidetect_patch/releases/" "download/firefox-4/abc.tar.gz" ) @@ -584,7 +578,7 @@ def test_resolve_asset_url_private_uses_api_with_token(monkeypatch): monkeypatch.delenv("GITHUB_TOKEN", raising=False) api_url = ( - "https://api.github.com/repos/feder-cr/invisible_playwright" + "https://api.github.com/repos/feder-cr/firefox_antidetect_patch" "/releases/tags/firefox-4" ) responses.add( @@ -606,7 +600,7 @@ def test_resolve_asset_url_private_raises_when_asset_missing(monkeypatch): with the asset name in the message than to download something else.""" monkeypatch.setenv("STEALTHFOX_GITHUB_TOKEN", "ghp_fake") api_url = ( - "https://api.github.com/repos/feder-cr/invisible_playwright" + "https://api.github.com/repos/feder-cr/firefox_antidetect_patch" "/releases/tags/firefox-4" ) responses.add( @@ -625,7 +619,7 @@ def test_resolve_asset_url_private_propagates_api_4xx(monkeypatch): don't swallow it silently — raise so the user sees the real reason.""" monkeypatch.setenv("STEALTHFOX_GITHUB_TOKEN", "ghp_fake") api_url = ( - "https://api.github.com/repos/feder-cr/invisible_playwright" + "https://api.github.com/repos/feder-cr/firefox_antidetect_patch" "/releases/tags/firefox-99" ) responses.add(responses.GET, api_url, status=404) @@ -640,7 +634,7 @@ def test_resolve_asset_url_private_sends_auth_header(monkeypatch): a private repo returns 404 and the user thinks the release is missing.""" monkeypatch.setenv("STEALTHFOX_GITHUB_TOKEN", "ghp_secret") api_url = ( - "https://api.github.com/repos/feder-cr/invisible_playwright" + "https://api.github.com/repos/feder-cr/firefox_antidetect_patch" "/releases/tags/firefox-4" ) From 029b6789641cc256fb1dbaed5356326453650e04 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 6 Jul 2026 03:09:35 +0200 Subject: [PATCH 76/84] fonts: stop injecting STEALTHFOX_FONTLIST/SYSTEMUI env (binary self-contained) The patched binary is always bundle-only and needs no external font config, so the wrapper no longer injects any font env in _build_env (sync + async). No external font customization channel remains. Test updated. --- src/invisible_playwright/async_api.py | 12 ++---------- src/invisible_playwright/launcher.py | 16 +++------------- tests/test_launcher_helpers.py | 14 +++++++------- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/src/invisible_playwright/async_api.py b/src/invisible_playwright/async_api.py index 2c04938..daf64ae 100644 --- a/src/invisible_playwright/async_api.py +++ b/src/invisible_playwright/async_api.py @@ -227,16 +227,8 @@ class InvisiblePlaywright: env = _os.environ.copy() if self._timezone: env["TZ"] = _tz_env(self._timezone) - # Font allow-list + system-ui via env (read at the gfxPlatformFontList - # constructor, process start) — Playwright delivers firefox_user_prefs - # over the juggler protocol after start, too late for the font list ctor, - # so without this host fonts leak on Linux/macOS. See sync launcher. - fontlist = prefs.get("zoom.stealth.font.fontlist") - if fontlist: - env["STEALTHFOX_FONTLIST"] = fontlist - system_ui = prefs.get("zoom.stealth.font.system_ui") - if system_ui: - env["STEALTHFOX_SYSTEMUI"] = system_ui + # Fonts need NO env: the patched binary is self-contained (always + # bundle-only). No external font list / allow-list / system-ui. # WebRTC srflx override: feed nICEr's nr_stealth_bridge the proxy egress # IP (caller's explicit env var wins, else the IP auto-discovered in # __aenter__) and drop IPv6 from gathering behind a proxy. diff --git a/src/invisible_playwright/launcher.py b/src/invisible_playwright/launcher.py index 559ba2f..6a02bcb 100644 --- a/src/invisible_playwright/launcher.py +++ b/src/invisible_playwright/launcher.py @@ -382,24 +382,14 @@ class InvisiblePlaywright: a synthetic srflx candidate matching the proxy egress IP, avoiding the StaticPref IPC propagation timing issue between parent and socket processes. - ``STEALTHFOX_FONTLIST`` / ``STEALTHFOX_SYSTEMUI`` carry the font - allow-list + system-ui family for the SAME reason: the binary reads - them at the gfxPlatformFontList constructor (process start), but - Playwright delivers firefox_user_prefs over the juggler protocol - AFTER start — too late for the font list ctor. The env var is present - at start and inherited by content processes, so the allow-list is - applied on every host (without it, host fonts leak on Linux/macOS). + Fonts need NO env: the patched binary is self-contained (always + bundle-only, exposing exactly the bundled standard-Windows families; + system-ui + generics baked in C++). No external font list / allow-list. """ import os as _os env = _os.environ.copy() if self._timezone: env["TZ"] = _tz_env(self._timezone) - fontlist = prefs.get("zoom.stealth.font.fontlist") - if fontlist: - env["STEALTHFOX_FONTLIST"] = fontlist - system_ui = prefs.get("zoom.stealth.font.system_ui") - if system_ui: - env["STEALTHFOX_SYSTEMUI"] = system_ui # WebRTC srflx override: feed nICEr's nr_stealth_bridge the proxy egress # IP so the srflx candidate matches the proxy (not the real host the # UDP STUN would otherwise leak). An explicit env var set by the caller diff --git a/tests/test_launcher_helpers.py b/tests/test_launcher_helpers.py index 1847001..a018fec 100644 --- a/tests/test_launcher_helpers.py +++ b/tests/test_launcher_helpers.py @@ -207,18 +207,18 @@ def test_build_env_caller_env_override_wins(monkeypatch): @pytest.mark.unit -def test_build_env_injects_font_list_and_system_ui(): - # The binary reads these at the gfxPlatformFontList constructor (process - # start); Playwright delivers firefox_user_prefs over juggler AFTER start, so - # the env var is the only at-construction channel. Without it host fonts leak - # on Linux/macOS (the wrapper's pref-only delivery was a cross-OS gap). +def test_build_env_never_injects_font_env(): + # The patched binary is self-contained for fonts (always bundle-only; the + # exposed set IS the bundle, system-ui + generics baked in C++). The wrapper + # must NOT inject any STEALTHFOX_FONTLIST/SYSTEMUI env — even if legacy font + # prefs are passed — so there is no external font customization channel. ip = InvisiblePlaywright(seed=42) env = ip._build_env({ "zoom.stealth.font.fontlist": "arial,calibri,segoe ui", "zoom.stealth.font.system_ui": "Segoe UI", }) - assert env["STEALTHFOX_FONTLIST"] == "arial,calibri,segoe ui" - assert env["STEALTHFOX_SYSTEMUI"] == "Segoe UI" + assert "STEALTHFOX_FONTLIST" not in env + assert "STEALTHFOX_SYSTEMUI" not in env @pytest.mark.unit From a0a0cc23698285ef798bdfdce63e5fb5a51a13fa Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 6 Jul 2026 03:50:56 +0200 Subject: [PATCH 77/84] scripts: ci_font_gate.py - assert the Windows font persona on every OS Companion to ci_drive_gate.py, run by release.yml's gate job on each leg's native runner. Launches the built binary headless, enumerates the visible font families with the width probe web detectors use, and asserts: the detected set equals the canonical Windows family set (identical on every OS), no known host family (macOS Helvetica Neue/Menlo, Linux DejaVu/Ubuntu, ...) is visible, and the CSS generics resolve to Windows fonts (serif=Times New Roman, mono=Consolas, system-ui=Segoe UI). This is how the macOS build gets font-validated - there is no local Mac. No proxy, no secrets. --- scripts/ci_font_gate.py | 170 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 scripts/ci_font_gate.py diff --git a/scripts/ci_font_gate.py b/scripts/ci_font_gate.py new file mode 100644 index 0000000..c4c7777 --- /dev/null +++ b/scripts/ci_font_gate.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 +"""CI font gate - assert the patched binary exposes exactly the Windows font +persona on EVERY host OS (Windows / Linux / macOS), with zero host-font leak. + +The patched binary is bundle-only: at font-list construction it drops every host +system font and exposes only the bundled Windows-11 family set (the exposed set +IS the bundle). This gate launches the binary on its NATIVE runner - so +macOS/CoreText, Linux/fontconfig and Windows/DWrite are each tested for real - +enumerates the visible families with the same width-probe web detectors use, and +asserts three things: + + 1. the detected family set == the canonical Windows set (EXPECTED): the SAME + set on all three platforms. A leaked host font or a missing Windows one + fails here. This is the "identical on every OS" contract. + 2. no known host family is visible (macOS: Helvetica Neue / Geneva / Menlo ...; + Linux: DejaVu / Ubuntu ...) - a POSITIVE proof that block-at-birth ran for + this platform's backend, not just "no obvious tell". + 3. the CSS generics resolve to Windows fonts (serif=Times New Roman, + sans-serif=Arial, monospace=Consolas) and system-ui=Segoe UI. + +This is the macOS validator the local Win/Linux gate cannot be - there is no +local Mac, so CoreText is only ever exercised here. Headless, no proxy, no +secrets, loopback-free (about:blank + arrow-function evaluate, which is not +eval and carries no CSP problem) -> safe in public CI. + +Usage: python ci_font_gate.py +Exit 0 + "FONT GATE OK ..." on success; non-zero + the diff on failure. +""" +from __future__ import annotations + +import sys + +# The canonical Windows-11 family set the bundle exposes. Verified byte-for-byte +# identical on Windows/DWrite and Linux/fontconfig; macOS/CoreText must match it +# too. Keep this sorted and in sync with the bundle (browser/fonts/moz.build). +EXPECTED = [ + "Arial", "Arial Black", "Bahnschrift", "Calibri", "Cambria", "Cambria Math", + "Candara", "Comic Sans MS", "Consolas", "Constantia", "Corbel", + "Courier New", "Ebrima", "Franklin Gothic", "Franklin Gothic Medium", + "Gabriola", "Gadugi", "Georgia", "Impact", "Ink Free", "Javanese Text", + "Leelawadee", "Leelawadee UI", "Lucida Console", "Lucida Sans Unicode", + "MS Gothic", "MS PGothic", "MS UI Gothic", "MV Boli", "Malgun Gothic", + "Marlett", "Microsoft Himalaya", "Microsoft JhengHei", + "Microsoft JhengHei UI", "Microsoft New Tai Lue", "Microsoft PhagsPa", + "Microsoft Sans Serif", "Microsoft Tai Le", "Microsoft Uighur", + "Microsoft YaHei", "Microsoft YaHei UI", "Microsoft Yi Baiti", + "MingLiU-ExtB", "Mongolian Baiti", "Myanmar Text", "NSimSun", "Nirmala UI", + "PMingLiU-ExtB", "Palatino Linotype", "Segoe Fluent Icons", + "Segoe MDL2 Assets", "Segoe Print", "Segoe Script", "Segoe UI", + "Segoe UI Emoji", "Segoe UI Historic", "Segoe UI Symbol", "SimSun", + "SimSun-ExtB", "Sitka Small", "Sylfaen", "Symbol", "Tahoma", + "Times New Roman", "Trebuchet MS", "Verdana", "Webdings", "Wingdings", + "Wingdings 2", "Wingdings 3", "Yu Gothic", "Yu Gothic UI", +] + +# Host families that must NEVER be visible - one per backend. Their presence is a +# hard fail (block-at-birth did not run for this OS). These are decoys added to +# the probe list; they must all come back absent. +HOST_MUST_BE_ABSENT = [ + # macOS / CoreText + "Helvetica Neue", "Geneva", "Menlo", "Monaco", "Avenir", "Lucida Grande", + "Apple SD Gothic Neo", "PingFang SC", + # Linux / fontconfig + "DejaVu Sans", "Liberation Sans", "Ubuntu", "Nimbus Sans", "Noto Sans", + # Office / non-standard families intentionally dropped from the bundle + "Century Gothic", "Agency FB", "Monotype Corsiva", "Pristina", +] + +# CSS generic -> the Windows family it must resolve to under bundle-only. +GENERICS = { + "serif": "Times New Roman", + "sans-serif": "Arial", + "monospace": "Consolas", + "system-ui": "Segoe UI", +} + +# Width+height probe (the offsetWidth method real detectors use): a family is +# "present" if styling text in it renders at a different size than the three CSS +# base generics. For the generics, return the measured size of each generic and +# of its target Windows family so the caller can assert they coincide. +DETECT_JS = r"""(arg) => { + const bases = ['monospace', 'sans-serif', 'serif']; + const sample = 'mmmmmmmmmmlli WwQ 0123456789 gjpqy'; + const sp = document.createElement('span'); + sp.style.cssText = + 'position:absolute;left:-9999px;font-size:72px;white-space:nowrap;'; + sp.textContent = sample; + document.body.appendChild(sp); + const size = (ff) => { sp.style.fontFamily = ff; return sp.offsetWidth + 'x' + sp.offsetHeight; }; + const bw = {}; + for (const b of bases) bw[b] = size(b); + const present = {}; + for (const f of arg.cands) { + present[f] = bases.some((b) => size("'" + f + "'," + b) !== bw[b]); + } + const gen = {}; + for (const g of arg.generics) gen[g] = size(g); + const genref = {}; + for (const w of arg.targets) genref[w] = size("'" + w + "'"); + document.body.removeChild(sp); + return { present, gen, genref }; +}""" + +# Suppress the new-tab machinery so the launch is quiet (mirrors ci_drive_gate). +_PREFS = { + "browser.startup.page": 0, + "browser.newtabpage.enabled": False, + "browser.newtab.preload": False, + "browser.newtabpage.activity-stream.enabled": False, +} + + +def main(exe: str) -> int: + from playwright.sync_api import sync_playwright + + cands = EXPECTED + HOST_MUST_BE_ABSENT + arg = { + "cands": cands, + "generics": list(GENERICS.keys()), + "targets": list(GENERICS.values()), + } + with sync_playwright() as p: + browser = p.firefox.launch(executable_path=exe, headless=True, + firefox_user_prefs=_PREFS) + try: + page = browser.new_page() + page.goto("about:blank") + r = page.evaluate(DETECT_JS, arg) + finally: + browser.close() + + detected = {f for f, v in r["present"].items() if v} + expected = set(EXPECTED) + missing = sorted(expected - detected) + # Anything detected that isn't in EXPECTED (host leaks land here too). + extra = sorted(detected - expected) + leaked_host = [h for h in HOST_MUST_BE_ABSENT if r["present"].get(h)] + gen_bad = [] + for g, want in GENERICS.items(): + got, ref = r["gen"].get(g), r["genref"].get(want) + if got != ref: + gen_bad.append(f"{g} -> {got} (expected {want} = {ref})") + + n = len(detected) + print(f"[font-gate] {exe}") + print(f"[font-gate] detected {n} families (expected {len(EXPECTED)})") + if missing: + print(f"[font-gate] MISSING (in bundle, not exposed): {missing}") + if extra: + print(f"[font-gate] UNEXPECTED (exposed, not in canonical set): {extra}") + if leaked_host: + print(f"[font-gate] HOST LEAK (block-at-birth did not run!): {leaked_host}") + if gen_bad: + print(f"[font-gate] GENERIC MISMATCH: {gen_bad}") + + ok = not missing and not extra and not leaked_host and not gen_bad + if ok: + print(f"FONT GATE OK - exactly the {n} Windows families, host-leak 0, " + f"generics map to Windows (serif/sans/mono/system-ui).") + return 0 + print("FONT GATE FAILED - the exposed set does not match the Windows " + "persona on this OS (see the diff above).") + return 1 + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("usage: python ci_font_gate.py ", file=sys.stderr) + raise SystemExit(2) + raise SystemExit(main(sys.argv[1])) From 3f5a26a9e82f2931c04a302fb9978aa21a88df70 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 6 Jul 2026 04:11:46 +0200 Subject: [PATCH 78/84] test: adapt integration tests to the self-contained font binary The binary is now bundle-only and self-contained for fonts, so the config pipeline emits no font prefs. Drop the two font keys from REQUIRED_KEYS and rewrite IT7 to assert the pipeline emits NO font.* / font.name-list.* prefs (it previously asserted the removed fontlist propagation). Matches the invisible_core change that stopped emitting the font block. --- tests/test_integration.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/tests/test_integration.py b/tests/test_integration.py index 3e4ad81..b4d9857 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -42,8 +42,6 @@ _REQUIRED_PREFS_KEYS = ( "media.encoder.webm.enabled", "media.mediasource.webm.enabled", "media.mediasource.mp4.enabled", - "zoom.stealth.font.fontlist", - "zoom.stealth.font.system_ui", "ui.systemUsesDarkTheme", "intl.accept_languages", "general.useragent.locale", @@ -197,26 +195,24 @@ def test_http_proxy_returned_unchanged_no_socks_mutations(): # ────────────────────────────────────────────────────────────────────── -# IT7: profile.fonts reaches prefs as a comma-joined fontlist +# IT7: fonts are NOT configured via prefs (the binary is self-contained) # ────────────────────────────────────────────────────────────────────── @pytest.mark.integration -def test_profile_fonts_propagate_to_prefs_fontlist(): - """IT7 — every font in ``profile.fonts`` appears in the comma-joined - ``zoom.stealth.font.fontlist`` pref, in order. The binary applies this - list to the native system font allow-list at construction; system-ui is - forced to Segoe UI.""" +def test_fonts_are_not_configured_via_prefs(): + """IT7 - the patched binary is self-contained for fonts: it is always + bundle-only (the exposed set IS the bundle), with system-ui + the CSS + generics baked in C++. There is no external font customization channel, so + the config pipeline must emit NO font prefs. Locks the 2026-07-06 + self-contained refactor (fonts moved entirely into the binary).""" profile = generate_profile(seed=42) prefs = translate_profile_to_prefs(profile) - assert profile.fonts, "fixture seed=42 produced empty fonts list" - fontlist = prefs["zoom.stealth.font.fontlist"] - assert isinstance(fontlist, str) - assert fontlist == ",".join(profile.fonts) - for font in profile.fonts: - assert font in fontlist - assert prefs["zoom.stealth.font.system_ui"] == "Segoe UI" + assert "zoom.stealth.font.fontlist" not in prefs + assert "zoom.stealth.font.system_ui" not in prefs + assert not any(k.startswith("zoom.stealth.font.") for k in prefs) + assert not any(k.startswith("font.name-list.") for k in prefs) # ────────────────────────────────────────────────────────────────────── From 47a10447336a19f9717525ff6453c5922e6c75c5 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 6 Jul 2026 04:19:37 +0200 Subject: [PATCH 79/84] style: ASCII-only comment in the font-env test (drop em-dashes) --- tests/test_launcher_helpers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_launcher_helpers.py b/tests/test_launcher_helpers.py index a018fec..6ad179b 100644 --- a/tests/test_launcher_helpers.py +++ b/tests/test_launcher_helpers.py @@ -210,8 +210,8 @@ def test_build_env_caller_env_override_wins(monkeypatch): def test_build_env_never_injects_font_env(): # The patched binary is self-contained for fonts (always bundle-only; the # exposed set IS the bundle, system-ui + generics baked in C++). The wrapper - # must NOT inject any STEALTHFOX_FONTLIST/SYSTEMUI env — even if legacy font - # prefs are passed — so there is no external font customization channel. + # must NOT inject any STEALTHFOX_FONTLIST/SYSTEMUI env - even if legacy font + # prefs are passed - so there is no external font customization channel. ip = InvisiblePlaywright(seed=42) env = ip._build_env({ "zoom.stealth.font.fontlist": "arial,calibri,segoe ui", From a1b75d93e928c37130833d667ae1acf15a23d027 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:36:26 +0200 Subject: [PATCH 80/84] tests: drop font-sampling tests Follows the invisible_core removal of the dead per-profile font-sampling: delete the derive_font_prefs/derive_font_whitelist tests, the 'fonts' pin tests, and the profile font_whitelist assertions. Suite green (444 passed). --- tests/test_pin.py | 11 ---- tests/test_profile.py | 58 +------------------ tests/test_sampler.py | 126 +----------------------------------------- 3 files changed, 4 insertions(+), 191 deletions(-) diff --git a/tests/test_pin.py b/tests/test_pin.py index e51232f..5344a12 100644 --- a/tests/test_pin.py +++ b/tests/test_pin.py @@ -51,22 +51,11 @@ def test_pin_key_without_dot_raises(): generate_profile(seed=42, pin={"madeup": 1}) -def test_pin_top_level_fonts_accepted(): - p = generate_profile(seed=42, pin={"fonts": ["Arial", "Verdana", "Tahoma"]}) - assert "Arial" in p.fonts - assert "Verdana" in p.fonts - - def test_pin_top_level_dark_theme_accepted(): p = generate_profile(seed=42, pin={"dark_theme": True}) assert p.dark_theme is True -def test_pin_fonts_wrong_type_raises(): - with pytest.raises(TypeError, match="list/tuple"): - generate_profile(seed=42, pin={"fonts": "Arial,Verdana"}) - - def test_pin_overrides_seed_value(): """The same seed produces different output once a pin is applied.""" natural = generate_profile(seed=42) diff --git a/tests/test_profile.py b/tests/test_profile.py index bddf5b1..eee2856 100644 --- a/tests/test_profile.py +++ b/tests/test_profile.py @@ -21,12 +21,6 @@ from invisible_playwright._fpforge.profile import ( # _validate_pin_key # ───────────────────────────────────────────────────────────────────── -@pytest.mark.unit -def test_validate_pin_key_top_level_fonts(): - """VK1 — `fonts` is a known top-level key.""" - _validate_pin_key("fonts") - - @pytest.mark.unit def test_validate_pin_key_top_level_dark_theme(): """VK2 — `dark_theme` is a known top-level key.""" @@ -98,7 +92,6 @@ def _raw_baseline(): "screen_h": 1080, "webgl_vendor": "Google Inc. (Intel)", "webgl_renderer": "ANGLE (Intel)", - "font_whitelist": "arial,calibri", "dark_theme": 0, } @@ -110,34 +103,6 @@ def test_apply_pins_to_raw_screen_width(): assert out["screen_w"] == 2560 -@pytest.mark.unit -def test_apply_pins_to_raw_fonts_list(): - """AP2 — list pin joined into comma-separated whitelist.""" - out = _apply_pins_to_raw(_raw_baseline(), {"fonts": ["Arial", "Verdana"]}) - assert out["font_whitelist"] == "Arial,Verdana" - - -@pytest.mark.unit -def test_apply_pins_to_raw_fonts_tuple(): - """AP3 — tuple pin is also accepted.""" - out = _apply_pins_to_raw(_raw_baseline(), {"fonts": ("Arial",)}) - assert out["font_whitelist"] == "Arial" - - -@pytest.mark.unit -def test_apply_pins_to_raw_fonts_string_raises(): - """AP4 — bare string is not a list/tuple, must raise.""" - with pytest.raises(TypeError, match="list/tuple"): - _apply_pins_to_raw(_raw_baseline(), {"fonts": "Arial"}) - - -@pytest.mark.unit -def test_apply_pins_to_raw_fonts_int_raises(): - """AP5 — int is also rejected.""" - with pytest.raises(TypeError): - _apply_pins_to_raw(_raw_baseline(), {"fonts": 42}) - - @pytest.mark.unit def test_apply_pins_to_raw_multiple_pins(): """AP6 — multiple pins all land in raw.""" @@ -158,7 +123,7 @@ def test_apply_pins_to_raw_returns_copy_not_mutation(): @pytest.mark.unit def test_apply_pins_to_raw_unknown_key_silent(): - """AP8 — key not in `_PIN_TO_RAW` (and not 'fonts') is ignored. + """AP8 — key not in `_PIN_TO_RAW` is ignored. Validation happens upstream in `generate_profile`; the inner helper guards defensively but does not raise. @@ -260,15 +225,6 @@ def test_generate_profile_is_frozen(): p.seed = 99 # type: ignore[misc] -@pytest.mark.unit -def test_generate_profile_fonts_is_list_of_strings(): - """GP11 — fonts is a non-empty list of stripped strings.""" - p = generate_profile(seed=42) - assert isinstance(p.fonts, list) - assert len(p.fonts) > 0 - assert all(isinstance(f, str) and f.strip() == f for f in p.fonts) - - @pytest.mark.unit def test_generate_profile_to_prefs_dict_flat_and_matches_raw(): """GP12 — to_prefs_dict() returns a flat dict containing core sampler keys.""" @@ -319,13 +275,6 @@ def test_generate_profile_pin_dark_theme_false(): assert p.dark_theme is False -@pytest.mark.unit -def test_generate_profile_pin_fonts_list_visible_on_profile(): - """fonts pin: list → joined raw string → split back to list on Profile.""" - p = generate_profile(seed=42, pin={"fonts": ["Arial", "Verdana"]}) - assert p.fonts == ["Arial", "Verdana"] - - @pytest.mark.unit def test_generate_profile_pin_gpu_renderer_propagates(): p = generate_profile(seed=42, pin={"gpu.renderer": "FORCED_RENDERER"}) @@ -335,14 +284,13 @@ def test_generate_profile_pin_gpu_renderer_propagates(): @pytest.mark.unit def test_generate_profile_pin_to_raw_keymap_complete(): - """Every dotted pin key (besides 'fonts') has a `_PIN_TO_RAW` mapping. + """Every dotted pin key has a `_PIN_TO_RAW` mapping. Guards against silently-ignored pins if someone adds a key to `_PIN_GROUPS` but forgets the raw-key mapping. """ dotted = {f"{group}.{field}" for group, fields in _PIN_GROUPS.items() for field in fields} - # 'dark_theme' is top-level and present in _PIN_TO_RAW; 'fonts' is handled - # specially and intentionally absent. + # 'dark_theme' is top-level and present in _PIN_TO_RAW. missing = dotted - set(_PIN_TO_RAW.keys()) assert missing == set(), f"pin keys without raw mapping: {sorted(missing)}" diff --git a/tests/test_sampler.py b/tests/test_sampler.py index e9af219..fc715f5 100644 --- a/tests/test_sampler.py +++ b/tests/test_sampler.py @@ -1,11 +1,8 @@ """Unit tests for invisible_playwright._fpforge._sampler. Covers classify_gpu (decision-table over GPU strings), _screen_tier, -derive_font_prefs / derive_font_whitelist, and the public Forge / sample -entry points. +and the public Forge / sample entry points. """ -import random - import pytest from invisible_playwright._fpforge import _sampler @@ -14,8 +11,6 @@ from invisible_playwright._fpforge._sampler import ( _LOCKED, _screen_tier, classify_gpu, - derive_font_prefs, - derive_font_whitelist, sample, ) @@ -213,116 +208,6 @@ def test_screen_tier_4200x2000_is_ultrawide_via_width_branch(): assert _screen_tier({"screen": {"w": 4200, "h": 2000}}) == "ultrawide" -# ── derive_font_prefs / derive_font_whitelist ─────────────────────────── - -@pytest.mark.unit -def test_derive_font_prefs_returns_whitelist_key(): - """FP1 [HAPPY]: result is a single-key dict with the font family list. - - The per-family ``metrics`` string was removed on 2026-06-20: fonts now - render from the bundled real Windows files (genuine widths) and per-session - metric uniqueness comes from the HarfBuzz jitter, not fabricated factors.""" - out = derive_font_prefs("integrated_modern", random.Random(42)) - assert set(out.keys()) == {"whitelist"} - assert isinstance(out["whitelist"], str) - - -@pytest.mark.unit -def test_derive_font_prefs_core_fonts_always_present(): - """FP2 [ECP]: every core font name appears in whitelist regardless of class.""" - out = derive_font_prefs("integrated_old", random.Random(0)) - names = set(out["whitelist"].split(",")) - for entry in _sampler._FONT_CORE: - assert entry["name"] in names - - -@pytest.mark.unit -def test_derive_font_prefs_deterministic_per_seed(): - """FP3 [ECP]: same gpu_class + same rng seed → identical result.""" - a = derive_font_prefs("workstation", random.Random(7)) - b = derive_font_prefs("workstation", random.Random(7)) - assert a == b - - -@pytest.mark.unit -def test_derive_font_prefs_unknown_class_falls_back_to_integrated_modern(): - """FP4 [ECP]: gpu_class missing from CPT → uses integrated_modern row.""" - fallback = derive_font_prefs("nonexistent", random.Random(123)) - expected = derive_font_prefs("integrated_modern", random.Random(123)) - assert fallback == expected - - -@pytest.mark.unit -def test_derive_font_prefs_whitelist_alphabetically_sorted(): - """FP6 [ECP]: whitelist names are sorted (ordering invariant for stable dedup).""" - out = derive_font_prefs("high_end", random.Random(5)) - names = out["whitelist"].split(",") - assert names == sorted(names) - - -@pytest.mark.unit -def test_derive_font_whitelist_legacy_shim_matches_dict_form(): - """FW1 [HAPPY]: legacy shim returns same string as dict['whitelist'].""" - rng_a = random.Random(11) - rng_b = random.Random(11) - assert derive_font_whitelist("low_end", rng_a) == \ - derive_font_prefs("low_end", rng_b)["whitelist"] - - -# Standard fonts that ship with every Windows 10/11 install. They MUST be in the -# core (always-present) set, never in the optional/per-profile set: a real Windows -# machine never lacks them, so a session that drops one advertises a font set that -# doesn't match any real Windows profile (image-dedup font probes then report a -# short/degenerate name list → server-side OS-font-set checks fail). Calibri in -# particular sat in `optional` (a bug); these caused the detected set to come up -# short on some seeds. Regression guard for the 2026-06-18 optional→core move. -# NB: the exact Win11 family is "franklin gothic medium" (there is no bare -# "franklin gothic" family); the 2026-06-20 bundle reconciliation uses real names. -_STANDARD_WINDOWS_FONTS = [ - "calibri", "franklin gothic medium", "gadugi", "javanese text", "myanmar text", -] -_ALL_GPU_CLASSES = [ - "integrated_old", "integrated_modern", "mid_range", "high_end", - "low_end", "workstation", -] - - -@pytest.mark.unit -@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) -def test_standard_windows_fonts_always_present_every_class_and_seed(gpu_class): - """FP7 [regression]: the standard-Windows fonts appear in the whitelist for - every gpu_class across many seeds (i.e. they are core, not profile-optional). - Guards against a standard font silently becoming optional.""" - for seed in range(40): - out = derive_font_prefs(gpu_class, random.Random(seed)) - wl = set(out["whitelist"].split(",")) - for font in _STANDARD_WINDOWS_FONTS: - assert font in wl, f"{font!r} missing from whitelist (class={gpu_class}, seed={seed})" - - -@pytest.mark.unit -def test_standard_windows_fonts_are_in_core_pool(): - """FP8 [regression]: the standard-Windows fonts live in the CORE pool (not - optional) — the structural source of the always-present guarantee above.""" - core_names = {e["name"] for e in _sampler._FONT_CORE} - optional_names = {e["name"] for e in _sampler._FONT_OPTIONAL} - for font in _STANDARD_WINDOWS_FONTS: - assert font in core_names, f"{font!r} must be in core pool" - assert font not in optional_names, f"{font!r} must NOT be in optional pool" - - -@pytest.mark.unit -@pytest.mark.parametrize("gpu_class", _ALL_GPU_CLASSES) -def test_derive_font_prefs_no_duplicate_families(gpu_class): - """FP9 [regression]: no family appears twice in the whitelist, even when a - profile's optional list also names a core font. Guards the dedup in - derive_font_prefs (a duplicate family would emit a malformed list).""" - for seed in range(30): - out = derive_font_prefs(gpu_class, random.Random(seed)) - wl = out["whitelist"].split(",") - assert len(wl) == len(set(wl)), f"duplicate in whitelist (class={gpu_class}, seed={seed})" - - # ── Forge / sample ────────────────────────────────────────────────────── # Keys the Forge.sample bundle must always contain. Builds on _LOCKED + @@ -338,7 +223,6 @@ _EXPECTED_KEYS = { "av1_enabled", "webm_encoder_enabled", "mediasource_webm", "mediasource_mp4", "webspeech_synth", "storage_quota_mb", "dark_theme", - "font_whitelist", } @@ -425,14 +309,6 @@ def test_forge_sample_avail_h_defaults_to_h_minus_40_when_missing(monkeypatch): assert out["screen_avail_h"] == 1080 - 40 -@pytest.mark.unit -def test_forge_sample_includes_font_keys(): - """FS9 [ECP]: font_whitelist present and non-empty (the joined family list).""" - out = sample(42) - assert out["font_whitelist"] - assert "," in out["font_whitelist"] # at least the core fonts joined - - @pytest.mark.unit def test_forge_seed_coercion_to_int(): """FS extra: Forge(seed) coerces seed to int (e.g. float 42.7 → 42).""" From e09cc07f69124c8b0ae62e5b29cf6d600b64e7be Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Mon, 13 Jul 2026 23:09:26 +0200 Subject: [PATCH 81/84] fix(deps): pin playwright to 1.55.x, bump 0.3.1 Playwright 1.61 adds an isMobile field to the Browser.setDefaultViewport Juggler command that the FF150 binary does not accept, which breaks the session (#48). Narrow the range from >=1.40,<1.61 to the CI-tested 1.55.x (scripts/playwright_pin.txt), so a fresh install always gets a compatible client. --- pyproject.toml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6a38c8c..5166cb3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "invisible-playwright" -version = "0.3.0" +version = "0.3.1" description = "Playwright wrapper for a patched Firefox with deterministic stealth profile." readme = "README.md" requires-python = ">=3.11" @@ -24,11 +24,14 @@ dependencies = [ # in invisible-core since the 2026-07-03 split; it pulls platformdirs/requests/ # maxminddb/tzdata/tqdm/pywin32 transitively. The wrapper only adds Playwright. "invisible-core @ git+https://github.com/feder-cr/invisible_core.git", - "playwright>=1.40,<1.61", + # Pinned to the Juggler client we actually test against (scripts/playwright_pin.txt, + # 1.55.x). Playwright 1.61 added an isMobile field to Browser.setDefaultViewport that + # the FF150 Juggler does not accept, which breaks the session (issue #48). + "playwright>=1.55,<1.56", ] [project.optional-dependencies] -dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.40,<1.61"] +dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.55,<1.56"] [tool.pytest.ini_options] markers = [ From cafbbca82fced259a3ef5cea5eb058b01591f8a6 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sun, 19 Jul 2026 14:15:15 +0200 Subject: [PATCH 82/84] docs(readme): replace flaky dynamic badge with a static Firefox version badge The github v/release badge (no releases on this repo) and the github stars badge (shields.io shares a rate-limited GitHub API call, so it intermittently rendered as a broken image) are replaced by a static Firefox 150.0.1 badge that never calls an API and cannot break. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b37be9..8663eaf 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ tests License: MIT Python 3.11+ - GitHub release + Firefox 150.0.1 GitHub stars browser launches

From 5026a98dec3d3e1d9127566725ca5ce2688b6b2f Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sun, 19 Jul 2026 14:32:09 +0200 Subject: [PATCH 83/84] docs(readme): self-host badges as repo SVGs (no more shields.io) The version/stars/downloads badges routed through shields.io and GitHub's image proxy, which rate-limits and intermittently rendered them as broken images. These are now static SVGs committed under docs/badges/ and referenced by relative path, so they render like any repo asset and cannot break. --- README.md | 10 +++++----- docs/badges/firefox.svg | 16 ++++++++++++++++ docs/badges/launches.svg | 16 ++++++++++++++++ docs/badges/license.svg | 16 ++++++++++++++++ docs/badges/python.svg | 16 ++++++++++++++++ docs/badges/stars.svg | 16 ++++++++++++++++ 6 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 docs/badges/firefox.svg create mode 100644 docs/badges/launches.svg create mode 100644 docs/badges/license.svg create mode 100644 docs/badges/python.svg create mode 100644 docs/badges/stars.svg diff --git a/README.md b/README.md index 8663eaf..c327adc 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@

tests - License: MIT - Python 3.11+ - Firefox 150.0.1 - GitHub stars - browser launches + License: MIT + Python 3.11+ + Firefox 150.0.1 + GitHub stars + browser launches

diff --git a/docs/badges/firefox.svg b/docs/badges/firefox.svg new file mode 100644 index 0000000..a114176 --- /dev/null +++ b/docs/badges/firefox.svg @@ -0,0 +1,16 @@ + +Firefox: 150.0.1 + + + + + + + + +Firefox +Firefox +150.0.1 +150.0.1 + + \ No newline at end of file diff --git a/docs/badges/launches.svg b/docs/badges/launches.svg new file mode 100644 index 0000000..0610125 --- /dev/null +++ b/docs/badges/launches.svg @@ -0,0 +1,16 @@ + +browser launches: 1M + + + + + + + + +browser launches +browser launches +1M +1M + + \ No newline at end of file diff --git a/docs/badges/license.svg b/docs/badges/license.svg new file mode 100644 index 0000000..34354dc --- /dev/null +++ b/docs/badges/license.svg @@ -0,0 +1,16 @@ + +License: MIT + + + + + + + + +License +License +MIT +MIT + + \ No newline at end of file diff --git a/docs/badges/python.svg b/docs/badges/python.svg new file mode 100644 index 0000000..d3f2a12 --- /dev/null +++ b/docs/badges/python.svg @@ -0,0 +1,16 @@ + +python: 3.11+ + + + + + + + + +python +python +3.11+ +3.11+ + + \ No newline at end of file diff --git a/docs/badges/stars.svg b/docs/badges/stars.svg new file mode 100644 index 0000000..3f01bd5 --- /dev/null +++ b/docs/badges/stars.svg @@ -0,0 +1,16 @@ + +Stars: 1.8k + + + + + + + + +Stars +Stars +1.8k +1.8k + + \ No newline at end of file From aa7277a1efc2d72c245191098b1cc691524ec193 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sun, 19 Jul 2026 14:47:47 +0200 Subject: [PATCH 84/84] docs(readme): self-host the LinkedIn badge SVG too (removes the last shields.io dependency) --- README.md | 2 +- docs/badges/linkedin.svg | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 docs/badges/linkedin.svg diff --git a/README.md b/README.md index c327adc..dfd8293 100644 --- a/README.md +++ b/README.md @@ -194,5 +194,5 @@ This project is for educational purposes only. It is provided as-is, with no war

Built by Federico Elia -  LinkedIn +  LinkedIn

diff --git a/docs/badges/linkedin.svg b/docs/badges/linkedin.svg new file mode 100644 index 0000000..9bcaa32 --- /dev/null +++ b/docs/badges/linkedin.svg @@ -0,0 +1,16 @@ + +LinkedIn: Federico Elia + + + + + + + + +LinkedIn +LinkedIn +Federico Elia +Federico Elia + + \ No newline at end of file

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 literal 78560 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 Date: Fri, 3 Jul 2026 19:56:24 +0200 Subject: [PATCH 71/84] Split pure-config into invisible-core; keep back-compat shims The seed->fingerprint->prefs logic, binary download, and proxy/geo config now live in a standalone invisible-core package (zero Playwright), so a profile manager can reuse it without pulling Playwright in. The wrapper depends on invisible-core and replaces the moved modules with full-alias shims: existing imports (public API, submodules, private names) and isinstance checks keep working unchanged. tests/test_backcompat.py locks that contract (6 guards). Bumps to 0.3.0. --- pyproject.toml | 13 +- src/invisible_playwright/_fpforge/__init__.py | 37 +- src/invisible_playwright/_fpforge/_network.py | 144 -- src/invisible_playwright/_fpforge/_sampler.py | 445 ---- .../_fpforge/data/browsing_pool.json | 64 - .../_fpforge/data/cpt_audio_given_class.json | 217 -- .../data/cpt_browsing_given_class.json | 138 -- .../_fpforge/data/cpt_codec_given_class.json | 147 -- .../data/cpt_fonts_optional_given_class.json | 295 --- .../_fpforge/data/cpt_hwc_given_class.json | 50 - .../data/cpt_hwc_given_class_tier.json | 337 --- .../data/cpt_intra_tier_given_class.json | 17 - .../_fpforge/data/cpt_msaa_given_class.json | 16 - .../data/cpt_msaa_given_class_screen.json | 305 --- .../_fpforge/data/cpt_screen_given_class.json | 54 - .../data/cpt_screen_given_class_tier.json | 761 ------- .../data/cpt_storage_given_class.json | 60 - .../data/cpt_storage_given_class_tier.json | 297 --- .../_fpforge/data/ff_win_distributions.json | 650 ------ .../_fpforge/data/font_pool.json | 173 -- .../_fpforge/data/prior_audio.json | 17 - .../_fpforge/data/priors_independent.json | 14 - .../_fpforge/data/webgl_gpu_pool.json | 476 ----- .../_fpforge/data/webgl_renderer_pool.json | 1902 ----------------- .../_fpforge/data/win_hw_marginals.json | 469 ---- src/invisible_playwright/_fpforge/profile.py | 273 --- src/invisible_playwright/_geo.py | 272 +-- src/invisible_playwright/_headless.py | 182 +- src/invisible_playwright/_proxy.py | 60 +- src/invisible_playwright/_webgl_personas.py | 206 +- src/invisible_playwright/config.py | 116 +- src/invisible_playwright/constants.py | 84 +- src/invisible_playwright/data/font-map.json | 1846 ---------------- src/invisible_playwright/download.py | 347 +-- src/invisible_playwright/prefs.py | 677 +----- tests/test_backcompat.py | 84 + 36 files changed, 136 insertions(+), 11109 deletions(-) delete mode 100644 src/invisible_playwright/_fpforge/_network.py delete mode 100644 src/invisible_playwright/_fpforge/_sampler.py delete mode 100644 src/invisible_playwright/_fpforge/data/browsing_pool.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_audio_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_browsing_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_codec_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_fonts_optional_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_hwc_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_hwc_given_class_tier.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_intra_tier_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_msaa_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_msaa_given_class_screen.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_screen_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_screen_given_class_tier.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_storage_given_class.json delete mode 100644 src/invisible_playwright/_fpforge/data/cpt_storage_given_class_tier.json delete mode 100644 src/invisible_playwright/_fpforge/data/ff_win_distributions.json delete mode 100644 src/invisible_playwright/_fpforge/data/font_pool.json delete mode 100644 src/invisible_playwright/_fpforge/data/prior_audio.json delete mode 100644 src/invisible_playwright/_fpforge/data/priors_independent.json delete mode 100644 src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json delete mode 100644 src/invisible_playwright/_fpforge/data/webgl_renderer_pool.json delete mode 100644 src/invisible_playwright/_fpforge/data/win_hw_marginals.json delete mode 100644 src/invisible_playwright/_fpforge/profile.py delete mode 100644 src/invisible_playwright/data/font-map.json create mode 100644 tests/test_backcompat.py diff --git a/pyproject.toml b/pyproject.toml index c045edb..a79a4e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "invisible-playwright" -version = "0.2.0" +version = "0.3.0" description = "Playwright wrapper for a patched Firefox with deterministic stealth profile." readme = "README.md" requires-python = ">=3.11" @@ -20,13 +20,11 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] dependencies = [ + # Pure config (seed -> fingerprint -> prefs, binary download, proxy, geo) lives + # in invisible-core since the 2026-07-03 split; it pulls platformdirs/requests/ + # maxminddb/tzdata/tqdm/pywin32 transitively. The wrapper only adds Playwright. + "invisible-core @ git+https://github.com/feder-cr/invisible_core.git", "playwright>=1.40,<1.61", - "platformdirs>=4", - "requests[socks]>=2.31", - "maxminddb>=2.2", - "tzdata>=2024.1", - "tqdm>=4.66", - "pywin32>=306; sys_platform == 'win32'", ] [project.optional-dependencies] @@ -57,6 +55,7 @@ Issues = "https://github.com/feder-cr/invisible_playwright/issues" [tool.hatch.build.targets.wheel] packages = ["src/invisible_playwright"] +exclude = ["*.bak", "*-bak"] [tool.hatch.build.targets.sdist] include = ["src/invisible_playwright", "tests", "README.md", "LICENSE", "pyproject.toml"] diff --git a/src/invisible_playwright/_fpforge/__init__.py b/src/invisible_playwright/_fpforge/__init__.py index 830dcf6..937b411 100644 --- a/src/invisible_playwright/_fpforge/__init__.py +++ b/src/invisible_playwright/_fpforge/__init__.py @@ -1,26 +1,17 @@ -"""Internal Bayesian fingerprint generator used by invisible_playwright. +"""Backward-compat shim — spostato in invisible_core._fpforge (alias completo). -Private module — do not import from user code. Use -invisible_playwright.InvisiblePlaywright(seed=..., pin=...) instead. +Aliasa il package E i suoi submodule agli stessi oggetti del core, cosi' +``from invisible_playwright._fpforge.profile import Profile`` e +``from invisible_core._fpforge.profile import Profile`` sono la STESSA classe +(isinstance funziona) e i nomi privati restano accessibili. """ -from .profile import ( - AudioProfile, - CodecProfile, - GPUProfile, - HardwareProfile, - Profile, - ScreenProfile, - WebGLProfile, - generate_profile, -) +import sys as _sys +import invisible_core._fpforge as _pkg +from invisible_core._fpforge import profile as _profile +from invisible_core._fpforge import _sampler as _sampler_mod +from invisible_core._fpforge import _network as _network_mod -__all__ = [ - "generate_profile", - "Profile", - "GPUProfile", - "ScreenProfile", - "HardwareProfile", - "AudioProfile", - "CodecProfile", - "WebGLProfile", -] +_sys.modules[__name__] = _pkg +_sys.modules[__name__ + ".profile"] = _profile +_sys.modules[__name__ + "._sampler"] = _sampler_mod +_sys.modules[__name__ + "._network"] = _network_mod diff --git a/src/invisible_playwright/_fpforge/_network.py b/src/invisible_playwright/_fpforge/_network.py deleted file mode 100644 index 930df91..0000000 --- a/src/invisible_playwright/_fpforge/_network.py +++ /dev/null @@ -1,144 +0,0 @@ -# -*- coding: utf-8 -*- -"""Generic Bayesian network for fingerprint sampling. - -A Node has: - - name - - parents (list of parent node names) - - CPT: either - * marginal (no parents): flat [{value, prob}, ...] - * conditional: {parent_tuple: [{value, prob}, ...]} - - OR deterministic: a classifier function `(context) -> value` (no CPT) - -Sampling: - - Nodes are topologically sorted - - For each node, look up the conditional distribution given parent values - already sampled in `context`, then weighted-pick - - Deterministic nodes apply their classifier directly - -Values can be ANY JSON-serializable type (int, str, dict, list, bool). -Complex values (e.g. screen joint {w, h, dpr}) are stored as dicts in the -CPT and returned as-is in the context. -""" -import json -import random -from typing import Any, Callable, Dict, List, Optional, Tuple - - -class Node: - """Single Bayesian node.""" - - __slots__ = ("name", "parents", "cpt", "classifier", "_marginal") - - def __init__( - self, - name: str, - parents: Optional[List[str]] = None, - cpt: Optional[Any] = None, - classifier: Optional[Callable[[Dict[str, Any]], Any]] = None, - ): - self.name = name - self.parents = list(parents or []) - self.cpt = cpt - self.classifier = classifier - # Precompute: for no-parent nodes, cpt is the marginal list - self._marginal = cpt if not self.parents and classifier is None else None - - def sample(self, context: Dict[str, Any], rng: random.Random) -> Any: - # Deterministic nodes don't sample - if self.classifier is not None: - return self.classifier(context) - - if not self.parents: - # Marginal root - return _weighted_pick(self._marginal, rng) - - # Conditional node: build the key from parent values - key = _parent_key(self.parents, context) - if key not in self.cpt: - # Fallback: concatenate all parents' tables (uniform over union) - # Keeps sampler from crashing if data doesn't cover some combo. - pool = [] - for v in self.cpt.values(): - pool.extend(v) - if not pool: - raise ValueError( - f"Node {self.name!r}: no CPT entries for {self.parents}={key}" - ) - return _weighted_pick(pool, rng) - return _weighted_pick(self.cpt[key], rng) - - -class Network: - """Collection of nodes with topological sampling.""" - - def __init__(self, nodes: List[Node]): - self.nodes = _topsort(nodes) - self.by_name = {n.name: n for n in self.nodes} - - def sample( - self, - rng: random.Random, - evidence: Optional[Dict[str, Any]] = None, - ) -> Dict[str, Any]: - """Sample the network. ``evidence`` fixes named nodes BEFORE their children - sample, so the children RE-CONDITION on the fixed value (not relabel after). - Used to pin ``gpu_class`` to the validated WebGL persona's class so the whole - bundle (cores/screen/fonts) stays coherent with the GPU we expose. Earlier - nodes still sample (RNG stream preserved → per-seed determinism).""" - evidence = evidence or {} - context: Dict[str, Any] = {} - for node in self.nodes: - if node.name in evidence: - context[node.name] = evidence[node.name] - else: - context[node.name] = node.sample(context, rng) - return context - - -# ── Helpers ───────────────────────────────────────────────────────────── - -def _weighted_pick(table: List[Dict[str, Any]], rng: random.Random) -> Any: - """`table` is a list of {value, prob} dicts. Returns one value.""" - values = [e["value"] for e in table] - probs = [float(e["prob"]) for e in table] - if not values: - raise ValueError("Empty CPT entry") - total = sum(probs) - if total <= 0: - return rng.choice(values) - # Normalize to be safe (CPTs can be unnormalized) - probs = [p / total for p in probs] - return rng.choices(values, weights=probs, k=1)[0] - - -def _parent_key(parents: List[str], context: Dict[str, Any]) -> str: - """Build a JSON-stable key from parent values in declared order.""" - if len(parents) == 1: - v = context[parents[0]] - return v if isinstance(v, str) else json.dumps(v, sort_keys=True) - return json.dumps([context[p] for p in parents], sort_keys=True) - - -def _topsort(nodes: List[Node]) -> List[Node]: - """Topological sort by parent-before-child.""" - by_name = {n.name: n for n in nodes} - visited: set = set() - order: List[Node] = [] - - def visit(n: Node, path: set): - if n.name in visited: - return - if n.name in path: - raise ValueError(f"Cycle at {n.name}") - path.add(n.name) - for p in n.parents: - if p not in by_name: - raise ValueError(f"Node {n.name} has unknown parent {p}") - visit(by_name[p], path) - path.discard(n.name) - visited.add(n.name) - order.append(n) - - for n in nodes: - visit(n, set()) - return order diff --git a/src/invisible_playwright/_fpforge/_sampler.py b/src/invisible_playwright/_fpforge/_sampler.py deleted file mode 100644 index b977ba5..0000000 --- a/src/invisible_playwright/_fpforge/_sampler.py +++ /dev/null @@ -1,445 +0,0 @@ -# -*- coding: utf-8 -*- -"""stealth_forge — Bayesian fingerprint generator for Firefox 150 Windows. - -Everything the Firefox build exposes to JS (screen, hardwareConcurrency, -WebGL, audio, MSAA, theme, media codecs) is sampled from a Bayesian network -with coherent cross-field dependencies. Identity (userAgent, platform, -oscpu, webdriver=false, maxTouchPoints=0) is locked by the compiled build. - -Graph: - - gpu (root, 474 real Windows ANGLE renderers) - │ - └─> gpu_class (deterministic classifier, 6 classes) - ├─> hw_concurrency (CPT per class) - ├─> screen (w/h/dpr/av) (CPT per class) - └─> msaa_samples (CPT per class) - - audio (root, joint rate+latency+channels — marginal) - dark_theme (marginal) - av1_enabled (marginal) - webm_encoder_enabled (marginal) - - font_exclude ← deterministic hash of stealth_seed (seed-derived) - -CPTs live in `data/*.json` (easy to tune without code changes). -Sampling is deterministic per stealth_seed via a private random.Random. -""" -import json -import os -import re -from typing import Any, Dict, Optional - -from ._network import Network, Node - -_HERE = os.path.dirname(os.path.abspath(__file__)) - - -def _load(filename: str) -> Any: - with open(os.path.join(_HERE, "data", filename), "r", encoding="utf-8") as f: - return json.load(f) - - -# ═══════════════════════════════════════════════════════════════════════ -# LOCKED IDENTITY (compiled into our Firefox 150 build — never varies) -# ═══════════════════════════════════════════════════════════════════════ -_LOCKED: Dict[str, Any] = { - "user_agent": ( - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) " - "Gecko/20100101 Firefox/150.0.1" - ), - "platform": "Win32", - "oscpu": "Windows NT 10.0; Win64; x64", - "app_code_name": "Mozilla", - "app_version": "5.0 (Windows)", - "product_sub": "20100101", - "webdriver": False, - "max_touch_points": 0, -} - - -# ═══════════════════════════════════════════════════════════════════════ -# DATA -# ═══════════════════════════════════════════════════════════════════════ -_GPU_POOL = _load("webgl_renderer_pool.json")["entries"] -# hwc/screen/storage now keyed on (gpu_class, intra_tier) for triangulation -_CPT_HWC = _load("cpt_hwc_given_class_tier.json")["table"] -_CPT_SCREEN = _load("cpt_screen_given_class_tier.json")["table"] -_CPT_STORAGE = _load("cpt_storage_given_class_tier.json")["table"] -# Hidden tier variable that makes hwc/screen/storage jointly coherent -_CPT_INTRA_TIER = _load("cpt_intra_tier_given_class.json")["table"] -# MSAA depends on (gpu_class, screen_tier) — 4K gaming → MSAA=0, 1080p+GPU → MSAA=4 -_CPT_MSAA = _load("cpt_msaa_given_class_screen.json")["table"] -# Codec unchanged -_CPT_CODEC = _load("cpt_codec_given_class.json")["table"] -# Audio now conditional on gpu_class (workstation → pro audio, old → 44.1kHz onboard) -_CPT_AUDIO = _load("cpt_audio_given_class.json")["table"] -_INDEP = _load("priors_independent.json") -_FONT_POOL = _load("font_pool.json") -# hardwareConcurrency: grounded in the REAL Windows marginal (browserforge Windows UAs). -# cores are OS-level, ~independent of GPU given the OS (browserforge confirms), so this is a -# root marginal — NOT conditioned on gpu_class/intra_tier. Fixes the old CPT over-representing -# 6 cores (~28% vs real ~2%). NB: screen size + dpr are intentionally LEFT on their existing -# nodes (user 2026-06-18: "non modificare dpr e le size degli screen, rompono sempre"). -_CORES_MARGINAL = [ - {"value": int(e["value"]), "prob": e["prob"]} - for e in _load("win_hw_marginals.json")["cores"] - if 2 <= int(e["value"]) <= 64 and e["prob"] >= 0.004 -] -# Each entry is a dict {"name": "", "factor": float}. -# - name: the font family advertised to the page. -# - factor: per-family width scale used by the consumer to make the family -# detectable by width-diff probes. -# Core = always-included; Optional = sampled with P(font | gpu_class). -_FONT_CORE: list = _FONT_POOL["core"] -_FONT_OPTIONAL: list = _FONT_POOL["optional"] -_CPT_FONTS_OPT = _load("cpt_fonts_optional_given_class.json")["table"] # legacy (per-font sampling, superseded by profiles) -# Realistic Windows font PROFILES (2026-06-18): each = a real machine's optional-font set -# (validated to NOT over-claim on FP Pro). Profile-level variation (machines differ in -# Office/extra fonts) instead of per-font random sampling, which produced unrealistic -# combinations (exotic fonts -> FP Pro over-detection -> tampering_ml tell). -_FONT_PROFILES: list = _FONT_POOL.get("profiles", []) -_OPT_BY_NAME = {e["name"]: e for e in _FONT_OPTIONAL} -# Browsing-history pool + CPT (per-class probabilities for visited sites). -# Drives _recaptcha_seed's cookie pre-seed: each persona ends up with a -# coherent list of ~15-30 visited sites whose categories correlate with -# gpu_class (workstation → dev-heavy, integrated_old → shop+news-heavy). -_BROWSING_POOL: list = _load("browsing_pool.json")["entries"] -_CPT_BROWSING = _load("cpt_browsing_given_class.json")["table"] - - -# ═══════════════════════════════════════════════════════════════════════ -# GPU CLASSIFIER (deterministic function of gpu → gpu_class) -# ═══════════════════════════════════════════════════════════════════════ -_GPU_CLASSES = ( - "integrated_old", "integrated_modern", "low_end", - "mid_range", "high_end", "workstation", -) - - -def classify_gpu(gpu_value: Dict[str, str]) -> str: - """Deterministic: maps (renderer, vendor) dict to one of 6 classes. - - See data/cpt_*.json — each CPT table has an entry for every class. - """ - r = gpu_value.get("renderer", "") - - if re.search(r"Intel.*HD Graphics (3000|4000|2500)", r): - return "integrated_old" - # Discrete Intel Arc DESKTOP/dGPU cards (A-series / B-series, e.g. A750, - # A770, B580) are discrete GPUs (~RTX 3060 tier for A7xx), NOT the - # integrated "Arc 130T/140T/Graphics" iGPUs in Core Ultra chips. Route the - # discrete SKUs to a coherent discrete-GPU class so the conditioned bundle - # (cores, screen, storage) matches a real discrete-GPU machine; A3xx are - # entry discrete -> low_end, A5xx/A7xx/Bxxx -> mid_range. Bare "Arc 1x0(T/V)" - # integrated names do NOT match and fall through to integrated_modern below. - m = re.search(r"Intel.*\bArc(?:\(TM\))?\s+([AB])(\d)\d\d\b", r) - if m: - return "low_end" if m.group(2) == "3" else "mid_range" - if re.search( - r"Intel.*(HD Graphics (4[56]|5\d\d|6\d\d)|UHD Graphics|Graphics Family|Iris|Arc)", - r, - ): - return "integrated_modern" - if re.search( - r"AMD.*(Radeon(\(TM\))? (Graphics|6\d\dM|7\d\dM|8\d\dM)|Vega [0-9]|" - r"Renoir|Rembrandt|TM Graphics)", - r, re.IGNORECASE, - ): - return "integrated_modern" - - # NVIDIA: Firefox SanitizeRenderer.cpp collapses every GeForce into one of - # 3 vintage buckets (8800 GTX / GTX 480 / GTX 980). The renderer string - # exposed to JS is therefore vintage; pairing it with modern cores/screen - # creates an internal mismatch that FP Pro's tampering_ml flags. We pick - # `low_end` for all 3 buckets so cores stay 4-12 and screen 1080-1440p, - # consistent with what a real user with each of those (vintage) cards - # would have. Workstation overrides keep their high-tier classification. - if re.search( - r"(GeForce (8\d\d\d?|9\d\d\d?|GTX 980|GTX 480|GT 1030|GT 710|GT 730|" - r"GT 220|GT 240|210|310)|Quadro K\d|Radeon HD [1234]\d\d\d)", r, - ): - return "low_end" - - # NVIDIA discrete (any other GeForce — should be rare after the pool was - # collapsed to the 3 sanitize buckets, but kept as a safety net). - m = re.search(r"GeForce\s+(?:GTX\s+|RTX\s+)?(\d{3,4})", r) - if m: - if "Quadro" in r or "Workstation" in r: - return "workstation" - # Anything that survives the sanitize collapse stays low_end to avoid - # the modern-cores/vintage-renderer pairing. - return "low_end" - - # AMD discrete - m = re.search(r"Radeon[^0-9]*(\d{3,4})", r) - if m: - n = int(m.group(1)) - if "FirePro" in r or "Radeon Pro" in r: - return "workstation" - if n >= 5700: - return "high_end" - if 5500 <= n <= 5600 or 580 <= n <= 590: - return "mid_range" - return "low_end" - - # Fallback - return "mid_range" - - -# ═══════════════════════════════════════════════════════════════════════ -# NETWORK CONSTRUCTION -# ═══════════════════════════════════════════════════════════════════════ -# Build once at import — the network is stateless, only the RNG varies. - -def _gpu_marginal(): - """Build marginal distribution over GPU pool (uniform for now).""" - n = len(_GPU_POOL) - p = 1.0 / n - return [{"value": g, "prob": p} for g in _GPU_POOL] - - -def _cpt_from_table(table: Dict[str, Any]) -> Dict[str, list]: - """CPT for conditional nodes: `{class_name: [{value, prob}, ...]}`.""" - return dict(table) - - -def _screen_tier(ctx): - """Classify screen width into tier for (gpu_class, screen_tier) CPTs.""" - s = ctx.get("screen", {}) or {} - w = int(s.get("w", 1920)) - h = int(s.get("h", 1080)) - # Ultrawide: aspect ratio > 2.1 (e.g. 3440x1440, 5120x1440) - if h > 0 and (w / h) > 2.1: - return "ultrawide" - if w <= 1920: - return "1080p" - if w <= 2560: - return "1440p" - if w <= 3840: - return "2160p" - return "ultrawide" - - -_NETWORK = Network([ - Node("gpu", parents=[], cpt=_gpu_marginal()), - Node("gpu_class", parents=["gpu"], classifier=lambda ctx: classify_gpu(ctx["gpu"])), - # Hidden variable: within a gpu_class, user's OTHER components (RAM, SSD, - # cores, screen) correlate — a 'premium' mid_range user has more cores, - # larger SSD, higher-res screen than a 'budget' mid_range user. Without - # this, hwc/screen/storage would be independent given gpu_class (noisy). - Node("intra_tier", parents=["gpu_class"], cpt=_cpt_from_table(_CPT_INTRA_TIER)), - # hw_concurrency: REAL Windows marginal (root, OS-level, not GPU-conditioned). screen + - # storage stay jointly coherent via (gpu_class, intra_tier) — screen size deliberately - # unchanged (user: dpr + screen sizes break things; leave them). - Node("hw_concurrency", parents=[], cpt=_CORES_MARGINAL), - Node("screen", parents=["gpu_class", "intra_tier"], - cpt=_cpt_from_table(_CPT_SCREEN)), - # Derive screen_tier from screen for msaa parent lookup. - Node("screen_tier", parents=["screen"], classifier=_screen_tier), - # MSAA: realistic combo (4K + high_end GPU → MSAA=0 due to perf cost; - # 1080p + high_end → MSAA=4 common; 1080p + integrated → MSAA=0). - Node("msaa_samples", parents=["gpu_class", "screen_tier"], - cpt=_cpt_from_table(_CPT_MSAA)), - # Joint codec distribution (gpu_class only). - Node("codec", parents=["gpu_class"], cpt=_cpt_from_table(_CPT_CODEC)), - # Storage quota: coherent within gpu_class × intra_tier (premium workstation - # user → 2-3TB SSD; budget workstation user → 512GB; budget integrated_old - # → 128GB). - Node("storage_quota_mb", parents=["gpu_class", "intra_tier"], - cpt=_cpt_from_table(_CPT_STORAGE)), - # Audio: pro users (workstation) → 48/96kHz 6-8ch; old onboard → 44.1kHz - # 2ch high latency. Workstation GPU + 44.1kHz mono was previously - # implausible; now blocked by the CPT. - Node("audio", parents=["gpu_class"], cpt=_cpt_from_table(_CPT_AUDIO)), - Node("dark_theme", parents=[], cpt=_INDEP["dark_theme"]["table"]), -]) - - -# ═══════════════════════════════════════════════════════════════════════ -# FONT LIST (Bayesian: core ∪ sampled_optional | gpu_class) -# ═══════════════════════════════════════════════════════════════════════ -# The browser sees ONLY these families (everything else hidden) and renders -# them from the REAL Windows font files the binary bundles in /fonts -# (MOZ_BUNDLED_FONTS). No fabricated widths: per-session metric uniqueness -# comes from the HarfBuzz per-glyph jitter (shared fpp.hw_seed), not here. -# Core (~112): always included — fresh Win11 + Office 2021 English. -# Optional (~40): one realistic Windows profile sampled per seed (weighted, -# deterministic) → ~3-8 optional families differ per session while staying -# centered on 'typical Windows user'. - - -def derive_font_prefs(gpu_class: str, rng) -> Dict[str, str]: - """Build the session's font family list. - - Profile-based (not per-font random): - - Core families always included (OS defaults + CSS-generic backers). - - Optional families come from ONE realistic Windows profile picked per - seed (weighted, deterministic). - - Returns ``{"whitelist": "arial,calibri,marlett,..."}`` — the comma-joined - family list to advertise. The binary applies it to the native system font - allow-list AT CONSTRUCTION and renders each family from the bundled real - Windows file, so glyphs and widths are genuine. To add a family, just add - an entry to font_pool.json:core/optional — no special-case code needed. - """ - # Profile-based (2026-06-18): pick ONE realistic Windows font profile (weighted, - # deterministic per seed). Per-font random sampling is superseded — it produced - # unrealistic optional combinations (exotic fonts) that FP Pro over-detected - # (detected-set 26 vs real 20 -> tampering_ml ~0.72). Profiles are validated subsets - # of a real machine's set, so the detected-set matches a genuine Windows install. - included: list = list(_FONT_CORE) # core: always present (OS defaults + generic backers) - profile = None - if _FONT_PROFILES: - total = sum(p.get("weight", 1) for p in _FONT_PROFILES) - anchor = rng.random() * total - cum = 0.0 - for p in _FONT_PROFILES: - cum += p.get("weight", 1) - if anchor < cum: - profile = p - break - if profile is None: - profile = _FONT_PROFILES[-1] - if profile is not None: - for name in profile.get("optional", []): - entry = _OPT_BY_NAME.get(name) - if entry is not None: - included.append(entry) - else: - included.extend(_FONT_OPTIONAL) # fallback (no profiles defined): all optional - # Dedup by name (a profile may list a font that is also in core, e.g. after a - # standard font is promoted core→always-present) so the list never carries a - # duplicate family. - _seen: set = set() - _uniq: list = [] - for e in included: - if e["name"] not in _seen: - _seen.add(e["name"]) - _uniq.append(e) - included = _uniq - # Deterministic ordering: sort by name - included.sort(key=lambda e: e["name"]) - whitelist = ",".join(e["name"] for e in included) - return {"whitelist": whitelist} - - -# Back-compat shim: legacy callers still import derive_font_whitelist. -def derive_font_whitelist(gpu_class: str, rng) -> str: - return derive_font_prefs(gpu_class, rng)["whitelist"] - - -# ═══════════════════════════════════════════════════════════════════════ -# BROWSING HISTORY (Bayesian: per-site P(visited|gpu_class)) -# ═══════════════════════════════════════════════════════════════════════ -def derive_browsing_history(gpu_class: str, rng) -> list: - """Sample which sites this persona has visited recently. - - Each site in the pool has a per-class probability (CPT). We sample - independently per-site, producing a list of dicts: - [{"name": "github.com", "category": "dev", "cookie_profile": "ga_cf"}, ...] - - Sum of CPT probabilities per class is tuned to land ~15-30 visited sites - on average — an established-user signature. Sorted by name for stable - output across runs of the same seed. - """ - cpt = _CPT_BROWSING.get(gpu_class) - if cpt is None: - cpt = _CPT_BROWSING["mid_range"] - visited: list = [] - for entry in _BROWSING_POOL: - name = entry["name"] - p = cpt.get(name, 0.3) # default 0.3 for missing CPT row - if rng.random() < p: - visited.append(dict(entry)) # copy to avoid mutating pool - visited.sort(key=lambda e: e["name"]) - return visited - - -# ═══════════════════════════════════════════════════════════════════════ -# PUBLIC API: Forge -# ═══════════════════════════════════════════════════════════════════════ -import random - - -class Forge: - """Fingerprint forge — single seed → coherent bundle.""" - - def __init__(self, seed: int): - self.seed = int(seed) - self._rng = random.Random(self.seed) - - def sample(self, fixed_gpu_class: Optional[str] = None) -> Dict[str, Any]: - # fixed_gpu_class pins gpu_class so the WHOLE bundle (cores/screen/fonts) is - # drawn coherently for the WebGL persona's class we expose on Windows/mac. - # The default (no fix) path calls _NETWORK.sample(rng) with one arg so existing - # monkeypatches/tests keep working. - if fixed_gpu_class: - bundle = _NETWORK.sample(self._rng, evidence={"gpu_class": fixed_gpu_class}) - else: - bundle = _NETWORK.sample(self._rng) - gpu = bundle["gpu"] - screen = bundle["screen"] - audio = bundle["audio"] - codec = bundle["codec"] - return { - # Seed tracking - "stealth_seed": self.seed, - # Locked identity - **_LOCKED, - # GPU (coherent pair from 474 pool) - "webgl_renderer": gpu["renderer"], - "webgl_vendor": gpu["vendor"], - "gpu_class": bundle["gpu_class"], - # Hidden-variable debug metadata (not a Firefox pref, just for - # analysis / test result correlation tracking) - "intra_tier": bundle["intra_tier"], - "screen_tier": bundle["screen_tier"], - # Screen (coherent with GPU class) - "screen_w": int(screen["w"]), - "screen_h": int(screen["h"]), - "screen_avail_w": int(screen.get("aw", screen["w"])), - "screen_avail_h": int(screen.get("ah", screen["h"] - 40)), - "dpr": float(screen["dpr"]), - # Hardware (coherent with GPU class) - "hw_concurrency": int(bundle["hw_concurrency"]), - # WebGL MSAA (coherent with GPU class) - "msaa_samples": int(bundle["msaa_samples"]), - # Audio (independent joint) - "audio_sample_rate": int(audio["rate"]), - "audio_output_latency_ms": int(audio["latency"]), - "audio_max_channel_count": int(audio["channels"]), - # Codec prefs (joint, coherent with GPU class). All 5 are - # JS-visible: av1/webm_encoder via canPlayType/MediaRecorder, - # mediasource_* via MediaSource.isTypeSupported, webspeech_synth - # via 'speechSynthesis' in window (CreepJS voices probe). - "av1_enabled": bool(codec["av1_enabled"]), - "webm_encoder_enabled": bool(codec["webm_encoder_enabled"]), - "mediasource_webm": bool(codec["mediasource_webm"]), - "mediasource_mp4": bool(codec["mediasource_mp4"]), - "webspeech_synth": bool(codec["webspeech_synth"]), - # Storage quota MB (coherent with GPU class — workstation larger SSDs). - "storage_quota_mb": int(bundle["storage_quota_mb"]), - # Independent marginals - "dark_theme": int(bundle["dark_theme"]), - # Bayesian font prefs (coherent pair: whitelist + per-family - # width scale metrics, both sampled from the same font_pool.json - # and conditioned on gpu_class). - **{ - f"font_{k}": v - for k, v in derive_font_prefs( - bundle["gpu_class"], self._rng - ).items() - }, - # Bayesian browsing history (per-class P(visited|gpu_class)). - # Consumed by _recaptcha_seed.py to seed coherent cookie history - # when invisible_playwright is launched with prep_recaptcha=True. - "browsing_history": derive_browsing_history( - bundle["gpu_class"], self._rng - ), - } - - -def sample(seed: int, fixed_gpu_class: Optional[str] = None) -> Dict[str, Any]: - """Convenience: `Forge(seed).sample(fixed_gpu_class)`.""" - return Forge(seed).sample(fixed_gpu_class) diff --git a/src/invisible_playwright/_fpforge/data/browsing_pool.json b/src/invisible_playwright/_fpforge/data/browsing_pool.json deleted file mode 100644 index 6e98cd9..0000000 --- a/src/invisible_playwright/_fpforge/data/browsing_pool.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_comment": [ - "Pool of everyday websites used by the browsing_history node.", - "Each entry: { name, category, cookie_profile }.", - "- name: bare domain (no scheme, no leading dot).", - "- category: dev / shop / news / reference / media / community / misc.", - "- cookie_profile: short tag pointing to a cookie-template recipe used by", - " _recaptcha_seed.py to generate concrete cookies (so heavy-analytics sites", - " get _ga+_gid+OneTrust, simple sites get just _ga, dev tools get GH-style).", - "Add new entries here + add per-class probabilities in cpt_browsing_given_class.json." - ], - "entries": [ - {"name": "youtube.com", "category": "media", "cookie_profile": "ga_only"}, - {"name": "wikipedia.org", "category": "reference", "cookie_profile": "minimal"}, - {"name": "mozilla.org", "category": "reference", "cookie_profile": "ga_consent"}, - {"name": "w3schools.com", "category": "dev", "cookie_profile": "ga_consent_clarity"}, - {"name": "mdn.io", "category": "dev", "cookie_profile": "minimal"}, - {"name": "duckduckgo.com", "category": "reference", "cookie_profile": "minimal"}, - {"name": "github.com", "category": "dev", "cookie_profile": "ga_cf"}, - {"name": "stackoverflow.com", "category": "dev", "cookie_profile": "ga_consent_clarity"}, - {"name": "npmjs.com", "category": "dev", "cookie_profile": "ga_consent"}, - {"name": "gitlab.com", "category": "dev", "cookie_profile": "ga_cf"}, - {"name": "pypi.org", "category": "dev", "cookie_profile": "minimal"}, - {"name": "docs.python.org", "category": "dev", "cookie_profile": "minimal"}, - {"name": "rust-lang.org", "category": "dev", "cookie_profile": "ga_consent"}, - {"name": "go.dev", "category": "dev", "cookie_profile": "ga_consent"}, - {"name": "amazon.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "ebay.com", "category": "shop", "cookie_profile": "ga_consent"}, - {"name": "etsy.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "bestbuy.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "target.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "nytimes.com", "category": "news", "cookie_profile": "ga_consent_clarity"}, - {"name": "cnn.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "bbc.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "theguardian.com", "category": "news", "cookie_profile": "ga_consent_clarity"}, - {"name": "reuters.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "apnews.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "washingtonpost.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "techcrunch.com", "category": "news", "cookie_profile": "ga_consent_clarity"}, - {"name": "theverge.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "arstechnica.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "wired.com", "category": "news", "cookie_profile": "ga_consent_clarity"}, - {"name": "engadget.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "9to5mac.com", "category": "news", "cookie_profile": "ga_consent"}, - {"name": "medium.com", "category": "community", "cookie_profile": "ga_consent"}, - {"name": "dev.to", "category": "community", "cookie_profile": "ga_consent"}, - {"name": "reddit.com", "category": "community", "cookie_profile": "ga_cf"}, - {"name": "news.ycombinator.com", "category": "community", "cookie_profile": "minimal"}, - {"name": "quora.com", "category": "community", "cookie_profile": "ga_consent_clarity"}, - {"name": "stackexchange.com", "category": "community", "cookie_profile": "ga_consent_clarity"}, - {"name": "imdb.com", "category": "media", "cookie_profile": "ga_consent_clarity"}, - {"name": "rottentomatoes.com", "category": "media", "cookie_profile": "ga_consent"}, - {"name": "metacritic.com", "category": "media", "cookie_profile": "ga_consent"}, - {"name": "allrecipes.com", "category": "misc", "cookie_profile": "ga_consent_clarity"}, - {"name": "epicurious.com", "category": "misc", "cookie_profile": "ga_consent"}, - {"name": "tripadvisor.com", "category": "misc", "cookie_profile": "ga_consent_clarity"}, - {"name": "weather.com", "category": "reference", "cookie_profile": "ga_consent"}, - {"name": "timeanddate.com", "category": "reference", "cookie_profile": "ga_consent"}, - {"name": "thesaurus.com", "category": "reference", "cookie_profile": "ga_consent_clarity"}, - {"name": "kayak.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "booking.com", "category": "shop", "cookie_profile": "ga_consent_clarity"}, - {"name": "airbnb.com", "category": "shop", "cookie_profile": "ga_consent"} - ] -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_audio_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_audio_given_class.json deleted file mode 100644 index fe6a075..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_audio_given_class.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "_meta": "audio (rate/latency/channels) given gpu_class. NOTE 2026-06-14: maxChannelCount reflects the OS DEFAULT OUTPUT DEVICE (stereo for the vast majority of users), NOT the GPU — so channels=2 dominates every class (~78-92%) with only a small 6/8 surround tail. The previous tables emitted 45-100% surround on mid/high/workstation, which is unrealistic and lifted FP Pro tampering_ml (surround on a typical consumer profile reads as a coherence anomaly). Rate/latency tuples are unchanged.", - "table": { - "integrated_old": [ - { - "value": { - "rate": 44100, - "latency": 50, - "channels": 2 - }, - "prob": 0.7 - }, - { - "value": { - "rate": 48000, - "latency": 50, - "channels": 2 - }, - "prob": 0.3 - } - ], - "integrated_modern": [ - { - "value": { - "rate": 48000, - "latency": 30, - "channels": 2 - }, - "prob": 0.62 - }, - { - "value": { - "rate": 44100, - "latency": 40, - "channels": 2 - }, - "prob": 0.3 - }, - { - "value": { - "rate": 48000, - "latency": 25, - "channels": 6 - }, - "prob": 0.08 - } - ], - "low_end": [ - { - "value": { - "rate": 48000, - "latency": 40, - "channels": 2 - }, - "prob": 0.6 - }, - { - "value": { - "rate": 44100, - "latency": 50, - "channels": 2 - }, - "prob": 0.32 - }, - { - "value": { - "rate": 48000, - "latency": 30, - "channels": 6 - }, - "prob": 0.08 - } - ], - "mid_range": [ - { - "value": { - "rate": 48000, - "latency": 25, - "channels": 2 - }, - "prob": 0.5 - }, - { - "value": { - "rate": 48000, - "latency": 20, - "channels": 2 - }, - "prob": 0.3 - }, - { - "value": { - "rate": 44100, - "latency": 30, - "channels": 2 - }, - "prob": 0.12 - }, - { - "value": { - "rate": 48000, - "latency": 20, - "channels": 6 - }, - "prob": 0.06 - }, - { - "value": { - "rate": 48000, - "latency": 20, - "channels": 8 - }, - "prob": 0.02 - } - ], - "high_end": [ - { - "value": { - "rate": 48000, - "latency": 15, - "channels": 2 - }, - "prob": 0.6 - }, - { - "value": { - "rate": 96000, - "latency": 15, - "channels": 2 - }, - "prob": 0.18 - }, - { - "value": { - "rate": 48000, - "latency": 15, - "channels": 6 - }, - "prob": 0.1 - }, - { - "value": { - "rate": 48000, - "latency": 15, - "channels": 8 - }, - "prob": 0.05 - }, - { - "value": { - "rate": 96000, - "latency": 15, - "channels": 6 - }, - "prob": 0.05 - }, - { - "value": { - "rate": 96000, - "latency": 15, - "channels": 8 - }, - "prob": 0.02 - } - ], - "workstation": [ - { - "value": { - "rate": 48000, - "latency": 10, - "channels": 2 - }, - "prob": 0.45 - }, - { - "value": { - "rate": 96000, - "latency": 10, - "channels": 2 - }, - "prob": 0.2 - }, - { - "value": { - "rate": 48000, - "latency": 10, - "channels": 8 - }, - "prob": 0.12 - }, - { - "value": { - "rate": 96000, - "latency": 10, - "channels": 8 - }, - "prob": 0.1 - }, - { - "value": { - "rate": 96000, - "latency": 10, - "channels": 6 - }, - "prob": 0.08 - }, - { - "value": { - "rate": 192000, - "latency": 10, - "channels": 8 - }, - "prob": 0.05 - } - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_browsing_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_browsing_given_class.json deleted file mode 100644 index b2e3b1a..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_browsing_given_class.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "_comment": [ - "Per-class probability that a persona of a given gpu_class has visited each", - "site in the pool. Used by the browsing_history node to derive a coherent", - "visited-domain list per persona.", - "", - "Probabilities are tuned so each class samples ~15-30 sites on average", - "(sum across all 50 entries falls in that range), giving an established-user", - "look. Categories are biased by class:", - " - workstation/high_end: higher P(dev) + high P(news/media)", - " - mid_range: balanced", - " - low_end/integrated_*: lower P(dev), higher P(shop/news/reference)", - "", - "Missing class falls back to mid_range via Node CPT pool fallback." - ], - "table": { - "workstation": { - "youtube.com": 0.80, "wikipedia.org": 0.85, "mozilla.org": 0.70, - "w3schools.com": 0.40, "mdn.io": 0.55, "duckduckgo.com": 0.45, - "github.com": 0.95, "stackoverflow.com": 0.90, "npmjs.com": 0.65, - "gitlab.com": 0.50, "pypi.org": 0.55, "docs.python.org": 0.60, - "rust-lang.org": 0.35, "go.dev": 0.30, - "amazon.com": 0.70, "ebay.com": 0.25, "etsy.com": 0.15, - "bestbuy.com": 0.45, "target.com": 0.30, - "nytimes.com": 0.55, "cnn.com": 0.40, "bbc.com": 0.55, - "theguardian.com": 0.45, "reuters.com": 0.40, "apnews.com": 0.30, - "washingtonpost.com": 0.40, - "techcrunch.com": 0.65, "theverge.com": 0.60, "arstechnica.com": 0.65, - "wired.com": 0.50, "engadget.com": 0.35, "9to5mac.com": 0.30, - "medium.com": 0.55, "dev.to": 0.40, "reddit.com": 0.70, - "news.ycombinator.com": 0.65, "quora.com": 0.20, "stackexchange.com": 0.60, - "imdb.com": 0.45, "rottentomatoes.com": 0.25, "metacritic.com": 0.20, - "allrecipes.com": 0.20, "epicurious.com": 0.15, "tripadvisor.com": 0.30, - "weather.com": 0.55, "timeanddate.com": 0.30, "thesaurus.com": 0.25, - "kayak.com": 0.30, "booking.com": 0.35, "airbnb.com": 0.30 - }, - "high_end": { - "youtube.com": 0.85, "wikipedia.org": 0.80, "mozilla.org": 0.60, - "w3schools.com": 0.45, "mdn.io": 0.45, "duckduckgo.com": 0.40, - "github.com": 0.85, "stackoverflow.com": 0.80, "npmjs.com": 0.50, - "gitlab.com": 0.40, "pypi.org": 0.45, "docs.python.org": 0.50, - "rust-lang.org": 0.30, "go.dev": 0.25, - "amazon.com": 0.75, "ebay.com": 0.30, "etsy.com": 0.20, - "bestbuy.com": 0.50, "target.com": 0.35, - "nytimes.com": 0.50, "cnn.com": 0.50, "bbc.com": 0.50, - "theguardian.com": 0.40, "reuters.com": 0.35, "apnews.com": 0.30, - "washingtonpost.com": 0.35, - "techcrunch.com": 0.60, "theverge.com": 0.65, "arstechnica.com": 0.60, - "wired.com": 0.50, "engadget.com": 0.40, "9to5mac.com": 0.35, - "medium.com": 0.50, "dev.to": 0.35, "reddit.com": 0.75, - "news.ycombinator.com": 0.55, "quora.com": 0.25, "stackexchange.com": 0.55, - "imdb.com": 0.55, "rottentomatoes.com": 0.35, "metacritic.com": 0.30, - "allrecipes.com": 0.25, "epicurious.com": 0.20, "tripadvisor.com": 0.30, - "weather.com": 0.55, "timeanddate.com": 0.30, "thesaurus.com": 0.25, - "kayak.com": 0.30, "booking.com": 0.40, "airbnb.com": 0.30 - }, - "mid_range": { - "youtube.com": 0.85, "wikipedia.org": 0.75, "mozilla.org": 0.45, - "w3schools.com": 0.40, "mdn.io": 0.30, "duckduckgo.com": 0.35, - "github.com": 0.55, "stackoverflow.com": 0.55, "npmjs.com": 0.30, - "gitlab.com": 0.25, "pypi.org": 0.25, "docs.python.org": 0.30, - "rust-lang.org": 0.15, "go.dev": 0.15, - "amazon.com": 0.80, "ebay.com": 0.40, "etsy.com": 0.30, - "bestbuy.com": 0.55, "target.com": 0.40, - "nytimes.com": 0.45, "cnn.com": 0.55, "bbc.com": 0.45, - "theguardian.com": 0.35, "reuters.com": 0.30, "apnews.com": 0.30, - "washingtonpost.com": 0.30, - "techcrunch.com": 0.45, "theverge.com": 0.50, "arstechnica.com": 0.40, - "wired.com": 0.45, "engadget.com": 0.35, "9to5mac.com": 0.30, - "medium.com": 0.45, "dev.to": 0.25, "reddit.com": 0.70, - "news.ycombinator.com": 0.30, "quora.com": 0.35, "stackexchange.com": 0.40, - "imdb.com": 0.60, "rottentomatoes.com": 0.40, "metacritic.com": 0.35, - "allrecipes.com": 0.35, "epicurious.com": 0.25, "tripadvisor.com": 0.40, - "weather.com": 0.60, "timeanddate.com": 0.25, "thesaurus.com": 0.30, - "kayak.com": 0.35, "booking.com": 0.45, "airbnb.com": 0.40 - }, - "low_end": { - "youtube.com": 0.85, "wikipedia.org": 0.70, "mozilla.org": 0.35, - "w3schools.com": 0.30, "mdn.io": 0.20, "duckduckgo.com": 0.30, - "github.com": 0.30, "stackoverflow.com": 0.30, "npmjs.com": 0.15, - "gitlab.com": 0.10, "pypi.org": 0.10, "docs.python.org": 0.15, - "rust-lang.org": 0.05, "go.dev": 0.05, - "amazon.com": 0.85, "ebay.com": 0.50, "etsy.com": 0.40, - "bestbuy.com": 0.55, "target.com": 0.45, - "nytimes.com": 0.40, "cnn.com": 0.60, "bbc.com": 0.40, - "theguardian.com": 0.30, "reuters.com": 0.25, "apnews.com": 0.30, - "washingtonpost.com": 0.25, - "techcrunch.com": 0.30, "theverge.com": 0.35, "arstechnica.com": 0.25, - "wired.com": 0.40, "engadget.com": 0.30, "9to5mac.com": 0.25, - "medium.com": 0.35, "dev.to": 0.15, "reddit.com": 0.65, - "news.ycombinator.com": 0.15, "quora.com": 0.45, "stackexchange.com": 0.25, - "imdb.com": 0.65, "rottentomatoes.com": 0.45, "metacritic.com": 0.35, - "allrecipes.com": 0.45, "epicurious.com": 0.30, "tripadvisor.com": 0.45, - "weather.com": 0.65, "timeanddate.com": 0.25, "thesaurus.com": 0.35, - "kayak.com": 0.35, "booking.com": 0.50, "airbnb.com": 0.40 - }, - "integrated_modern": { - "youtube.com": 0.85, "wikipedia.org": 0.70, "mozilla.org": 0.40, - "w3schools.com": 0.35, "mdn.io": 0.25, "duckduckgo.com": 0.35, - "github.com": 0.40, "stackoverflow.com": 0.40, "npmjs.com": 0.20, - "gitlab.com": 0.15, "pypi.org": 0.20, "docs.python.org": 0.20, - "rust-lang.org": 0.10, "go.dev": 0.10, - "amazon.com": 0.80, "ebay.com": 0.40, "etsy.com": 0.30, - "bestbuy.com": 0.50, "target.com": 0.40, - "nytimes.com": 0.40, "cnn.com": 0.55, "bbc.com": 0.45, - "theguardian.com": 0.35, "reuters.com": 0.30, "apnews.com": 0.30, - "washingtonpost.com": 0.30, - "techcrunch.com": 0.40, "theverge.com": 0.45, "arstechnica.com": 0.30, - "wired.com": 0.40, "engadget.com": 0.30, "9to5mac.com": 0.25, - "medium.com": 0.40, "dev.to": 0.20, "reddit.com": 0.65, - "news.ycombinator.com": 0.25, "quora.com": 0.40, "stackexchange.com": 0.35, - "imdb.com": 0.60, "rottentomatoes.com": 0.40, "metacritic.com": 0.30, - "allrecipes.com": 0.40, "epicurious.com": 0.25, "tripadvisor.com": 0.40, - "weather.com": 0.60, "timeanddate.com": 0.25, "thesaurus.com": 0.30, - "kayak.com": 0.35, "booking.com": 0.45, "airbnb.com": 0.40 - }, - "integrated_old": { - "youtube.com": 0.75, "wikipedia.org": 0.65, "mozilla.org": 0.30, - "w3schools.com": 0.20, "mdn.io": 0.10, "duckduckgo.com": 0.25, - "github.com": 0.15, "stackoverflow.com": 0.20, "npmjs.com": 0.05, - "gitlab.com": 0.05, "pypi.org": 0.05, "docs.python.org": 0.10, - "rust-lang.org": 0.02, "go.dev": 0.02, - "amazon.com": 0.85, "ebay.com": 0.55, "etsy.com": 0.45, - "bestbuy.com": 0.55, "target.com": 0.50, - "nytimes.com": 0.45, "cnn.com": 0.65, "bbc.com": 0.40, - "theguardian.com": 0.30, "reuters.com": 0.25, "apnews.com": 0.35, - "washingtonpost.com": 0.30, - "techcrunch.com": 0.20, "theverge.com": 0.25, "arstechnica.com": 0.15, - "wired.com": 0.30, "engadget.com": 0.20, "9to5mac.com": 0.20, - "medium.com": 0.30, "dev.to": 0.05, "reddit.com": 0.55, - "news.ycombinator.com": 0.05, "quora.com": 0.55, "stackexchange.com": 0.15, - "imdb.com": 0.70, "rottentomatoes.com": 0.50, "metacritic.com": 0.35, - "allrecipes.com": 0.55, "epicurious.com": 0.35, "tripadvisor.com": 0.50, - "weather.com": 0.70, "timeanddate.com": 0.30, "thesaurus.com": 0.40, - "kayak.com": 0.40, "booking.com": 0.55, "airbnb.com": 0.40 - } - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_codec_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_codec_given_class.json deleted file mode 100644 index e5a3d05..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_codec_given_class.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "_meta": "codec given gpu_class", - "table": { - "integrated_old": [ - { - "value": { - "av1_enabled": false, - "webm_encoder_enabled": false, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 1.0 - } - ], - "integrated_modern": [ - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.55 - }, - { - "value": { - "av1_enabled": false, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.35 - }, - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": false - }, - "prob": 0.1 - } - ], - "low_end": [ - { - "value": { - "av1_enabled": false, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.85 - }, - { - "value": { - "av1_enabled": false, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": false - }, - "prob": 0.15 - } - ], - "mid_range": [ - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.55 - }, - { - "value": { - "av1_enabled": false, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.35 - }, - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": false - }, - "prob": 0.1 - } - ], - "high_end": [ - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.85 - }, - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": false - }, - "prob": 0.15 - } - ], - "workstation": [ - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": true - }, - "prob": 0.7 - }, - { - "value": { - "av1_enabled": true, - "webm_encoder_enabled": true, - "mediasource_webm": true, - "mediasource_mp4": true, - "webspeech_synth": false - }, - "prob": 0.3 - } - ] - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/cpt_fonts_optional_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_fonts_optional_given_class.json deleted file mode 100644 index 12c098d..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_fonts_optional_given_class.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "_meta": { - "name": "optional_font presence | gpu_class", - "parents": [ - "gpu_class" - ], - "child": "optional_fonts_subset", - "description": "Per-optional-font presence probabilities given gpu_class. Each optional font in font_pool.json sampled INDEPENDENTLY with P(present | gpu_class) given here. Integrated_old: fewer language packs (older/cheaper machines). Workstation: more regional/language packs (international users, enterprise deployments).", - "rationale": "Near-invariant by design: most optional fonts have baseline P ~ 0.60-0.85 across classes. Per-session variance is small (~3-6 fonts toggling on/off out of 40 optional). Result: fingerprint always looks like 'typical Windows 11 + Office', with small realistic per-user variance in regional support." - }, - "table": { - "integrated_old": { - "aparajita": 0.45, - "calibri": 0.9, - "dengxian": 0.3, - "dfkai-sb": 0.25, - "dokchampa": 0.2, - "estrangelo edessa": 0.55, - "euphemia": 0.6, - "fangsong": 0.35, - "gadugi": 0.88, - "gautami": 0.55, - "helv": 0.7, - "iskoola pota": 0.5, - "javanese text": 0.85, - "kaiti": 0.3, - "kalinga": 0.5, - "kartika": 0.5, - "khmer ui": 0.35, - "kokila": 0.55, - "lao ui": 0.35, - "latha": 0.65, - "leelawadee ui": 0.87, - "mangal": 0.65, - "meiryo": 0.6, - "microsoft uighur": 0.4, - "ms pmincho": 0.65, - "ms reference sans serif": 0.55, - "ms reference specialty": 0.5, - "ms ui gothic": 0.82, - "myanmar text": 0.84, - "nyala": 0.55, - "plantagenet cherokee": 0.6, - "raavi": 0.55, - "segoe fluent icons": 0.5, - "segoe ui light": 0.75, - "shonar bangla": 0.55, - "shruti": 0.55, - "simkai": 0.25, - "small fonts": 0.75, - "traditional arabic": 0.55, - "tunga": 0.55, - "urdu typesetting": 0.45, - "utsaah": 0.55, - "vani": 0.55, - "vijaya": 0.55, - "yu mincho": 0.55 - }, - "integrated_modern": { - "aparajita": 0.65, - "calibri": 0.78, - "dengxian": 0.5, - "dfkai-sb": 0.4, - "dokchampa": 0.4, - "estrangelo edessa": 0.7, - "euphemia": 0.78, - "fangsong": 0.55, - "gadugi": 0.96, - "gautami": 0.75, - "helv": 0.6, - "iskoola pota": 0.7, - "javanese text": 0.94, - "kaiti": 0.45, - "kalinga": 0.7, - "kartika": 0.7, - "khmer ui": 0.55, - "kokila": 0.75, - "lao ui": 0.55, - "latha": 0.82, - "leelawadee ui": 0.95, - "mangal": 0.82, - "meiryo": 0.8, - "microsoft uighur": 0.55, - "ms pmincho": 0.85, - "ms reference sans serif": 0.72, - "ms reference specialty": 0.68, - "ms ui gothic": 0.75, - "myanmar text": 0.94, - "nyala": 0.72, - "plantagenet cherokee": 0.78, - "raavi": 0.72, - "segoe fluent icons": 0.92, - "segoe ui light": 0.72, - "shonar bangla": 0.72, - "shruti": 0.72, - "simkai": 0.4, - "small fonts": 0.65, - "traditional arabic": 0.72, - "tunga": 0.72, - "urdu typesetting": 0.65, - "utsaah": 0.72, - "vani": 0.72, - "vijaya": 0.72, - "yu mincho": 0.75 - }, - "low_end": { - "aparajita": 0.55, - "calibri": 0.94, - "dengxian": 0.4, - "dfkai-sb": 0.3, - "dokchampa": 0.3, - "estrangelo edessa": 0.62, - "euphemia": 0.68, - "fangsong": 0.45, - "gadugi": 0.93, - "gautami": 0.65, - "helv": 0.78, - "iskoola pota": 0.6, - "javanese text": 0.91, - "kaiti": 0.35, - "kalinga": 0.6, - "kartika": 0.6, - "khmer ui": 0.45, - "kokila": 0.65, - "lao ui": 0.45, - "latha": 0.72, - "leelawadee ui": 0.92, - "mangal": 0.72, - "meiryo": 0.7, - "microsoft uighur": 0.48, - "ms pmincho": 0.75, - "ms reference sans serif": 0.62, - "ms reference specialty": 0.58, - "ms ui gothic": 0.9, - "myanmar text": 0.9, - "nyala": 0.62, - "plantagenet cherokee": 0.68, - "raavi": 0.62, - "segoe fluent icons": 0.8, - "segoe ui light": 0.88, - "shonar bangla": 0.62, - "shruti": 0.62, - "simkai": 0.3, - "small fonts": 0.83, - "traditional arabic": 0.62, - "tunga": 0.62, - "urdu typesetting": 0.55, - "utsaah": 0.62, - "vani": 0.62, - "vijaya": 0.62, - "yu mincho": 0.65 - }, - "mid_range": { - "aparajita": 0.72, - "calibri": 0.98, - "dengxian": 0.6, - "dfkai-sb": 0.5, - "dokchampa": 0.5, - "estrangelo edessa": 0.78, - "euphemia": 0.82, - "fangsong": 0.65, - "gadugi": 0.97, - "gautami": 0.8, - "helv": 0.85, - "iskoola pota": 0.78, - "javanese text": 0.96, - "kaiti": 0.55, - "kalinga": 0.78, - "kartika": 0.78, - "khmer ui": 0.65, - "kokila": 0.8, - "lao ui": 0.65, - "latha": 0.85, - "leelawadee ui": 0.97, - "mangal": 0.85, - "meiryo": 0.85, - "microsoft uighur": 0.65, - "ms pmincho": 0.88, - "ms reference sans serif": 0.78, - "ms reference specialty": 0.75, - "ms ui gothic": 0.96, - "myanmar text": 0.96, - "nyala": 0.78, - "plantagenet cherokee": 0.82, - "raavi": 0.78, - "segoe fluent icons": 0.94, - "segoe ui light": 0.94, - "shonar bangla": 0.78, - "shruti": 0.78, - "simkai": 0.5, - "small fonts": 0.9, - "traditional arabic": 0.78, - "tunga": 0.78, - "urdu typesetting": 0.72, - "utsaah": 0.78, - "vani": 0.78, - "vijaya": 0.78, - "yu mincho": 0.8 - }, - "high_end": { - "aparajita": 0.8, - "calibri": 0.99, - "dengxian": 0.7, - "dfkai-sb": 0.6, - "dokchampa": 0.6, - "estrangelo edessa": 0.85, - "euphemia": 0.88, - "fangsong": 0.72, - "gadugi": 0.98, - "gautami": 0.85, - "helv": 0.88, - "iskoola pota": 0.82, - "javanese text": 0.97, - "kaiti": 0.65, - "kalinga": 0.82, - "kartika": 0.82, - "khmer ui": 0.72, - "kokila": 0.85, - "lao ui": 0.72, - "latha": 0.9, - "leelawadee ui": 0.98, - "mangal": 0.9, - "meiryo": 0.9, - "microsoft uighur": 0.72, - "ms pmincho": 0.92, - "ms reference sans serif": 0.85, - "ms reference specialty": 0.82, - "ms ui gothic": 0.98, - "myanmar text": 0.97, - "nyala": 0.85, - "plantagenet cherokee": 0.88, - "raavi": 0.85, - "segoe fluent icons": 0.97, - "segoe ui light": 0.96, - "shonar bangla": 0.85, - "shruti": 0.85, - "simkai": 0.6, - "small fonts": 0.92, - "traditional arabic": 0.85, - "tunga": 0.85, - "urdu typesetting": 0.8, - "utsaah": 0.85, - "vani": 0.85, - "vijaya": 0.85, - "yu mincho": 0.88 - }, - "workstation": { - "aparajita": 0.88, - "calibri": 0.99, - "dengxian": 0.8, - "dfkai-sb": 0.75, - "dokchampa": 0.72, - "estrangelo edessa": 0.9, - "euphemia": 0.92, - "fangsong": 0.82, - "gadugi": 0.99, - "gautami": 0.92, - "helv": 0.9, - "iskoola pota": 0.9, - "javanese text": 0.98, - "kaiti": 0.78, - "kalinga": 0.9, - "kartika": 0.9, - "khmer ui": 0.8, - "kokila": 0.92, - "lao ui": 0.8, - "latha": 0.95, - "leelawadee ui": 0.99, - "mangal": 0.95, - "meiryo": 0.95, - "microsoft uighur": 0.82, - "ms pmincho": 0.95, - "ms reference sans serif": 0.92, - "ms reference specialty": 0.9, - "ms ui gothic": 0.98, - "myanmar text": 0.98, - "nyala": 0.92, - "plantagenet cherokee": 0.92, - "raavi": 0.92, - "segoe fluent icons": 0.98, - "segoe ui light": 0.97, - "shonar bangla": 0.92, - "shruti": 0.92, - "simkai": 0.72, - "small fonts": 0.94, - "traditional arabic": 0.92, - "tunga": 0.92, - "urdu typesetting": 0.88, - "utsaah": 0.92, - "vani": 0.92, - "vijaya": 0.92, - "yu mincho": 0.92 - } - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class.json deleted file mode 100644 index 68c6ce9..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_meta": { - "name": "hw_concurrency | gpu_class", - "parents": ["gpu_class"], - "child": "hw_concurrency", - "source": "Curated from realistic CPU/GPU pairings (Steam HW Survey + DIY build norms + laptop SKU patterns)" - }, - "table": { - "integrated_old": [ - {"value": 2, "prob": 0.20}, - {"value": 4, "prob": 0.60}, - {"value": 8, "prob": 0.20} - ], - "integrated_modern": [ - {"value": 4, "prob": 0.20}, - {"value": 6, "prob": 0.15}, - {"value": 8, "prob": 0.35}, - {"value": 12, "prob": 0.20}, - {"value": 16, "prob": 0.10} - ], - "low_end": [ - {"value": 4, "prob": 0.25}, - {"value": 6, "prob": 0.25}, - {"value": 8, "prob": 0.35}, - {"value": 12, "prob": 0.15} - ], - "mid_range": [ - {"value": 6, "prob": 0.15}, - {"value": 8, "prob": 0.30}, - {"value": 12, "prob": 0.30}, - {"value": 16, "prob": 0.20}, - {"value": 24, "prob": 0.05} - ], - "high_end": [ - {"value": 8, "prob": 0.10}, - {"value": 12, "prob": 0.25}, - {"value": 16, "prob": 0.35}, - {"value": 20, "prob": 0.05}, - {"value": 24, "prob": 0.20}, - {"value": 32, "prob": 0.05} - ], - "workstation": [ - {"value": 8, "prob": 0.15}, - {"value": 12, "prob": 0.20}, - {"value": 16, "prob": 0.30}, - {"value": 24, "prob": 0.20}, - {"value": 32, "prob": 0.15} - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class_tier.json b/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class_tier.json deleted file mode 100644 index b510e9a..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_hwc_given_class_tier.json +++ /dev/null @@ -1,337 +0,0 @@ -{ - "_meta": "hardware_concurrency given (gpu_class, intra_tier)", - "table": { - "[\"integrated_old\", \"budget\"]": [ - { - "value": 2, - "prob": 0.65 - }, - { - "value": 4, - "prob": 0.3 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"integrated_old\", \"standard\"]": [ - { - "value": 2, - "prob": 0.3 - }, - { - "value": 4, - "prob": 0.55 - }, - { - "value": 8, - "prob": 0.15 - } - ], - "[\"integrated_old\", \"premium\"]": [ - { - "value": 4, - "prob": 0.65 - }, - { - "value": 8, - "prob": 0.35 - } - ], - "[\"integrated_modern\", \"budget\"]": [ - { - "value": 6, - "prob": 0.45 - }, - { - "value": 8, - "prob": 0.4 - }, - { - "value": 12, - "prob": 0.15 - } - ], - "[\"integrated_modern\", \"standard\"]": [ - { - "value": 6, - "prob": 0.2 - }, - { - "value": 8, - "prob": 0.3 - }, - { - "value": 10, - "prob": 0.2 - }, - { - "value": 12, - "prob": 0.2 - }, - { - "value": 16, - "prob": 0.1 - } - ], - "[\"integrated_modern\", \"premium\"]": [ - { - "value": 8, - "prob": 0.2 - }, - { - "value": 10, - "prob": 0.2 - }, - { - "value": 12, - "prob": 0.3 - }, - { - "value": 14, - "prob": 0.15 - }, - { - "value": 16, - "prob": 0.15 - } - ], - "[\"low_end\", \"budget\"]": [ - { - "value": 4, - "prob": 0.5 - }, - { - "value": 6, - "prob": 0.25 - }, - { - "value": 8, - "prob": 0.2 - }, - { - "value": 12, - "prob": 0.05 - } - ], - "[\"low_end\", \"standard\"]": [ - { - "value": 4, - "prob": 0.1 - }, - { - "value": 6, - "prob": 0.35 - }, - { - "value": 8, - "prob": 0.3 - }, - { - "value": 12, - "prob": 0.18 - }, - { - "value": 16, - "prob": 0.07 - } - ], - "[\"low_end\", \"premium\"]": [ - { - "value": 6, - "prob": 0.1 - }, - { - "value": 8, - "prob": 0.3 - }, - { - "value": 12, - "prob": 0.3 - }, - { - "value": 16, - "prob": 0.22 - }, - { - "value": 24, - "prob": 0.08 - } - ], - "[\"mid_range\", \"budget\"]": [ - { - "value": 6, - "prob": 0.55 - }, - { - "value": 8, - "prob": 0.3 - }, - { - "value": 12, - "prob": 0.15 - } - ], - "[\"mid_range\", \"standard\"]": [ - { - "value": 6, - "prob": 0.4 - }, - { - "value": 8, - "prob": 0.3 - }, - { - "value": 12, - "prob": 0.18 - }, - { - "value": 16, - "prob": 0.1 - }, - { - "value": 24, - "prob": 0.02 - } - ], - "[\"mid_range\", \"premium\"]": [ - { - "value": 6, - "prob": 0.15 - }, - { - "value": 8, - "prob": 0.45 - }, - { - "value": 12, - "prob": 0.2 - }, - { - "value": 16, - "prob": 0.15 - }, - { - "value": 24, - "prob": 0.05 - } - ], - "[\"high_end\", \"budget\"]": [ - { - "value": 6, - "prob": 0.1 - }, - { - "value": 8, - "prob": 0.55 - }, - { - "value": 12, - "prob": 0.2 - }, - { - "value": 16, - "prob": 0.15 - } - ], - "[\"high_end\", \"standard\"]": [ - { - "value": 8, - "prob": 0.3 - }, - { - "value": 12, - "prob": 0.18 - }, - { - "value": 14, - "prob": 0.15 - }, - { - "value": 16, - "prob": 0.27 - }, - { - "value": 24, - "prob": 0.1 - } - ], - "[\"high_end\", \"premium\"]": [ - { - "value": 12, - "prob": 0.1 - }, - { - "value": 14, - "prob": 0.15 - }, - { - "value": 16, - "prob": 0.3 - }, - { - "value": 24, - "prob": 0.35 - }, - { - "value": 32, - "prob": 0.1 - } - ], - "[\"workstation\", \"budget\"]": [ - { - "value": 8, - "prob": 0.4 - }, - { - "value": 12, - "prob": 0.3 - }, - { - "value": 16, - "prob": 0.2 - }, - { - "value": 24, - "prob": 0.1 - } - ], - "[\"workstation\", \"standard\"]": [ - { - "value": 12, - "prob": 0.1 - }, - { - "value": 16, - "prob": 0.4 - }, - { - "value": 24, - "prob": 0.3 - }, - { - "value": 32, - "prob": 0.2 - } - ], - "[\"workstation\", \"premium\"]": [ - { - "value": 24, - "prob": 0.3 - }, - { - "value": 32, - "prob": 0.45 - }, - { - "value": 48, - "prob": 0.15 - }, - { - "value": 64, - "prob": 0.1 - } - ] - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/cpt_intra_tier_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_intra_tier_given_class.json deleted file mode 100644 index fcd8f31..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_intra_tier_given_class.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "_meta": { - "name": "intra_tier | gpu_class", - "parents": ["gpu_class"], - "child": "intra_tier", - "value_type": "str (budget|standard|premium)", - "rationale": "Hidden variable catching 'intra-class premium-ness'. Within a gpu_class, users vary in how premium their OTHER components are (RAM, SSD, cores). A mid_range GPU paired with 32 cores + 2TB SSD is a 'premium' mid_range user. Without this var, hwc/screen/storage would be statistically independent given gpu_class — unrealistic (real users pick coherent bundles). Tier distribution biased: integrated_old mostly budget/standard, workstation mostly premium." - }, - "table": { - "integrated_old": [{"value": "budget", "prob": 0.65}, {"value": "standard", "prob": 0.30}, {"value": "premium", "prob": 0.05}], - "integrated_modern": [{"value": "budget", "prob": 0.30}, {"value": "standard", "prob": 0.55}, {"value": "premium", "prob": 0.15}], - "low_end": [{"value": "budget", "prob": 0.50}, {"value": "standard", "prob": 0.40}, {"value": "premium", "prob": 0.10}], - "mid_range": [{"value": "budget", "prob": 0.25}, {"value": "standard", "prob": 0.50}, {"value": "premium", "prob": 0.25}], - "high_end": [{"value": "budget", "prob": 0.15}, {"value": "standard", "prob": 0.50}, {"value": "premium", "prob": 0.35}], - "workstation": [{"value": "budget", "prob": 0.10}, {"value": "standard", "prob": 0.40}, {"value": "premium", "prob": 0.50}] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class.json deleted file mode 100644 index e5f22d8..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "_meta": { - "name": "webgl.msaa-samples | gpu_class", - "parents": ["gpu_class"], - "child": "msaa_samples", - "source": "High-end GPUs more likely to have MSAA enabled in games; integrated usually off" - }, - "table": { - "integrated_old": [{"value": 0, "prob": 0.85}, {"value": 2, "prob": 0.15}], - "integrated_modern": [{"value": 0, "prob": 0.70}, {"value": 2, "prob": 0.25}, {"value": 4, "prob": 0.05}], - "low_end": [{"value": 0, "prob": 0.55}, {"value": 2, "prob": 0.35}, {"value": 4, "prob": 0.10}], - "mid_range": [{"value": 0, "prob": 0.35}, {"value": 2, "prob": 0.35}, {"value": 4, "prob": 0.30}], - "high_end": [{"value": 0, "prob": 0.20}, {"value": 2, "prob": 0.25}, {"value": 4, "prob": 0.55}], - "workstation": [{"value": 0, "prob": 0.50}, {"value": 2, "prob": 0.25}, {"value": 4, "prob": 0.25}] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class_screen.json b/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class_screen.json deleted file mode 100644 index adf5c9e..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_msaa_given_class_screen.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "_meta": "msaa_samples given (gpu_class, screen_tier)", - "table": { - "[\"integrated_old\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.75 - }, - { - "value": 4, - "prob": 0.2 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"integrated_old\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.85 - }, - { - "value": 4, - "prob": 0.15 - } - ], - "[\"integrated_old\", \"2160p\"]": [ - { - "value": 2, - "prob": 1.0 - } - ], - "[\"integrated_old\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 1.0 - } - ], - "[\"integrated_modern\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.5 - }, - { - "value": 4, - "prob": 0.4 - }, - { - "value": 8, - "prob": 0.1 - } - ], - "[\"integrated_modern\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.6 - }, - { - "value": 4, - "prob": 0.35 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"integrated_modern\", \"2160p\"]": [ - { - "value": 2, - "prob": 0.85 - }, - { - "value": 4, - "prob": 0.15 - } - ], - "[\"integrated_modern\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 0.8 - }, - { - "value": 4, - "prob": 0.2 - } - ], - "[\"low_end\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.4 - }, - { - "value": 4, - "prob": 0.45 - }, - { - "value": 8, - "prob": 0.15 - } - ], - "[\"low_end\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.55 - }, - { - "value": 4, - "prob": 0.4 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"low_end\", \"2160p\"]": [ - { - "value": 2, - "prob": 0.85 - }, - { - "value": 4, - "prob": 0.15 - } - ], - "[\"low_end\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 0.7 - }, - { - "value": 4, - "prob": 0.3 - } - ], - "[\"mid_range\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.3 - }, - { - "value": 4, - "prob": 0.5 - }, - { - "value": 8, - "prob": 0.2 - } - ], - "[\"mid_range\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.4 - }, - { - "value": 4, - "prob": 0.45 - }, - { - "value": 8, - "prob": 0.15 - } - ], - "[\"mid_range\", \"2160p\"]": [ - { - "value": 2, - "prob": 0.65 - }, - { - "value": 4, - "prob": 0.3 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"mid_range\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 0.55 - }, - { - "value": 4, - "prob": 0.4 - }, - { - "value": 8, - "prob": 0.05 - } - ], - "[\"high_end\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.2 - }, - { - "value": 4, - "prob": 0.45 - }, - { - "value": 8, - "prob": 0.35 - } - ], - "[\"high_end\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.25 - }, - { - "value": 4, - "prob": 0.5 - }, - { - "value": 8, - "prob": 0.25 - } - ], - "[\"high_end\", \"2160p\"]": [ - { - "value": 2, - "prob": 0.4 - }, - { - "value": 4, - "prob": 0.45 - }, - { - "value": 8, - "prob": 0.15 - } - ], - "[\"high_end\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 0.3 - }, - { - "value": 4, - "prob": 0.5 - }, - { - "value": 8, - "prob": 0.2 - } - ], - "[\"workstation\", \"1080p\"]": [ - { - "value": 2, - "prob": 0.15 - }, - { - "value": 4, - "prob": 0.5 - }, - { - "value": 8, - "prob": 0.35 - } - ], - "[\"workstation\", \"1440p\"]": [ - { - "value": 2, - "prob": 0.15 - }, - { - "value": 4, - "prob": 0.55 - }, - { - "value": 8, - "prob": 0.3 - } - ], - "[\"workstation\", \"2160p\"]": [ - { - "value": 2, - "prob": 0.25 - }, - { - "value": 4, - "prob": 0.55 - }, - { - "value": 8, - "prob": 0.2 - } - ], - "[\"workstation\", \"ultrawide\"]": [ - { - "value": 2, - "prob": 0.2 - }, - { - "value": 4, - "prob": 0.55 - }, - { - "value": 8, - "prob": 0.25 - } - ] - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/cpt_screen_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_screen_given_class.json deleted file mode 100644 index f1f3c02..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_screen_given_class.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "_meta": { - "name": "screen | gpu_class", - "parents": ["gpu_class"], - "child": "screen", - "value_shape": {"w": "int css px", "h": "int css px", "dpr": "float", "aw": "availWidth", "ah": "availHeight"}, - "source": "Curated Windows desktop/laptop resolutions. Restricted to width >= 1920 to avoid FP Pro's server-side screen_resolution normalization (FP Pro sorts non-standard landscape resolutions like 1536x864 into [smaller, larger] order in raw_device_attributes.screen_resolution, appearing flipped vs our spoof). All retained resolutions are common and NOT normalized by FP Pro." - }, - "table": { - "integrated_old": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.90}, - {"value": {"w": 1920, "h": 1200, "dpr": 1.0, "aw": 1920, "ah": 1160}, "prob": 0.10} - ], - "integrated_modern": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.60}, - {"value": {"w": 1920, "h": 1080, "dpr": 1.25, "aw": 1920, "ah": 1040}, "prob": 0.18}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.0, "aw": 2560, "ah": 1400}, "prob": 0.10}, - {"value": {"w": 1920, "h": 1200, "dpr": 1.0, "aw": 1920, "ah": 1160}, "prob": 0.08}, - {"value": {"w": 2560, "h": 1600, "dpr": 1.25, "aw": 2560, "ah": 1560}, "prob": 0.04} - ], - "low_end": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.70}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.0, "aw": 2560, "ah": 1400}, "prob": 0.20}, - {"value": {"w": 1920, "h": 1200, "dpr": 1.0, "aw": 1920, "ah": 1160}, "prob": 0.10} - ], - "mid_range": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.50}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.0, "aw": 2560, "ah": 1400}, "prob": 0.25}, - {"value": {"w": 1920, "h": 1080, "dpr": 1.25, "aw": 1920, "ah": 1040}, "prob": 0.08}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.25, "aw": 2560, "ah": 1400}, "prob": 0.05}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.0, "aw": 3840, "ah": 2120}, "prob": 0.04}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.5, "aw": 3840, "ah": 2120}, "prob": 0.04}, - {"value": {"w": 2560, "h": 1080, "dpr": 1.0, "aw": 2560, "ah": 1040}, "prob": 0.04} - ], - "high_end": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.25}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.0, "aw": 2560, "ah": 1400}, "prob": 0.30}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.0, "aw": 3840, "ah": 2120}, "prob": 0.15}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.5, "aw": 3840, "ah": 2120}, "prob": 0.10}, - {"value": {"w": 3440, "h": 1440, "dpr": 1.0, "aw": 3440, "ah": 1400}, "prob": 0.08}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.25, "aw": 2560, "ah": 1400}, "prob": 0.05}, - {"value": {"w": 5120, "h": 1440, "dpr": 1.0, "aw": 5120, "ah": 1400}, "prob": 0.04}, - {"value": {"w": 3840, "h": 2160, "dpr": 2.0, "aw": 3840, "ah": 2120}, "prob": 0.03} - ], - "workstation": [ - {"value": {"w": 1920, "h": 1080, "dpr": 1.0, "aw": 1920, "ah": 1040}, "prob": 0.25}, - {"value": {"w": 2560, "h": 1440, "dpr": 1.0, "aw": 2560, "ah": 1400}, "prob": 0.25}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.0, "aw": 3840, "ah": 2120}, "prob": 0.25}, - {"value": {"w": 3840, "h": 2160, "dpr": 1.5, "aw": 3840, "ah": 2120}, "prob": 0.15}, - {"value": {"w": 5120, "h": 2880, "dpr": 1.0, "aw": 5120, "ah": 2840}, "prob": 0.05}, - {"value": {"w": 3840, "h": 2400, "dpr": 1.5, "aw": 3840, "ah": 2360}, "prob": 0.05} - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_screen_given_class_tier.json b/src/invisible_playwright/_fpforge/data/cpt_screen_given_class_tier.json deleted file mode 100644 index d3bc32b..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_screen_given_class_tier.json +++ /dev/null @@ -1,761 +0,0 @@ -{ - "_meta": "screen given (gpu_class, intra_tier)", - "table": { - "[\"integrated_old\", \"budget\"]": [ - { - "value": { - "w": 1366, - "h": 768, - "aw": 1366, - "ah": 728, - "dpr": 1.0 - }, - "prob": 0.78 - }, - { - "value": { - "w": 1280, - "h": 800, - "aw": 1280, - "ah": 760, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 1024, - "h": 768, - "aw": 1024, - "ah": 728, - "dpr": 1.0 - }, - "prob": 0.07 - } - ], - "[\"integrated_old\", \"standard\"]": [ - { - "value": { - "w": 1366, - "h": 768, - "aw": 1366, - "ah": 728, - "dpr": 1.0 - }, - "prob": 0.55 - }, - { - "value": { - "w": 1600, - "h": 900, - "aw": 1600, - "ah": 860, - "dpr": 1.0 - }, - "prob": 0.25 - }, - { - "value": { - "w": 1280, - "h": 800, - "aw": 1280, - "ah": 760, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.1 - } - ], - "[\"integrated_old\", \"premium\"]": [ - { - "value": { - "w": 1600, - "h": 900, - "aw": 1600, - "ah": 860, - "dpr": 1.0 - }, - "prob": 0.45 - }, - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.4 - }, - { - "value": { - "w": 1366, - "h": 768, - "aw": 1366, - "ah": 728, - "dpr": 1.0 - }, - "prob": 0.15 - } - ], - "[\"integrated_modern\", \"budget\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.8 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"integrated_modern\", \"standard\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.7 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.12 - }, - { - "value": { - "w": 2560, - "h": 1600, - "aw": 2560, - "ah": 1560, - "dpr": 1.0 - }, - "prob": 0.08 - } - ], - "[\"integrated_modern\", \"premium\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.3 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.25 - }, - { - "value": { - "w": 2560, - "h": 1600, - "aw": 2560, - "ah": 1560, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.2 - } - ], - "[\"low_end\", \"budget\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.85 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"low_end\", \"standard\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.6 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.25 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"low_end\", \"premium\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.25 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.45 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.2 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.05 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"mid_range\", \"budget\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.75 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.2 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"mid_range\", \"standard\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.45 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.4 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"mid_range\", \"premium\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.5 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.2 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1080, - "aw": 2560, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"high_end\", \"budget\"]": [ - { - "value": { - "w": 1920, - "h": 1080, - "aw": 1920, - "ah": 1040, - "dpr": 1.0 - }, - "prob": 0.2 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.55 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.2 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"high_end\", \"standard\"]": [ - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.4 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.4 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 5120, - "h": 1440, - "aw": 5120, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"high_end\", \"premium\"]": [ - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.55 - }, - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 5120, - "h": 1440, - "aw": 5120, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 7680, - "h": 2160, - "aw": 7680, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"workstation\", \"budget\"]": [ - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.55 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.3 - }, - { - "value": { - "w": 1920, - "h": 1200, - "aw": 1920, - "ah": 1160, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 2560, - "h": 1600, - "aw": 2560, - "ah": 1560, - "dpr": 1.0 - }, - "prob": 0.05 - } - ], - "[\"workstation\", \"standard\"]": [ - { - "value": { - "w": 2560, - "h": 1440, - "aw": 2560, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.3 - }, - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.45 - }, - { - "value": { - "w": 2560, - "h": 1600, - "aw": 2560, - "ah": 1560, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 3440, - "h": 1440, - "aw": 3440, - "ah": 1400, - "dpr": 1.0 - }, - "prob": 0.1 - } - ], - "[\"workstation\", \"premium\"]": [ - { - "value": { - "w": 3840, - "h": 2160, - "aw": 3840, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.55 - }, - { - "value": { - "w": 2560, - "h": 1600, - "aw": 2560, - "ah": 1560, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 5120, - "h": 2160, - "aw": 5120, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.15 - }, - { - "value": { - "w": 3840, - "h": 2400, - "aw": 3840, - "ah": 2360, - "dpr": 1.0 - }, - "prob": 0.1 - }, - { - "value": { - "w": 7680, - "h": 2160, - "aw": 7680, - "ah": 2120, - "dpr": 1.0 - }, - "prob": 0.05 - } - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_storage_given_class.json b/src/invisible_playwright/_fpforge/data/cpt_storage_given_class.json deleted file mode 100644 index c8647c9..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_storage_given_class.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_meta": { - "name": "storage_quota_mb | gpu_class", - "parents": ["gpu_class"], - "child": "storage_quota_mb", - "value_shape": "int megabytes (reported as navigator.storage.estimate().quota / (1024*1024))", - "description": "Storage quota override returned by navigator.storage.estimate(). Real Firefox computes quota from disk space, which is a fingerprinting signal (stable per host). We replace it with a realistic per-session value conditioned on gpu_class — modern/high-end users tend to have larger SSDs, integrated_old older/smaller disks.", - "source": "Typical Windows 11 disk sizes 2024-2026 per segment: budget laptops 256-512GB SSD, mainstream 512GB-1TB SSD, gaming/workstation 1-4TB SSD. Firefox default storage quota is ~50% of available disk (capped). We simulate that computation per-tier.", - "rationale": "Values are pre-quota-limit MB as Firefox would return to navigator.storage.estimate().quota. Probabilities cover realistic ranges centered on the segment median. A single session returns one value; fingerprinters that hash the exact quota get per-session variance, matching cross-user diversity." - }, - "table": { - "integrated_old": [ - {"value": 61440, "prob": 0.30}, - {"value": 102400, "prob": 0.25}, - {"value": 122880, "prob": 0.20}, - {"value": 204800, "prob": 0.15}, - {"value": 40960, "prob": 0.10} - ], - "integrated_modern": [ - {"value": 204800, "prob": 0.30}, - {"value": 307200, "prob": 0.25}, - {"value": 122880, "prob": 0.15}, - {"value": 409600, "prob": 0.15}, - {"value": 102400, "prob": 0.10}, - {"value": 512000, "prob": 0.05} - ], - "low_end": [ - {"value": 122880, "prob": 0.30}, - {"value": 204800, "prob": 0.25}, - {"value": 102400, "prob": 0.20}, - {"value": 61440, "prob": 0.15}, - {"value": 307200, "prob": 0.10} - ], - "mid_range": [ - {"value": 307200, "prob": 0.30}, - {"value": 409600, "prob": 0.25}, - {"value": 204800, "prob": 0.20}, - {"value": 512000, "prob": 0.15}, - {"value": 716800, "prob": 0.05}, - {"value": 122880, "prob": 0.05} - ], - "high_end": [ - {"value": 512000, "prob": 0.25}, - {"value": 716800, "prob": 0.25}, - {"value": 409600, "prob": 0.20}, - {"value": 1024000, "prob": 0.15}, - {"value": 307200, "prob": 0.10}, - {"value": 1536000, "prob": 0.05} - ], - "workstation": [ - {"value": 1024000, "prob": 0.25}, - {"value": 1536000, "prob": 0.20}, - {"value": 716800, "prob": 0.20}, - {"value": 2048000, "prob": 0.15}, - {"value": 512000, "prob": 0.10}, - {"value": 3072000, "prob": 0.05}, - {"value": 409600, "prob": 0.05} - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/cpt_storage_given_class_tier.json b/src/invisible_playwright/_fpforge/data/cpt_storage_given_class_tier.json deleted file mode 100644 index 73746a2..0000000 --- a/src/invisible_playwright/_fpforge/data/cpt_storage_given_class_tier.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "_meta": "storage_quota_mb given (gpu_class, intra_tier)", - "table": { - "[\"integrated_old\", \"budget\"]": [ - { - "value": 32000, - "prob": 0.3 - }, - { - "value": 64000, - "prob": 0.4 - }, - { - "value": 128000, - "prob": 0.25 - }, - { - "value": 256000, - "prob": 0.05 - } - ], - "[\"integrated_old\", \"standard\"]": [ - { - "value": 64000, - "prob": 0.2 - }, - { - "value": 128000, - "prob": 0.45 - }, - { - "value": 256000, - "prob": 0.25 - }, - { - "value": 500000, - "prob": 0.1 - } - ], - "[\"integrated_old\", \"premium\"]": [ - { - "value": 128000, - "prob": 0.2 - }, - { - "value": 256000, - "prob": 0.45 - }, - { - "value": 500000, - "prob": 0.35 - } - ], - "[\"integrated_modern\", \"budget\"]": [ - { - "value": 256000, - "prob": 0.3 - }, - { - "value": 500000, - "prob": 0.45 - }, - { - "value": 1000000, - "prob": 0.25 - } - ], - "[\"integrated_modern\", \"standard\"]": [ - { - "value": 256000, - "prob": 0.25 - }, - { - "value": 500000, - "prob": 0.45 - }, - { - "value": 1000000, - "prob": 0.25 - }, - { - "value": 2000000, - "prob": 0.05 - } - ], - "[\"integrated_modern\", \"premium\"]": [ - { - "value": 500000, - "prob": 0.25 - }, - { - "value": 1000000, - "prob": 0.5 - }, - { - "value": 2000000, - "prob": 0.2 - }, - { - "value": 4000000, - "prob": 0.05 - } - ], - "[\"low_end\", \"budget\"]": [ - { - "value": 128000, - "prob": 0.2 - }, - { - "value": 256000, - "prob": 0.5 - }, - { - "value": 500000, - "prob": 0.25 - }, - { - "value": 1000000, - "prob": 0.05 - } - ], - "[\"low_end\", \"standard\"]": [ - { - "value": 256000, - "prob": 0.2 - }, - { - "value": 500000, - "prob": 0.5 - }, - { - "value": 1000000, - "prob": 0.25 - }, - { - "value": 2000000, - "prob": 0.05 - } - ], - "[\"low_end\", \"premium\"]": [ - { - "value": 500000, - "prob": 0.2 - }, - { - "value": 1000000, - "prob": 0.5 - }, - { - "value": 2000000, - "prob": 0.25 - }, - { - "value": 4000000, - "prob": 0.05 - } - ], - "[\"mid_range\", \"budget\"]": [ - { - "value": 256000, - "prob": 0.15 - }, - { - "value": 500000, - "prob": 0.5 - }, - { - "value": 1000000, - "prob": 0.3 - }, - { - "value": 2000000, - "prob": 0.05 - } - ], - "[\"mid_range\", \"standard\"]": [ - { - "value": 500000, - "prob": 0.2 - }, - { - "value": 1000000, - "prob": 0.55 - }, - { - "value": 2000000, - "prob": 0.2 - }, - { - "value": 4000000, - "prob": 0.05 - } - ], - "[\"mid_range\", \"premium\"]": [ - { - "value": 1000000, - "prob": 0.4 - }, - { - "value": 2000000, - "prob": 0.45 - }, - { - "value": 4000000, - "prob": 0.15 - } - ], - "[\"high_end\", \"budget\"]": [ - { - "value": 500000, - "prob": 0.15 - }, - { - "value": 1000000, - "prob": 0.5 - }, - { - "value": 2000000, - "prob": 0.3 - }, - { - "value": 4000000, - "prob": 0.05 - } - ], - "[\"high_end\", \"standard\"]": [ - { - "value": 1000000, - "prob": 0.3 - }, - { - "value": 2000000, - "prob": 0.5 - }, - { - "value": 4000000, - "prob": 0.2 - } - ], - "[\"high_end\", \"premium\"]": [ - { - "value": 2000000, - "prob": 0.4 - }, - { - "value": 4000000, - "prob": 0.45 - }, - { - "value": 8000000, - "prob": 0.15 - } - ], - "[\"workstation\", \"budget\"]": [ - { - "value": 1000000, - "prob": 0.3 - }, - { - "value": 2000000, - "prob": 0.5 - }, - { - "value": 4000000, - "prob": 0.2 - } - ], - "[\"workstation\", \"standard\"]": [ - { - "value": 2000000, - "prob": 0.3 - }, - { - "value": 4000000, - "prob": 0.5 - }, - { - "value": 8000000, - "prob": 0.2 - } - ], - "[\"workstation\", \"premium\"]": [ - { - "value": 4000000, - "prob": 0.35 - }, - { - "value": 8000000, - "prob": 0.45 - }, - { - "value": 16000000, - "prob": 0.2 - } - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/ff_win_distributions.json b/src/invisible_playwright/_fpforge/data/ff_win_distributions.json deleted file mode 100644 index becf2f5..0000000 --- a/src/invisible_playwright/_fpforge/data/ff_win_distributions.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "_source": "browserforge fingerprint-network.zip, FF/Windows slice, 3 userAgent leaves merged", - "_ff_win_uas": [ - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:145.0) Gecko/20100101 Firefox/145.0", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0" - ], - "_note": "Per-node weighted distributions. Marginal over the 3 Firefox/Windows UAs present in browserforge data.", - "distributions": { - "appCodeName": [ - [ - "Mozilla", - 1.0 - ] - ], - "appVersion": [ - [ - "5.0 (Windows)", - 1.0 - ] - ], - "doNotTrack": [ - [ - "1", - 1.0 - ] - ], - "extraProperties": [ - [ - { - "vendorFlavors": [], - "globalPrivacyControl": true, - "pdfViewerEnabled": true, - "installedApps": [] - }, - 0.6111111111111112 - ], - [ - { - "vendorFlavors": [], - "globalPrivacyControl": null, - "pdfViewerEnabled": null, - "installedApps": [] - }, - 0.3888888888888889 - ] - ], - "maxTouchPoints": [ - [ - 0, - 0.5777777777777778 - ], - [ - 1, - 0.3666666666666667 - ], - [ - 10, - 0.05555555555555555 - ] - ], - "oscpu": [ - [ - "Windows NT 10.0; Win64; x64", - 1.0 - ] - ], - "webdriver": [ - [ - false, - 1.0 - ] - ], - "productSub": [ - [ - "20100101", - 1.0 - ] - ], - "hardwareConcurrency": [ - [ - 12, - 0.3333333333333333 - ], - [ - 16, - 0.2777777777777778 - ], - [ - 8, - 0.13333333333333333 - ], - [ - 24, - 0.13333333333333333 - ], - [ - 32, - 0.06666666666666667 - ], - [ - 6, - 0.05555555555555555 - ] - ], - "platform": [ - [ - "Win32", - 1.0 - ] - ], - "screen": [ - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 772, - "hasHDR": false, - "width": 1536, - "height": 960, - "availWidth": 1536, - "availHeight": 960, - "clientWidth": 0, - "clientHeight": 21, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 751, - "outerHeight": 886, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1.25 - }, - 0.3333333333333333 - ], - [ - { - "availTop": 0, - "availLeft": 2176, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 2169, - "hasHDR": false, - "width": 2176, - "height": 1224, - "availWidth": 2176, - "availHeight": 1176, - "clientWidth": 0, - "clientHeight": 19, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 2190, - "outerHeight": 1190, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1.7647058823529411 - }, - 0.13333333333333333 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 318, - "hasHDR": false, - "width": 2560, - "height": 1440, - "availWidth": 2560, - "availHeight": 1440, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 2121, - "outerHeight": 1191, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.1111111111111111 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 652, - "hasHDR": false, - "width": 2752, - "height": 1152, - "availWidth": 2752, - "availHeight": 1104, - "clientWidth": 0, - "clientHeight": 19, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1806, - "outerHeight": 1104, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1.25 - }, - 0.06666666666666667 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 1912, - "hasHDR": false, - "width": 1920, - "height": 1080, - "availWidth": 1920, - "availHeight": 1032, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1936, - "outerHeight": 1048, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.06666666666666667 - ], - [ - { - "availTop": 29, - "availLeft": 21, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 15, - "hasHDR": false, - "width": 1376, - "height": 774, - "availWidth": 1355, - "availHeight": 745, - "clientWidth": 0, - "clientHeight": 21, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1352, - "outerHeight": 749, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.05555555555555555 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 58, - "hasHDR": false, - "width": 1707, - "height": 960, - "availWidth": 1707, - "availHeight": 928, - "clientWidth": 0, - "clientHeight": 19, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1564, - "outerHeight": 793, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.05555555555555555 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 34, - "hasHDR": false, - "width": 5120, - "height": 1440, - "availWidth": 5120, - "availHeight": 1392, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 2462, - "outerHeight": 1399, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.05555555555555555 - ], - [ - { - "availTop": 0, - "availLeft": 1920, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 1912, - "hasHDR": false, - "width": 1920, - "height": 1080, - "availWidth": 1920, - "availHeight": 1032, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1936, - "outerHeight": 1048, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.05555555555555555 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 95, - "hasHDR": false, - "width": 1366, - "height": 768, - "availWidth": 1366, - "availHeight": 768, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1294, - "outerHeight": 1280, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.03333333333333333 - ], - [ - { - "availTop": 0, - "availLeft": 0, - "pageXOffset": 0, - "pageYOffset": 0, - "screenX": 1273, - "hasHDR": false, - "width": 2560, - "height": 1440, - "availWidth": 2560, - "availHeight": 1400, - "clientWidth": 0, - "clientHeight": 18, - "innerWidth": 0, - "innerHeight": 0, - "outerWidth": 1294, - "outerHeight": 1407, - "colorDepth": 24, - "pixelDepth": 24, - "devicePixelRatio": 1 - }, - 0.03333333333333333 - ] - ], - "pluginsData": [ - [ - { - "plugins": [ - { - "name": "PDF Viewer", - "description": "Portable Document Format", - "filename": "internal-pdf-viewer", - "mimeTypes": [ - { - "type": "application/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - }, - { - "type": "text/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - } - ] - }, - { - "name": "Chrome PDF Viewer", - "description": "Portable Document Format", - "filename": "internal-pdf-viewer", - "mimeTypes": [ - { - "type": "application/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - }, - { - "type": "text/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - } - ] - }, - { - "name": "Chromium PDF Viewer", - "description": "Portable Document Format", - "filename": "internal-pdf-viewer", - "mimeTypes": [ - { - "type": "application/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - }, - { - "type": "text/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - } - ] - }, - { - "name": "Microsoft Edge PDF Viewer", - "description": "Portable Document Format", - "filename": "internal-pdf-viewer", - "mimeTypes": [ - { - "type": "application/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - }, - { - "type": "text/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - } - ] - }, - { - "name": "WebKit built-in PDF", - "description": "Portable Document Format", - "filename": "internal-pdf-viewer", - "mimeTypes": [ - { - "type": "application/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - }, - { - "type": "text/pdf", - "suffixes": "pdf", - "description": "Portable Document Format", - "enabledPlugin": "PDF Viewer" - } - ] - } - ], - "mimeTypes": [ - "Portable Document Format~~application/pdf~~pdf", - "Portable Document Format~~text/pdf~~pdf" - ] - }, - 0.6111111111111112 - ], - [ - { - "plugins": [], - "mimeTypes": [] - }, - 0.3888888888888889 - ] - ], - "audioCodecs": [ - [ - { - "ogg": "probably", - "mp3": "maybe", - "wav": "probably", - "m4a": "maybe", - "aac": "maybe" - }, - 1.0 - ] - ], - "videoCodecs": [ - [ - { - "ogg": "", - "h264": "probably", - "webm": "probably" - }, - 1.0 - ] - ], - "videoCard": [ - [ - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", - "vendor": "Google Inc. (NVIDIA)" - }, - 0.8444444444444444 - ], - [ - { - "renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0), or similar", - "vendor": "Google Inc. (AMD)" - }, - 0.08888888888888889 - ], - [ - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar", - "vendor": "Google Inc. (Intel)" - }, - 0.06666666666666667 - ] - ], - "multimediaDevices": [ - [ - { - "speakers": [], - "micros": [], - "webcams": [] - }, - 1.0 - ] - ], - "fonts": [ - [ - [], - 0.3888888888888889 - ], - [ - [ - "Calibri", - "HELV", - "MS UI Gothic", - "Marlett", - "Segoe UI Light", - "Small Fonts" - ], - 0.3222222222222222 - ], - [ - [ - "Agency FB", - "Calibri", - "Century", - "Century Gothic", - "Franklin Gothic", - "HELV", - "Haettenschweiler", - "Leelawadee", - "Lucida Bright", - "Lucida Sans", - "MS Outlook", - "MS Reference Specialty", - "MS UI Gothic", - "MT Extra", - "Marlett", - "Microsoft Uighur", - "Monotype Corsiva", - "Pristina", - "Segoe UI Light", - "Small Fonts" - ], - 0.13333333333333333 - ], - [ - [ - "AvantGarde Bk BT", - "Calibri", - "Clarendon", - "Franklin Gothic", - "Futura Bk BT", - "Futura Md BT", - "GOTHAM", - "HELV", - "Humanst521 BT", - "MS UI Gothic", - "MYRIAD PRO", - "Marlett", - "Minion Pro", - "Segoe UI Light", - "Small Fonts", - "TRAJAN PRO" - ], - 0.06666666666666667 - ], - [ - [ - "Calibri", - "MS UI Gothic", - "Marlett", - "Segoe UI Light" - ], - 0.05555555555555555 - ], - [ - [ - "Agency FB", - "Calibri", - "Century", - "Century Gothic", - "Franklin Gothic", - "Futura Bk BT", - "Futura Md BT", - "GOTHAM", - "HELV", - "Haettenschweiler", - "Humanst521 BT", - "Lucida Bright", - "Lucida Sans", - "MS Outlook", - "MS Reference Specialty", - "MS UI Gothic", - "MT Extra", - "MYRIAD PRO", - "Marlett", - "Minion Pro", - "Monotype Corsiva", - "Pristina", - "Segoe UI Light", - "Small Fonts" - ], - 0.03333333333333333 - ] - ] - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/font_pool.json b/src/invisible_playwright/_fpforge/data/font_pool.json deleted file mode 100644 index 880f410..0000000 --- a/src/invisible_playwright/_fpforge/data/font_pool.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "core": [ - { - "name": "arial" - }, - { - "name": "calibri" - }, - { - "name": "cambria" - }, - { - "name": "cambria math" - }, - { - "name": "candara" - }, - { - "name": "comic sans ms" - }, - { - "name": "consolas" - }, - { - "name": "constantia" - }, - { - "name": "corbel" - }, - { - "name": "courier new" - }, - { - "name": "ebrima" - }, - { - "name": "franklin gothic medium" - }, - { - "name": "gabriola" - }, - { - "name": "gadugi" - }, - { - "name": "georgia" - }, - { - "name": "impact" - }, - { - "name": "javanese text" - }, - { - "name": "lucida console" - }, - { - "name": "lucida sans unicode" - }, - { - "name": "ms gothic" - }, - { - "name": "ms pgothic" - }, - { - "name": "mv boli" - }, - { - "name": "malgun gothic" - }, - { - "name": "marlett" - }, - { - "name": "microsoft himalaya" - }, - { - "name": "microsoft jhenghei" - }, - { - "name": "microsoft jhenghei ui" - }, - { - "name": "microsoft new tai lue" - }, - { - "name": "microsoft phagspa" - }, - { - "name": "microsoft sans serif" - }, - { - "name": "microsoft yahei" - }, - { - "name": "microsoft yi baiti" - }, - { - "name": "mingliu-extb" - }, - { - "name": "mongolian baiti" - }, - { - "name": "myanmar text" - }, - { - "name": "pmingliu-extb" - }, - { - "name": "palatino linotype" - }, - { - "name": "segoe print" - }, - { - "name": "segoe script" - }, - { - "name": "segoe ui" - }, - { - "name": "segoe ui symbol" - }, - { - "name": "simsun" - }, - { - "name": "simsun-extb" - }, - { - "name": "sitka small" - }, - { - "name": "sylfaen" - }, - { - "name": "trebuchet ms" - }, - { - "name": "verdana" - }, - { - "name": "webdings" - }, - { - "name": "yu gothic" - }, - { - "name": "courier" - }, - { - "name": "helvetica" - }, - { - "name": "segoe ui light" - } - ], - "optional": [], - "profiles": [ - { - "name": "win_clean", - "weight": 35, - "optional": [] - }, - { - "name": "win_office", - "weight": 65, - "optional": [] - } - ] -} diff --git a/src/invisible_playwright/_fpforge/data/prior_audio.json b/src/invisible_playwright/_fpforge/data/prior_audio.json deleted file mode 100644 index 866cedc..0000000 --- a/src/invisible_playwright/_fpforge/data/prior_audio.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "_meta": { - "name": "audio (joint: sample_rate, output_latency_ms, max_channel_count)", - "parents": [], - "child": "audio", - "source": "Curated from common Windows WASAPI/DirectSound configs on FF desktop" - }, - "table": [ - {"value": {"rate": 44100, "latency": 40, "channels": 2}, "prob": 0.20}, - {"value": {"rate": 48000, "latency": 30, "channels": 2}, "prob": 0.25}, - {"value": {"rate": 48000, "latency": 20, "channels": 2}, "prob": 0.15}, - {"value": {"rate": 48000, "latency": 40, "channels": 6}, "prob": 0.08}, - {"value": {"rate": 48000, "latency": 60, "channels": 2}, "prob": 0.12}, - {"value": {"rate": 44100, "latency": 50, "channels": 2}, "prob": 0.10}, - {"value": {"rate": 48000, "latency": 25, "channels": 2}, "prob": 0.10} - ] -} diff --git a/src/invisible_playwright/_fpforge/data/priors_independent.json b/src/invisible_playwright/_fpforge/data/priors_independent.json deleted file mode 100644 index 0b2bbc0..0000000 --- a/src/invisible_playwright/_fpforge/data/priors_independent.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "_meta": { - "name": "Independent marginal priors (no parents)", - "source": "StatCounter GlobalStats + Firefox defaults + community data 2025-2026", - "note": "Codec prefs (av1_enabled, webm_encoder_enabled, hw_video_decoding, wmf_enabled, ffvpx_enabled) moved to cpt_codec_given_class.json — they correlate with GPU class via Firefox version / user-tier distribution." - }, - "dark_theme": { - "_note": "0=light, 1=dark. StatCounter ~40% users report dark theme preference on desktop.", - "table": [ - {"value": 0, "prob": 0.60}, - {"value": 1, "prob": 0.40} - ] - } -} diff --git a/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json b/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json deleted file mode 100644 index 76f0fe5..0000000 --- a/src/invisible_playwright/_fpforge/data/webgl_gpu_pool.json +++ /dev/null @@ -1,476 +0,0 @@ -{ - "win": [ - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.470921, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.195745, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.160284, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics 400 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|16,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (AMD)", - "renderer_out": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.086524, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon HD 3200 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (AMD)", - "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.053901, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Microsoft)", - "renderer_out": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.012766, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Microsoft, Microsoft Basic Render Driver Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Microsoft)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|16,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.007092, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1), or similar", - "prob": 0.004255, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|2,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|512,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (AMD)", - "renderer_out": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (AMD)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_0 ps_4_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4096,36348|14,36349|1024,37443|37444", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": false - } - }, - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_4_0 ps_4_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4095,36348|14,36349|1024,37443|37444", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": false - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel 945GM Direct3D11 vs_4_0 ps_4_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3317|4,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32936|0,32937|0,32938|1,32968|0,32969|1,32970|0,32971|1,33170|4352,34016|33984,34024|8192,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34877|32774,34921|16,34930|16,35660|16,35661|32,35738|5121,35739|6408,36003|0,36004|2147483647,36005|2147483647,36347|4096,36348|14,36349|1024,37443|37444", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": false - } - }, - { - "vendor": "Google Inc. (Intel)", - "renderer_out": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_4_1 ps_4_1, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (Intel)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|8192,34045|2,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|512,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212992,35379|200704,35380|256,35657|4096,35658|16384,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|4,36203|4294967294,36347|4096,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16383:16383,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0)", - "prob": 0.001419, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - } - ], - "mac": [ - { - "vendor": "Apple", - "renderer_out": "Apple M1, or similar", - "prob": 0.84322, - "prefs": { - "zoom.stealth.webgl.renderer": "Apple M1, or similar", - "zoom.stealth.webgl.vendor": "Apple", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|16,35373|16,35374|80,35375|80,35376|65536,35377|266240,35379|266240,35380|256,35657|4096,35658|4096,35659|124,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|4,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|64,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:64,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Intel Inc.", - "renderer_out": "Intel(R) HD Graphics 400, or similar", - "prob": 0.076271, - "prefs": { - "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400, or similar", - "zoom.stealth.webgl.vendor": "Intel Inc.", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|75,35375|75,35376|65536,35377|249856,35379|249856,35380|256,35657|4096,35658|4096,35659|60,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|16,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", - "zoom.stealth.webgl.float_params": "33901|1:255.875", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "ATI Technologies Inc.", - "renderer_out": "Radeon R9 200 Series, or similar", - "prob": 0.038136, - "prefs": { - "zoom.stealth.webgl.renderer": "Radeon R9 200 Series, or similar", - "zoom.stealth.webgl.vendor": "ATI Technologies Inc.", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|16,35373|16,35374|80,35375|80,35376|65536,35377|266240,35379|266240,35380|256,35657|4096,35658|4096,35659|128,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|8,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:8191,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Intel Inc.", - "renderer_out": "Intel(R) HD Graphics, or similar", - "prob": 0.033898, - "prefs": { - "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics, or similar", - "zoom.stealth.webgl.vendor": "Intel Inc.", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048575,33001|150000,33170|4352,34016|33984,34024|8192,34045|16,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|75,35375|75,35376|65536,35377|249856,35379|249856,35380|256,35657|4096,35658|4096,35659|60,35660|16,35661|80,35723|4352,35738|5121,35739|6408,35968|4,35978|64,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|16,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", - "zoom.stealth.webgl.float_params": "33901|1:255.875", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Google Inc. (NVIDIA)", - "renderer_out": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0), or similar", - "prob": 0.008475, - "prefs": { - "zoom.stealth.webgl.renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "zoom.stealth.webgl.vendor": "Google Inc. (NVIDIA)", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context,WEBGL_provoking_vertex", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|2147483647,2964|7680,2965|7680,2966|7680,2967|0,2968|2147483647,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|2147483647,33001|2147483647,33170|4352,34016|33984,34024|16384,34045|2,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|16,35071|2048,35076|-8,35077|7,35371|12,35373|12,35374|24,35375|24,35376|65536,35377|212988,35379|200704,35380|256,35657|4096,35658|16380,35659|120,35660|16,35661|32,35723|4352,35738|5121,35739|6408,35968|4,35978|120,35979|4,36003|0,36004|2147483647,36005|2147483647,36063|8,36183|8,36203|4294967294,36347|4095,36348|30,36349|1024,37137|0,37154|120,37157|120,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32767:32767,33901|1:1024,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|31:30:0,35633*36340|31:30:0,35633*36341|31:30:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|31:30:0,35632*36340|31:30:0,35632*36341|31:30:0", - "zoom.stealth.webgl2.enabled": true - } - } - ], - "lin": [ - { - "vendor": "Intel", - "renderer_out": "Intel(R) HD Graphics, or similar", - "prob": 0.282051, - "prefs": { - "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics, or similar", - "zoom.stealth.webgl.vendor": "Intel", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|16,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "NVIDIA Corporation", - "renderer_out": "NVIDIA GeForce GTX 980, or similar", - "prob": 0.25641, - "prefs": { - "zoom.stealth.webgl.renderer": "NVIDIA GeForce GTX 980, or similar", - "zoom.stealth.webgl.vendor": "NVIDIA Corporation", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|32768,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048576,33001|1048576,33170|4352,34016|33984,34024|32768,34045|15,34076|32768,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|233472,35379|233472,35380|256,35657|4096,35658|4096,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|32,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32768:32768,33901|1:2047,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Intel", - "renderer_out": "Intel(R) HD Graphics 400, or similar", - "prob": 0.153846, - "prefs": { - "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400, or similar", - "zoom.stealth.webgl.vendor": "Intel", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "AMD", - "renderer_out": "Radeon R9 200 Series, or similar", - "prob": 0.102564, - "prefs": { - "zoom.stealth.webgl.renderer": "Radeon R9 200 Series, or similar", - "zoom.stealth.webgl.vendor": "AMD", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|4294967292,35377|16106143729,35379|16106143729,35380|4,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", - "zoom.stealth.webgl.float_params": "33901|0.125:2048", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "AMD", - "renderer_out": "Radeon HD 3200 Graphics, or similar", - "prob": 0.083333, - "prefs": { - "zoom.stealth.webgl.renderer": "Radeon HD 3200 Graphics, or similar", - "zoom.stealth.webgl.vendor": "AMD", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|4051211264,35377|15192058624,35379|15192058624,35380|4,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", - "zoom.stealth.webgl.float_params": "33901|0.125:2048", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Mesa", - "renderer_out": "llvmpipe, or similar", - "prob": 0.070513, - "prefs": { - "zoom.stealth.webgl.renderer": "llvmpipe, or similar", - "zoom.stealth.webgl.vendor": "Mesa", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|16,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|64,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|4,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Intel", - "renderer_out": "Intel(R) HD Graphics 400", - "prob": 0.019231, - "prefs": { - "zoom.stealth.webgl.renderer": "Intel(R) HD Graphics 400", - "zoom.stealth.webgl.vendor": "Intel", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|8192,3408|4,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|8192,34045|15,34076|8192,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|32,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|16,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Mesa", - "renderer_out": "llvmpipe", - "prob": 0.019231, - "prefs": { - "zoom.stealth.webgl.renderer": "llvmpipe", - "zoom.stealth.webgl.vendor": "Mesa", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|16,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-32,35077|31,35371|15,35373|15,35374|90,35375|90,35376|65536,35377|262144,35379|262144,35380|16,35657|16384,35658|16384,35659|128,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|64,35978|64,35979|4,36003|0,36004|255,36005|255,36063|8,36183|4,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33901|1:255,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "NVIDIA Corporation", - "renderer_out": "NVIDIA GeForce GTX 980/PCIe/SSE2", - "prob": 0.00641, - "prefs": { - "zoom.stealth.webgl.renderer": "NVIDIA GeForce GTX 980/PCIe/SSE2", - "zoom.stealth.webgl.vendor": "NVIDIA Corporation", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|4294967295,2964|7680,2965|7680,2966|7680,2967|0,2968|4294967295,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|32768,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|16384,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|1048576,33001|1048576,33170|4352,34016|33984,34024|32768,34045|15,34076|32768,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|233472,35379|233472,35380|256,35657|4096,35658|4096,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|4,35978|128,35979|4,36003|0,36004|4294967295,36005|4294967295,36063|8,36183|32,36203|4294967295,36347|1024,36348|32,36349|1024,37137|18446744073709552000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|32768:32768,33901|1:2047,33902|1:1", - "zoom.stealth.webgl.float_params": "", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - }, - { - "vendor": "Mesa", - "renderer_out": "GeForce GTX 980, or similar", - "prob": 0.00641, - "prefs": { - "zoom.stealth.webgl.renderer": "GeForce GTX 980, or similar", - "zoom.stealth.webgl.vendor": "Mesa", - "zoom.stealth.webgl.extensions": "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_depth_clamp,EXT_float_blend,EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint,OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear,OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object,WEBGL_color_buffer_float,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers,WEBGL_lose_context", - "zoom.stealth.webgl2.extensions": "EXT_color_buffer_float,EXT_depth_clamp,EXT_float_blend,EXT_texture_compression_bptc,EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed,OES_texture_float_linear,WEBGL_compressed_texture_astc,WEBGL_compressed_texture_etc,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_lose_context", - "zoom.stealth.webgl.int_params": "2849|1,2885|1029,2886|2305,2931|1,2932|513,2961|0,2962|519,2963|255,2964|7680,2965|7680,2966|7680,2967|0,2968|255,3074|1029,3314|0,3315|0,3316|0,3317|4,3330|0,3331|0,3332|0,3333|4,3379|16384,3408|8,3410|8,3411|8,3412|8,3413|8,3414|24,3415|0,10752|0,32777|32774,32824|0,32877|0,32878|0,32883|2048,32936|1,32937|4,32938|1,32968|0,32969|1,32970|0,32971|1,33000|3000,33001|3000,33170|4352,34016|33984,34024|16384,34045|15,34076|16384,34816|519,34817|7680,34818|7680,34819|7680,34852|8,34853|1029,34854|0,34855|0,34856|0,34857|0,34858|0,34859|0,34860|0,34877|32774,34921|16,34930|32,35071|2048,35076|-8,35077|7,35371|14,35373|14,35374|84,35375|84,35376|65536,35377|245760,35379|245760,35380|256,35657|16384,35658|16384,35659|124,35660|32,35661|192,35723|4352,35738|5121,35739|6408,35968|128,35978|128,35979|4,36003|0,36004|255,36005|255,36063|8,36183|8,36203|4294967295,36347|4096,36348|32,36349|4096,37137|9223372034707292000,37154|128,37157|128,37443|37444,37447|1000000000", - "zoom.stealth.webgl.int2_params": "2928|0:1,3386|16384:16384,33902|1:1", - "zoom.stealth.webgl.float_params": "33901|1:63.375", - "zoom.stealth.webgl.shader_precisions": "35633*36336|127:127:23,35633*36337|127:127:23,35633*36338|127:127:23,35633*36339|24:24:0,35633*36340|24:24:0,35633*36341|24:24:0,35632*36336|127:127:23,35632*36337|127:127:23,35632*36338|127:127:23,35632*36339|24:24:0,35632*36340|24:24:0,35632*36341|24:24:0", - "zoom.stealth.webgl2.enabled": true - } - } - ], - "_meta": { - "source": "camoufox webgl_data.db (offline extract; real Firefox WebGL telemetry)", - "note": "prefs are zoom.stealth.webgl.* override values; prob normalized per-OS" - } -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/webgl_renderer_pool.json b/src/invisible_playwright/_fpforge/data/webgl_renderer_pool.json deleted file mode 100644 index b1b05a2..0000000 --- a/src/invisible_playwright/_fpforge/data/webgl_renderer_pool.json +++ /dev/null @@ -1,1902 +0,0 @@ -{ - "source": "browserforge v1.2.3 fingerprint-network.zip [stealth: NVIDIA collapsed to 3 sanitize buckets 2026-04-26]", - "total": 474, - "entries": [ - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) 630 (0x00006987) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) 860M Graphics (0x00001114) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) Graphics (0x000015E7) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) Graphics (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) R5 M330 (0x00006660) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) R9 390 Series (0x000067B1) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) R9 Fury Series (0x00007300) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon (TM) RX 570 (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 610 Series (0x00006665) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 740M Graphics (0x000015C8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 740M Graphics (0x00001901) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 760M Graphics (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 760M Graphics (0x00001900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 780M Graphics (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon 780M Graphics (0x00001900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon Graphics (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon HD 5450 (0x000068F9) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon HD 7500M/7600M Series (0x00006841) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon HD 8600/8700M (0x00006600) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon HD 8600M Series (0x00006660) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon PRO Graphics (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon Pro W5500 (0x00007341) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon Pro W6800 (0x000073A3) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R5 230 (0x00006779) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R5 430 (0x00006611) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R5 Graphics (0x00009874) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R6 Graphics (0x00009874) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R7 200 Series (0x00006610) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R7 240 (0x00006837) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R7 M440 (0x00006900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R7 M460 (0x00006900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon R9 200 Series (0x00006810) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 550 (0x0000699F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 5600 XT (0x0000731F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 5700 (0x0000731F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 5700 XT (0x0000731F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 580 2048SP (0x00006FDF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6400 (0x0000743F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6500 XT (0x0000743F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6600 (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6600 XT (0x000073FF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6650 XT (0x000073EF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6700 XT (0x000073DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6750 XT (0x000073DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6800 (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6800 XT (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6900 XT (0x000073BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 6950 XT (0x000073A5) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 7600 (0x00007480) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 7700 XT (0x0000747E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 7800 XT (0x0000747E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 7900 XT (0x0000744C) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 7900 XTX (0x0000744C) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 9060 XT (0x00007590) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 9070 (0x00007550) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX 9070 XT (0x00007550) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon RX590 GME (0x00006FDF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon TM Graphics (0x00001900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 610M (0x00001506) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 610M (0x0000164E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 660M (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 680M (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 760M (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 780M (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 780M Graphics (0x00001900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 8060S Graphics (0x00001586) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 840M Graphics (0x00001114) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 860M Graphics (0x00001114) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 880M Graphics (0x0000150E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) 890M Graphics (0x0000150E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x000013C0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001506) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x000015BF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001636) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001638) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x0000164C) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x0000164E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics (0x00001900) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Pro Graphics (0x00001638) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R2 Graphics (0x00009853) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R4 Graphics (0x00009851) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R4 Graphics (0x000098E4) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R5 Graphics (0x000098E4) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R7 250 (0x00006610) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R7 Graphics (0x0000130F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R7 Graphics (0x00001313) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) R7 Graphics (0x00009874) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) RX Vega 10 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) RX Vega 11 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) RX Vega 11 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 10 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 3 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 3 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 6 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 6 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 8 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 8 Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 8 Mobile Graphics (0x000015DD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD Radeon(TM) Vega 9 Graphics (0x000015D8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD RadeonT 660M (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, AMD RadeonT 680M (0x00001681) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon (TM) Pro WX 5100 Graphics (0x000067C7) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon (TM) RX 470 Series (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 550 Series (0x000067FF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 5500 XT (0x00007340) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 560 Series (0x000067FF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 560X (0x000067EF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 570 Series (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 580 Series (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX 590 Series (0x000067DF) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (AMD, Radeon RX550/550 Series (0x0000699F) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (AMD)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 130T GPU (16GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 130V GPU (8GB) (0x000064A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140T GPU (16GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140T GPU (32GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140T GPU (8GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140V GPU (16GB) (0x000064A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140V GPU (16GB) Direct3D9Ex vs_3_0 ps_3_0, igd9trinity64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) 140V GPU (8GB) (0x000064A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) A380 Graphics (0x000056A5) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) Graphics (0x00007D55) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) Pro 140T GPU (16GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) Pro 140T GPU (32GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) Pro 140T GPU (48GB) (0x00007D51) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Arc(TM) Pro Graphics (0x00007D55) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x000046D4) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x00007D41) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x00007D45) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x00007D67) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x00007DD5) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x0000A7AC) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Graphics (0x0000A7AD) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x00000102) Direct3D11 vs_4_1 ps_4_1, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x00000152) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x00000402) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x00000F31) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x00001606) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics (0x000022B1) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 3000 (0x00000116) Direct3D11 vs_4_1 ps_4_1, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 3000 (0x00000126) Direct3D11 vs_4_1 ps_4_1, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 3000 Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4000 (0x00000166) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4000 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4400 (0x0000041E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4400 (0x00000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4400 Direct3D9Ex vs_3_0 ps_3_0, igdumdim64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4400 manual-gen9_2015-134121 (0x0000041E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4600 (0x00000412) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4600 (0x00000416) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 4600 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 5000 (0x00000A26) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 505 (0x00005A84) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 510 (0x00001902) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 510 (0x00001906) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 515 (0x0000191E) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 520 (0x00001916) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 520 (0x00001921) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 520 (0x00001921) Direct3D11 vs_5_0 ps_5_0, D3D11-24.20.100.6293)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 530 (0x00001912) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 530 (0x0000191B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 5500 (0x00001616) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 5500 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 610 (0x00005906) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 620 (0x00005916) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 620 (0x00005917) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 620 (0x00005921) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 630 (0x00005912) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics 630 (0x0000591B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0, D3D11-10.18.10.4358)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0, igdumdx32.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics Family (0x00000A16) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics Family Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) HD Graphics P530 (0x0000191D) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Plus Graphics (0x00008A52) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Plus Graphics (0x00008A5A) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Plus Graphics 640 (0x00005926) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046A6) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046A8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x000046AA) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x00009A40) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x00009A49) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x0000A7A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics (0x0000A7A1) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Iris(R) Xe Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) Q45/Q43 Express Chipset (Microsoft Corporation - WDDM 1.1) Direct3D9Ex vs_3_0 ps_3_0, igdumd64.dll)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00004626) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00004628) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00004688) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000468B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x000046A3) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x000046B3) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x000046D0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x000046D1) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x000046D2) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00004E55) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00004E71) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00008A56) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009A60) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009A68) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009A78) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009B21) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009B41) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009BA4) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009BC4) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009BCA) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x00009BCC) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A720) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A721) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A788) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A78B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A7A8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics (0x0000A7A9) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 600 (0x00003185) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 605 (0x00003184) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 610 (0x00003E90) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 610 (0x00003EA1) Direct3D11 vs_5_0 ps_5_0, D3D11-27.20.100.9466)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 615 (0x0000591C) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 620 (0x00003EA0) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 620 (0x00005917) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E91) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E92) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E98) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E9B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00009BC5) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00009BC8) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004682) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004692) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004C8B) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 750 (0x00004C8A) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 770 (0x00004680) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 770 (0x00004690) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel, Intel(R) UHD Graphics 770 (0x0000A780) Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (Intel)" - }, - { - "renderer": "ANGLE (Intel(R) HD Graphics Family Direct3D11 vs_5_0 ps_5_0)", - "vendor": "Intel Inc." - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - }, - { - "renderer": "ANGLE (NVIDIA, NVIDIA GeForce 8800 GTX Direct3D11 vs_5_0 ps_5_0, D3D11)", - "vendor": "Google Inc. (NVIDIA)" - } - ] -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/data/win_hw_marginals.json b/src/invisible_playwright/_fpforge/data/win_hw_marginals.json deleted file mode 100644 index 9d1d71b..0000000 --- a/src/invisible_playwright/_fpforge/data/win_hw_marginals.json +++ /dev/null @@ -1,469 +0,0 @@ -{ - "_meta": { - "source": "browserforge Windows UAs (offline; OS-level screen/cores marginal)" - }, - "screens": [ - { - "w": 1536, - "h": 864, - "availW": 1536, - "availH": 816, - "dpr": 1.25, - "prob": 0.264935 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.161965 - }, - { - "w": 1280, - "h": 720, - "availW": 1280, - "availH": 672, - "dpr": 1.5, - "prob": 0.07915 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1040, - "dpr": 1, - "prob": 0.06376 - }, - { - "w": 1366, - "h": 768, - "availW": 1366, - "availH": 728, - "dpr": 1, - "prob": 0.054416 - }, - { - "w": 1366, - "h": 768, - "availW": 1366, - "availH": 720, - "dpr": 1, - "prob": 0.046171 - }, - { - "w": 1536, - "h": 864, - "availW": 1536, - "availH": 824, - "dpr": 1.25, - "prob": 0.036644 - }, - { - "w": 1536, - "h": 960, - "availW": 1536, - "availH": 912, - "dpr": 1.25, - "prob": 0.029681 - }, - { - "w": 2560, - "h": 1440, - "availW": 2560, - "availH": 1392, - "dpr": 1, - "prob": 0.029133 - }, - { - "w": 1280, - "h": 800, - "availW": 1280, - "availH": 752, - "dpr": 1.5, - "prob": 0.024917 - }, - { - "w": 1536, - "h": 864, - "availW": 1536, - "availH": 864, - "dpr": 1.25, - "prob": 0.024733 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1080, - "dpr": 1, - "prob": 0.013742 - }, - { - "w": 1280, - "h": 720, - "availW": 1280, - "availH": 680, - "dpr": 1.5, - "prob": 0.012643 - }, - { - "w": 1280, - "h": 720, - "availW": 1280, - "availH": 720, - "dpr": 1.5, - "prob": 0.01081 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.009527 - }, - { - "w": 1707, - "h": 1067, - "availW": 1707, - "availH": 1019, - "dpr": 1.5, - "prob": 0.009344 - }, - { - "w": 1440, - "h": 900, - "availW": 1440, - "availH": 852, - "dpr": 2, - "prob": 0.008795 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.008795 - }, - { - "w": 1920, - "h": 1200, - "availW": 1920, - "availH": 1152, - "dpr": 1, - "prob": 0.007513 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.007146 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.006596 - }, - { - "w": 1600, - "h": 900, - "availW": 1600, - "availH": 860, - "dpr": 1, - "prob": 0.006229 - }, - { - "w": 2048, - "h": 1152, - "availW": 2048, - "availH": 1104, - "dpr": 1.25, - "prob": 0.006045 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.005864 - }, - { - "w": 1536, - "h": 864, - "availW": 1536, - "availH": 816, - "dpr": 1.25, - "prob": 0.005864 - }, - { - "w": 1366, - "h": 768, - "availW": 1366, - "availH": 768, - "dpr": 1, - "prob": 0.00568 - }, - { - "w": 2560, - "h": 1440, - "availW": 2560, - "availH": 1392, - "dpr": 1.5, - "prob": 0.00513 - }, - { - "w": 1707, - "h": 960, - "availW": 1707, - "availH": 912, - "dpr": 1.5, - "prob": 0.004946 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1040, - "dpr": 1, - "prob": 0.004946 - }, - { - "w": 3440, - "h": 1440, - "availW": 3440, - "availH": 1392, - "dpr": 1, - "prob": 0.00458 - }, - { - "w": 1504, - "h": 1003, - "availW": 1504, - "availH": 955, - "dpr": 1.5, - "prob": 0.004396 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.004396 - }, - { - "w": 1280, - "h": 800, - "availW": 1280, - "availH": 752, - "dpr": 2, - "prob": 0.004396 - }, - { - "w": 1536, - "h": 864, - "availW": 1536, - "availH": 816, - "dpr": 1.25, - "prob": 0.004396 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1040, - "dpr": 1, - "prob": 0.004031 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1050, - "dpr": 1, - "prob": 0.003847 - }, - { - "w": 2560, - "h": 1440, - "availW": 2560, - "availH": 1400, - "dpr": 1, - "prob": 0.003847 - }, - { - "w": 1366, - "h": 768, - "availW": 1366, - "availH": 728, - "dpr": 1, - "prob": 0.003664 - }, - { - "w": 1920, - "h": 1080, - "availW": 1920, - "availH": 1032, - "dpr": 1, - "prob": 0.003664 - }, - { - "w": 1600, - "h": 900, - "availW": 1600, - "availH": 852, - "dpr": 1, - "prob": 0.003664 - } - ], - "cores": [ - { - "value": 8, - "prob": 0.271311 - }, - { - "value": 12, - "prob": 0.21567 - }, - { - "value": 4, - "prob": 0.157888 - }, - { - "value": 16, - "prob": 0.136607 - }, - { - "value": 20, - "prob": 0.03971 - }, - { - "value": 2, - "prob": 0.025086 - }, - { - "value": 24, - "prob": 0.023184 - }, - { - "value": 6, - "prob": 0.022233 - }, - { - "value": 32, - "prob": 0.021876 - }, - { - "value": 14, - "prob": 0.015575 - }, - { - "value": 3, - "prob": 0.011651 - }, - { - "value": 28, - "prob": 0.010462 - }, - { - "value": 22, - "prob": 0.010225 - }, - { - "value": 5, - "prob": 0.008441 - }, - { - "value": 10, - "prob": 0.005588 - }, - { - "value": 7, - "prob": 0.005469 - }, - { - "value": 9, - "prob": 0.004042 - }, - { - "value": 11, - "prob": 0.003923 - }, - { - "value": 18, - "prob": 0.003567 - }, - { - "value": 15, - "prob": 0.001189 - }, - { - "value": 13, - "prob": 0.000951 - }, - { - "value": 36, - "prob": 0.000713 - }, - { - "value": 64, - "prob": 0.000594 - }, - { - "value": 44, - "prob": 0.000594 - }, - { - "value": 19, - "prob": 0.000476 - }, - { - "value": 17, - "prob": 0.000357 - }, - { - "value": 23, - "prob": 0.000357 - }, - { - "value": 40, - "prob": 0.000357 - }, - { - "value": 21, - "prob": 0.000357 - }, - { - "value": 48, - "prob": 0.000357 - }, - { - "value": 640, - "prob": 0.000357 - }, - { - "value": 56, - "prob": 0.000357 - }, - { - "value": 26, - "prob": 0.000238 - }, - { - "value": 27, - "prob": 0.000119 - }, - { - "value": 25, - "prob": 0.000119 - } - ] -} \ No newline at end of file diff --git a/src/invisible_playwright/_fpforge/profile.py b/src/invisible_playwright/_fpforge/profile.py deleted file mode 100644 index 85809c0..0000000 --- a/src/invisible_playwright/_fpforge/profile.py +++ /dev/null @@ -1,273 +0,0 @@ -"""Public dataclass surface for fpforge.""" -from __future__ import annotations - -from dataclasses import dataclass, field, replace as _dc_replace -from typing import Any, Dict, List, Optional - -from ._sampler import sample as _sample_raw - - -@dataclass(frozen=True) -class GPUProfile: - vendor: str - renderer: str - class_tier: str # "low_end" | "mid_range" | "high_end" | "integrated_old" | "integrated_modern" - - -@dataclass(frozen=True) -class ScreenProfile: - width: int - height: int - avail_width: int - avail_height: int - dpr: float - tier: str - - -@dataclass(frozen=True) -class HardwareProfile: - concurrency: int - storage_quota_mb: int - - -@dataclass(frozen=True) -class AudioProfile: - sample_rate: int - output_latency_ms: int - max_channel_count: int - - -@dataclass(frozen=True) -class CodecProfile: - av1_enabled: bool - webm_encoder_enabled: bool - mediasource_webm: bool - mediasource_mp4: bool - webspeech_synth: bool - - -@dataclass(frozen=True) -class WebGLProfile: - msaa_samples: int - - -# ────────────────────────────────────────────────────────────────────── -# Pin map: flat dotted-path -> value. Set via `pin=` on generate_profile. -# -# Supported keys: -# "gpu.vendor", "gpu.renderer", "gpu.class_tier" -# "screen.width", "screen.height", "screen.avail_width", -# "screen.avail_height", "screen.dpr", "screen.tier" -# "hardware.concurrency", "hardware.storage_quota_mb" -# "audio.sample_rate", "audio.output_latency_ms", -# "audio.max_channel_count" -# "codec.av1_enabled", "codec.webm_encoder_enabled", -# "codec.mediasource_webm", "codec.mediasource_mp4", -# "codec.webspeech_synth" -# "webgl.msaa_samples" -# "fonts" (replaces the whole list) -# "dark_theme" -# ────────────────────────────────────────────────────────────────────── - -_PIN_GROUPS = { - "gpu": {"vendor", "renderer", "class_tier"}, - "screen": {"width", "height", "avail_width", "avail_height", "dpr", "tier"}, - "hardware": {"concurrency", "storage_quota_mb"}, - "audio": {"sample_rate", "output_latency_ms", "max_channel_count"}, - "codec": { - "av1_enabled", "webm_encoder_enabled", - "mediasource_webm", "mediasource_mp4", "webspeech_synth", - }, - "webgl": {"msaa_samples"}, -} -_PIN_TOP = {"fonts", "dark_theme"} - - -def _validate_pin_key(key: str) -> None: - if key in _PIN_TOP: - return - if "." not in key: - raise ValueError( - f"pin key {key!r} is not valid. " - f"Use 'group.field' (e.g. 'screen.width') or one of {sorted(_PIN_TOP)}." - ) - group, field_name = key.split(".", 1) - if group not in _PIN_GROUPS: - raise ValueError( - f"pin key {key!r}: unknown group {group!r}. " - f"Known groups: {sorted(_PIN_GROUPS)}." - ) - if field_name not in _PIN_GROUPS[group]: - raise ValueError( - f"pin key {key!r}: unknown field {field_name!r} in group {group!r}. " - f"Known fields: {sorted(_PIN_GROUPS[group])}." - ) - - -@dataclass(frozen=True) -class Profile: - """Coherent browser fingerprint profile sampled from a single integer seed. - - Use `generate_profile(seed)` to build one. Pin specific values at build - time with `generate_profile(seed, pin={"screen.width": 2560, ...})`. - """ - seed: int - gpu: GPUProfile - screen: ScreenProfile - hardware: HardwareProfile - audio: AudioProfile - codec: CodecProfile - webgl: WebGLProfile - fonts: List[str] - dark_theme: bool - # Bayesian browsing-history: list of {name, category, cookie_profile} - # dicts sampled from data/browsing_pool.json with per-class CPT. Used - # by _recaptcha_seed.py to build a coherent cookie pre-seed when the - # caller opts in via Stealthfox(prep_recaptcha=True). - browsing_history: List[Dict[str, str]] = field(default_factory=list) - _raw: Dict[str, Any] = field(default_factory=dict, repr=False, compare=False) - - def to_prefs_dict(self) -> Dict[str, Any]: - """Return the flat dict of raw sampler fields, as produced by the - underlying Bayesian sampler. Stable across releases for a given seed.""" - return dict(self._raw) - - -# Mapping from flat pin key -> raw sampler dict key, so `to_prefs_dict()` -# and `invisible_playwright.prefs.translate_profile_to_prefs` observe the pinned value. -_PIN_TO_RAW = { - "gpu.vendor": "webgl_vendor", - "gpu.renderer": "webgl_renderer", - "gpu.class_tier": "gpu_class", - "screen.width": "screen_w", - "screen.height": "screen_h", - "screen.avail_width": "screen_avail_w", - "screen.avail_height": "screen_avail_h", - "screen.dpr": "dpr", - "screen.tier": "screen_tier", - "hardware.concurrency": "hw_concurrency", - "hardware.storage_quota_mb": "storage_quota_mb", - "audio.sample_rate": "audio_sample_rate", - "audio.output_latency_ms": "audio_output_latency_ms", - "audio.max_channel_count": "audio_max_channel_count", - "codec.av1_enabled": "av1_enabled", - "codec.webm_encoder_enabled": "webm_encoder_enabled", - "codec.mediasource_webm": "mediasource_webm", - "codec.mediasource_mp4": "mediasource_mp4", - "codec.webspeech_synth": "webspeech_synth", - "webgl.msaa_samples": "msaa_samples", - "dark_theme": "dark_theme", - # "fonts" is a list — handled specially (joined into font_whitelist). -} - - -def _apply_pins_to_raw(raw: Dict[str, Any], pin: Dict[str, Any]) -> Dict[str, Any]: - """Return a copy of `raw` with the pinned sampler-level fields updated.""" - out = dict(raw) - for key, value in pin.items(): - if key == "fonts": - if not isinstance(value, (list, tuple)): - raise TypeError("pin 'fonts' must be a list/tuple of strings") - out["font_whitelist"] = ",".join(value) - continue - raw_key = _PIN_TO_RAW.get(key) - if raw_key is None: - # Shouldn't happen after validation, but guard anyway. - continue - out[raw_key] = value - return out - - -def generate_profile( - seed: int, - pin: Optional[Dict[str, Any]] = None, - fixed_gpu_class: Optional[str] = None, -) -> Profile: - """Return a deterministic Profile for the given integer seed. - - pin: optional dict of dotted-path keys (e.g. "screen.width", "gpu.renderer") - to values that are FORCED in the resulting profile. All other fields - are still sampled from the Bayesian network based on `seed`, so the - same seed + same pin map always yields the same profile. - - Example — force a specific GPU and screen while letting everything - else vary with the seed (via the public invisible_playwright API): - - from invisible_playwright import InvisiblePlaywright - - with InvisiblePlaywright( - seed=42, - pin={ - "gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)", - "gpu.vendor": "Google Inc. (NVIDIA)", - "gpu.class_tier": "high_end", - "screen.width": 2560, - "screen.height": 1440, - }, - ) as browser: - ... - - Warning: pinning breaks Bayesian coherence across the pinned fields - (if you pin a high-end GPU but leave screen unpinned, you may get a - 1080p screen that would be unusual for that GPU class). Pin related - fields together when coherence matters. - - Supported keys: see the module-level _PIN_GROUPS / _PIN_TOP tables - or run `help(generate_profile)` after import. - """ - if pin: - for key in pin: - _validate_pin_key(key) - - # fixed_gpu_class re-conditions the whole bundle on a chosen class (used so the - # bundle stays coherent with the validated WebGL persona we expose on Windows/mac). - # An explicit gpu.class_tier pin still wins. - eff_class = (pin or {}).get("gpu.class_tier") or fixed_gpu_class - raw = _sample_raw(int(seed), fixed_gpu_class=eff_class) - if pin: - raw = _apply_pins_to_raw(raw, pin) - - # Font whitelist is stored as a comma-separated string in raw; split it. - font_wl = raw.get("font_whitelist", "") - if isinstance(font_wl, str): - fonts = [f.strip() for f in font_wl.split(",") if f.strip()] - else: - fonts = list(font_wl) if font_wl else [] - - return Profile( - seed=int(raw["stealth_seed"]), - gpu=GPUProfile( - vendor=raw["webgl_vendor"], - renderer=raw["webgl_renderer"], - class_tier=raw["gpu_class"], - ), - screen=ScreenProfile( - width=int(raw["screen_w"]), - height=int(raw["screen_h"]), - avail_width=int(raw["screen_avail_w"]), - avail_height=int(raw["screen_avail_h"]), - dpr=float(raw["dpr"]), - tier=str(raw.get("screen_tier", "")), - ), - hardware=HardwareProfile( - concurrency=int(raw["hw_concurrency"]), - storage_quota_mb=int(raw["storage_quota_mb"]), - ), - audio=AudioProfile( - sample_rate=int(raw["audio_sample_rate"]), - output_latency_ms=int(raw["audio_output_latency_ms"]), - max_channel_count=int(raw["audio_max_channel_count"]), - ), - codec=CodecProfile( - av1_enabled=bool(raw["av1_enabled"]), - webm_encoder_enabled=bool(raw["webm_encoder_enabled"]), - mediasource_webm=bool(raw["mediasource_webm"]), - mediasource_mp4=bool(raw["mediasource_mp4"]), - webspeech_synth=bool(raw["webspeech_synth"]), - ), - webgl=WebGLProfile(msaa_samples=int(raw["msaa_samples"])), - fonts=fonts, - dark_theme=bool(raw["dark_theme"]), - browsing_history=list(raw.get("browsing_history") or []), - _raw=raw, - ) diff --git a/src/invisible_playwright/_geo.py b/src/invisible_playwright/_geo.py index 5c552f2..ced7009 100644 --- a/src/invisible_playwright/_geo.py +++ b/src/invisible_playwright/_geo.py @@ -1,268 +1,4 @@ -"""Resolve the session timezone from the egress IP (``timezone="auto"``). - -Approach B: discover the egress IP with one HTTP request — routed *through the -proxy* when one is set, otherwise a direct request that sees the host's own -public IP — then map IP → IANA timezone with an offline mmdb -(``daijro/geoip-all-in-one``, downloaded + cached by ``download.py``). - -Precedence (see ``resolve_session_timezone``): - - explicit IANA → unchanged explicit always wins - "" / "auto" → egress ALWAYS resolve. With a proxy, from the proxy - egress IP; without a proxy, from the host's - own public IP. This is the default. - -On failure: - with a proxy → raise a foreign proxy paired with the host TZ is - the precise ``timezone_mismatch`` signal, so - we fail loudly rather than fall back silently. - without a proxy → "" (host) the host TZ is a safe default, so a transient - lookup failure must not break the launch. -""" -from __future__ import annotations - -import ipaddress -from typing import Any, Dict, NamedTuple, Optional -from urllib.parse import quote - -import requests - - -class GeoTimezoneError(RuntimeError): - """Raised when ``timezone="auto"`` cannot resolve a valid IANA zone.""" - - -# Plain-text IP echo endpoints (each returns just the caller's public IP). -_IP_ECHO_ENDPOINTS = ( - "https://api.ipify.org", - "https://icanhazip.com", - "https://checkip.amazonaws.com", -) - -_SOCKS_SCHEMES = ("socks5://", "socks4://", "socks://") - - -def _proxy_is_set(proxy: Optional[Dict[str, str]]) -> bool: - if not proxy: - return False - server = (proxy.get("server") or "").strip() - return bool(server) and server.lower() != "direct://" - - -def _proxies_for_requests(proxy: Dict[str, str]) -> Dict[str, str]: - """Translate our proxy dict into a ``requests`` proxies mapping. - - SOCKS5 uses the ``socks5h`` scheme so DNS is resolved proxy-side (matches - ``network.proxy.socks_remote_dns=True`` in the Firefox path). HTTP/HTTPS - pass through unchanged. Credentials are URL-encoded. - """ - server = (proxy.get("server") or "").strip() - low = server.lower() - if low.startswith("socks5://") or low.startswith("socks://"): - scheme = "socks5h" - elif low.startswith("socks4://"): - scheme = "socks4" - elif low.startswith("https://"): - scheme = "https" - else: - scheme = "http" - - host_port = server.split("://", 1)[1] if "://" in server else server - user = proxy.get("username") or "" - pwd = proxy.get("password") or "" - if user: - auth = f"{quote(user, safe='')}:{quote(pwd, safe='')}@" - else: - auth = "" - url = f"{scheme}://{auth}{host_port}" - return {"http": url, "https": url} - - -def discover_egress_ip( - proxy: Optional[Dict[str, str]] = None, *, timeout: float = 10.0 -) -> str: - """Return the public egress IP. - - Routes the request through ``proxy`` when given (SOCKS support requires - ``requests[socks]`` / PySocks); with ``proxy=None`` it makes a direct - request that sees the host's own public IP. Tries each echo endpoint in - turn; raises :class:`GeoTimezoneError` if none return a valid IP. - """ - proxies = _proxies_for_requests(proxy) if proxy else None - last_err: Optional[Exception] = None - for url in _IP_ECHO_ENDPOINTS: - try: - resp = requests.get(url, proxies=proxies, timeout=timeout) - resp.raise_for_status() - ip = resp.text.strip() - ipaddress.ip_address(ip) # validate (raises ValueError if not an IP) - return ip - except Exception as exc: # noqa: BLE001 - try the next endpoint - last_err = exc - continue - raise GeoTimezoneError( - f"could not discover the proxy egress IP via {len(_IP_ECHO_ENDPOINTS)} " - f"endpoints (last error: {last_err!r}). For SOCKS proxies make sure " - f"requests[socks] / PySocks is installed." - ) - - -def ip_to_timezone(ip: str, mmdb_path: Any) -> str: - """Map ``ip`` to its IANA timezone using the offline mmdb. - - Reads the standard MaxMind ``location.time_zone`` field and validates it - against the system tz database. Raises :class:`GeoTimezoneError` if the IP - is absent from the DB or the zone is missing / not a valid IANA name. - """ - import maxminddb - - with maxminddb.open_database(str(mmdb_path)) as reader: - record = reader.get(ip) - if not record: - raise GeoTimezoneError(f"egress IP {ip} not present in the geoip database") - tz = ((record.get("location") or {}) if isinstance(record, dict) else {}).get( - "time_zone" - ) - if not tz: - raise GeoTimezoneError(f"no timezone for egress IP {ip} in the geoip database") - from zoneinfo import ZoneInfo, ZoneInfoNotFoundError - - try: - ZoneInfo(tz) - except (ZoneInfoNotFoundError, ValueError) as exc: - raise GeoTimezoneError( - f"geoip returned an invalid IANA zone {tz!r} for {ip}: {exc}" - ) from exc - return tz - - -# ISO 3166 country code -> the primary BCP-47 locale a real Windows machine in that -# country most commonly runs. Multi-language countries use the majority language; the -# user can always force a specific locale instead of "auto". Unknown -> en-US. -_COUNTRY_LOCALE = { - "US": "en-US", "GB": "en-GB", "CA": "en-CA", "AU": "en-AU", "NZ": "en-NZ", "IE": "en-IE", - "ZA": "en-ZA", "IN": "en-IN", "SG": "en-SG", "PH": "en-PH", - "FR": "fr-FR", "BE": "fr-BE", "LU": "fr-LU", - "DE": "de-DE", "AT": "de-AT", "CH": "de-CH", - "IT": "it-IT", "ES": "es-ES", "PT": "pt-PT", "NL": "nl-NL", - "SE": "sv-SE", "NO": "nb-NO", "DK": "da-DK", "FI": "fi-FI", "IS": "is-IS", - "PL": "pl-PL", "CZ": "cs-CZ", "SK": "sk-SK", "HU": "hu-HU", "RO": "ro-RO", - "GR": "el-GR", "BG": "bg-BG", "HR": "hr-HR", "RS": "sr-RS", "SI": "sl-SI", - "RU": "ru-RU", "UA": "uk-UA", "TR": "tr-TR", "IL": "he-IL", - "BR": "pt-BR", "MX": "es-MX", "AR": "es-AR", "CL": "es-CL", "CO": "es-CO", "PE": "es-PE", - "JP": "ja-JP", "KR": "ko-KR", "CN": "zh-CN", "TW": "zh-TW", "HK": "zh-HK", - "ID": "id-ID", "TH": "th-TH", "VN": "vi-VN", "MY": "ms-MY", - "SA": "ar-SA", "AE": "ar-AE", "EG": "ar-EG", -} - - -def ip_to_locale(ip: str, mmdb_path: Any) -> str: - """Map ``ip`` -> a BCP-47 locale via the MaxMind ``country.iso_code`` field, so the - browser language stays consistent with the proxy egress country. Falls back to - ``en-US`` for IPs absent from the DB or countries we don't map.""" - import maxminddb - - with maxminddb.open_database(str(mmdb_path)) as reader: - record = reader.get(ip) - cc = "" - if isinstance(record, dict): - cc = ((record.get("country") or {}).get("iso_code") or "") - return _COUNTRY_LOCALE.get(cc.upper(), "en-US") - - -def resolve_session_locale(egress_ip: Optional[str], proxy: Optional[Dict[str, str]]) -> str: - """Resolve ``locale="auto"`` to a BCP-47 locale from the egress country. Behind a proxy - it reuses the already-discovered ``egress_ip`` (no extra round-trip); without a proxy it - discovers the host's public IP. On any failure it returns ``en-US`` (never breaks launch - — locale is cosmetic, unlike timezone which traps a foreign-proxy mismatch).""" - from .download import ensure_geoip_mmdb - - try: - ip = egress_ip if _proxy_is_set(proxy) else discover_egress_ip(None) - if ip is None: - return "en-US" - return ip_to_locale(ip, ensure_geoip_mmdb()) - except Exception: # noqa: BLE001 - return "en-US" - - -class SessionGeo(NamedTuple): - """Geo facts resolved once per session from a single egress round-trip. - - ``timezone`` follows the precedence in the module docstring. - ``egress_ip`` is the proxy egress IP (the IP the *outside world* sees) when - a proxy is set, else ``None`` — it feeds the WebRTC srflx override, which is - only meaningful behind a proxy (a direct connection's real STUN already - reports the truthful public IP, so we leave it alone). - """ - - timezone: str - egress_ip: Optional[str] - - -def prepare_session_geo( - timezone: str, proxy: Optional[Dict[str, str]] -) -> SessionGeo: - """Resolve the session timezone AND the proxy egress IP in ONE round-trip. - - The egress IP is discovered once and reused for both the timezone mapping - (when ``timezone`` is ``""``/``"auto"``) and the WebRTC public-IP override. - Timezone precedence is identical to :func:`resolve_session_timezone`; the - egress IP is best-effort for the WebRTC side (a discovery failure that the - timezone path doesn't need won't break the launch — but if the timezone - path *does* need it behind a proxy, that path still fails loudly). - """ - from .download import ensure_geoip_mmdb - - tz = (timezone or "").strip() - proxy_set = _proxy_is_set(proxy) - - # One discovery, reused below. Behind a proxy we always want the egress IP - # (for WebRTC) regardless of the timezone setting. - egress_ip: Optional[str] = None - egress_err: Optional[Exception] = None - if proxy_set: - try: - egress_ip = discover_egress_ip(proxy) - except Exception as exc: # noqa: BLE001 - egress_err = exc - - # Timezone resolution — same precedence as resolve_session_timezone. - if tz and tz.lower() != "auto": - return SessionGeo(tz, egress_ip) # explicit IANA wins - try: - ip = egress_ip if proxy_set else discover_egress_ip(None) - if ip is None: # proxy set but discovery failed above - raise egress_err or GeoTimezoneError("egress IP discovery failed") - return SessionGeo(ip_to_timezone(ip, ensure_geoip_mmdb()), egress_ip) - except Exception: - if proxy_set: - raise # fail-early behind a proxy (timezone_mismatch trap) - return SessionGeo("", None) # no proxy: host TZ is a safe fallback - - -def resolve_session_timezone( - timezone: str, proxy: Optional[Dict[str, str]] -) -> str: - """Map the user's ``timezone`` setting to a concrete IANA zone (or ``""``). - - Timezone-only path (no WebRTC side effects): an explicit IANA zone wins and - triggers NO network call; ``""``/``"auto"`` resolve from the egress IP. The - launch path uses :func:`prepare_session_geo` instead (which additionally - returns the egress IP for WebRTC); this standalone resolver is kept for - third-party integrations that only want the zone. See the module docstring - for the precedence table. - """ - tz = (timezone or "").strip() - if tz and tz.lower() != "auto": - return tz # explicit IANA wins — no egress lookup - from .download import ensure_geoip_mmdb - - proxy_set = _proxy_is_set(proxy) - try: - ip = discover_egress_ip(proxy if proxy_set else None) - return ip_to_timezone(ip, ensure_geoip_mmdb()) - except Exception: - if proxy_set: - raise # fail-early behind a proxy (timezone_mismatch trap) - return "" # no proxy: host TZ is a safe fallback +"""Backward-compat shim — spostato in invisible_core._geo (alias completo).""" +import sys as _sys +from invisible_core import _geo as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/_headless.py b/src/invisible_playwright/_headless.py index 3cfee09..64fb2bd 100644 --- a/src/invisible_playwright/_headless.py +++ b/src/invisible_playwright/_headless.py @@ -1,178 +1,4 @@ -"""Invisible-but-headed browser windows. - -Playwright's ``headless=True`` flips Firefox onto a different code path — -no widget tree, software-only rendering, distinct timing — and anti-bot -systems can spot the divergence. Running the browser *headed* but hidden -gives us the real rendering pipeline while keeping the windows off screen. - -Two mechanisms, by platform: - -- **Windows & macOS**: the patched binary cloaks its OWN chrome windows - when ``zoom.stealth.cloak_windows`` is set — ``DWMWA_CLOAK`` (Windows) - / ``NSWindow`` alpha-0 + pinned occlusion-ignore (macOS). The window - renders on the real GPU but never appears on screen, in the taskbar or - the Dock. The launcher injects the pref; nothing host-side is spawned. - -- **Linux**: spawns its own ``Xvfb`` instance and points ``DISPLAY`` at - it (X11/Wayland have no per-window cloak that keeps the GPU rendering). -""" -from __future__ import annotations - -import os -import subprocess -import sys -import time -from typing import Optional - - -# Inherited from WSLg / GNOME / etc. these env vars make Firefox prefer a -# Wayland compositor over the X11 DISPLAY we set, so the window leaks onto -# the real desktop. Strip them all before starting. -_WAYLAND_LEAK_VARS = ( - "WAYLAND_DISPLAY", - "XDG_RUNTIME_DIR", - "XDG_SESSION_TYPE", - "PULSE_SERVER", - "WSL2_GUI_APPS_ENABLED", -) - - -class _LinuxVirtualDisplay: - """Standalone Xvfb instance owned by this InvisiblePlaywright session.""" - - def __init__(self, width: int = 1920, height: int = 1080) -> None: - self._geometry = f"{width}x{height}x24" - self._proc: Optional[subprocess.Popen] = None - self._display: Optional[str] = None - self._saved_env: dict[str, Optional[str]] = {} - - def start(self) -> None: - if not _binary_on_path("Xvfb"): - raise RuntimeError( - "invisible_playwright headless=True requires Xvfb. " - "Install it: sudo apt install xvfb" - ) - # Retry: when many workers start in parallel they can pick the same - # display number before any has created its lockfile. Xvfb on the - # losing side exits immediately — try again with a fresh number. - last_err: Optional[Exception] = None - for _ in range(10): - display = self._pick_display() - try: - self._spawn(display) - self._wait_until_ready(display) - self._display = display - self._apply_env(display) - return - except RuntimeError as e: - last_err = e - if self._proc is not None and self._proc.poll() is None: - self._proc.kill() - self._proc = None - raise RuntimeError(f"Xvfb failed to start after 10 attempts: {last_err}") - - def _spawn(self, display: str) -> None: - self._proc = subprocess.Popen( - [ - "Xvfb", display, - "-screen", "0", self._geometry, - "+extension", "GLX", - "+extension", "RENDER", - "-nolisten", "unix", - "-listen", "tcp", - "-ac", - ], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - start_new_session=True, - ) - - def _pick_display(self) -> str: - for n in range(99, 400): - if not os.path.exists(f"/tmp/.X{n}-lock"): - return f":{n}" - raise RuntimeError("no free X display number in :99–:399") - - def _wait_until_ready(self, display: str) -> None: - # We start Xvfb with -nolisten unix → no /tmp/.X11-unix socket appears. - # Xvfb creates /tmp/.X{n}-lock immediately though — wait for that. - lockfile = f"/tmp/.X{display[1:]}-lock" - deadline = time.monotonic() + 3.0 - assert self._proc is not None - while time.monotonic() < deadline: - if self._proc.poll() is not None: - raise RuntimeError(f"Xvfb {display} exited immediately") - if os.path.exists(lockfile): - return - time.sleep(0.02) - raise RuntimeError(f"Xvfb {display} did not become ready in 3s") - - def _apply_env(self, display: str) -> None: - keys = ("DISPLAY", "MOZ_ENABLE_WAYLAND", "GDK_BACKEND") + _WAYLAND_LEAK_VARS - for k in keys: - self._saved_env[k] = os.environ.get(k) - for k in _WAYLAND_LEAK_VARS: - os.environ.pop(k, None) - os.environ["DISPLAY"] = display - os.environ["MOZ_ENABLE_WAYLAND"] = "0" - os.environ["GDK_BACKEND"] = "x11" - - def stop(self) -> None: - for k, v in self._saved_env.items(): - if v is None: - os.environ.pop(k, None) - else: - os.environ[k] = v - self._saved_env.clear() - - if self._proc is not None and self._proc.poll() is None: - self._proc.terminate() - try: - self._proc.wait(timeout=3) - except subprocess.TimeoutExpired: - self._proc.kill() - self._proc.wait(timeout=2) - self._proc = None - self._display = None - - -# Windows & macOS: the patched Firefox cloaks its own chrome windows when this -# pref is set (DWMWA_CLOAK / NSWindow alpha-0 + pinned occlusion-ignore), so the -# window renders on the real GPU but never shows on screen / in the taskbar or -# Dock. window_occlusion_tracking is disabled so a hidden window keeps painting. -CLOAK_PREFS = { - "zoom.stealth.cloak_windows": True, - "widget.windows.window_occlusion_tracking.enabled": False, -} - - -def cloak_prefs() -> dict: - """Prefs that make the patched binary self-cloak its chrome windows. - - Used on Windows & macOS, where hiding is done inside the binary rather than - with a host-side virtual display. - """ - return dict(CLOAK_PREFS) - - -def make_virtual_display(): - """Return a start()/stop()-able virtual display, or ``None`` when the - platform hides windows via the in-binary cloak pref instead. - - - Linux: a fresh ``Xvfb`` (the launcher start()s/stop()s it). - - Windows / macOS: ``None`` — the binary self-cloaks via ``cloak_prefs()``, - injected by the launcher; nothing host-side needs spawning. - """ - if sys.platform.startswith("linux"): - return _LinuxVirtualDisplay() - if sys.platform in ("win32", "darwin"): - return None - raise RuntimeError( - f"invisible_playwright supports Windows, macOS and Linux " - f"(got {sys.platform!r})" - ) - - -def _binary_on_path(name: str) -> bool: - import shutil - return shutil.which(name) is not None +"""Backward-compat shim — spostato in invisible_core._headless (alias completo).""" +import sys as _sys +from invisible_core import _headless as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/_proxy.py b/src/invisible_playwright/_proxy.py index 85a4e77..e2417bf 100644 --- a/src/invisible_playwright/_proxy.py +++ b/src/invisible_playwright/_proxy.py @@ -1,56 +1,4 @@ -"""Proxy translation shared by sync and async launchers. - -SOCKS proxies are driven entirely by the patched Firefox prefs (the -``nsProtocolProxyService`` patch reads ``network.proxy.socks_username`` -and ``socks_password``). HTTP/HTTPS proxies go through Playwright's own -``proxy=`` kwarg so it can negotiate Basic auth. -""" -from __future__ import annotations - -from typing import Any, Dict, Optional - - -_SOCKS_SCHEMES = ("socks5://", "socks4://", "socks://") - - -def configure_proxy( - proxy: Optional[Dict[str, str]], - prefs: Dict[str, Any], -) -> Optional[Dict[str, str]]: - """Mutate ``prefs`` for SOCKS auth; return what to pass to Playwright. - - * ``None`` proxy → returns ``None``. - * SOCKS proxy → writes the auth prefs and returns ``None`` (Playwright - gets nothing; Firefox does the rest). - * HTTP / HTTPS proxy → returns the dict unchanged for Playwright. - """ - if not proxy: - return None - - server = (proxy.get("server") or "").strip() - if not server or server.lower() == "direct://": - return None - if not _is_socks_scheme(server): - return proxy - - host_port = _strip_scheme(server) - if ":" not in host_port: - return None # malformed, drop silently - - host, port_str = host_port.rsplit(":", 1) - prefs["network.proxy.type"] = 1 - prefs["network.proxy.socks"] = host - prefs["network.proxy.socks_port"] = int(port_str) - prefs["network.proxy.socks_version"] = 4 if server.lower().startswith("socks4://") else 5 - prefs["network.proxy.socks_username"] = proxy.get("username") or "" - prefs["network.proxy.socks_password"] = proxy.get("password") or "" - prefs["network.proxy.socks_remote_dns"] = True - return None - - -def _is_socks_scheme(server: str) -> bool: - return server.lower().startswith(_SOCKS_SCHEMES) - - -def _strip_scheme(server: str) -> str: - return server.split("://", 1)[1] if "://" in server else server +"""Backward-compat shim — spostato in invisible_core._proxy (alias completo).""" +import sys as _sys +from invisible_core import _proxy as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/_webgl_personas.py b/src/invisible_playwright/_webgl_personas.py index 18ab1b1..d16096f 100644 --- a/src/invisible_playwright/_webgl_personas.py +++ b/src/invisible_playwright/_webgl_personas.py @@ -1,202 +1,4 @@ -"""Empirically-calibrated WebGL GPU personas for Windows ANGLE D3D11. - -We expose a FALSE GPU (this is a multi-user tool — never leak each host's real GPU), -chosen deterministically per seed from a small set of renderer-string "buckets" that -Firefox's SanitizeRenderer emits and that FP Pro's tampering_ml scores as CLEAN. - -## What actually gates a persona (calibrated 2026-06-14, supersedes the old theory) - -The blocker is NOT anti_detect and NOT a "render-vs-renderer" check. It is FP Pro's -**tampering_ml** (gate <=0.5), a holistic ML coherence score. We reverse-engineered its -GPU sensitivity with single-variable A/Bs on demo.fingerprint.com (deterministic per -(seed, renderer, IP); tools in tests/_gpu_isolate.py / _gpu_landscape.py / _gpu_sweep.py / -_gpu_sweep2.py / _gpu_persona_pure.py). Findings: - - 1. tampering_ml = f(renderer STRING, seed baseline = canvas/audio). The renderer string - carries a STABLE per-bucket penalty; the seed sets the floor it adds to. - 2. gpu_class is IRRELEVANT to tampering_ml (nv_980 scored identically on mid_range / - high_end / premium / workstation). So pairing a fake GPU with a "matching" hardware - tier does NOT help the score (we still set a coherent class — see gpu_class below — - for OTHER detectors that cross-check cores/screen, just not for this). - 3. It is NOT render-consistency: a cross-vendor AMD string is CLEAN on our Intel-Arc - host. So the real silicon's pixels are not the dominant signal; falsifying to a - different vendor works — IF the string is one FP Pro scores low. - -Sweep over all 10 Windows SanitizeRenderer buckets x 10 seeds (clean = tml<=0.5 AND not -anti_detect), on our Intel Arc A750 host: - - amd_r9 (Radeon R9 200 Series) ...... 10/10 clean, max tml 0.346 <- SHIP - - intel_arc (Arc A750) ............... 10/10 clean, max tml 0.377 <- SHIP - - amd_hd5850 ......................... 9/10 (fails the hardest seed) - - amd_hd3200 / intel_hd .............. 6/10 (seed-dependent, risky) - - intel_hd400 ........................ 3/10 - - ALL NVIDIA (8800/480/980) .......... 0/10 (penalized everywhere, ~0.7-0.99) - - intel_945 (ancient Intel) .......... 0/10 -So only TWO buckets are robustly clean across profiles. We ship exactly those, weighted -to real-world prevalence ("Radeon R9 200 Series" is the bucket for ALL modern AMD = a big -real slice; "Arc A750" covers Intel discrete = rarer). Cross-vendor, so the fleet is not a -single-GPU cluster. More names require lowering the seed floor first (see CAVEAT 2). - -## ⚠️ CAVEATS - 1. HOST-INDEPENDENCE NOT PROVEN. Everything above was measured on ONE host (Intel Arc - A750). The host's real render is embedded in the seed baseline, so the clean-bucket set - *might* be host-dependent (on a real NVIDIA host, maybe nv_980 is clean and amd_r9 is - not). This MUST be validated on a non-Arc machine before trusting it fleet-wide; if it - turns out host-dependent, add a pre-launch host-GPU-class probe and pick a bucket per - detected class. Until then: safe for Arc hosts (incl. the dev's), unvalidated elsewhere. - 2. DIVERSITY CEILING = 2 names because "hard" seeds (high canvas/audio floor, e.g. seed 4 - ~0.35) only stay clean on the 2 best buckets. Lowering that floor (an fpforge CPT fix — - candidate: 8-channel audio + 1TB storage emitted on a mid_range profile) would unlock - amd_hd5850 / intel_hd for more seeds => up to ~5 names. Follow-up, not done yet. - -## Load-bearing format requirements (unchanged, still true) - - renderer MUST end ", D3D11)" (full ANGLE wire format) or SanitizeRenderer returns - "Generic Renderer" (a tell). The C++ passes our string through SanitizeRenderer, which - buckets "AMD Radeon R9 200 Series" -> "Radeon R9 200 Series" and "Arc A750" -> itself. - - the forced extension list MUST be the EXACT NATIVE ORDER getSupportedExtensions returns. - The set+order is fixed by Firefox+ANGLE on D3D11 FL11_0 (VENDOR-INDEPENDENT — verified - via 20-agent source study), so ONE list is correct for both personas. A reorder is caught - (tampering_ml 0.34 -> 0.84). The lists below are the verbatim native-order Arc capture. - -Calibration data + sweep tooling live in the local workbench (not shipped). -""" -from __future__ import annotations - -import sys -from typing import Dict, List, Optional - -# Vendor-independent ext lists (native order, Arc host capture). Identical for every persona -# because the set+order is fixed by Firefox+ANGLE on D3D11 FL11_0, not by the GPU vendor. -_EXT1 = ( - "ANGLE_instanced_arrays,EXT_blend_minmax,EXT_color_buffer_half_float,EXT_float_blend," - "EXT_frag_depth,EXT_shader_texture_lod,EXT_sRGB,EXT_texture_compression_bptc," - "EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_element_index_uint," - "OES_fbo_render_mipmap,OES_standard_derivatives,OES_texture_float,OES_texture_float_linear," - "OES_texture_half_float,OES_texture_half_float_linear,OES_vertex_array_object," - "WEBGL_color_buffer_float,WEBGL_compressed_texture_s3tc,WEBGL_compressed_texture_s3tc_srgb," - "WEBGL_debug_renderer_info,WEBGL_debug_shaders,WEBGL_depth_texture,WEBGL_draw_buffers," - "WEBGL_lose_context,WEBGL_provoking_vertex" -) -_EXT2 = ( - "EXT_color_buffer_float,EXT_float_blend,EXT_texture_compression_bptc," - "EXT_texture_compression_rgtc,EXT_texture_filter_anisotropic,OES_draw_buffers_indexed," - "OES_texture_float_linear,OVR_multiview2,WEBGL_compressed_texture_s3tc," - "WEBGL_compressed_texture_s3tc_srgb,WEBGL_debug_renderer_info,WEBGL_debug_shaders," - "WEBGL_lose_context,WEBGL_provoking_vertex" -) - - -# ── Real-Firefox GPU pool (2026-06-18, supersedes the 2-bucket sweep above) ─────────────── -# The personas are now sourced from `_fpforge/data/webgl_gpu_pool.json` — an OFFLINE extract -# of camoufox's real-Firefox WebGL telemetry DB (17 Windows GPUs with their REAL per-OS -# prevalence AND the full coherent WebGL fingerprint: renderer + vendor + extensions + -# ~100 getParameter values + shader-precision formats). prefs.py applies ALL of these, not -# just the renderer string. The linchpin A/B (2026-06-18) proved that the OLD "NVIDIA 0/10" -# verdict was an artifact of spoofing the renderer string over the host's REAL (Arc) params: -# FP Pro cross-checks renderer<->params, so a GTX 980 string over Arc params mismatched -# (~0.7-0.85). Injecting camoufox's REAL GTX 980 params makes it coherent (tml median 0.333, -# flags clean). So the params are NOT vendor-independent (the old assumption) and per-GPU -# real data is what unlocks the full real GPU mix — including NVIDIA (~47% of real FF-Win), -# which we no longer gate. -_ENABLED = True -_POOL_PATH = __import__("pathlib").Path(__file__).parent / "_fpforge" / "data" / "webgl_gpu_pool.json" -_GPU_POOL_CACHE: Optional[List[Dict]] = None - - -def _gpu_pool() -> List[Dict]: - """Lazy-load the Windows GPU pool (we always claim Windows). Each entry: - {key, renderer (input form), vendor, gpu_class (via classify_gpu), prefs (full - zoom.stealth.webgl.* override dict), weight (real per-OS prevalence)}.""" - global _GPU_POOL_CACHE - if _GPU_POOL_CACHE is not None: - return _GPU_POOL_CACHE - import json - from ._fpforge._sampler import classify_gpu # lazy import → no module cycle - raw = json.loads(_POOL_PATH.read_text(encoding="utf-8")) - pool: List[Dict] = [] - for e in raw.get("win", []): - prefs = e["prefs"] - rend_in = prefs["zoom.stealth.webgl.renderer"] - cls = classify_gpu({"renderer": rend_in, - "vendor": prefs.get("zoom.stealth.webgl.vendor", "")}) - pool.append({ - "key": e.get("renderer_out", rend_in)[:48], - "renderer": rend_in, - "vendor": prefs["zoom.stealth.webgl.vendor"], - "gpu_class": cls, - "prefs": prefs, - "weight": float(e["prob"]), - }) - _GPU_POOL_CACHE = pool - return pool - - -def select_persona(seed: int) -> Optional[Dict]: - """Deterministic, prevalence-weighted GPU persona for this seed — on EVERY host. - - Same seed -> same persona (fppro_consistency: identity stable per seed). Different seeds - spread across the REAL Windows GPU mix by prevalence. Returns the Windows-ANGLE persona on - Linux/Mac too: we must always look Windows, and the C++ WebGL override (SanitizeRenderer + - pref-driven params/extensions) is platform-independent, so the same Windows GPU is presented - on any host without consulting the real GL backend (no more Linux "Generic Renderer").""" - if not _ENABLED: - return None - pool = _gpu_pool() - if not pool: - return None - total = sum(p["weight"] for p in pool) or 1.0 - h = ((int(seed) * 2654435761) % 1_000_003) / 1_000_003.0 * total - cum = 0.0 - for p in pool: - cum += p["weight"] - if h < cum: - return p - return pool[-1] - - -def forced_gpu_class(seed: int) -> Optional[str]: - """The gpu_class the forge conditions the bundle on (== the selected GPU's class via - classify_gpu), so cores/screen/fonts stay coherent with the GPU we expose. Does NOT - affect FP Pro tampering_ml (proven) but matters for detectors that cross-check hardware - tier. None on Linux.""" - p = select_persona(seed) - return p["gpu_class"] if p else None - - -# ── Render-noise seed pool (canvas/WebGL gamma) ────────────────────────────── -# zoom.stealth.fpp.hw_seed drives the per-seed canvas2D + WebGL readPixels gamma -# LUT in C++. The render-image HASH it produces is the DOMINANT FP Pro tampering_ml -# driver (proven 2026-06-14: holding a fixed profile and varying ONLY hw_seed moved -# tml 0.25->0.75). The monotonic gamma preserves the GPU's render structure, so some -# hw_seeds yield a "suspicious" render hash. We therefore DECOUPLE the render-noise -# seed from the identity seed and pick from a calibrated pool of hw_seeds that score -# CLEAN even on the hardest attribute profile (sweep 1..30 vs the worst seed: these -# 14 all gave tml<=0.285). Diversity is preserved (14 distinct render hashes spread -# across the population — real GPUs cluster to few canvas hashes anyway); identity -# stays per-seed (the rest of the fingerprint differs). Same seed -> same render seed -# (fppro_consistency holds). -# CAVEAT: the render hash = f(host GPU render, gamma), so this pool is calibrated on -# the Intel-Arc host. On other GPUs the clean set may differ (host-independence open, -# same as the personas) — Option B (substitution = GPU-independent render hash) would -# remove that dependency. Validate per-host or move to B before trusting fleet-wide. -# RECALIBRATED 2026-06-18 for the real-Firefox GPU mix (incl NVIDIA, which is more -# consistency-sensitive than the old amd/arc personas). Swept hw_seed 0..30 on the hottest -# persona (NVIDIA GTX 980) through a residential exit: these 9 stayed well within the clean -# band with a wide margin to the rest. The old pool's picks scored dirty on NVIDIA (clean -# only on the retired amd/arc mix) → dropped. NVIDIA is the worst case, so these are clean on -# amd/intel too. hw_seed = the canvas/WebGL gamma render hash (the dominant consistency-score -# driver); host-calibrated. -# 2026-06-21: with WebGL Option B (zoom.stealth.webgl.substitute_pixels, ON in prefs.py) the WebGL -# render hash is hash(seed,idx) = HOST-INDEPENDENT, so this list NO LONGER needs per-host calibration -# — it only supplies per-session diversity. A 2026-06-21 attempt to re-calibrate it per-host FAILED -# cross-OS: hw_seed clean on Windows went dirty on the Linux GL backend (b008 0.034->0.839; Win-dirty -# {7,11,20,27} = Linux-clean and vice-versa; + identity×hw_seed interaction on Linux). That proved -# calibration can't work cross-host → substitution replaces it. Kept the original diverse 9-set. -CLEAN_RENDER_SEEDS = [0, 5, 6, 9, 11, 16, 19, 20, 28] - - -def render_noise_seed(seed: int) -> int: - """Deterministic clean render-noise seed for hw_seed (decoupled from identity). - - Maps the identity seed into CLEAN_RENDER_SEEDS so every session gets a calibrated - clean canvas/WebGL render hash while keeping per-user diversity. Stable per seed.""" - return CLEAN_RENDER_SEEDS[(int(seed) * 2654435761) % len(CLEAN_RENDER_SEEDS)] +"""Backward-compat shim — spostato in invisible_core._webgl_personas (alias completo).""" +import sys as _sys +from invisible_core import _webgl_personas as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/config.py b/src/invisible_playwright/config.py index 16e3a8a..f6d4b15 100644 --- a/src/invisible_playwright/config.py +++ b/src/invisible_playwright/config.py @@ -1,112 +1,4 @@ -"""Public helpers for building Firefox launch config without using ``InvisiblePlaywright``. - -Use these when you need to call ``playwright.firefox.launch()`` (or -``firefox.launch_persistent_context()``) directly with our patched binary -and stealth prefs, instead of using the ``InvisiblePlaywright`` context -manager. - -Typical caller is an external integration that owns its own browser -lifecycle (a Crawlee/Skyvern/changedetection-style fetcher, a Playwright -Server wrapper, a multi-language harness) and just wants the building -blocks:: - - from playwright.async_api import async_playwright - from invisible_playwright import ensure_binary, get_default_stealth_prefs - - async with async_playwright() as p: - browser = await p.firefox.launch( - executable_path=str(ensure_binary()), - firefox_user_prefs=get_default_stealth_prefs(seed=42), - ) - -For everyday Python usage the ``InvisiblePlaywright`` context manager is -still the recommended entry point; these helpers expose the same internals -without the lifecycle ownership. - -.. note:: - When calling ``firefox.launch()`` yourself, pass ``headless=False`` and - manage the display hiding (Xvfb on Linux, hidden desktop on Windows) - externally. Passing ``headless=True`` directly to Playwright puts - Firefox in true headless mode, which skips the real rendering pipeline - and breaks canvas / audio / WebGL fingerprint coherence. The - ``InvisiblePlaywright`` context manager does this translation - automatically; the public helpers leave it to the caller. -""" -from __future__ import annotations - -import secrets -from typing import Any, Dict, List, Optional, Union - -from ._fpforge import generate_profile -from ._webgl_personas import forced_gpu_class -from .prefs import translate_profile_to_prefs - - -def get_default_stealth_prefs( - seed: Optional[int] = None, - *, - pin: Optional[Dict[str, Any]] = None, - locale: str = "en-US", - timezone: str = "", - extra_prefs: Optional[Dict[str, Any]] = None, - humanize: Union[bool, float] = True, - virtual_display: bool = False, -) -> Dict[str, Any]: - """Build a complete ``firefox_user_prefs`` dict for ``firefox.launch()``. - - Same prefs that ``InvisiblePlaywright(seed=..., locale=..., timezone=..., - extra_prefs=..., humanize=...)`` would inject. Use this when you need to - drive ``playwright.firefox.launch()`` yourself. - - Args: - seed: Integer seed for the Bayesian fingerprint sampler. Same seed - produces the same fingerprint. ``None`` generates a fresh - random int31 (matches ``InvisiblePlaywright`` default). - pin: Optional dict forcing specific fingerprint fields while the - rest stays seed-derived. See ``docs/pinning.md``. - locale: BCP-47 tag (e.g. ``"en-US"``). Drives ``Accept-Language`` - and ``navigator.language``. - timezone: IANA timezone (e.g. ``"America/New_York"``). Empty means - use the host TZ. This pure pref builder does NOT resolve - ``"auto"`` (that needs the proxy + a network lookup at launch - time) — pass a concrete zone here, or use ``InvisiblePlaywright`` - / ``resolve_session_timezone(timezone, proxy)`` for ``"auto"``. - extra_prefs: Optional dict overlaid LAST onto the generated prefs. - humanize: When True (default), every mouse move is expanded into - a Bezier trajectory by the patched Juggler. A float caps the - motion in seconds. False disables the behavior. - virtual_display: When True on Windows, apply GPU-disabling prefs - to prevent GPU process crashes on virtual desktops without - D3D11 backend. - - Returns: - Dict ready to pass as ``firefox_user_prefs=`` to - ``playwright.firefox.launch()`` or ``launch_persistent_context()``. - """ - resolved_seed = int(seed) if seed is not None else secrets.randbits(31) - profile = generate_profile(resolved_seed, pin=pin, fixed_gpu_class=forced_gpu_class(resolved_seed)) - prefs = translate_profile_to_prefs( - profile, - locale=locale, - timezone=timezone, - extra_prefs=extra_prefs, - virtual_display=virtual_display, - ) - # stealthfox.* is the namespace the binary's Juggler reads (see launcher.py note). - prefs["stealthfox.humanize"] = bool(humanize) - if humanize: - max_seconds = float(humanize) if not isinstance(humanize, bool) else 1.5 - prefs["stealthfox.humanize.maxTime"] = str(max_seconds) - return prefs - - -def get_default_args() -> List[str]: - """Return the default Firefox CLI args to pass via ``args=``. - - Currently empty list, since all our stealth configuration is delivered - via ``firefox_user_prefs`` rather than CLI flags. Exposed for parity - with the ``cloakbrowser.config.get_default_stealth_args`` pattern and - to future-proof integrations that already wire ``args=[*existing, - *get_default_args()]``. - """ - return [] +"""Backward-compat shim — spostato in invisible_core.config (alias completo).""" +import sys as _sys +from invisible_core import config as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/constants.py b/src/invisible_playwright/constants.py index ea588eb..2d5b8e7 100644 --- a/src/invisible_playwright/constants.py +++ b/src/invisible_playwright/constants.py @@ -1,80 +1,4 @@ -"""Compile-time constants that pin the wrapper to a specific Firefox build. - -BINARY_VERSION is bumped every time new Firefox patches are released. It is -deliberately decoupled from the Python package version so that pure-Python -bugfixes don't force a multi-hour Firefox rebuild. -""" -from __future__ import annotations - -# Bump this when a new patched Firefox build is released on GitHub. -BINARY_VERSION: str = "firefox-13" - -# Releases known to be broken — ensure_binary() refuses them with a clear error -# instead of handing the user an unusable binary. firefox-8 was packaged without -# the juggler automation layer, so Playwright cannot drive it (TargetClosedError); -# fixed in firefox-9 (package-manifest.in now ships chrome/juggler). A cached -# firefox-8 from before the bump would otherwise keep being used silently. -BROKEN_VERSIONS: frozenset[str] = frozenset({"firefox-8"}) - -# Underlying Firefox version (for display only; does not drive downloads). -FIREFOX_UPSTREAM_VERSION: str = "150.0.1" - -# The base filename prefix used inside archives. -BINARY_BASENAME: str = f"firefox-{FIREFOX_UPSTREAM_VERSION}-stealth" - - -def ARCHIVE_NAME(platform_key: str, machine: str) -> str: - """Return the platform-specific archive filename. - - platform_key: sys.platform ("win32", "linux", "darwin") - machine: platform.machine() ("AMD64", "x86_64", "arm64", "aarch64", ...) - """ - pk = platform_key.lower() - m = machine.lower() - if m in {"amd64", "x86_64"}: - arch = "x86_64" - elif m in {"arm64", "aarch64"}: - arch = "arm64" - else: - raise NotImplementedError(f"unsupported arch: {machine}") - - if pk == "win32": - return f"{BINARY_BASENAME}-win-{arch}.zip" - if pk == "linux": - return f"{BINARY_BASENAME}-linux-{arch}.tar.gz" - if pk == "darwin": - return f"{BINARY_BASENAME}-macos-{arch}.tar.gz" - raise NotImplementedError(f"unsupported platform: {platform_key}") - - -# Binary entry point relative path inside the extracted archive root. -# macOS ships the .app bundle (renamed to a stable "Firefox.app" by release.yml); -# the wrapper execs the inner binary directly, which sidesteps Gatekeeper. -BINARY_ENTRY_REL = { - "win32": "firefox.exe", - "linux": "firefox", - "darwin": "Firefox.app/Contents/MacOS/firefox", -} - -# GitHub release URL template. The "TODO" owner is resolved at publication time. -RELEASE_URL_TEMPLATE = ( - "https://github.com/feder-cr/invisible_playwright/releases/download/{tag}/{asset}" -) - -# ───────────────────────────────────────────────────────────────────────── -# GeoIP database (timezone="auto" → resolve IANA zone from proxy egress IP) -# ───────────────────────────────────────────────────────────────────────── -# daijro/geoip-all-in-one merges IP2Location LITE + GeoLite2 + DB-IP into a -# single mmdb (country ISO + coordinates + IANA timezone via tzfpy), rebuilt -# weekly. GPL-3.0, so we DOWNLOAD it at runtime into the user cache (like the -# Firefox binary) rather than bundling it into this MIT package. The `-all` -# variant covers IPv4+IPv6. download.py NEVER pins a tag (daijro prunes old -# releases, so a pinned tag eventually 404s): on every launch it resolves the -# CURRENT latest tag from the `releases/latest/download` permalink (no GitHub -# API, no rate limit) and pulls it if newer than the cache. -GEOIP_REPO: str = "daijro/geoip-all-in-one" -GEOIP_ASSET: str = "geoip-aio-all.mmdb.zip" -GEOIP_MMDB_NAME: str = "geoip-aio-all.mmdb" -GEOIP_RELEASE_URL_TEMPLATE: str = ( - "https://github.com/daijro/geoip-all-in-one/releases/download/{tag}/{asset}" -) +"""Backward-compat shim — spostato in invisible_core.constants (alias completo).""" +import sys as _sys +from invisible_core import constants as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/data/font-map.json b/src/invisible_playwright/data/font-map.json deleted file mode 100644 index 9c46b95..0000000 --- a/src/invisible_playwright/data/font-map.json +++ /dev/null @@ -1,1846 +0,0 @@ -{ - "win11": { - "core": [ - "Arial", - "Bahnschrift", - "Calibri", - "Cambria", - "Cambria Math", - "Candara", - "Comic Sans MS", - "Consolas", - "Constantia", - "Corbel", - "Courier New", - "Ebrima", - "Franklin Gothic Medium", - "Gabriola", - "Gadugi", - "Georgia", - "Impact", - "Ink Free", - "Javanese Text", - "Leelawadee UI", - "MS UI Gothic", - "MV Boli", - "Marlett", - "Microsoft Himalaya", - "Microsoft JhengHei UI", - "Microsoft New Tai Lue", - "Microsoft PhagsPa", - "Microsoft Sans Serif", - "Microsoft Tai Le", - "Microsoft YaHei UI", - "Microsoft Yi Baiti", - "Mongolian Baiti", - "Myanmar Text", - "Palatino Linotype", - "Segoe Fluent Icons", - "Segoe MDL2 Assets", - "Segoe Print", - "Segoe Script", - "Segoe UI", - "Segoe UI Emoji", - "Segoe UI Historic", - "Segoe UI Symbol", - "Segoe UI Variable", - "SimSun-ExtB", - "Sitka", - "Sylfaen", - "Symbol", - "Tahoma", - "Times New Roman", - "Trebuchet MS", - "Verdana", - "Webdings", - "Wingdings", - "Yu Gothic UI", - "宋体", - "微軟正黑體", - "微软雅黑", - "新宋体", - "新細明體-ExtB", - "游ゴシック", - "細明體-ExtB", - "細明體_HKSCS-ExtB", - "細明體_MSCS-ExtB", - "맑은 고딕", - "MS ゴシック", - "MS Pゴシック" - ], - "am": [ - "Nyala" - ], - "am-ET": [ - "Nyala" - ], - "ar": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-AE": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-BH": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-DJ": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-DZ": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-EG": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-ER": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-IL": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-IQ": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-JO": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-KM": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-KW": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-LB": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-LY": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-MA": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-MR": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-OM": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-PS": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-QA": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-SA": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-SD": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-SO": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-SS": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-SY": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-TD": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-TN": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ar-YE": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "arc-Syrc": [ - "Estrangelo Edessa" - ], - "arz-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "as": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "as-IN": [ - "Shonar Bangla", - "Vrinda" - ], - "bh-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "bn": [ - "Shonar Bangla", - "Vrinda" - ], - "bn-BD": [ - "Shonar Bangla", - "Vrinda" - ], - "bn-IN": [ - "Shonar Bangla", - "Vrinda" - ], - "bpy-Beng": [ - "Shonar Bangla", - "Vrinda" - ], - "brx": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "brx-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "brx-IN": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "byn": [ - "Nyala" - ], - "byn-ER": [ - "Nyala" - ], - "byn-Ethi": [ - "Nyala" - ], - "chr-Cher": [ - "Plantagenet Cherokee" - ], - "chr-Cher-US": [ - "Plantagenet Cherokee" - ], - "ckb-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "cmn-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "cmn-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "eu": [ - "Arial Nova", - "Georgia Pro", - "Gill Sans Nova", - "Neue Haas Grotesk Text Pro", - "Rockwell Nova", - "Verdana Pro" - ], - "fa": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "fa-AF": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "fa-IR": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "gan-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "glk-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "gu": [ - "Shruti" - ], - "gu-IN": [ - "Shruti" - ], - "ha-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "hak-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "hak-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "he": [ - "Aharoni", - "David", - "FrankRuehl", - "Gisha", - "Levenim MT", - "Miriam", - "Miriam Fixed", - "Narkisim", - "Rod" - ], - "he-IL": [ - "Aharoni", - "David", - "FrankRuehl", - "Gisha", - "Levenim MT", - "Miriam", - "Miriam Fixed", - "Narkisim", - "Rod" - ], - "hi": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "hi-IN": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "iu-Cans": [ - "Euphemia" - ], - "iu-Cans-CA": [ - "Euphemia" - ], - "ja": [ - "BIZ UDPゴシック", - "BIZ UDP明朝", - "BIZ UDゴシック", - "BIZ UD明朝", - "Meiryo UI", - "UD デジタル 教科書体 N", - "UD デジタル 教科書体 NK", - "UD デジタル 教科書体 NP", - "メイリオ", - "游明朝", - "MS 明朝", - "MS P明朝" - ], - "ja-JP": [ - "BIZ UDPゴシック", - "BIZ UDP明朝", - "BIZ UDゴシック", - "BIZ UD明朝", - "Meiryo UI", - "UD デジタル 教科書体 N", - "UD デジタル 教科書体 NK", - "UD デジタル 教科書体 NP", - "メイリオ", - "游明朝", - "MS 明朝", - "MS P明朝" - ], - "km": [ - "DaunPenh", - "Khmer UI", - "MoolBoran" - ], - "km-KH": [ - "DaunPenh", - "Khmer UI", - "MoolBoran" - ], - "kn": [ - "Tunga" - ], - "kn-IN": [ - "Tunga" - ], - "ko": [ - "굴림", - "굴림체", - "궁서", - "궁서체", - "돋움", - "돋움체", - "바탕", - "바탕체" - ], - "ko-KR": [ - "굴림", - "굴림체", - "궁서", - "궁서체", - "돋움", - "돋움체", - "바탕", - "바탕체" - ], - "ks-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ks-Arab-IN": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ks-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "ku-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ku-Arab-IQ": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "lo": [ - "DokChampa", - "Lao UI" - ], - "lo-LA": [ - "DokChampa", - "Lao UI" - ], - "lzh-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "mai": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "ml": [ - "Kartika" - ], - "ml-IN": [ - "Kartika" - ], - "mr": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "mr-IN": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "mzn-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ne": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "ne-IN": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "ne-NP": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "new-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "or": [ - "Kalinga" - ], - "or-IN": [ - "Kalinga" - ], - "pa": [ - "Raavi" - ], - "pa-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "pa-Arab-PK": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "pa-Guru": [ - "Raavi" - ], - "pa-IN": [ - "Raavi" - ], - "pi-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "pnb-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "prs": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "prs-AF": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "prs-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ps": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ps-AF": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "sa": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "sa-Deva": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "sa-IN": [ - "Aparajita", - "Kokila", - "Mangal", - "Sanskrit Text", - "Utsaah" - ], - "sd-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "sd-Arab-PK": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "si": [ - "Iskoola Pota" - ], - "si-LK": [ - "Iskoola Pota" - ], - "syr": [ - "Estrangelo Edessa" - ], - "syr-SY": [ - "Estrangelo Edessa" - ], - "syr-Syrc": [ - "Estrangelo Edessa" - ], - "ta": [ - "Latha", - "Vijaya" - ], - "ta-IN": [ - "Latha", - "Vijaya" - ], - "ta-LK": [ - "Latha", - "Vijaya" - ], - "ta-MY": [ - "Latha", - "Vijaya" - ], - "ta-SG": [ - "Latha", - "Vijaya" - ], - "te": [ - "Gautami", - "Vani" - ], - "te-IN": [ - "Gautami", - "Vani" - ], - "th": [ - "Angsana New", - "AngsanaUPC", - "Browallia New", - "BrowalliaUPC", - "Cordia New", - "CordiaUPC", - "DilleniaUPC", - "EucrosiaUPC", - "FreesiaUPC", - "IrisUPC", - "JasmineUPC", - "KodchiangUPC", - "Leelawadee", - "LilyUPC" - ], - "th-TH": [ - "Angsana New", - "AngsanaUPC", - "Browallia New", - "BrowalliaUPC", - "Cordia New", - "CordiaUPC", - "DilleniaUPC", - "EucrosiaUPC", - "FreesiaUPC", - "IrisUPC", - "JasmineUPC", - "KodchiangUPC", - "Leelawadee", - "LilyUPC" - ], - "ti": [ - "Nyala" - ], - "ti-ER": [ - "Nyala" - ], - "ti-ET": [ - "Nyala" - ], - "tig": [ - "Nyala" - ], - "tig-ER": [ - "Nyala" - ], - "tig-Ethi": [ - "Nyala" - ], - "tk-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ug": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ug-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ug-CN": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ur": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ur-IN": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ur-PK": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "uz-Arab": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "uz-Arab-AF": [ - "Aldhabi", - "Andalus", - "Arabic Typesetting", - "Microsoft Uighur", - "Sakkal Majalla", - "Simplified Arabic", - "Simplified Arabic Fixed", - "Traditional Arabic", - "Urdu Typesetting" - ], - "ve-Ethi": [ - "Nyala" - ], - "wal": [ - "Nyala" - ], - "wal-ET": [ - "Nyala" - ], - "wal-Ethi": [ - "Nyala" - ], - "wuu-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "yi": [ - "Aharoni", - "David", - "FrankRuehl", - "Gisha", - "Levenim MT", - "Miriam", - "Miriam Fixed", - "Narkisim", - "Rod" - ], - "yue-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-CN": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-HK": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-MO": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-SG": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-TW": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-gan-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-hak-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-hak-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-lzh-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ], - "zh-wuu-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-yue-Hans": [ - "仿宋", - "楷体", - "等线", - "黑体" - ], - "zh-yue-Hant": [ - "DFKai-SB", - "新細明體", - "細明體", - "細明體_HKSCS", - "細明體_MSCS" - ] - }, - "ubuntu": { - "core": [ - "C059", - "D050000L", - "DejaVu Sans", - "DejaVu Sans Mono", - "DejaVu Serif", - "Droid Sans Fallback", - "FreeMono", - "FreeSans", - "FreeSerif", - "Liberation Mono", - "Liberation Sans", - "Liberation Sans Narrow", - "Liberation Serif", - "Nimbus Mono PS", - "Nimbus Roman", - "Nimbus Sans", - "Nimbus Sans Narrow", - "Noto Color Emoji", - "Noto Kufi Arabic", - "Noto Looped Lao", - "Noto Looped Thai", - "Noto Mono", - "Noto Music", - "Noto Naskh Arabic", - "Noto Nastaliq Urdu", - "Noto Rashi Hebrew", - "Noto Sans", - "Noto Sans Adlam", - "Noto Sans Adlam Unjoined", - "Noto Sans Anatolian Hieroglyphs", - "Noto Sans Arabic", - "Noto Sans Armenian", - "Noto Sans Avestan", - "Noto Sans Balinese", - "Noto Sans Bamum", - "Noto Sans Bassa Vah", - "Noto Sans Batak", - "Noto Sans Bengali", - "Noto Sans Bhaiksuki", - "Noto Sans Brahmi", - "Noto Sans Buginese", - "Noto Sans Buhid", - "Noto Sans CJK HK", - "Noto Sans CJK JP", - "Noto Sans CJK KR", - "Noto Sans CJK SC", - "Noto Sans CJK TC", - "Noto Sans Canadian Aboriginal", - "Noto Sans Carian", - "Noto Sans Caucasian Albanian", - "Noto Sans Chakma", - "Noto Sans Cham", - "Noto Sans Cherokee", - "Noto Sans Coptic", - "Noto Sans Cuneiform", - "Noto Sans Cypriot", - "Noto Sans Deseret", - "Noto Sans Devanagari", - "Noto Sans Display", - "Noto Sans Duployan", - "Noto Sans Egyptian Hieroglyphs", - "Noto Sans Elbasan", - "Noto Sans Elymaic", - "Noto Sans Ethiopic", - "Noto Sans Georgian", - "Noto Sans Glagolitic", - "Noto Sans Gothic", - "Noto Sans Grantha", - "Noto Sans Gujarati", - "Noto Sans Gunjala Gondi", - "Noto Sans Gurmukhi", - "Noto Sans Hanifi Rohingya", - "Noto Sans Hanunoo", - "Noto Sans Hatran", - "Noto Sans Hebrew", - "Noto Sans Imperial Aramaic", - "Noto Sans Indic Siyaq Numbers", - "Noto Sans Inscriptional Pahlavi", - "Noto Sans Inscriptional Parthian", - "Noto Sans Javanese", - "Noto Sans Kaithi", - "Noto Sans Kannada", - "Noto Sans Kayah Li", - "Noto Sans Kharoshthi", - "Noto Sans Khmer", - "Noto Sans Khojki", - "Noto Sans Khudawadi", - "Noto Sans Lao", - "Noto Sans Lepcha", - "Noto Sans Limbu", - "Noto Sans Linear A", - "Noto Sans Linear B", - "Noto Sans Lisu", - "Noto Sans Lycian", - "Noto Sans Lydian", - "Noto Sans Mahajani", - "Noto Sans Malayalam", - "Noto Sans Mandaic", - "Noto Sans Manichaean", - "Noto Sans Marchen", - "Noto Sans Masaram Gondi", - "Noto Sans Math", - "Noto Sans Mayan Numerals", - "Noto Sans Medefaidrin", - "Noto Sans Meetei Mayek", - "Noto Sans Mende Kikakui", - "Noto Sans Meroitic", - "Noto Sans Miao", - "Noto Sans Modi", - "Noto Sans Mongolian", - "Noto Sans Mono", - "Noto Sans Mono CJK HK", - "Noto Sans Mono CJK JP", - "Noto Sans Mono CJK KR", - "Noto Sans Mono CJK SC", - "Noto Sans Mono CJK TC", - "Noto Sans Mro", - "Noto Sans Multani", - "Noto Sans Myanmar", - "Noto Sans NKo", - "Noto Sans Nabataean", - "Noto Sans New Tai Lue", - "Noto Sans Newa", - "Noto Sans Nushu", - "Noto Sans Ogham", - "Noto Sans Ol Chiki", - "Noto Sans Old Hungarian", - "Noto Sans Old Italic", - "Noto Sans Old North Arabian", - "Noto Sans Old Permic", - "Noto Sans Old Persian", - "Noto Sans Old Sogdian", - "Noto Sans Old South Arabian", - "Noto Sans Old Turkic", - "Noto Sans Oriya", - "Noto Sans Osage", - "Noto Sans Osmanya", - "Noto Sans Pahawh Hmong", - "Noto Sans Palmyrene", - "Noto Sans Pau Cin Hau", - "Noto Sans PhagsPa", - "Noto Sans Phoenician", - "Noto Sans Psalter Pahlavi", - "Noto Sans Rejang", - "Noto Sans Runic", - "Noto Sans Samaritan", - "Noto Sans Saurashtra", - "Noto Sans Sharada", - "Noto Sans Shavian", - "Noto Sans Siddham", - "Noto Sans SignWriting", - "Noto Sans Sinhala", - "Noto Sans Sogdian", - "Noto Sans Sora Sompeng", - "Noto Sans Soyombo", - "Noto Sans Sundanese", - "Noto Sans Syloti Nagri", - "Noto Sans Symbols", - "Noto Sans Symbols2", - "Noto Sans Syriac", - "Noto Sans Tagalog", - "Noto Sans Tagbanwa", - "Noto Sans Tai Le", - "Noto Sans Tai Tham", - "Noto Sans Tai Viet", - "Noto Sans Takri", - "Noto Sans Tamil", - "Noto Sans Tamil Supplement", - "Noto Sans Telugu", - "Noto Sans Thaana", - "Noto Sans Thai", - "Noto Sans Tifinagh", - "Noto Sans Tifinagh APT", - "Noto Sans Tifinagh Adrar", - "Noto Sans Tifinagh Agraw Imazighen", - "Noto Sans Tifinagh Ahaggar", - "Noto Sans Tifinagh Air", - "Noto Sans Tifinagh Azawagh", - "Noto Sans Tifinagh Ghat", - "Noto Sans Tifinagh Hawad", - "Noto Sans Tifinagh Rhissa Ixa", - "Noto Sans Tifinagh SIL", - "Noto Sans Tifinagh Tawellemmet", - "Noto Sans Tirhuta", - "Noto Sans Ugaritic", - "Noto Sans Vai", - "Noto Sans Wancho", - "Noto Sans Warang Citi", - "Noto Sans Yi", - "Noto Sans Zanabazar Square", - "Noto Serif", - "Noto Serif Ahom", - "Noto Serif Armenian", - "Noto Serif Balinese", - "Noto Serif Bengali", - "Noto Serif CJK HK", - "Noto Serif CJK JP", - "Noto Serif CJK KR", - "Noto Serif CJK SC", - "Noto Serif CJK TC", - "Noto Serif Devanagari", - "Noto Serif Display", - "Noto Serif Dogra", - "Noto Serif Ethiopic", - "Noto Serif Georgian", - "Noto Serif Grantha", - "Noto Serif Gujarati", - "Noto Serif Gurmukhi", - "Noto Serif Hebrew", - "Noto Serif Hmong Nyiakeng", - "Noto Serif Kannada", - "Noto Serif Khmer", - "Noto Serif Khojki", - "Noto Serif Lao", - "Noto Serif Malayalam", - "Noto Serif Myanmar", - "Noto Serif Sinhala", - "Noto Serif Tamil", - "Noto Serif Tamil Slanted", - "Noto Serif Tangut", - "Noto Serif Telugu", - "Noto Serif Thai", - "Noto Serif Tibetan", - "Noto Serif Yezidi", - "Noto Traditional Nushu", - "OpenSymbol", - "P052", - "Standard Symbols PS", - "URW Bookman", - "URW Gothic", - "Ubuntu", - "Ubuntu Mono", - "Ubuntu Sans", - "Ubuntu Sans Mono", - "Z003" - ], - "am": [ - "Abyssinica SIL" - ], - "ar": [ - "KacstArt", - "KacstBook", - "KacstDecorative", - "KacstDigital", - "KacstFarsi", - "KacstLetter", - "KacstNaskh", - "KacstOffice", - "KacstOne", - "KacstPen", - "KacstPoster", - "KacstQurn", - "KacstScreen", - "KacstTitle", - "KacstTitleL", - "mry_KacstQurn" - ], - "as": [ - "Lohit Assamese" - ], - "bn": [ - "Jamrul", - "Likhan", - "Lohit Bengali", - "Mitra ", - "Mukti", - "অনি" - ], - "gu": [ - "Kalapi", - "Lohit Gujarati", - "Rasa", - "Rekha", - "Samyak Gujarati", - "Samyak Malayalam", - "Samyak Tamil", - "Yrsa", - "aakar", - "padmmaa" - ], - "hi": [ - "Annapurna SIL", - "Chandas", - "Lohit Devanagari", - "Nakula", - "Pagul", - "Sahadeva", - "Samanata", - "Samyak Devanagari", - "Sarai", - "गार्गी", - "नालिमाटी" - ], - "km": [ - "Khmer OS", - "Khmer OS Battambang", - "Khmer OS Bokor", - "Khmer OS Content", - "Khmer OS Fasthand", - "Khmer OS Freehand", - "Khmer OS Metal Chrieng", - "Khmer OS Muol", - "Khmer OS Muol Light", - "Khmer OS Muol Pali", - "Khmer OS Siemreap", - "Khmer OS System" - ], - "kn": [ - "Gubbi", - "Lohit Kannada", - "Navilu" - ], - "lo": [ - "Phetsarath OT" - ], - "ml": [ - "AnjaliOldLipi", - "Chilanka", - "Dyuthi", - "Gayathri", - "Karumbi", - "Keraleeyam", - "Lohit Malayalam", - "Manjari", - "Meera", - "Rachana", - "RaghuMalayalamSans", - "Samyak Gujarati", - "Samyak Malayalam", - "Samyak Tamil", - "Suruma", - "Uroob" - ], - "my": [ - "Padauk", - "Padauk Book" - ], - "ne": [ - "Annapurna SIL" - ], - "or": [ - "Lohit Odia", - "ori1Uni" - ], - "pa": [ - "Lohit Gurmukhi", - "Saab" - ], - "si": [ - "LKLUG" - ], - "ta": [ - "Lohit Tamil", - "Lohit Tamil Classical", - "Samyak Gujarati", - "Samyak Malayalam", - "Samyak Tamil" - ], - "te": [ - "Dhurjati", - "Gidugu", - "Gurajada", - "LakkiReddy", - "Lohit Telugu", - "Mallanna", - "Mandali", - "NATS", - "NTR", - "Peddana", - "Ponnala", - "Pothana2000", - "Potti Sreeramulu", - "Ramabhadra", - "Ramaraja", - "RaviPrakash", - "Sree Krushnadevaraya", - "Suranna", - "Suravaram", - "Syamala Ramana", - "TenaliRamakrishna", - "Timmana", - "Vemana2000" - ], - "th": [ - "Garuda", - "Kinnari", - "Laksaman", - "Loma", - "Norasi", - "Purisa", - "Sawasdee", - "Tlwg Mono", - "Tlwg Typewriter", - "Tlwg Typist", - "Tlwg Typo", - "Umpush", - "Waree" - ] - }, - "extras": { - "core": [ - "Abadi MT Condensed Light", - "Adobe Caslon Pro", - "Adobe Garamond Pro", - "Agency FB", - "Aharoni", - "Algerian", - "Angsana New", - "AngsanaUPC", - "Arial MT", - "Baskerville Old Face", - "Bauhaus 93", - "Bell MT", - "Berlin Sans FB", - "Bernard MT Condensed", - "Bitstream Charter", - "Bitstream Vera Sans Mono", - "Blackadder ITC", - "Bodoni MT", - "Bodoni MT Poster Compressed", - "Book Antiqua", - "Bookman Old Style", - "Bookshelf Symbol 7", - "Bradley Hand ITC", - "Britannic Bold", - "Broadway", - "Browallia New", - "BrowalliaUPC", - "Californian FB", - "Calisto MT", - "Castellar", - "Centaur", - "Century", - "Century Gothic", - "Century Schoolbook", - "Chiller", - "Cochin", - "Colonna MT", - "Cooper Black", - "Copperplate", - "Copperplate Gothic", - "Copperplate Gothic Bold", - "Copperplate Gothic Light", - "Cordia New", - "CordiaUPC", - "Courier", - "Curlz MT", - "David", - "Edwardian Script ITC", - "Elephant", - "Engravers MT", - "EngraversGothic BT", - "Eras Bold ITC", - "Eras Demi ITC", - "Eras Light ITC", - "Eras Medium ITC", - "EucrosiaUPC", - "Eurostile", - "Felix Titling", - "Footlight MT Light", - "Forte", - "Forum", - "Franklin Gothic", - "FreesiaUPC", - "Freestyle Script", - "French Script MT", - "Futura", - "Futura Condensed", - "Geo", - "Gigi", - "Gill Sans", - "Gill Sans MT", - "Gill Sans MT Condensed", - "Gill Sans MT Ext Condensed Bold", - "Gill Sans Ultra", - "Gill Sans Ultra Bold", - "Gill Sans Ultra Bold Condensed", - "Gloucester MT Extra Condensed", - "Goudy Old Style", - "Goudy Stout", - "Graduate", - "Haettenschweiler", - "Harlow Solid Italic", - "Harrington", - "Helvetica", - "Helvetica Light", - "High Tower Text", - "Hoefler Text", - "Imprint MT Shadow", - "Informal Roman", - "IrisUPC", - "Japan", - "JasmineUPC", - "Jokerman", - "Juice ITC", - "Kaufmann BT", - "KodchiangUPC", - "Kristen ITC", - "Kunstler Script", - "Levenim MT", - "LilyUPC", - "Lucida Bright", - "Lucida Console", - "Lucida Fax", - "Lucida Sans", - "Lucida Sans Typewriter", - "Lucida Sans Unicode", - "MS Outlook", - "MS Reference Sans Serif", - "MS Reference Specialty", - "MT Extra", - "Maiandra GD", - "Matura MT Script Capitals", - "Metal", - "Minion Pro", - "Mistral", - "Modern No. 20", - "Monotype Corsiva", - "Myriad Pro", - "Niagara Engraved", - "Niagara Solid", - "OCR A Extended", - "Old English Text MT", - "Onyx", - "Optima", - "Palace Script MT", - "Parchment", - "Perpetua", - "Playbill", - "Poor Richard", - "Pristina", - "Rage Italic", - "Ravie", - "Rockwell Condensed", - "Rockwell Extra", - "Rockwell Extra Bold", - "Script MT", - "Script MT Bold", - "Segoe Script", - "Segoe UI", - "Showcard Gothic", - "Simplified Arabic", - "Sindbad", - "Skia", - "Snap ITC", - "Stencil", - "Tempus Sans ITC", - "Times", - "Times New Roman", - "Traditional Arabic", - "Trajan Pro", - "Tw Cen MT", - "Tw Cen MT Condensed", - "Tw Cen MT Condensed Extra Bold", - "TypoUpright BT", - "Viner Hand ITC", - "Vladimir Script", - "Wide Latin" - ] - } -} \ No newline at end of file diff --git a/src/invisible_playwright/download.py b/src/invisible_playwright/download.py index 4e07b8f..a596c95 100644 --- a/src/invisible_playwright/download.py +++ b/src/invisible_playwright/download.py @@ -1,343 +1,4 @@ -"""Download and cache the patched Firefox binary from GitHub Releases.""" -from __future__ import annotations - -import hashlib -import os -import platform -import re -import shutil -import subprocess -import sys -import tarfile -import tempfile -import time -import zipfile -from pathlib import Path - -import platformdirs -import requests - -from .constants import ( - ARCHIVE_NAME, - BINARY_ENTRY_REL, - BINARY_VERSION, - BROKEN_VERSIONS, - GEOIP_ASSET, - GEOIP_MMDB_NAME, - GEOIP_REPO, - GEOIP_RELEASE_URL_TEMPLATE, - RELEASE_URL_TEMPLATE, -) - - -def _github_token() -> str | None: - return os.environ.get("STEALTHFOX_GITHUB_TOKEN") or os.environ.get("GITHUB_TOKEN") - - -def _parse_owner_repo(template: str) -> tuple[str, str]: - """Extract (owner, repo) from RELEASE_URL_TEMPLATE.""" - m = re.match(r"https://github\.com/([^/]+)/([^/]+)/releases/", template) - if not m: - raise RuntimeError(f"cannot parse owner/repo from {template!r}") - return m.group(1), m.group(2) - - -def cache_root() -> Path: - """Directory where all cached binaries live.""" - return Path(platformdirs.user_cache_dir("invisible-playwright")) - - -def cache_dir_for_version(version: str = BINARY_VERSION) -> Path: - return cache_root() / version - - -def _resolve_asset_url(tag: str, asset_name: str) -> str: - """Return a downloadable URL for the asset. - - For private repos the direct `releases/download//` URL returns - 404 even with a token, so we resolve via the API: list assets for the - release tag, find the one matching `asset_name`, and use its API URL with - `Accept: application/octet-stream` (which 302-redirects to a signed URL). - For public repos the direct URL still works without a token. - """ - token = _github_token() - if not token: - return RELEASE_URL_TEMPLATE.format(tag=tag, asset=asset_name) - owner, repo = _parse_owner_repo(RELEASE_URL_TEMPLATE) - api = f"https://api.github.com/repos/{owner}/{repo}/releases/tags/{tag}" - r = requests.get(api, headers={"Authorization": f"token {token}"}, timeout=30) - r.raise_for_status() - for a in r.json().get("assets", []): - if a.get("name") == asset_name: - return a["url"] - raise RuntimeError(f"asset {asset_name!r} not found in release {tag!r}") - - -def _download_file(url: str, dst: Path, chunk_size: int = 1 << 16) -> None: - dst.parent.mkdir(parents=True, exist_ok=True) - headers: dict[str, str] = {} - token = _github_token() - if token and url.startswith("https://api.github.com/"): - headers["Authorization"] = f"token {token}" - headers["Accept"] = "application/octet-stream" - with requests.get(url, stream=True, timeout=60, headers=headers) as r: - r.raise_for_status() - with open(dst, "wb") as f: - for chunk in r.iter_content(chunk_size): - if chunk: - f.write(chunk) - - -def _sha256_file(path: Path) -> str: - h = hashlib.sha256() - with open(path, "rb") as f: - for chunk in iter(lambda: f.read(1 << 16), b""): - h.update(chunk) - return h.hexdigest() - - -def _parse_checksums(text: str) -> dict[str, str]: - out: dict[str, str] = {} - for line in text.splitlines(): - line = line.strip() - if not line or line.startswith("#"): - continue - parts = line.split() - if len(parts) >= 2: - # sha256sum uses ' *' or ' ' prefix for binary vs text mode - key = parts[-1].lstrip("*") - out[key] = parts[0] - return out - - -def _extract(archive: Path, dst: Path) -> None: - dst.mkdir(parents=True, exist_ok=True) - if archive.suffix == ".zip": - with zipfile.ZipFile(archive) as zf: - zf.extractall(dst) - elif archive.name.endswith(".tar.gz") or archive.suffix in {".tgz", ".gz"}: - with tarfile.open(archive, "r:gz") as tf: - tf.extractall(dst) - else: - raise RuntimeError(f"unknown archive format: {archive}") - - -def _post_extract_darwin(app_root: Path, entry: Path) -> None: - """Make an ad-hoc-signed .app launchable on macOS. - - The .app is downloaded via requests (no Finder quarantine attached), but we - strip com.apple.quarantine defensively and ensure the inner binary is - executable. We exec the inner binary directly (not via LaunchServices), so - Gatekeeper's first-launch prompt does not apply; the ad-hoc signature - (applied in release.yml) is what lets the arm64 Mach-O run at all. - """ - app = app_root - # walk up to the .app bundle dir if entry points inside it - for parent in entry.parents: - if parent.name.endswith(".app"): - app = parent - break - try: - subprocess.run(["xattr", "-dr", "com.apple.quarantine", str(app)], check=False) - except FileNotFoundError: - pass - try: - entry.chmod(0o755) - except OSError: - pass - - -def ensure_binary(version: str = BINARY_VERSION) -> Path: - """Return a path to a runnable Firefox executable. Download if needed.""" - if version in BROKEN_VERSIONS: - raise RuntimeError( - f"{version} is a known-broken release (the juggler automation layer is " - f"missing, so Playwright cannot drive it). Upgrade invisible_playwright " - f"(current BINARY_VERSION={BINARY_VERSION}) or pass a newer version." - ) - plat = sys.platform - mach = platform.machine() - asset = ARCHIVE_NAME(plat, mach) - entry_rel = BINARY_ENTRY_REL.get(plat) - if entry_rel is None: - raise NotImplementedError(f"no binary entry for platform {plat}") - - version_dir = cache_dir_for_version(version) - entry = version_dir / entry_rel - if entry.exists(): - return entry - - url_archive = _resolve_asset_url(version, asset) - url_sums = _resolve_asset_url(version, "checksums.txt") - - with tempfile.TemporaryDirectory() as td: - tmp = Path(td) - archive_path = tmp / asset - _download_file(url_archive, archive_path) - sums_path = tmp / "checksums.txt" - _download_file(url_sums, sums_path) - sums = _parse_checksums(sums_path.read_text()) - expected = sums.get(asset) - if expected is None: - raise RuntimeError(f"no SHA256 for {asset} in checksums.txt") - actual = _sha256_file(archive_path) - if actual.lower() != expected.lower(): - raise RuntimeError( - f"SHA256 mismatch for {asset}: got {actual}, expected {expected}" - ) - _extract(archive_path, version_dir) - - if plat == "darwin": - _post_extract_darwin(version_dir, entry) - - if not entry.exists(): - raise RuntimeError(f"binary not found after extraction: {entry}") - return entry - - -# ───────────────────────────────────────────────────────────────────────── -# GeoIP mmdb (timezone="auto" → map egress IP → IANA zone) -# -# daijro/geoip-all-in-one is rebuilt weekly and KEEPS ONLY the latest ~2 -# releases — older tags are pruned and 404. So we NEVER pin a tag: on every -# launch we resolve the CURRENT latest tag from the `releases/latest/download` -# permalink (its 302 Location carries the tag — a plain CDN request, NOT the -# rate-limited GitHub API) and download it if it differs from the cached one. -# Offline → reuse the cached mmdb; cold cache + offline → raise (the caller can -# then fall back off timezone="auto"). No stale pinned tag to rot. -# ───────────────────────────────────────────────────────────────────────── - - -def _geoip_root() -> Path: - return cache_root() / "geoip" - - -def _cached_geoip_mmdb() -> Path | None: - """Newest cached mmdb across tag dirs, or None. Tag dirs are date strings - (e.g. ``2026.06.17``) so a lexical sort is chronological.""" - root = _geoip_root() - if not root.exists(): - return None - cands = sorted(root.glob("*/*.mmdb")) - return cands[-1] if cands else None - - -def _geoip_latest_url() -> str: - return f"https://github.com/{GEOIP_REPO}/releases/latest/download/{GEOIP_ASSET}" - - -def _latest_geoip_tag_api() -> str: - """Latest ``daijro/geoip-all-in-one`` release tag via the GitHub API - (fallback for :func:`_resolve_latest_geoip_tag` when the permalink HEAD - can't be parsed).""" - headers = {"Accept": "application/vnd.github+json"} - token = _github_token() - if token: - headers["Authorization"] = f"token {token}" - r = requests.get( - f"https://api.github.com/repos/{GEOIP_REPO}/releases/latest", - headers=headers, timeout=15, - ) - r.raise_for_status() - tag = r.json().get("tag_name") - if not tag: - raise RuntimeError("no tag_name in geoip-all-in-one latest release") - return tag - - -def _resolve_latest_geoip_tag() -> str | None: - """Current latest release tag WITHOUT the rate-limited API: HEAD the - ``releases/latest/download`` permalink — GitHub answers 302 with - ``Location: …/releases/download//``. Falls back to the API, - then to ``None`` (offline / unparseable).""" - try: - r = requests.head(_geoip_latest_url(), allow_redirects=False, timeout=10) - loc = r.headers.get("Location") or r.headers.get("location") or "" - m = re.search(r"/releases/download/([^/]+)/", loc) - if m: - return m.group(1) - except Exception: - pass - try: - return _latest_geoip_tag_api() - except Exception: - return None - - -def _download_geoip_tag(tag: str) -> Path: - """Download + extract a specific tag's mmdb if not already cached.""" - dst_dir = _geoip_root() / tag - target = dst_dir / GEOIP_MMDB_NAME - if not target.exists(): - url = GEOIP_RELEASE_URL_TEMPLATE.format(tag=tag, asset=GEOIP_ASSET) - dst_dir.mkdir(parents=True, exist_ok=True) - with tempfile.TemporaryDirectory() as td: - archive = Path(td) / GEOIP_ASSET - _download_file(url, archive) - _extract(archive, dst_dir) - if target.exists(): - return target - # asset name inside the zip may differ from GEOIP_MMDB_NAME - found = sorted(dst_dir.glob("*.mmdb")) - if found: - return found[0] - raise RuntimeError(f"geoip mmdb not found after extraction in {dst_dir}") - - -def _prune_old_geoip_tags(keep: str) -> None: - """Drop every cached tag dir except ``keep`` to bound disk usage.""" - root = _geoip_root() - if not root.exists(): - return - for d in root.iterdir(): - if d.is_dir() and d.name != keep: - shutil.rmtree(d, ignore_errors=True) - - -def geoip_mmdb_path() -> Path | None: - """Path to the currently-cached mmdb (newest tag), or None if none cached.""" - return _cached_geoip_mmdb() - - -def ensure_geoip_mmdb() -> Path: - """Return the geoip mmdb, always the latest daijro build. Checked on EVERY - call — a single cheap permalink HEAD (no GitHub API, so no rate limit). - - Resolution order: - 1. ``STEALTHFOX_GEOIP_MMDB`` env → use that file (user-supplied / test). - 2. Resolve the CURRENT latest tag. If it differs from the newest cached - tag (or nothing is cached) → download it, prune older tags, return it. - 3. Latest tag == newest cached tag → use the cache (no download). - 4. Couldn't resolve the tag (offline / unparseable): cached mmdb → use it; - cold cache → raise (caller can then drop timezone="auto"). - """ - override = os.environ.get("STEALTHFOX_GEOIP_MMDB") - if override: - p = Path(override) - if not p.exists(): - raise RuntimeError(f"STEALTHFOX_GEOIP_MMDB points to a missing file: {p}") - return p - - cached = _cached_geoip_mmdb() - cached_tag = cached.parent.name if cached else None - - latest = _resolve_latest_geoip_tag() - if latest and latest != cached_tag: - # newer build available (or nothing cached) → fetch it - try: - mmdb = _download_geoip_tag(latest) - _prune_old_geoip_tags(mmdb.parent.name) - return mmdb - except Exception: - if cached: - return cached # transient download failure → keep using the cache - raise - - if cached: - return cached # cache is already the latest, or we're offline - - raise RuntimeError( - "geoip mmdb unavailable: no cached copy and GitHub is unreachable. " - "Connect once to download it, or set STEALTHFOX_GEOIP_MMDB to a local " - "geoip-aio-all.mmdb file." - ) +"""Backward-compat shim — spostato in invisible_core.download (alias completo).""" +import sys as _sys +from invisible_core import download as _mod +_sys.modules[__name__] = _mod diff --git a/src/invisible_playwright/prefs.py b/src/invisible_playwright/prefs.py index f06778e..f81c0e9 100644 --- a/src/invisible_playwright/prefs.py +++ b/src/invisible_playwright/prefs.py @@ -1,673 +1,4 @@ -"""Translate an internal Profile into the Firefox prefs dict that the -patched Firefox binary expects. - -The output dict keys map 1:1 to ``user.js`` preferences. Playwright passes -them via ``firefox_user_prefs=``. The patched binary propagates them to all -content processes over IPC; C++ patches read the ``zoom.stealth.*`` -namespace. - -The translation is split into: - - * ``_BASELINE`` — global stealth policy (RFP off, WebRTC leaks blocked, - safebrowsing disabled, debugger detach, …) plus Windows-canonical - constants that don't depend on the Profile (system colors palette, - WebGL extensions whitelist, speech voices, navigator identity). - * ``translate_profile_to_prefs`` — overlays the Profile fields plus the - user-supplied ``locale`` and ``timezone``. -""" -from __future__ import annotations - -import sys -from typing import Any, Dict, Optional - -from ._fpforge import Profile -from ._webgl_personas import render_noise_seed, select_persona - - -# ────────────────────────────────────────────────────────────────────── -# Navigator identity — locked to Firefox 150 Windows so the binary -# reports the same UA / platform / oscpu regardless of the host OS. -# ────────────────────────────────────────────────────────────────────── - -_NAVIGATOR_OVERRIDES: Dict[str, str] = { - "general.useragent.override": - "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) " - "Gecko/20100101 Firefox/150.0.1", - "general.platform.override": "Win32", - "general.oscpu.override": "Windows NT 10.0; Win64; x64", - # general.buildID.override removed 2026-04-28: the previous value - # "20181001000000" was a 2018 buildID stuck on a 2026-built Firefox 150 - # binary (real BuildID=20260426192818 from application.ini). The 7.5-yr - # discrepancy is the kind of internal-consistency check Google reCAPTCHA - # can use to flag bot/spoofed browsers. Deleting the override lets - # Firefox emit its compiled-in buildID, which auto-tracks the binary. - # A/B knockout 2026-04-28 (n=30): F2 delete +0.083 RC vs BASE; n=100 - # confirm: +0.021; overnight isolated: +0.155 single-variant. Variable - # signal, but the underlying data error is unambiguous. - "general.appversion.override": "5.0 (Windows)", -} - - -# ────────────────────────────────────────────────────────────────────── -# System colors — FP Pro probes getComputedStyle(div) with CSS system -# keywords (ButtonFace, Menu, Highlight, …) and hashes the result into -# signal s142. On Linux, Firefox resolves these via GTK theme → GTK -# RGB values diverge from Windows Win32 palette → server-side anomaly -# even with Windows UA. Pinning the palette to Win10 default closes -# the gap (see project_css_system_colors.md memory). -# ────────────────────────────────────────────────────────────────────── - -_WIN_LIGHT_COLORS: Dict[str, str] = { - "ui.activeborder": "#B4B4B4", - "ui.activecaption": "#99B4D1", - "ui.appworkspace": "#ABABAB", - "ui.background": "#000000", - "ui.buttonface": "#F0F0F0", - "ui.buttonhighlight": "#FFFFFF", - "ui.buttonshadow": "#A0A0A0", - "ui.buttontext": "#000000", - "ui.buttonborder": "#000000", - "ui.captiontext": "#000000", - "ui.graytext": "#6D6D6D", - "ui.highlight": "#0078D7", - "ui.highlighttext": "#FFFFFF", - "ui.inactiveborder": "#F4F7FC", - "ui.inactivecaption": "#BFCDDB", - "ui.inactivecaptiontext": "#434E54", - "ui.infobackground": "#FFFFE1", - "ui.infotext": "#000000", - "ui.menu": "#F9F9FB", - "ui.menutext": "#000000", - "ui.scrollbar": "#C8C8C8", - "ui.threeddarkshadow": "#696969", - "ui.threedface": "#F0F0F0", - "ui.threedhighlight": "#FFFFFF", - "ui.threedlightshadow": "#E3E3E3", - "ui.threedshadow": "#A0A0A0", - "ui.window": "#FFFFFF", - "ui.windowframe": "#646464", - "ui.windowtext": "#000000", - "ui.mark": "#FFFF00", - "ui.marktext": "#000000", - "ui.accentcolor": "#0078D4", - "ui.accentcolortext": "#FFFFFF", - "ui.selecteditem": "#0078D7", - "ui.selecteditemtext": "#FFFFFF", - "ui.-moz-hyperlinktext": "#0066CC", - "ui.-moz-activehyperlinktext": "#EE0000", - "ui.-moz-visitedhyperlinktext": "#551A8B", -} - - -# ────────────────────────────────────────────────────────────────────── -# WebGL extensions — Windows ANGLE canonical lists. Empty string = -# fall back to native Mesa/ANGLE; non-empty = `getSupportedExtensions` -# returns this list verbatim and `IsSupported()` rejects anything else. -# ────────────────────────────────────────────────────────────────────── - -_WEBGL1_EXTENSIONS = ",".join([ - "ANGLE_instanced_arrays", - "EXT_blend_minmax", - "EXT_color_buffer_half_float", - "EXT_float_blend", - "EXT_frag_depth", - "EXT_sRGB", - "EXT_shader_texture_lod", - "EXT_texture_compression_bptc", - "EXT_texture_compression_rgtc", - "EXT_texture_filter_anisotropic", - "OES_element_index_uint", - "OES_fbo_render_mipmap", - "OES_standard_derivatives", - "OES_texture_float", - "OES_texture_float_linear", - "OES_texture_half_float", - "OES_texture_half_float_linear", - "OES_vertex_array_object", - "WEBGL_color_buffer_float", - "WEBGL_compressed_texture_s3tc", - "WEBGL_compressed_texture_s3tc_srgb", - "WEBGL_debug_renderer_info", - "WEBGL_debug_shaders", - "WEBGL_depth_texture", - "WEBGL_draw_buffers", - "WEBGL_lose_context", - "WEBGL_provoking_vertex", -]) - -_WEBGL2_EXTENSIONS = ",".join([ - "EXT_color_buffer_float", - "EXT_color_buffer_half_float", - "EXT_float_blend", - "EXT_texture_compression_bptc", - "EXT_texture_compression_rgtc", - "EXT_texture_filter_anisotropic", - "OES_draw_buffers_indexed", - "OES_texture_float_linear", - "OES_texture_half_float_linear", - "OVR_multiview2", - "WEBGL_compressed_texture_s3tc", - "WEBGL_compressed_texture_s3tc_srgb", - "WEBGL_debug_renderer_info", - "WEBGL_debug_shaders", - "WEBGL_lose_context", - "WEBGL_provoking_vertex", -]) - - -# ────────────────────────────────────────────────────────────────────── -# Speech voices — Windows canonical "Microsoft *" set. Format: -# "NAME|LANG|DEFAULT|LOCAL,...". Non-empty value drives the -# speechSynthesis.getVoices() patch; empty disables it. -# ────────────────────────────────────────────────────────────────────── - -_WIN_VOICES = ",".join([ - "Microsoft David - English (United States)|en-US|1|1", - "Microsoft Zira - English (United States)|en-US|0|1", - "Microsoft Mark - English (United States)|en-US|0|1", - "Microsoft David Desktop - English (United States)|en-US|0|1", - "Microsoft Zira Desktop - English (United States)|en-US|0|1", -]) - - -# ────────────────────────────────────────────────────────────────────── -# Baseline — applied to every session regardless of Profile. -# ────────────────────────────────────────────────────────────────────── - -_BASELINE: Dict[str, Any] = { - # Turn off Firefox's own resistFingerprinting; we do our own via patches. - "privacy.resistFingerprinting": False, - "privacy.resistFingerprinting.letterboxing": False, - - # FF150 fingerprintingProtection — enabled by default (or remotely via - # Mozilla webcompat overrides). FP Pro detects the side-effects and - # flips `privacy_settings: true`. On FF146 these were all off → False. - # Force off so FP Pro reports privacy_settings:false (matches FF146). - "privacy.fingerprintingProtection": False, - "privacy.fingerprintingProtection.pbmode": False, - "privacy.fingerprintingProtection.remoteOverrides.enabled": False, - - # WebRTC: enabled, looks like a real Firefox behind NAT, no real-IP leak. - # obfuscate_host_addresses=true → host candidate is `.local` mDNS, - # exactly like vanilla Firefox (BrowserLeaks "No Leak", Local IP "-"). - # The mDNS-IPC hang feared on older builds does NOT reproduce on FF150. - # The proxy-egress srflx is injected by our C++ (srflx swap §17 + fallback - # §17.B), fed the egress IP via STEALTHFOX_WEBRTC_PUBLIC_IP from - # launcher._build_env (auto-discovered from the proxy). - # IPv6: media.peerconnection.ice.disableIPv6 is DEAD on FF150 (read by no - # ICE-gathering code). The real switch is our zoom.stealth.webrtc.disable_ipv6 - # (nICEr addrs.cpp filter) + the STEALTHFOX_WEBRTC_DISABLE_IPV6 env. - "media.peerconnection.enabled": True, - "media.peerconnection.ice.no_host": False, - "media.peerconnection.ice.default_address_only": False, - "media.peerconnection.ice.obfuscate_host_addresses": True, - "zoom.stealth.webrtc.disable_ipv6": True, - "media.peerconnection.ice.proxy_only": False, - "media.peerconnection.ice.relay_only": False, - "media.peerconnection.use_document_iceservers": True, - - # Proxy — route DNS through SOCKS proxies to avoid local DNS leaks. - "network.proxy.socks_remote_dns": True, - "network.proxy.failover_direct": False, - - # TLS ClientHello fingerprint — match stock Firefox byte-for-byte. - # The Playwright/Juggler Firefox build this binary derives from re-enables - # cipher 0xC009 (TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA), which retail Firefox - # 150 does NOT offer. That extra (17th) cipher shifts our JA3/JA4 away from - # any real Firefox (ja4 t13d1717h2 vs stock t13d1617h2). A ClientHello that - # matches no real browser is itself a consistency tell. Disabling it makes - # JA3/JA4/peetprint byte-identical to retail FF150 (verified on tls.peet.ws). - # Stock Firefox ships without 0xC009 and works on the whole web, so this only - # improves fingerprint consistency — it cannot break connectivity. - "security.ssl3.ecdhe_ecdsa_aes_128_sha": False, - - # Safebrowsing — chatty and fingerprintable. - "browser.safebrowsing.malware.enabled": False, - "browser.safebrowsing.phishing.enabled": False, - "browser.safebrowsing.downloads.enabled": False, - "browser.safebrowsing.downloads.remote.enabled": False, - - # First-run / welcome UI noise. - "browser.startup.page": 0, - "browser.shell.checkDefaultBrowser": False, - "browser.aboutwelcome.enabled": False, - "browser.startup.upgradeDialog.enabled": False, - "termsofuse.acceptedVersion": 999, - - # Disable about:newtab auto-load — TopSitesFeed.sys.mjs auto-fetches when - # a tab opens, triggering a cross-process BC swap that hijacks the first - # page.goto() (NS_BINDING_ABORTED on creepjs/peet/sannysoft/fppro). - "browser.newtabpage.enabled": False, - "browser.newtab.preload": False, - "browser.newtabpage.activity-stream.feeds.topsites": False, - "browser.newtabpage.activity-stream.feeds.section.topstories": False, - "browser.newtabpage.activity-stream.enabled": False, - - # Disable Firefox internal services that hit the network on startup. - # Through a residential SOCKS5 proxy these compete with the test - # navigation and trigger NS_BINDING_FAILED (server-side rate-limit / - # connection drops). Domains observed in MOZ_LOG: push.services, - # firefox.settings.services, detectportal, ohttp-gateway, location. - "browser.aboutConfig.showWarning": False, - "network.captive-portal-service.enabled": False, - "network.connectivity-service.enabled": False, - "dom.push.enabled": False, - "dom.push.connection.enabled": False, - "geo.enabled": False, - "geo.provider.network.url": "", - "browser.region.network.url": "", - "browser.region.update.enabled": False, - "services.settings.server": "", - "browser.search.geoSpecificDefaults": False, - "browser.contentblocking.report.lockwise.enabled": False, - "browser.contentblocking.report.monitor.enabled": False, - "extensions.systemAddon.update.enabled": False, - "extensions.update.enabled": False, - "extensions.getAddons.cache.enabled": False, - "browser.discovery.enabled": False, - "browser.ping-centre.telemetry": False, - "app.normandy.enabled": False, - "dom.private-attribution.submission.enabled": False, - "browser.translations.enable": False, - "browser.search.update": False, - - # HTTP/3 + speculative + Alt-Svc disabled. SOCKS5 proxy doesn't - # support UDP ASSOCIATE so HTTP/3 fails. Speculative connections - # under load cause early channel cancel (NS_BINDING_FAILED). - "network.http.http3.enable": False, - "network.http.http3.enabled": False, - "network.http.altsvc.enabled": False, - "network.http.altsvc.oe": False, - "network.http.speculative-parallel-limit": 0, - "network.predictor.enabled": False, - "network.dns.disablePrefetch": True, - "network.dns.disablePrefetchFromHTTPS": True, - "network.dns.echconfig.enabled": False, - "network.dns.use_https_rr_as_altsvc": False, - - # === Fission / site-isolation disabled (FF146 Playwright parity) === - # Force a single content-process model. Three knobs are required in FF150: - # upstream Playwright Firefox (FF146-based) only needed fission.autostart=False - # because FF146's default isolation strategy was looser. FF150 ships with - # fission.webContentIsolationStrategy=1 (IsolateEverything) which still - # site-isolates cross-origin iframes into separate `webIsolated` content - # processes EVEN WHEN fission.autostart is False. From the parent process's - # point of view, those iframes get a Juggler Frame placeholder with no - # docShell, no URL, and an execution context that wraps the wrong global, - # so frame.evaluate() fails with cross-origin SOP errors and - # element_handle.content_frame() returns None. - # - # Pinning the strategy to 0 keeps every cross-origin web iframe in the - # parent's content process, where the Juggler code paths from the FF146 - # era expect them. processCount.webIsolated=1 is kept as belt-and-suspenders - # in case some path still classifies an origin as webIsolated despite the - # strategy change. It costs nothing to leave. - # - # See issue #20 + tests/test_cross_origin_iframe.py for the regression - # sentinel that catches a future A/B flipping these back. - "fission.autostart": False, - "fission.autostart.session": False, - "fission.webContentIsolationStrategy": 0, # IsolateNothing - "dom.ipc.processCount.webIsolated": 1, - - - # Telemetry & data reporting. - "datareporting.healthreport.uploadEnabled": False, - "datareporting.policy.dataSubmissionEnabled": False, - "toolkit.telemetry.enabled": False, - "toolkit.telemetry.unified": False, - "app.shield.optoutstudies.enabled": False, - - # Update channels. - "app.update.enabled": False, - "app.update.auto": False, - - # Speech synth: enabled (the C++ patch fabricates voices from the - # comma list above) regardless of the host OS. - "media.webspeech.synth.enabled": True, - "zoom.stealth.voices.list": _WIN_VOICES, - - # WebGL extensions whitelist — non-empty pre-empts native enumeration. - "zoom.stealth.webgl.extensions": _WEBGL1_EXTENSIONS, - "zoom.stealth.webgl2.extensions": _WEBGL2_EXTENSIONS, - # WebGL numeric param overrides — kept empty (A/B test 2026-04-22 showed - # mismatches between the values we shipped and ANGLE's real envelope - # raised FP Pro's ML tampering score). Slot kept for future experiments. - "zoom.stealth.webgl.int_params": "", - "zoom.stealth.webgl.int2_params": "", - "zoom.stealth.webgl.shader_precisions": "", - "zoom.stealth.webgl.float_params": "", - - # DevTools anti-detection. - "zoom.stealth.debugger.force_detach": True, - - # Canvas substitution (Option B for canvas) — replace pixels with hash(seed,idx), - # uniform-skip (red-box exact, masking-safe) + full overwrite. Makes the canvas - # render a pure function of (seed) = HOST-INDEPENDENT (kills the DWrite-vs-FreeType - # text-raster leak: Canvas Hash + Font hash were the residual Win!=Linux signals). - # ON by default (paired with webgl.substitute_pixels). - "zoom.stealth.canvas.substitute_pixels": True, - - # WebGL substitution (Option B) — replace readback/snapshot RGB with - # hash(seed,idx), endpoint-preserving. Makes the WebGL render hash a pure - # function of (seed, dims) = HOST-INDEPENDENT, so no per-host hw_seed - # calibration is needed (the gamma path was per-host: NVIDIA/Arc-on-Win clean - # seeds went dirty on the Linux GL backend). ON by default. - "zoom.stealth.webgl.substitute_pixels": True, - - # WebGPU presence consistency. Firefox enables dom.webgpu.enabled by default on - # Windows/Mac-ARM but NOT on Linux/Mac-x64. We ALWAYS claim Windows, so force it ON - # on every host: a Windows FF MUST expose navigator.gpu (object); a Linux host leaving - # it undefined while the UA says Windows is an inconsistency tell (RE 2026-06-22: - # has_gpu was object on Win, undefined on WSL). adapter.info is empty (FF privacy - # default) so no GPU-name leak; requestAdapter may be null on a GPU-less host, which - # is itself plausible for a real Windows machine. - "dom.webgpu.enabled": True, - - # Audio fingerprint noise OFF. RE 2026-06-22: the per-session OfflineAudioContext - # noise (gated by hw_seed) was THE dominant driver of FP Pro tampering_ml on Windows - # — b005 Win dropped 0.4349 -> 0.0564 with audio noise alone disabled (canvas_text/ - # emoji unchanged, so they were a red-herring). The audio value is already host-indep - # AND identical to a real FF's canonical OfflineAudioContext sum, so a fixed (un-noised) - # audio is NOT a linking signal (every real FF has the same value) — removing the noise - # matches real Firefox and clears the tampering flag. - "zoom.stealth.audio.fp_noise": False, - - # Navigator identity (locked to Windows Firefox 150). - **_NAVIGATOR_OVERRIDES, -} - - -# ────────────────────────────────────────────────────────────────────── -# Linux-only Xvfb workarounds — the Linux Firefox build under Xvfb -# cannot run WebRender (`ConnectToCompositor` retries forever). We -# disable WebRender + force WebGL through the GL software path so -# webgl_basics / webgl_extensions still report. -# ────────────────────────────────────────────────────────────────────── - -_LINUX_XVFB_WORKAROUNDS: Dict[str, Any] = { - "gfx.webrender.all": False, - "gfx.webrender.force-disabled": True, - "webgl.force-enabled": True, - # webgl.software-rendering-enabled / webgl.force-layers-readback removed in FF150. -} - -# ────────────────────────────────────────────────────────────────────── -# Windows virtual-desktop workarounds — when headless=True on Windows, -# Firefox runs on a CreateDesktop virtual desktop. The hardware GPU is -# inaccessible from the virtual desktop, so the GPU process crashes when -# it tries to initialize the D3D11 compositor with hardware acceleration. -# -# Approach: force D3D11 WARP (CPU software renderer) for the GPU process. -# layers.d3d11.force-warp=True → compositor uses WARP → GPU process stable. -# webgl.angle.force-warp=True → ANGLE uses WARP → WebGL context creates. -# -# CRITICAL: do NOT set webgl.out-of-process=False. That moves WebGL from the -# GPU process to the sandboxed content process. The content process sandbox -# blocks D3D11 access entirely → ANGLE crashes the content process → -# canvas.getContext('webgl') throws instead of returning null. -# -# gfx.canvas.accelerated=False: default is true, disabling avoids any -# hardware GPU dependency for 2D canvas in the content process. -# ────────────────────────────────────────────────────────────────────── - -_WIN_VIRT_DESKTOP_WORKAROUNDS: Dict[str, Any] = { - # FF150 regression vs FF146 on CreateDesktop alt-desktop: - # The GPU process sandbox (level=1, default since FF110) tries to parent - # its compositor window to the parent process's window. Our worker spawns - # Firefox on a CreateDesktop-created alt desktop — parent and GPU process - # do not share the same desktop/HWND namespace, so window parenting fails - # silently. WebRender falls back to "Software D3D11" and OOP-WebGL never - # publishes a hardware ANGLE renderer → getContext('webgl') returns a - # context but extensions/parameters/$hash all come back null/empty (FF146 - # had a more permissive sandbox, so the same setup worked there). - # Bugzilla refs: 1798091, 1524591, 1229829. Lowering the GPU sandbox to 0 - # restores hardware compositor + functional WebGL on alt desktops. - "security.sandbox.gpu.level": 0, - # Same root cause as above, content process side. Wrapper repo issue #18 - # (tab crash on cross-process navigation under headless=True). Sandbox - # content level > 4 puts content processes on the sandbox's own - # kAlternateWinstation (see security/sandbox/win/src/sandboxbroker/ - # sandboxBroker.cpp line 1113-1114: - # `if (aSandboxLevel > 4) config->SetDesktop(kAlternateWinstation)`). - # Combined with our CreateDesktop alt-desktop, that puts browser process - # and content processes on DIFFERENT desktops. Cross-process navigation - # then fails window parenting between parent and child, the content - # process exits cleanly (exitCode=0, signal=null) and Playwright fires - # page.on('crash') ~10s after page load. Lowering content sandbox to 4 - # keeps content processes on the same desktop as the browser process, - # which is what we want here (still tight enough — level 4 blocks - # file/registry write, network calls, hardware access). - "security.sandbox.content.level": 4, -} - - -# ────────────────────────────────────────────────────────────────────── -# Public helpers -# ────────────────────────────────────────────────────────────────────── - -def _accept_language(locale: str) -> str: - # ", " — the desktop-default shape (e.g. "en-US, en"). Firefox expands it - # to navigator.languages=["en-US","en"] AND (via the patched binary) the q-valued header - # "en-US,en;q=0.5". The patched nsHttpHandler (STEALTHFOX, RE 2026-06-23) builds the - # Accept-Language header from THIS pref even when juggler sets a per-context locale - # override, so header and navigator.languages stay consistent 2/2 — the most authentic - # (real desktop) form. Supersedes the 2026-06-22 single-tag workaround. - lang = locale.replace("_", "-") - base = lang.split("-")[0] - return f"{lang}, {base}" if base != lang else lang - - -def translate_profile_to_prefs( - profile: Profile, - *, - locale: str = "en-US", - timezone: str = "", - extra_prefs: Optional[Dict[str, Any]] = None, - virtual_display: bool = False, -) -> Dict[str, Any]: - """Return a complete prefs dict ready for Playwright's firefox_user_prefs=. - - Args: - profile: Bayesian-sampled fingerprint (from ``generate_profile``). - locale: BCP-47 tag, e.g. ``"en-US"``. - timezone: IANA timezone name, e.g. ``"America/New_York"``. - extra_prefs: Optional overlay applied LAST. - virtual_display: When True on Windows, apply GPU-disabling workarounds - to prevent the GPU process from crashing on virtual - desktops that have no D3D11 backend. - """ - prefs: Dict[str, Any] = dict(_BASELINE) - - # GPU / WebGL renderer/vendor. - # On Linux we spoof to a Windows ANGLE renderer string (profile.gpu.renderer) - # so cross-platform sessions report a consistent Windows GPU identity. - # On Windows/mac, spoofing a renderer string ALONE is unsafe — the ~81 - # getParameter values stay real, so a name↔params hash mismatch FP Pro flags - # (setting GTX 980 over real Arc A750 params scored ~0.70). Instead we apply a - # VALIDATED PERSONA (see _webgl_personas): a {renderer, vendor} whose params are - # the shared ANGLE D3D11 caps (vendor-independent — identical on any host, per the - # ANGLE source) and whose extension list is FORCED below. That is a coherent fake - # GPU that passes FP Pro host-independently (the host's real GPU never leaks). If no - # validated persona exists for the sampled gpu_class yet, fall back to the host-real - # renderer (empty → native ANGLE; SanitizeRenderer at ClientWebGLContext.cpp:2592). - # Apply the camoufox-derived real-Firefox GPU persona on EVERY host (Win/Linux/Mac). - # We must ALWAYS look Windows (rule), and the WebGL override is platform-independent: - # SanitizeRenderer (ClientWebGLContext.cpp) is pure string regex, and the param/extension - # overrides are pref-driven, so the C++ presents the SAME Windows ANGLE GPU regardless of - # the host's real GL backend (it never consults it when the pref is set). This is why a - # Windows GPU shows correctly even on a Linux/Mesa host (no more "Generic Renderer"). - _persona = select_persona(profile.seed) - if _persona: - # Apply the FULL coherent WebGL override (renderer + vendor + webgl1/webgl2 extensions - # + ~100 getParameter values + shader-precision formats). Setting ALL of them — not just - # the renderer string — keeps renderer<->params coherent (FP Pro cross-checks them); a - # string-only spoof over the host's real params is the old ~0.85 mismatch. - for _k, _v in _persona["prefs"].items(): - if _k == "zoom.stealth.webgl2.enabled": - prefs["webgl.enable-webgl2"] = bool(_v) - else: - prefs[_k] = _v - else: - prefs["zoom.stealth.webgl.renderer"] = "" - prefs["zoom.stealth.webgl.vendor"] = "" - # Canvas-noise mask is calibrated to the REAL host GPU's rendering variance — the canvas is - # drawn by real hardware, NOT the persona's claimed GPU, so it must NOT follow the persona - # (a non-Intel persona on an Intel host would over-noise). Dev/deployment host is Intel. - _renderer_lo = "intel" - - # MSAA: on Windows, pin to 4 (Firefox default for ANGLE) so gl.SAMPLES is - # constant across all sessions. Different MSAA values cause different CN-set - # parameters hashes even with the same renderer → detectable variation. - # Vanilla Intel Arc A750 parameters hash (66544db8) verified at msaa=4. - _msaa = profile.webgl.msaa_samples if sys.platform.startswith("linux") else 4 - prefs["zoom.stealth.webgl.msaa"] = _msaa - prefs["webgl.msaa-samples"] = _msaa - prefs["webgl.msaa-force"] = _msaa > 0 - - # Canvas pixel-noise density per vendor. Intel has lower natural - # rendering variance than NVIDIA/AMD, so the default 1/8 noise rate - # over-amplifies the FP Pro tampering ML signal. Drop to 1/16 for Intel - # to keep tampering_ml below the detection threshold while still - # breaking the canvas geometry hash. - if "intel" in _renderer_lo: - prefs["zoom.stealth.canvas.noise_skip_mask"] = 15 # 1/16, ~6.25% - else: - prefs["zoom.stealth.canvas.noise_skip_mask"] = 7 # 1/8, ~12.5% - - # Screen - prefs["zoom.stealth.screen.width"] = profile.screen.width - prefs["zoom.stealth.screen.height"] = profile.screen.height - prefs["zoom.stealth.screen.avail_width"] = profile.screen.avail_width - prefs["zoom.stealth.screen.avail_height"] = profile.screen.avail_height - prefs["zoom.stealth.screen.dpr"] = profile.screen.dpr - prefs["layout.css.devPixelsPerPx"] = str(profile.screen.dpr) - - # Hardware — coherent with the sampled gpu_class by construction (the forge - # draws hw_concurrency conditioned on the GPU class). - prefs["zoom.stealth.hw_concurrency"] = profile.hardware.concurrency - prefs["zoom.stealth.storage.quota_mb"] = profile.hardware.storage_quota_mb - - # Audio - prefs["zoom.stealth.audio.sample_rate"] = profile.audio.sample_rate - prefs["zoom.stealth.audio.output_latency_ms"] = profile.audio.output_latency_ms - prefs["zoom.stealth.audio.max_channel_count"] = profile.audio.max_channel_count - - # Codec - prefs["media.av1.enabled"] = profile.codec.av1_enabled - prefs["media.encoder.webm.enabled"] = profile.codec.webm_encoder_enabled - prefs["media.mediasource.webm.enabled"] = profile.codec.mediasource_webm - prefs["media.mediasource.mp4.enabled"] = profile.codec.mediasource_mp4 - - # Fonts — real bundled fonts (no collapse). The binary ships the real - # Windows font files in /fonts and loads them via MOZ_BUNDLED_FONTS, so - # glyphs are genuine on every host. We expose this profile's family set via - # the per-profile fontlist, which the binary applies to the native system - # font allow-list AT CONSTRUCTION (no runtime rebuild → no scan stall), and - # force the system-ui generic to Segoe UI. profile.fonts is the _fpforge - # sample (core always + a conditioned optional subset). Per-profile metric - # uniqueness comes from the shared fpp.hw_seed jitter in the HarfBuzz shaper - # (set with the other fpp prefs), not from fabricated widths. - prefs["zoom.stealth.font.fontlist"] = ",".join(profile.fonts) - prefs["zoom.stealth.font.system_ui"] = "Segoe UI" - - # Activate the bundled real-Windows fonts (MOZ_BUNDLED_FONTS / /fonts). - prefs["gfx.bundled-fonts.activate"] = 1 - # Point the CSS generics at Windows defaults. On a Windows HOST Firefox's - # built-in name-lists already resolve to these (and they're in the fontlist - # so they survive the allow-list); but on a non-Windows host (Linux/Mac) the - # built-in defaults name host fonts (DejaVu/Liberation/…) which the allow-list - # hides — so the generics would collapse. Setting them explicitly keeps the - # generics resolving to the bundled Windows families on EVERY host (system-ui - # is forced to Segoe UI by the C++ hook above, so it is not listed here). - prefs["font.name-list.serif.x-western"] = "Times New Roman" - prefs["font.name-list.sans-serif.x-western"] = "Arial" - prefs["font.name-list.monospace.x-western"] = "Consolas" - prefs["font.name-list.sans-serif.ja"] = "Yu Gothic UI" - prefs["font.name-list.serif.ja"] = "Yu Gothic UI" - prefs["font.name-list.sans-serif.ko"] = "Malgun Gothic" - prefs["font.name-list.serif.ko"] = "Malgun Gothic" - prefs["font.name-list.sans-serif.zh-CN"] = "Microsoft YaHei UI" - prefs["font.name-list.sans-serif.zh-TW"] = "Microsoft JhengHei UI" - prefs["font.name-list.sans-serif.zh-HK"] = "Microsoft JhengHei UI" - - # UI / dark mode + Windows colors palette (only when light theme). - prefs["ui.systemUsesDarkTheme"] = int(profile.dark_theme) - if not profile.dark_theme: - prefs.update(_WIN_LIGHT_COLORS) - - # Locale prefs. - locale = locale or "en-US" - lang = locale.replace("_", "-") - prefs["intl.accept_languages"] = _accept_language(locale) - prefs["general.useragent.locale"] = lang - prefs["intl.locale.requested"] = lang - prefs["privacy.spoof_english"] = 0 - # juggler.locale.override seeds the BrowsingContext LanguageOverride FIELD in - # the parent process (BrowsingContext::Attach), whose DidSet drives BOTH - # navigator.languages (the full list) AND the realm Intl default locale (the - # primary tag it extracts) — so Intl.DateTimeFormat / NumberFormat / - # toLocaleString follow the locale, not just the Accept-Language header. Seed - # it with the full Accept-Language list so navigator.languages stays the - # desktop-default 2 elements (["fr-FR","fr"]); the C++ DidSet takes "fr-FR" - # for Intl. Mirrors juggler.timezone.override; the SOLE source of truth. - prefs["juggler.locale.override"] = _accept_language(locale) - - if timezone: - # juggler.timezone.override is the SOLE source of truth read by the C++ - # timezone chain (BrowsingContext::Attach/DidSet, ContentChild). The old - # zoom.stealth.timezone pref was declared in the yaml but read by NO - # code — dropped here on 2026-06-10 (see 20-our-patches.md §8). - prefs["juggler.timezone.override"] = timezone - - # Cross-process seed (canvas noise + DWrite gamma share this). Only - # zoom.stealth.fpp.hw_seed is read by the C++; the old zoom.stealth.seed - # alias was never declared in the yaml and read by nothing — dropped - # 2026-06-10. The render-noise seed is DECOUPLED from the identity seed and - # drawn from a calibrated CLEAN pool: the canvas/WebGL render HASH it drives - # is the dominant FP Pro tampering_ml signal, and some hw_seeds yield a - # "suspicious" render hash. render_noise_seed() maps to the clean pool while - # keeping per-seed determinism + diversity. See _webgl_personas. - prefs["zoom.stealth.fpp.hw_seed"] = render_noise_seed(profile.seed) - - # Synthetic host ICE candidate — injected by C++ when addr_ct==0 (SOCKS5 - # proxy suppresses all local addresses so Firefox can't gather host cands). - # LAN IP is seed-derived so it's consistent per session and looks like a - # real home router assignment (192.168.x.x range). - _s = profile.seed - _lan_ip = f"192.168.{(_s >> 8) % 254 + 1}.{_s % 254 + 1}" - prefs["zoom.stealth.webrtc.host_ip"] = _lan_ip - - # Windows/mac extension list: - # - persona active → the coherent webgl1/webgl2 extension lists (in the GPU's real - # native order) were ALREADY applied above from the GPU pool's `prefs`, alongside the - # matching renderer + params + shader-precisions. Nothing to do here. - # - no persona → clear so the host-real renderer reports its native extension set - # (matches real vanilla captures for that host's GPU). - if not sys.platform.startswith("linux") and not _persona: - prefs["zoom.stealth.webgl.extensions"] = "" - prefs["zoom.stealth.webgl2.extensions"] = "" - - # Linux Xvfb workarounds (no-op on Windows). - if sys.platform.startswith("linux"): - for k, v in _LINUX_XVFB_WORKAROUNDS.items(): - prefs.setdefault(k, v) - - # Windows virtual-desktop workarounds (headless=True on Windows). - if virtual_display and sys.platform == "win32": - for k, v in _WIN_VIRT_DESKTOP_WORKAROUNDS.items(): - prefs.setdefault(k, v) - - # Caller overlay LAST so users can override anything we set. A value of - # None is treated as a sentinel meaning "delete this pref entirely from - # the final dict" — useful for A/B harnesses that need to test what - # happens when an override is unset (vs set to empty string, which for - # some prefs like general.useragent.override means literally empty UA). - if extra_prefs: - for k, v in extra_prefs.items(): - if v is None: - prefs.pop(k, None) - else: - prefs[k] = v - - return prefs +"""Backward-compat shim — spostato in invisible_core.prefs (alias completo).""" +import sys as _sys +from invisible_core import prefs as _mod +_sys.modules[__name__] = _mod diff --git a/tests/test_backcompat.py b/tests/test_backcompat.py new file mode 100644 index 0000000..99e82a7 --- /dev/null +++ b/tests/test_backcompat.py @@ -0,0 +1,84 @@ +"""Backward-compatibility guard for the invisible_core / invisible_playwright split. + +After extracting the pure config into ``invisible_core`` and turning the moved +modules into aliasing shims, EVERY import path that external users (and our own +outreach PRs) rely on must keep working — same objects, same behavior. This test +is the contract: if it breaks, we broke someone's install. +""" +import importlib + +import pytest + + +@pytest.mark.unit +def test_top_level_public_api_imports(): + import invisible_playwright as ip + for name in [ + "InvisiblePlaywright", "ensure_binary", "ensure_geoip_mmdb", + "get_default_stealth_prefs", "get_default_args", + "resolve_session_timezone", "GeoTimezoneError", + "BINARY_VERSION", "FIREFOX_UPSTREAM_VERSION", "__version__", + ]: + assert hasattr(ip, name), f"invisible_playwright.{name} missing" + + +@pytest.mark.unit +def test_submodule_imports_external_users_rely_on(): + # These are the exact import shapes used in the wild + in our Skyvern/onyx/etc PRs. + from invisible_playwright._fpforge import generate_profile, Profile # noqa: F401 + from invisible_playwright._webgl_personas import forced_gpu_class # noqa: F401 + from invisible_playwright.prefs import translate_profile_to_prefs # noqa: F401 + from invisible_playwright.download import ensure_binary # noqa: F401 + from invisible_playwright.constants import BINARY_VERSION # noqa: F401 + from invisible_playwright.config import get_default_stealth_prefs # noqa: F401 + + +@pytest.mark.unit +def test_deep_submodule_and_private_names_still_import(): + from invisible_playwright._fpforge.profile import Profile # noqa: F401 + from invisible_playwright._fpforge import _sampler # noqa: F401 + from invisible_playwright.prefs import _BASELINE # noqa: F401 + assert isinstance(_BASELINE, dict) + + +@pytest.mark.unit +def test_class_identity_is_shared_with_core(): + # isinstance must hold: the object returned by generate_profile must be an + # instance of BOTH the invisible_playwright-path Profile and the core Profile + # (they must be the SAME class object, not duplicates). + from invisible_playwright._fpforge import generate_profile + from invisible_playwright._fpforge import Profile as PW_Profile + from invisible_playwright._fpforge.profile import Profile as PW_Profile2 + import invisible_core + from invisible_core import Profile as Core_Profile + + p = generate_profile(seed=42) + assert isinstance(p, PW_Profile) + assert isinstance(p, PW_Profile2) + assert isinstance(p, Core_Profile) + assert PW_Profile is Core_Profile + assert PW_Profile2 is Core_Profile + + +@pytest.mark.unit +def test_shim_output_matches_core_output(): + from invisible_playwright._fpforge import generate_profile as gp_pw + from invisible_playwright._webgl_personas import forced_gpu_class as fgc_pw + from invisible_playwright.prefs import translate_profile_to_prefs as tp_pw + import invisible_core as ic + + a = tp_pw(gp_pw(42, fixed_gpu_class=fgc_pw(42))) + b = ic.translate_profile_to_prefs(ic.generate_profile(42, fixed_gpu_class=ic.forced_gpu_class(42))) + assert a == b + + +@pytest.mark.unit +def test_core_imports_without_playwright(monkeypatch): + # invisible_core must be importable even if playwright is absent. We simulate + # by asserting the core modules never pulled playwright into sys.modules as a + # side effect of their own import (the wrapper may have, but core must not need it). + import sys + import invisible_core # noqa: F401 + # invisible_core itself must not hard-depend on playwright at import time. + core_file = importlib.import_module("invisible_core").__file__ + assert "invisible_core" in core_file From 310bb215df207be3a329c80fcfecaed715fdf5f4 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 21:15:20 +0200 Subject: [PATCH 72/84] Allow the invisible-core git dependency to install Hatchling refuses a direct-reference dependency (invisible-core @ git+...) unless allow-direct-references is opted in, so a clean pip install from git failed at metadata generation. Enable it so the wrapper installs. --- pyproject.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index a79a4e7..6a38c8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,12 @@ invisible-playwright = "invisible_playwright.cli:main" Homepage = "https://github.com/feder-cr/invisible_playwright" Issues = "https://github.com/feder-cr/invisible_playwright/issues" +[tool.hatch.metadata] +# invisible-core is pinned by a direct git reference (see [project].dependencies). +# Hatchling refuses direct references unless this is opted in — without it a clean +# `pip install git+.../invisible_playwright` fails at metadata generation. +allow-direct-references = true + [tool.hatch.build.targets.wheel] packages = ["src/invisible_playwright"] exclude = ["*.bak", "*-bak"] From 3c018f7bbfd666af7288b31b4ce0f96ad2844eba Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Sat, 4 Jul 2026 19:20:25 +0200 Subject: [PATCH 73/84] docs: source repo renamed invisible_firefox -> firefox_antidetect_patch (release notes + CI refs) --- .github/workflows/release.yml | 8 ++++---- .github/workflows/republish.yml | 4 ++-- CHANGELOG.md | 4 ++-- CONTRIBUTING.md | 6 +++--- README.md | 6 +++--- SECURITY.md | 2 +- scripts/gen_release_notes.py | 12 ++++++------ 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a8e0d14..862ab8d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,14 +30,14 @@ on: workflow_dispatch: inputs: source_ref: - description: 'invisible_firefox ref to build' + description: 'firefox_antidetect_patch ref to build' default: 'stealth/150' release_tag: description: 'release tag to publish the draft under (e.g. firefox-9)' required: true env: - SOURCE_REPO: feder-cr/invisible_firefox + SOURCE_REPO: feder-cr/firefox_antidetect_patch SOURCE_REF: ${{ github.event.inputs.source_ref || 'stealth/150' }} jobs: @@ -104,7 +104,7 @@ jobs: ref: ${{ env.SOURCE_REF }} fetch-depth: 1 - # Record which invisible_firefox commit this build came from. The publish + # Record which firefox_antidetect_patch commit this build came from. The publish # job turns the range previous-release..this commit into the release notes # (scripts/gen_release_notes.py), and re-publishes it as a source-commit.txt # asset so the NEXT release knows where to start the changelog. One leg is @@ -465,7 +465,7 @@ jobs: uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 with: tag_name: ${{ steps.tag.outputs.tag }} - name: invisible_firefox (150.0.1) rev ${{ steps.tag.outputs.num }} + name: firefox_antidetect_patch (150.0.1) rev ${{ steps.tag.outputs.num }} draft: true prerelease: false fail_on_unmatched_files: true diff --git a/.github/workflows/republish.yml b/.github/workflows/republish.yml index 619994b..5595b57 100644 --- a/.github/workflows/republish.yml +++ b/.github/workflows/republish.yml @@ -27,7 +27,7 @@ on: required: true env: - SOURCE_REPO: feder-cr/invisible_firefox + SOURCE_REPO: feder-cr/firefox_antidetect_patch jobs: gate: @@ -200,7 +200,7 @@ jobs: uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 with: tag_name: ${{ steps.tag.outputs.tag }} - name: invisible_firefox (150.0.1) rev ${{ steps.tag.outputs.num }} + name: firefox_antidetect_patch (150.0.1) rev ${{ steps.tag.outputs.num }} draft: true prerelease: false fail_on_unmatched_files: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 307383d..6869123 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,7 +77,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [0.1.3] - 2026-05-19 ### Changed -- `BINARY_VERSION` bumped from `firefox-2` to `firefox-3`. The new archives on both Windows and Linux are built from a clean clone of [feder-cr/invisible_firefox#stealth/150](https://github.com/feder-cr/invisible_firefox/tree/stealth/150) — the consolidated source-of-truth fork (renamed from `feder-cr/firefox`; the companion `feder-cr/firefox-stealth` patches repo was deleted, all patches now live as commits on top of `mozilla-firefox/firefox`). +- `BINARY_VERSION` bumped from `firefox-2` to `firefox-3`. The new archives on both Windows and Linux are built from a clean clone of [feder-cr/firefox_antidetect_patch#stealth/150](https://github.com/feder-cr/firefox_antidetect_patch/tree/stealth/150) — the consolidated source-of-truth fork (renamed from `feder-cr/firefox`; the companion `feder-cr/firefox-stealth` patches repo was deleted, all patches now live as commits on top of `mozilla-firefox/firefox`). - The patched Firefox archive now ships the **proper C++ implementation** of `windowUtils.jugglerSendMouseEvent`, replacing the JS shim from 0.1.2. ### C++ fixes landed in this release @@ -88,7 +88,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - **C7 (partial)**: storage stub for `nsIDocShell.languageOverride`. Workaround `InvisiblePlaywright(locale="")` recommended until full BC FIELD port lands. ### Verified -- Both archives built from same source: feder-cr/invisible_firefox commit `68906f1f9c55`. +- Both archives built from same source: feder-cr/firefox_antidetect_patch commit `68906f1f9c55`. - Windows + Linux smoke suite green: launch, `ctx.new_page()`, `page.mouse.{move,down,up,click,wheel}`, `navigator.webdriver=false`, sannysoft 32/33 PASS. - SHA256 published in `checksums.txt` on the `firefox-3` release. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8eb110d..8b605ee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ Thanks for your interest in improving this project. Contributions are welcome vi - **Bug?** Open a [bug report](https://github.com/feder-cr/invisible_playwright/issues/new?template=bug_report.yml). - **Idea?** Open a [feature request](https://github.com/feder-cr/invisible_playwright/issues/new?template=feature_request.yml). - **Security issue?** Do **not** open a public issue — see [SECURITY.md](SECURITY.md). -- **The C++ patches** live in the companion repo [feder-cr/invisible_firefox](https://github.com/feder-cr/invisible_firefox) (branch `stealth/150`). Bugs in fingerprint spoofing usually belong there. +- **The C++ patches** live in the companion repo [feder-cr/firefox_antidetect_patch](https://github.com/feder-cr/firefox_antidetect_patch) (branch `stealth/150`). Bugs in fingerprint spoofing usually belong there. ## Scope @@ -18,7 +18,7 @@ This repository ships the **Python wrapper** (`invisible_playwright`) around a p - Binary download/caching, CLI, proxy plumbing - Tests, docs, examples, packaging -Out of scope (belongs in `invisible_firefox`): +Out of scope (belongs in `firefox_antidetect_patch`): - Changes to the Firefox C++ source - New preferences exposed by the patched binary @@ -65,7 +65,7 @@ Before opening, please: - Search [existing issues](https://github.com/feder-cr/invisible_playwright/issues) — the bug may already be tracked. - Reproduce on the **latest release** if possible. -- Confirm the issue is in the Python wrapper, not the patched Firefox itself. If a fingerprint is leaking or a detector flags the browser, open the issue at `feder-cr/invisible_firefox` instead. +- Confirm the issue is in the Python wrapper, not the patched Firefox itself. If a fingerprint is leaking or a detector flags the browser, open the issue at `feder-cr/firefox_antidetect_patch` instead. Include: diff --git a/README.md b/README.md index f8f3023..4b37be9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Python 3.11+ GitHub release GitHub stars - browser launches + browser launches

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 From bb6305b4398c9c4e0e326640211ccee6f7f32a83 Mon Sep 17 00:00:00 2001 From: feder-cr <85809106+feder-cr@users.noreply.github.com> Date: Fri, 3 Jul 2026 05:07:35 +0200 Subject: [PATCH 69/84] docs: center the banner --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index aaf5b4b..f8f3023 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,12 @@ browser launches