Одностраничный коллектор отпечатков браузера (fp collector v3) для стенд-замеров реальных устройств. Публичная страница: https://artimonkey.github.io/fp-stand/
Открой с любого устройства, нажми «Собрать» — результат уходит автоматически (ntfy-топик, чанки по 3000 байт). Ручные «Скачать/Скопировать JSON» — запасной вариант, если ntfy недоступен из сети устройства.
Поллер на UTM (/root/fp_stand/ntfy_poll.py, systemd timer fp-poll.timer, каждые 10 мин)
собирает чанки и складывает готовые submission-файлы в utm:/root/fp_stand/submissions/.
ntfy хранит сообщения 12 ч — UTM догонит пропущенное после сна.
Опционально: если поднят live-бэкенд (UTM-стенд через туннель), вписать его URL в
поле «Backend URL» — страница дополнительно запостит JSON туда (POST <url>/collect).
Собирает (schema rc2-v3): navigator/UACH (включая high-entropy), WebGL1+2 (caps, precision 12 пар, extensions, versions, unmasked vendor/renderer), screen/DPR/геометрия, performance.memory + heap-growth probe, CPU-пробы (math/str/arr), mediaDevices, cookieDeprecationLabel, canvas hash, audio (sampleRate/baseLatency + OfflineAudioContext hash), codecs, ontouch*-слоты, permissions, window.chrome, webdriver, suspicious globals, toString-интегрити, timezone/locale + HTTP-заголовки запроса на бэкенде.
Поля userAgentData / deviceMemory / battery / mediaDevices требуют secure context —
GitHub Pages отдаёт https, так что всё работает. На бэкенде проверять secure: ["https:", true].