invisible_core
August 5, 2026 · View on GitHub
Trouble with captchas? With proxies? Is your browser detected every time?
Join the group and ask. Someone in there has already solved it.
invisible_core
Pure config for a patched Firefox stealth profile - zero Playwright dependency.
seed → fingerprint profile → Firefox prefs, plus patched-binary download,
proxy config, and geo/timezone resolution. Importing it does not start a browser,
which is the point: the same fingerprint config backs an automation wrapper and a
desktop profile manager without either depending on the other.
The shared foundation used by:
- invisible_playwright - the
Playwright automation wrapper (
InvisiblePlaywright). - invisible_firefox - the antidetect profile manager (launches the binary directly).
The engine itself lives in firefox_antidetect_patch, a Firefox patched at the C++ source level so the fingerprint is produced by the browser instead of injected into the page.
pip install invisible-core
from invisible_core import generate_profile, translate_profile_to_prefs, ensure_binary
profile = generate_profile(seed=42) # deterministic Bayesian fingerprint
prefs = translate_profile_to_prefs(profile) # dict of Firefox user prefs
binary = ensure_binary() # path to the patched Firefox binary
Same seed → same fingerprint, every time.
What the fields actually mean
Which surfaces a browser fingerprint is made of, what each one gives away, and why consistency between them matters more than any single value, is written up at feder-cr.github.io/invisible_playwright. Those pages are about the problem, not about this package, and several of them record something we got wrong first. A few that document the exact fields this package generates:
- Pinning fingerprint fields -
how
pin=interacts with the Bayesian sampler, and which combinations it refuses because they don't occur on real hardware. - How to make Linux and macOS report real Windows fonts -
the font side of
generate_profile, and why the family list is bundled rather than sampled from the host. - Canvas and WebGL fingerprints, identical across OSes - why the same seed produces a byte-identical hash regardless of what's actually running underneath.
- Playwright timezone does not match the proxy IP - the surfaces this package's geo/timezone resolution has to keep in agreement.