A local instrument for testing the same-device hypothesis: that one physical machine produces similar Web Audio feature vectors across different browsers, and a different machine produces dissimilar ones.
Audio fingerprints are probabilistic measurements of browser audio-processing behavior. They are not guaranteed unique hardware identifiers.
What this measures, and what it deliberately does not do.
Each fingerprint is produced by synthesising six deterministic signals inside an OfflineAudioContext, rendering them through
oscillators, gain stages, biquad filters, a dynamics compressor and an analyser, and
then extracting scalar features from the resulting buffers.
The features are combined into a single normalized vector and compared using cosine similarity and Euclidean distance. The buffer is never hashed: a one-bit difference would change a hash completely, which makes the question "how similar are these?" unanswerable.
The hypothesis is being tested here, not assumed. Every number on this page comes from measurements you took on this machine. Nothing is seeded, simulated or filled in.
Name this browser, assign it to a physical device group, and measure.
Checking browser capabilities…
Stored locally. Device groups can be reassigned at any time without re-measuring.
No samples saved yet. Generate a fingerprint above to start collecting data.
Every saved fingerprint against every other, using the mode and threshold you choose.
Save at least two fingerprints to build a comparison matrix.
Measure stability on this browser first. Do not assume it.
Checking browser capabilities…
Within-device versus between-device similarity, and how far apart the two distributions actually are.
Save fingerprints from at least two browsers, and assign them to device groups, before any analysis is possible.
Take the measurements somewhere else for analysis.
The JSON export contains experiment metadata, every sample with its full feature vector and raw feature values, environment metadata, and the computed comparisons for both modes. The CSV contains one row per pairwise comparison per mode — the shape you want for a pivot table or a pandas DataFrame. Both files are generated in your browser and saved straight to disk.
Nothing to export yet.
Saved samples live in this browser's localStorage, which is
private to each browser profile — so Chrome cannot see Arc's samples, and neither can see
Safari's. Export JSON from each browser, then import those files here to assemble the whole
experiment in one place. Importing merges by sample id, so the same file can be imported twice
without duplicating measurements.