Skip to main content

seleniumbase-rs can import external browser profile payloads in a generic anti-detect JSON format. The format is exposed through the seleniumbase_rs::profile_payloads module and the Tauri profile-manager example.

This is not tied to any third-party product. The payload describes a browser persona, a set of masking modes, and optional runtime overrides. seleniumbase-rs translates the parts it can apply directly into BrowserConfig, command-line flags, CDP calls, and window settings.

From a payload to a running browser.

Info

What you will learn

  • The structure of a profile payload.
  • How the words of a flag map to BrowserConfig and Fingerprint.
  • How to load a profile programmatically.
  • How to use the Tauri profile-manager example.

Supported fields#

The ProfileParams type mirrors a common POST /profile/create body:

  • name, browser_type (chromium, firefox, or mobile_safari), os_type
  • folder_id, tags, notes, times
  • core_version, core_minor_version, auto_update_core
  • parameters.flags — masking mode for WebRTC, audio, fonts, geolocation, graphics, navigator, ports, proxy, screen, timezone, canvas noise, QUIC, and startup behavior.
  • parameters.fingerprint — explicit values for navigator, localization, timezone, graphics, WebRTC, media devices, screen, geolocation, ports, fonts, and extra command-line parameters.
  • parameters.storage — local vs cloud storage options.
  • parameters.proxy — HTTP/HTTPS/SOCKS proxy with optional credentials and traffic saving.
  • parameters.custom_start_urls — up to 5 URLs to open on launch.
Note

Backward compatibility: The parser still accepts the legacy strings mimic and stealthfox, but they are treated as aliases for chromium and firefox. New profiles should use the generic names.

Complete field reference#

Top-level profile fields#

namestringrequired#

Profile name.

browser_typechromium | firefox | mobile_safarirequired#

Browser engine. Legacy aliases mimic/stealthfox still work.

os_typelinux | macos | windows | android | iosrequired#

Operating-system persona.

automationselenium | playwright | puppeteer#

Automation backend. selenium is default; playwright/puppeteer map to CDP mode.

Default: "selenium"

is_headlessboolean#

Run the browser headlessly.

Default: "false"

folder_idstring#

Persistent folder identifier for local storage.

core_versionnumber#

The Chromium major version. A drawn user agent and drawn Client Hints claim it (not for Firefox or iOS Safari personas).

core_minor_versionnumber#

Browser minor version (informational).

auto_update_coreboolean#

Whether to auto-update the core version.

tagsstring[]#

Arbitrary tags.

timesnumber#

Usage counter.

Default: "1"

notesstring#

Human-readable notes.

parameters#

flagsobjectrequired#

One word or literal per key (see below).

fingerprintobjectrequired#

Explicit fingerprint values. A value is used unless the flag for it says natural, or off for the keys that can be off.

storageobjectrequired#

is_local and save_service_worker.

proxyobject#

Proxy configuration.

custom_start_urlsstring[]#

URLs opened on launch. Maximum 5; extras are ignored.

parameters.flags#

The masking flags (webrtc_masking, proxy_masking, geolocation_popup, audio_masking, navigator_masking, localization_masking, timezone_masking, graphics_masking, fonts_masking, media_devices_masking, screen_masking, ports_masking, geolocation_masking, canvas_noise and quic_mode) take the words and the literal formats in the one table in Fingerprint & Stealth Profiles. A flag the payload leaves out is auto, except ports_masking (mask: the ports of fingerprint.ports are blocked), canvas_noise (seeded noise) and quic_mode (disabled). The rest:

graphics_noisenatural | mask#

Also accepts low, medium, high, off. Ignored: it never drove graphics noise.

disable_csptrue | false#

Bypass Content-Security-Policy for the page context.

grant_permissionstrue | false#

Grant common browser permissions at startup so prompts do not fire.

startup_behaviorrecover | custom#

recover restores last-session tabs; custom opens custom_start_urls.

native_spoofingtrue | false#

When true, spoofing is applied through CDP/launch args instead of JS where possible, making it invisible to page-side inspection.

parameters.fingerprint#

Fields marked required are needed when the flag for the group is custom.

navigatorobject#
localizationobject#

Pass an empty string for languages/locale if you only need accept_languages.

timezoneobject#
graphicobject#
webrtcobject#

Also supports local_ip via the flag literal.

media_devicesobject#
screenobject#
geolocationobject#
portsnumber[]#

List of ports to block/allow.

fontsstring[]#

List of installed fonts.

cmd_params{ params: [{ flag, value }] }#

Extra Chromium command-line flags.

max_touch_pointsnumber#

Android/iOS only.

Default: "5"

parameters.proxy#

typehttp | https | socks5required#

Proxy scheme.

hoststringrequired#

Proxy host. IPv6 addresses should not include brackets when supplied in this object (use them only in proxy_masking URL literals).

portnumberrequired#

Proxy port.

usernamestring#

Basic-auth username.

passwordstring#

Basic-auth password.

save_trafficboolean#

When true, disables image/video loading to save proxy bandwidth.

Default: "false"

The words of a flag#

A flag is a word or a literal value. Every key reads the same words, and each setting ends in one of the four states of a Spoof. One table in Fingerprint & Stealth Profiles lists, for every key, the words that give Natural, Random, a value and Off, and the format of the literal it reads. A value in fingerprint.* is the switch: unless the flag says natural (or off for a key that can be off), the setting uses the value.

An unknown word, or a literal not in the format of its key, is logged and read as natural; it is never guessed at. A profile gets the same drawn values on every launch, because its folder and name seed the draw.

Concrete mask-mode examples#

The values turn the navigator on by themselves: the launcher passes the supplied user_agent to --user-agent and the platform value into the evasion bootstrap. Add "navigator_masking": "natural" to the flags to keep the browser’s own navigator whatever the profile holds, or "mask" to draw the settings the profile does not give (the memory, the touch points, the vendor) from the same machine.

Literal value shortcuts#

Most masking flags also accept a concrete literal string instead of a word. The parser reads the flag as mask with that value and writes the value into the fingerprint so it is applied automatically. The format of each literal is in the Value column of the table of keywords.

Full literal-value profile#

The parser extracts every literal value above and populates the matching Fingerprint fields, so the stealth bootstrap and launch args can use them without any extra code.

A proxy#

The parameters.proxy block becomes --proxy-server=http://alice:secret@proxy.example.com:8080: proxy_masking defaults to auto, which uses a proxy that has a host. Set proxy_masking: natural (or direct) to launch without a proxy although the block is there.

Native-level spoofing (native_spoofing: true)#

When native_spoofing is true, the user agent, screen size, timezone, and geolocation are applied through CDP/launch args rather than JavaScript. Page scripts see the fake values as native browser properties with no JS override to inspect.

WebRTC disabled / masked#

webrtc_masking: mask forces --force-webrtc-ip-handling-policy=disable_non_proxied_udp so public IP leakage is reduced, and draws the addresses WebRTC reports. The default, auto, passes the same policy and reports no address of its own unless the profile holds a WebRTC IP. webrtc_masking: natural leaves the browser’s default policy in place, and disabled (or off, block) makes WebRTC unavailable.

To spoof specific public/local IPs, use the literal public:IP|local:IP format or the fingerprint.webrtc.public_ip field:

Mapping to SeleniumBase concepts#

Not every anti-detect flag has a direct WebDriver/Chrome capability. The Rust port applies what it can and preserves the rest as metadata:

Profile fieldApplied via
browser_typeBrowser::Chrome or Browser::Firefox
os_type == androidmobile emulation (max_touch_points, mobile UA)
automationDriverMode::WebDriver for selenium; DriverMode::Cdp for playwright/puppeteer
is_headlessBrowserConfig.headless
fingerprint.navigator.user_agent--user-agent argument
fingerprint.navigator.hardware_concurrencynavigator.hardwareConcurrency override
fingerprint.navigator.device_memorynavigator.deviceMemory override
fingerprint.navigator.os_cpunavigator.oscpu override (Firefox)
fingerprint.max_touch_pointsnavigator.maxTouchPoints override
fingerprint.localization.locale--lang argument
parameters.proxy--proxy-server argument
parameters.proxy.save_trafficad_block / image-blocking launch args
fingerprint.graphic.vendor_id / renderer_idattached to WebGL context for introspection scripts
fingerprint.screenBaseCase::set_window_size at runtime
fingerprint.geolocationEmulation.setGeolocationOverride CDP call
fingerprint.cmd_paramsextra Chromium arguments
parameters.custom_start_urlsfirst URL is used as start_page; extras are opened at runtime (max 5)

Flags such as canvas noise, font masking, WebRTC masking, and idle-time behavior are stored in the profile and exposed to the stealth bootstrap, custom CDP scripts, extensions, or future anti-detect injection features.

Programmatic usage#

Tauri profile-manager app#

The examples/tauri-profile-manager app accepts a profile JSON payload in the Import profile JSON section. It converts the payload into a local profile and launches it with the converted BrowserConfig. Profiles imported this way show an external badge in the profile list.

Further reading#

Troubleshooting#

Profile fails to parse

Likely cause. Unknown browser or OS type.

Fix. Use chromium/firefox/mobile_safari and linux/macos/windows/android/ios.

A value is ignored

Likely cause. The flag for it is natural (or off, for the keys that can be off).

Fix. Set the flag to auto or mask, or leave it out.

A flag does nothing

Likely cause. The word is not one of the words above; it is logged and read as natural.

Fix. Check the log for the keyword, and use a word from the table.

Proxy not applied

Likely cause. proxy_masking is natural or disabled, or the proxy has no host.

Fix. Leave proxy_masking at auto (or set custom) and provide parameters.proxy with a host.

Native spoofing has no effect

Likely cause. Driver is in pure WebDriver mode.

Fix. Use DriverMode::Cdp or DriverMode::Uc.