Core Signals — these form the UID (hardware-bound, cache-independent)
Method
GPU renders text + shapes
Why stable
GPU driver renders pixels differently per device — unique to your hardware
Clears with cookie?
NO — hardware-bound
Hash
Computing…
Method
Oscillator → DynamicsCompressor math
Why stable
Floating-point audio processing differs per CPU/audio hardware — can't be cleared
Clears with cookie?
NO — CPU-level math
Signal sum (4500–5000)
—
Hash
Computing…
Vendor
Detecting…
Renderer
Detecting…
Why stable
WebGL exposes exact GPU model string — unique to device
Clears with cookie?
NO — GPU doesn't change
Hash
Detecting…
Resolution
—
Device Pixel Ratio
—
Color Depth
—
Clears with cookie?
NO — physical screen
Hash
—
Method
Canvas text width measurement
Detected fonts
Scanning…
Total found
—
Clears with cookie?
NO — OS fonts
Hash
—
Timezone
—
Language
—
All locales
—
Clears with cookie?
NO — OS setting
Hash
—
CPU Cores
—
RAM (approx)
—
Platform
—
Touch Points
—
Clears with cookie?
NO — physical hardware
Hash
—
Metadata Signals — shown for analysis only, NOT included in UID (these change frequently)
How the UID is computed — each signal separate, each with its own hash
🖼️
Canvas
GPU renders → toDataURL → FNV32 hash
30% weight
🎵
Audio
OfflineAudioContext → sum samples 4500–5000 → FNV32
25% weight
🖥️
GPU
WEBGL_debug_renderer_info → vendor+renderer → FNV32
20% weight
📐
Screen
width×height×colorDepth×pixelRatio → FNV32
10% weight
🔤
Fonts
Canvas width probe × 30 fonts → detected list → FNV32
8% weight
🌍
Locale
Intl + navigator.languages → FNV32
7% weight
⚙️
Hardware
CPU cores + RAM + platform + touch → FNV32
5% weight
🚫
Excluded
Network IP, Battery, GPS — change too often
not in UID
━━━━━━━━━
All 7 hashes combined
━━━━━━━━━
→
Final FNV32 master hash
→
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX