Skip to content
oss-invisiblePublic

About

invisible core: seed to browser fingerprint to Firefox prefs. The config core behind an undetected, anti-detect Firefox. Pure Python, zero Playwright.

Topics

Resources

Stars

26 stars

Watchers

0 watching

Forks

Repository files navigation

invisible_core

Pure config for a patched Firefox stealth profile - zero Playwright dependency.

seed → fingerprint profile → Firefox prefs, plus patched-binary download, proxy config, geo/timezone resolution, and invisible_core.juggler: the client that drives the engine over its own protocol, with the human input rhythm, which every wrapper below shares instead of carrying a copy. Importing it does not start a browser, which is the point: the same fingerprint config backs an automation wrapper and, through it, an MCP server, without either depending on the other.

(It backed a desktop profile manager too, until that repository was deleted on 2026-08-18. The package it published, invisible-firefox, is still on PyPI.)

The shared foundation used by:

And through it, for anyone who would rather prompt than script:

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.

uv add invisible-core
from invisible_core import (ensure_binary, generate_profile, prepare_session_geo,
                            translate_profile_to_prefs)

profile = generate_profile(seed=42)        # deterministic Bayesian fingerprint
geo     = prepare_session_geo("auto", None)  # zone and language of the exit (here, this machine's public IP)
prefs   = translate_profile_to_prefs(profile, locale=geo.locale, timezone=geo.timezone)
binary  = ensure_binary()                   # path to the patched Firefox binary

Same seed → same fingerprint, every time. The timezone is required: a session without one would run on the host's own zone.

Asking for less than the retail does

The core describes a retail Firefox, and where the retail does something the core does not change it. A caller can ask for less, by name, and the core writes that as a declaration. compose_session_prefs(profile, preload_newtab=False) (in the Playwright wrapper: InvisiblePlaywright(preload_newtab=False)) turns off the New Tab page that every retail Firefox keeps preloaded in a process of its own (about 200 MB, and a second process for a Mozilla site beside it): the core writes browser.newtab.preload false. None, the default, writes nothing and leaves the retail's behaviour; True writes the retail's value; a browser.newtab.preload in extra_prefs wins over the option.

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 the invisible_playwright wiki. 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 across OSes - how the same seed gives the same canvas output on every host: 2D canvas is drawn on the CPU (gfx.canvas.accelerated is always false) and noise is projected only when WebGL and WebGPU pixels are read back, deterministically from the seed. Text and GPU raster can still differ slightly between Linux and Windows hosts; the PNG itself is not rewritten.
  • Playwright timezone does not match the proxy IP - the surfaces this package's geo/timezone resolution has to keep in agreement.

ci

About

invisible core: seed to browser fingerprint to Firefox prefs. The config core behind an undetected, anti-detect Firefox. Pure Python, zero Playwright.

Topics

Resources

Stars

26 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages