Skip to Content
Fingerprint ProtectionWebGPU Fingerprint Protection

WebGPU Fingerprinting and GPU Profile Consistency

Keep WebGPU adapter behavior aligned with the selected browser profile.


Prerequisites


Overview

WebGPU is a modern graphics API that can expose GPU adapter family, capability limits, feature support, and rendering behavior. These properties can become a fingerprint surface because they vary by hardware, driver, operating system, and browser profile.

BotBrowser keeps WebGPU behavior aligned with the selected profile so a browser identity does not expose the host GPU by accident.


Quick Start

# Default: use profile-defined WebGPU values (recommended) chromium-browser \ --bot-profile="path/to/profile.enc" \ --user-data-dir="$(mktemp -d)"

By default, BotBrowser uses the profile’s WebGPU adapter data. No extra flags needed.


Configuration

The --bot-config-webgpu flag controls WebGPU behavior:

ValueBehavior
profile (default)Return profile-defined adapter information. GPU probes see the target device’s values regardless of the host hardware.
realUse the host system’s actual GPU. Useful when you need native GPU performance and don’t need WebGPU fingerprint protection.
disabledDisable WebGPU entirely. navigator.gpu.requestAdapter() returns null.
# Use profile GPU identity (default) chromium-browser \ --bot-profile="path/to/profile.enc" \ --bot-config-webgpu=profile # Use host GPU directly chromium-browser \ --bot-profile="path/to/profile.enc" \ --bot-config-webgpu=real # Disable WebGPU chromium-browser \ --bot-profile="path/to/profile.enc" \ --bot-config-webgpu=disabled

Common Scenarios

Cross-platform consistency

Run a Windows profile on a Linux server. The WebGPU adapter reports the profile’s GPU identity, not the host’s:

const browser = await chromium.launch({ executablePath: process.env.BOTBROWSER_EXEC_PATH, headless: true, args: [ "--bot-profile=path/to/win-profile.enc", ], }); const page = await browser.newPage(); const adapter = await page.evaluate(async () => { const gpu = navigator.gpu; if (!gpu) return null; const adapter = await gpu.requestAdapter(); if (!adapter) return null; const info = await adapter.requestAdapterInfo(); return { vendor: info.vendor, architecture: info.architecture }; }); console.log(adapter); // Profile's GPU, not host's await browser.close();

Disable WebGPU for lightweight tasks

If your workload does not require WebGPU, disable it to reduce resource usage:

chromium-browser \ --bot-profile="path/to/profile.enc" \ --bot-config-webgpu=disabled \ --user-data-dir="$(mktemp -d)"

Troubleshooting / FAQ

ProblemSolution
requestAdapter() returns nullOn headless Linux servers, ensure GPU emulation is active (default). If you set --bot-gpu-emulation=false, use --use-angle=gl with libgl1-mesa-dri installed so ANGLE picks up Mesa llvmpipe. Do not add --disable-gpu: it disables WebGPU adapter discovery on current Chromium. Full backend matrix in Linux GPU Backend Selection.
WebGPU shows host GPU infoCheck that --bot-config-webgpu is set to profile (default) and not real.
High CPU during WebGPU operationsExpected on software-rendered environments. See Linux GPU Backend Selection for CPU behavior across SwiftShader, Mesa llvmpipe, and lavapipe.

Next Steps


Related documentation: Advanced Features | CLI Flags


Legal Disclaimer & Terms of UseResponsible Use Guidelines. BotBrowser is for authorized fingerprint protection and privacy research only.

Updated