diff --git a/.gitignore b/.gitignore
index 5b59591..63df802 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ playwright-report
test-results
coverage
docs
+references/.venv
diff --git a/JSDOC_README.md b/JSDOC_README.md
index 4f9b9c0..d93706f 100644
--- a/JSDOC_README.md
+++ b/JSDOC_README.md
@@ -1,6 +1,6 @@
-# Ghostati - Technical Documentation
+# Ghostmaxxing - Technical Documentation
-Welcome to the internal technical documentation for Ghostati, a Web AR laboratory for the development and real-time testing of anti-biometric facial recognition camouflage (CV Dazzle).
+Welcome to the internal technical documentation for Ghostmaxxing, a Web AR laboratory for the development and real-time testing of anti-biometric facial recognition camouflage (CV Dazzle).
This documentation is generated from the source code using JSDoc. It provides a detailed breakdown of the functions, classes, and namespaces used throughout the project.
diff --git a/PROMPT-REFERENCES-UPDATE.txt b/PROMPT-REFERENCES-UPDATE.txt
deleted file mode 100644
index 7ef1977..0000000
--- a/PROMPT-REFERENCES-UPDATE.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-Produce or extend a JSON reference set for the same project universe as the existing file "REFERENCES.json".
-
-Goal:
-Maintain a coherent, deduplicated set of cultural, artistic, academic, and activism-adjacent references around:
-- anti-surveillance aesthetics
-- face obfuscation / face camouflage
-- makeup-based or appearance-based interventions
-- adversarial attacks on face recognition
-- adjacent physical-world adversarial vision techniques
-
-Output rules:
-1. Output valid JSON only.
-2. Preserve the top-level structure:
-{
- "schema_version": "2.0",
- "project_scope": "...",
- "ordering_definition": "...",
- "closeness_definition": {...},
- "preview_image_definition": "...",
- "references": [...]
-}
-3. Each reference object MUST contain at least:
-- slug
-- title
-- author
-- year
-- link
-- type
-- closeness
-- description
-- preview_image
-
-Field conventions:
-- slug: kebab-case unique identifier stable across updates.
-- title: canonical public title of the work/project/paper.
-- author: array of author/creator names in display order.
-- year: integer year of publication, release, first public presentation, or first documented appearance.
-- link: stable canonical link preferred in this order:
- DOI > arXiv abs page > official project page > official institutional page.
-- type: exactly one of "artistic" | "research" | "activism".
-- closeness: integer from 1 to 100, not a string and no percent sign.
-- description: short editorial description in Italian, ideally 1–2 sentences, written for exhibition/timeline display.
-- preview_image: local site-root path beginning with / and pointing to an image asset, e.g. "/references-v2-previews/my-item.svg".
-
-Closeness rubric:
-- 100 = exact anchor cluster for this project world:
- * Michelle Tylicki + Lauri Love — DAZZLE
- * Adam Harvey — CV Dazzle
-- 90–99 = direct face-centered anti-surveillance / makeup / camouflage references.
-- 70–89 = directly relevant face-recognition attack literature or highly adjacent face-obfuscation work.
-- 40–69 = enabling or adjacent adversarial-vision methods that matter conceptually but are less face/makeup-specific.
-- 1–39 = peripheral or modality-shifted references, especially infrared/night-vision/sensor-jamming examples.
-
-Preview-image rules:
-- preview_image should point to a local asset, not a remote URL.
-- If no authoritative image is available, use a typological illustration or icon that represents the strategy visually.
-- Prefer one preview image per entry, stable over time.
-- Do not leave preview_image empty.
-
-Normalization rules:
-- Deduplicate by normalized title first, then by DOI or canonical link.
-- Prefer canonical capitalization.
-- Prefer full author lists when available.
-- Do not invent missing metadata.
-- If metadata is uncertain, keep the source out rather than guessing.
-- Keep the existing entry if the new candidate is the same work with a worse link.
-- If the same work exists with a better canonical link, replace only the link and preserve closeness unless there is a strong reason to revise it.
-- Preserve the existing slug whenever the same work reappears.
-
-Ordering logic:
-- Return the full updated JSON sorted newest first:
- year descending, closeness descending, title ascending.
-
-Style constraints:
-- Avoid generic press coverage unless it is itself the primary artistic or activist source.
-- Prefer official project pages, DOI links, arXiv abs pages, institutional pages, or artist pages.
-- Keep the set operational: every added item should help situate the project culturally, artistically, academically, or politically.
-- Descriptions should be concise, readable, and suitable for a static timeline in Hugo.
-
-When adding new references:
-- Merge them into the existing JSON instead of rewriting from scratch.
-- Preserve the schema_version, ordering_definition, closeness_definition, and preview_image_definition unless explicitly asked to change them.
-- Maintain internal consistency with previously assigned closeness values.
-
-If asked to append items, return the full updated JSON, not just the delta.
-
diff --git a/README.it.md b/README.it.md
deleted file mode 100644
index 1090e9c..0000000
--- a/README.it.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# Ghòstati | Face Lab
-
-Laboratorio di trucco avversario\* per ingannare il riconoscimento facciale agendo su pochi punti del tuo volto.
-
-
-\* Come tradurreste voi "adversarial makeup" ? trucco antagonista? trucco avversariale?
-
-## Ispirato alle ricerche di (References)
-
-- [DAZZLE](https://www.michelletylicki.info/dazzle/) — Michelle Tylicki, Lauri Love (2023). Camouflage facciale come gesto estetico-politico contro la sorveglianza biometrica. *artistico*
-- [CV Dazzle](https://adam.harvey.studio/cvdazzle/) — Adam Harvey (2010). Metodo iconico di trucco/hairstyle per disturbare il rilevamento facciale automatico. *artistico*
-- [The Dazzle Club](https://emilyroderick.com/work/the-dazzle-club/) — Evie Price, Emily Roderick, Georgina Rowlands, Anna Hart (2019). Azioni urbane contro il riconoscimento facciale con mascheramento creativo. *artistico*
-- [Adv-Makeup: A New Imperceptible and Transferable Attack on Face Recognition](https://arxiv.org/abs/2105.03162) — Bangjie Yin et al. (2021). Attacco makeup trasferibile e poco percettibile contro sistemi di face recognition. *pubblicazione*
-- [Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition](https://doi.org/10.1145/2976749.2978392) — Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, Michael K. Reiter (2016). Attacchi fisici stealth con accessori contro modelli di riconoscimento facciale. *pubblicazione*
-- [HyperFace](https://adam.harvey.studio/hyperface/) — Adam Harvey (2016). Pattern tessili che massimizzano falsi positivi dei detector facciali. *artistico*
-- [Adversarial Generative Nets: Neural Network Attacks on State-of-the-Art Face Recognition](https://arxiv.org/abs/1801.00349) — Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer, Michael K. Reiter (2017). Approccio generativo per perturbare in modo mirato il riconoscimento del volto. *pubblicazione*
-- [Adversarial Attacks against Face Recognition: A Comprehensive Study](https://arxiv.org/abs/2007.11709) — Fatemeh Vakhshiteh, Ahmad Nickabadi, Raghavendra Ramachandra (2020). Survey completo su tecniche di attacco ai sistemi di riconoscimento facciale. *pubblicazione*
-- [VLA: A Practical Visible Light-based Attack on Face Recognition Systems in Physical World](https://doi.org/10.1145/3351261) — Meng Shen, Zelin Liao, Liehuang Zhu, Ke Xu, Xiaojiang Du (2019). Attacco fisico con luce visibile per degradare l'identificazione facciale. *pubblicazione*
-- [Adversarial Robustness Toolbox v1.0.0](https://arxiv.org/abs/1807.01069) — Maria-Irina Nicolae et al. (2018). Libreria per valutare robustezza e attacchi avversari in pipeline ML. *altro*
-- [Adversarial Patch](https://arxiv.org/abs/1712.09665) — Tom B. Brown, Dandelion Mané, Aurko Roy, Martín Abadi, Justin Gilmer (2017). Patch fisiche stampabili che causano errori di classificazione robusti. *pubblicazione*
-- [Adversarial Manipulation of Deep Representations](https://arxiv.org/abs/1511.05122) — Sara Sabour, Yanshuai Cao, Fartash Faghri, David J. Fleet (2015). Manipolazione di rappresentazioni profonde per obiettivi avversari. *pubblicazione*
-- [DPatch: An Adversarial Patch Attack on Object Detectors](https://arxiv.org/abs/1806.02299) — Xin Liu, Huanrui Yang, Ziwei Liu, Linghao Song, Hai Li, Yiran Chen (2018). Patch avversaria fisica per compromettere object detector in scena reale. *pubblicazione*
-- [ShapeShifter: Robust Physical Adversarial Attack on Faster R-CNN Object Detector](https://arxiv.org/abs/1804.05810) — Shang-Tse Chen, Cory Cornelius, Jason Martin, Duen Horng Chau (2018). Esempi fisici robusti contro detector basati su Faster R-CNN. *pubblicazione*
-- [Breaking certified defenses: Semantic adversarial examples with spoofed robustness certificates](https://arxiv.org/abs/2003.08937) — Amin Ghiasi, Ali Shafahi, Tom Goldstein (2020). Dimostra limiti delle difese certificate con esempi avversari semantici. *pubblicazione*
-- [Physical-World Optical Adversarial Attacks on 3D Face Recognition](https://arxiv.org/abs/2205.13412) — Yanjie Li, Yiquan Li, Xuelong Dai, Songtao Guo, Bin Xiao (2022). Attacchi ottici nel mondo fisico contro riconoscimento facciale 3D. *pubblicazione*
-- [Human-Imperceptible Physical Adversarial Attack for NIR Face Recognition Models](https://arxiv.org/abs/2504.15823) — Songyan Xie, Jinghang Wen, Encheng Su, Qiucheng Yu (2025). Attacco fisico quasi impercettibile su modelli NIR per il volto. *pubblicazione*
-- [Accessorize in the Dark: A Security Analysis of Near-Infrared Face Recognition](https://doi.org/10.1007/978-3-031-51479-1_3) — Amit Cohen, Mahmood Sharif (2024). Analisi di sicurezza su riconoscimento facciale near-infrared e bypass pratici. *pubblicazione*
-- [The Camera Shy Hoodie](https://www.macpierce.com/the-camera-shy-hoodie) — Mac Pierce (2023). Capo wearable pensato per disturbare cattura e analisi visiva. *artistico*
-
-# Ecco a voi: Ghòstati!
-
-
-
-## Panoramica
-
-**Ghòstati** è una piattaforma sperimentale e uno strumento diagnostico progettato per contrastare gli algoritmi di riconoscimento facciale. Applicando specifici pattern di trucco (ispirati al concetto di CV Dazzle), gli utenti possono esplorare come i modelli di computer vision interpretano i landmark facciali e tentare di offuscare la propria identità digitale in tempo reale.
-
-Il progetto presenta un'architettura modulare basata su plugin, la quale permette a qualsiasi sviluppatore di scrivere script di trucco AR personalizzati ("Ghostyles") e di testarne l'efficacia contro i modelli di riconoscimento direttamente nel browser tramite la webcam.
-
-## Funzionalità Principali
-
-- **Live Face Tracking:** Rilevamento dei landmark facciali in tempo reale direttamente nel browser utilizzando `face-api.js`.
-- **Sistema di Plugin Modulare (Ghostyles):** Carica dinamicamente effetti di trucco AR personalizzati. I plugin possono essere ospitati localmente o tramite URL remoto. Alcuni effetti basilari (che non ostacolano il riconoscimento ma aiutano a capire il funzionamento del codice) sono :
- - Graphic Liner, Smokey Eyes, Blush Lift, Lip Tint, Soft Contour, Stage Mask, Splash, etc.
- - La pagina di documentazione dei plug-in: https://sindacato.nina.watch/ghostati/ghostati-docs.html
-- **Modalità Diagnostica ("Scansione Trucco"):** Testa l'efficacia del tuo camouflage AR. Lo strumento valuta l'opacità del trucco, cattura il volto alterato e calcola la probabilità di corrispondenza rispetto ai profili salvati per determinare se il sistema di riconoscimento è stato ingannato.
-- **Salva e Confronta (Enrolling):** Salva un volto di base iniziale e confrontalo con il feed live della webcam per verificare se l'algoritmo di face matching ti riconosce ancora dopo aver applicato il camuffamento.
-- **Privacy-First:** Tutte le elaborazioni vengono eseguite localmente sul computer, senza caricare dati biometrici su server remoti.
-
-## Installazione
-
-Trattandosi di un'applicazione web statica, non è necessario alcun passaggio di "build", e si può testare online a [https://sindacato.nina.watch/ghostati](https://sindacato.nina.watch/ghostati).
-
-1. Clona il repository:
- ```bash
- git clone https://github.com/vecna/ghostati.git
- cd ghostati
- ```
-2. Avvia un server web HTTP locale nella cartella:
- ```bash
- npx http-server .
- # oppure
- python3 -m http.server 8000
- ```
-3. Apri un browser moderno e vai all'indirizzo `http://localhost:8000/ghostati-face-api.html`.
-
-## Sviluppare un Ghostyle (Plugin)
-
-Puoi creare i tuoi effetti modulari di trucco AR chiamati **Ghostyles**. Un "Ghostyle" è un semplice modulo JavaScript che esporta una funzione di disegno atta ad agganciarsi al motore di face tracking.
-
-Per sviluppare un nuovo Ghostyle:
-1. Fai una copia di `./ghostyles/00-template.js`.
-2. Implementa la tua logica su canvas basandoti sui landmark facciali forniti ad ogni frame.
-3. Testalo dal vivo incollando l'URL locale/remoto nel box "Carica Ghostyle Remoto" nella pagina!
-
-Consulta la pagina `ghostati-docs.html` per una documentazione più avanzata sullo sviluppo dei Ghostyles.
-
-## *Contesto a Maggio 2026*
-
-Presentato all'interno del **Festival di NINA**, questo strumento mira a sensibilizzare l'opinione pubblica riguardo la sorveglianza biometrica e l'uso delle tecnologie di riconoscimento facciale.
-
----
-*Per la versione in inglese, consulta [README.md](README.md).*
diff --git a/README.md b/README.md
index 72ab975..cbbc3f8 100644
--- a/README.md
+++ b/README.md
@@ -1,156 +1,330 @@
-## Status
-
-# ghòstati! | the _Face Confusion Assistant?_
-
-This is a: Web AR laboratory for the development and real-time testing of anti-biometric facial recognition camouflage (also known as, Computer Vision Dazzle).
-
-
-
-## Overview
-
-**ghòstati** is an experimental platform and diagnostic tool designed to counter facial recognition algorithms. By applying specific makeup patterns (inspired by the CV Dazzle concept), users can explore how computer vision models interpret facial landmarks and attempt to anonymize their digital footprint in real time.
-
-The project features a fully modular, plugin-based architecture, allowing any developer to write custom AR makeup scripts ("Ghostyles") and test their efficiacy against recognition models directly in the browser via their webcam.
-
-
-
-## Features
-- **Live Face Tracking:** Real-time facial landmark detection directly in the browser utilizing `face-api.js`.
-- **Modular Plugin System (Ghostyles):** Load custom AR makeup effects dynamically. Plugins can be hosted locally or loaded via a remote URL. Included effects:
- - Graphic Liner, Smokey Eyes, Blush Lift, Lip Tint, Soft Contour, Stage Mask, Splash, etc.
-- **Diagnostic Mode ("Scansione Trucco"):** Test the effectiveness of your AR camouflage. The tool evaluates makeup opacity, captures the altered face, and computes matching likelihood against saved profiles to determine if the face recognition system is successfully spoofed.
-- **Save & Compare:** Save an initial baseline face and compare live webcam feeds to it to check if the face matching algorithm still recognizes you after applying the camouflage.
-- **Privacy-First:** All processing is done locally on the client interface without uploading biometric data to remote servers.
-
-## Getting Started
-
-Since it's a static web application, there is no build step required.
-
-1. Clone the repository:
- ```bash
- git clone https://github.com/vecna/ghostati.git
- cd ghostati
- ```
-2. Serve the directory with a local HTTP server:
- ```bash
- npx http-server .
- # or
- python3 -m http.server 8000
- ```
-3. Open a modern browser, ensure to have a webcam, and navigate to `http://localhost:8000/ghostati.html`.
-
-## Generating Documentation
-
-This project uses [JSDoc](https://jsdoc.app/) to generate documentation for the source code.
-
-To generate the documentation, run the following command:
-```bash
-npm run docs
+# ghòstati
+
+```text
+ _ _ _ _
+ __ _| |__ ___| |_ __ _| |_(_)
+ / _` | '_ \ / _ \ __/ _` | __| |
+ | (_| | | | | (_) | || (_| | |_| |
+ \__, |_| |_|\___/ \__\__,_|\__|_|
+ |___/ Web AR face-recognition test lab
```
-This will parse the JSDoc comments in the `scripts/` directory and generate a static HTML website in the `docs/` folder. You can open `docs/index.html` in your browser to view the documentation.
-
-## Writing a Ghostyle (Plugin)
-
-You can create your own modular AR makeup effects called **Ghostyles**. A "Ghostyle" is a simple JavaScript module that exports a draw function hooking into the face tracking engine.
-
-To develop a new Ghostyle:
-1. Copy the `./ghostyles/00-template.js`.
-2. Implement your custom canvas drawing logic based on the provided facial landmarks.
-3. Test it live by editing the `ghostylist.json` file
-4. Open a PR to get it distributed - this can't get any easy at the moment.
-
-See the `ghostati-docs.html` page for more advanced documentation on Ghostyle development.
-
-## Context
-
-Presented as part of the **NINA Festival**, this tool aims to raise awareness regarding biometric surveillance and facial recognition technologies.
-
----
-*For the Italian version, please see [README.it.md](README.it.md).*
-
-
-
-
-
-
-
-
-
+[](coverage/)
+[](docs/)
+[](https://github.com/vecna/ghostati)
+**ghòstati** is a static, browser-side Web AR laboratory for designing and testing face-obfuscation overlays against face-detection and face-recognition pipelines.
+The project combines webcam capture, [`face-api.js`](https://github.com/vladmandic/face-api), [MediaPipe Tasks Vision](https://developers.google.com/mediapipe/solutions/vision/face_landmarker), canvas rendering, local descriptor storage, and a plugin system for custom **Ghostyles**: 2D or 3D face overlays that can be tested against recognition behavior in real time.
+Primary links:
+- Live project root: [https://sindacato.nina.watch/ghostati/](https://sindacato.nina.watch/ghostati/)
+- Browser app: [ghostati.html](https://sindacato.nina.watch/ghostati/ghostati.html)
+- Source code: [github.com/vecna/ghostati](https://github.com/vecna/ghostati)
+- Ghostyle gallery / distribution site: [ghostyles.vecna.eu](https://ghostyles.vecna.eu)
+- Generated API docs: [docs/](https://sindacato.nina.watch/ghostati/docs/)
+- Legacy docs page: [ghostati-docs.html](https://sindacato.nina.watch/ghostati/ghostati-docs.html)
+- Test coverage: [coverage/](https://sindacato.nina.watch/ghostati/coverage/)
+- Project context page: [sindacato.nina.watch/it/iniziative/ghostati](https://sindacato.nina.watch/it/iniziative/ghostati/)
+- Sitemap: [sitemap.xml](https://sindacato.nina.watch/ghostati/sitemap.xml)
+- Reference dataset: [REFERENCES.json](REFERENCES.json)
+- Reference-update prompt: [PROMPT-REFERENCES-UPDATE.txt](PROMPT-REFERENCES-UPDATE.txt)
+**Central field-reporting resource:** if you know of a place where facial recognition is being deployed, tested, procured, or hidden in public-space infrastructure, use the NINA submission node: [Raccontacelo](https://raccontaci.nina.watch/#/submission?context=10c78596-3ea0-4867-b2fb-21fdb8e3f40c). Reports about supplier, technology, data access, deployment context, limits, and abuses are project inputs, not side notes.
+# What the app does
+```text
+ webcam ──► detector ──► landmarks ──► overlay renderer
+ │ │ │
+ └──── baseline face DB ◄──┴──── compare ◄──┘
+```
+The app is designed around a simple experimental loop:
+
+1. Start the webcam in a modern browser.
+2. Load face-detection and landmark models.
+3. Save a local baseline descriptor for a consenting test face.
+4. Apply a Ghostyle overlay to the live video/canvas layer.
+5. Re-run detection and recognition against the saved descriptor.
+6. Observe whether the pipeline still detects the face, extracts landmarks, and matches the baseline.
+
+Core capabilities:
+
+- live webcam setup and teardown through [`scripts/camera.js`](scripts/camera.js);
+- face detection, landmarks, descriptors, and match orchestration through [`scripts/engine.js`](scripts/engine.js);
+- 3D/MediaPipe loop support through [`scripts/mediapipe-loop.js`](scripts/mediapipe-loop.js) and [`scripts/engine-3d.js`](scripts/engine-3d.js);
+- bounding-box overlays through [`scripts/bbox-overlay.js`](scripts/bbox-overlay.js);
+- dynamic Ghostyle loading through [`scripts/ghostyles-manager.js`](scripts/ghostyles-manager.js);
+- 3D plugin loading through [`scripts/plugins3d-loader.js`](scripts/plugins3d-loader.js);
+- IndexedDB-backed local state through [`scripts/db.js`](scripts/db.js);
+- DOM and UI bindings through [`scripts/dom.js`](scripts/dom.js), [`scripts/main.js`](scripts/main.js), and [`scripts/ghostati-mobile-ui.js`](scripts/ghostati-mobile-ui.js);
+- image/makeup export helpers through [`scripts/export-makeup.js`](scripts/export-makeup.js);
+- landing-page animation through [`scripts/index-effect.js`](scripts/index-effect.js).
+
+# Runtime architecture
+
+```text
+ ghostati.html
+ ├─ @vladmandic/face-api
+ ├─ @mediapipe/tasks-vision
+ ├─ scripts/main.js
+ │ ├─ camera.js
+ │ ├─ engine.js
+ │ ├─ db.js
+ │ ├─ dom.js
+ │ └─ ghostyles-manager.js
+ ├─ ghostyles.json
+ └─ ghostyles/*.js
+```
+The project is a static web app: there is no production build step required to open the interface locally. The browser loads HTML, CSS, JavaScript modules, model assets, and plugin manifests.
+Important local entry points:
+- [`index.html`](index.html) — public landing page with links to code, docs, coverage, Ghostyles, project context, and the reporting node.
+- [`ghostati.html`](ghostati.html) — main webcam/AR application.
+- [`ghostyles.json`](ghostyles.json) — Ghostyle manifest.
+- [`JSDOC_README.md`](JSDOC_README.md) — concise generated-docs overview.
+- [`REFERENCES.json`](REFERENCES.json) — curated technical/cultural reference set.
+Runtime external dependencies visible from the HTML/config layer:
+- [Google Fonts](https://fonts.googleapis.com) / [Google Fonts static assets](https://fonts.gstatic.com)
+- [Landing-page Google Fonts CSS](https://fonts.googleapis.com/css2?family=League+Script&family=Outfit:wght@400;600;700;800;900&family=JetBrains+Mono:wght@400;700&display=swap)
+- [jsDelivr CDN](https://cdn.jsdelivr.net)
+- [`@vladmandic/face-api`](https://cdn.jsdelivr.net/npm/@vladmandic/face-api/dist/face-api.js)
+- [face-api.js model weights](https://cdn.jsdelivr.net/gh/justadudewhohacks/face-api.js-models@master/)
+- [MediaPipe Tasks Vision](https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.35)
+- [MediaPipe Face Landmarker model](https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task)
+- [MediaPipe Image Embedder model](https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite)
+For workshops or higher-risk demos, prefer self-hosting model and library assets instead of relying on third-party CDNs.
+# Install and run locally
+```text
+ clone ──► install dev deps ──► static server ──► browser + webcam
+```
-**Last commit:** `8296992` – added the UX content for ghostyles future developer
-
-
-
-
-
-
-
-
-
-
-
+Clone the repository:
+```bash
+git clone https://github.com/vecna/ghostati.git
+cd ghostati
+```
+Install development dependencies:
+```bash
+npm install
+```
+Serve the directory with any local static server:
+```bash
+npx http-server .
+# or
+python3 -m http.server 8000
+```
+Open the app:
+```text
+http://localhost:8000/ghostati.html
+```
+Open the landing page:
+```text
+http://localhost:8000/
+```
+# Ghostyles plugin API
+```text
+ landmarks + box + canvas context
+ │
+ ▼
+ ghostyle module
+ │
+ ▼
+ live overlay + diagnostic pass
+```
+A **Ghostyle** is a JavaScript module that draws an overlay anchored to a detected face. It can be local or loaded through a manifest.
+
+Start from [`ghostyles/00-template.js`](ghostyles/00-template.js), then add the file to [`ghostylist.json`](ghostylist.json). Existing 2D examples include:
+
+- [`ghostyles/graphic-liner.js`](ghostyles/graphic-liner.js)
+- [`ghostyles/smokey-eyes.js`](ghostyles/smokey-eyes.js)
+- [`ghostyles/blush-lift.js`](ghostyles/blush-lift.js)
+- [`ghostyles/lip-tint.js`](ghostyles/lip-tint.js)
+- [`ghostyles/soft-contour.js`](ghostyles/soft-contour.js)
+- [`ghostyles/stage-mask.js`](ghostyles/stage-mask.js)
+- [`ghostyles/splash.js`](ghostyles/splash.js)
+
+A minimal 2D plugin shape:
+
+```js
+/**
+ * @name Example Ghostyle
+ * @engine faceapi
+ */
+export function onInit() {
+ return 'loaded';
+}
+
+export function onDraw(ctx, landmarks, box) {
+ ctx.save();
+ // Draw against landmarks and detection box here.
+ ctx.restore();
+}
+
+export function onClear(ctx) {
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+}
+```
+3D/MediaPipe-oriented examples live in:
+- [`ghostyles3d/prove-stripes.js`](ghostyles3d/prove-stripes.js)
+- [`ghostyles3d/uv-stripes.js`](ghostyles3d/uv-stripes.js)
+Register them in [`ghostylist3d.json`](ghostylist3d.json).
+# Testing and generated docs
+```text
+ unit tests ──► coverage
+ e2e tests ──► browser flows
+ jsdoc ──► docs/
+```
+Package scripts:
+```bash
+npm run test:unit
+npm run test:unit -- --coverage
+npm run test:e2e
+npm run docs
+```
+Testing stack:
+- [Vitest](https://vitest.dev/) for unit tests;
+- [`@vitest/coverage-v8`](https://vitest.dev/guide/coverage) for coverage;
+- [Playwright](https://playwright.dev/) for browser-level tests;
+- [JSDOM](https://github.com/jsdom/jsdom) and [node-canvas](https://github.com/Automattic/node-canvas) for DOM/canvas test fixtures;
+- [JSDoc](https://jsdoc.app/) with [`clean-jsdoc-theme`](https://github.com/ankitskvmdam/clean-jsdoc-theme) for generated documentation.
+Relevant test directories:
+- [`tests/unit/`](tests/unit/)
+- [`tests/e2e/`](tests/e2e/)
+- [`tests/fixtures/`](tests/fixtures/)
+# Privacy, data, and limitations
+```text
+ browser storage
+ ├─ descriptors
+ ├─ preferences
+ └─ test state
+ external network
+ ├─ fonts
+ ├─ CDN libraries
+ └─ model weights
+```
+The app is designed to keep biometric test data local to the browser interface. Face descriptors and related state are stored locally, not posted to a central server by the default app flow.
+Technical caveats:
+- webcam access is controlled by the browser permission model;
+- local descriptors may persist in IndexedDB/local browser storage until cleared;
+- screenshots, recordings, and exports should be treated as sensitive biometric-adjacent material;
+- CDN-loaded libraries and model files still create external network requests;
+- detection failure, landmark instability, and match failure are different outcomes and should not be collapsed into “anonymity”;
+- a Ghostyle that affects this browser pipeline may not affect another face-recognition system.
+Use consenting test subjects. Do not represent experimental overlays as operational safety guarantees.
+# Field reports: public-space face recognition
+```text
+ observe ──► document ──► submit ──► update resistance research
+```
+Ghostmaxxing is also connected to a field-reporting workflow. The landing page now treats the NINA reporting node as a central project resource:
+[Raccontacelo: segnala un possibile uso di riconoscimento facciale nello spazio pubblico](https://raccontaci.nina.watch/#/submission?context=10c78596-3ea0-4867-b2fb-21fdb8e3f40c)
+Useful report details include:
+- location and institutional context;
+- supplier or vendor name;
+- visible hardware or software clues;
+- procurement documents, signage, screenshots, or public records;
+- who appears to access the data;
+- retention, oversight, and abuse risks;
+- whether the system is detection-only, identification, verification, watchlist matching, analytics, or unclear.
+The point is to turn deployments into inspectable evidence: claims, vendors, interfaces, procurement, sensors, data flows, and affected communities.
+# References dataset
+```text
+ REFERENCES.json ──► timeline / exhibition / research context
+ PROMPT-REFERENCES-UPDATE.txt ──► repeatable curation rules
+```
+[`REFERENCES.json`](REFERENCES.json) is a curated dataset of artistic, research, and activism-adjacent references around face obfuscation, adversarial appearance design, makeup-based attacks, physical-world adversarial vision, and sensor disruption.
+
+The update protocol in [`PROMPT-REFERENCES-UPDATE.txt`](PROMPT-REFERENCES-UPDATE.txt) keeps the file deduplicated, sorted, and stable. It requires canonical links, local preview-image paths, stable slugs, and a `closeness` score from `1` to `100`.
+
+Current reference links:
+
+- [Human-Imperceptible Physical Adversarial Attack for NIR Face Recognition Models](https://arxiv.org/abs/2504.15823) — Songyan Xie, Jinghang Wen, Encheng Su et al., 2025 · `research` · closeness `22`
+- [Accessorize in the Dark: A Security Analysis of Near-Infrared Face Recognition](https://doi.org/10.1007/978-3-031-51479-1_3) — Amit Cohen, Mahmood Sharif, 2024 · `research` · closeness `22`
+- [DAZZLE](https://www.michelletylicki.info/dazzle/) — Michelle Tylicki, Lauri Love, 2023 · `activism` · closeness `100`
+- [Physical-World Optical Adversarial Attacks on 3D Face Recognition](https://openaccess.thecvf.com/content/CVPR2023/html/Li_Physical-World_Optical_Adversarial_Attacks_on_3D_Face_Recognition_CVPR_2023_paper.html) — Yanjie Li, Yiquan Li, Xuelong Dai et al., 2023 · `research` · closeness `30`
+- [The Camera-Shy Hoodie](https://www.macpierce.com/the-camera-shy-hoodie) — Mac Pierce, 2023 · `artistic` · closeness `20`
+- [Shadows can be Dangerous: Stealthy and Effective Physical-world Adversarial Attack by Natural Phenomenon](https://arxiv.org/abs/2203.03818) — Yiqi Zhong, Xianming Liu, Deming Zhai et al., 2022 · `research` · closeness `35`
+- [The Dazzle Club](https://emilyroderick.com/work/the-dazzle-club/) — Evie Price, Emily Roderick, Georgina Rowlands et al., 2021 · `activism` · closeness `96`
+- [Adv-Makeup: A New Imperceptible and Transferable Attack on Face Recognition](https://arxiv.org/abs/2105.03162) — Bangjie Yin, Wenxuan Wang, Taiping Yao et al., 2021 · `research` · closeness `95`
+- [Adversarial Attacks against Face Recognition: A Comprehensive Study](https://arxiv.org/abs/2007.11709) — Fatemeh Vakhshiteh, Ahmad Nickabadi, Raghavendra Ramachandra, 2020 · `research` · closeness `82`
+- [Breaking certified defenses: Semantic adversarial examples with spoofed robustness certificates](https://arxiv.org/abs/2003.08937) — Amin Ghiasi, Ali Shafahi, Tom Goldstein, 2020 · `research` · closeness `35`
+- [VLA: A Practical Visible Light-based Attack on Face Recognition Systems in Physical World](https://doi.org/10.1145/3351261) — Meng Shen, Zelin Liao, Liehuang Zhu et al., 2019 · `research` · closeness `78`
+- [Adversarial Robustness Toolbox v1.0.0](https://arxiv.org/abs/1807.01069) — Maria-Irina Nicolae, Mathieu Sinn, Minh Ngoc Tran et al., 2018 · `research` · closeness `55`
+- [DPatch: An Adversarial Patch Attack on Object Detectors](https://arxiv.org/abs/1806.02299) — Xin Liu, Huanrui Yang, Ziwei Liu et al., 2018 · `research` · closeness `40`
+- [ShapeShifter: Robust Physical Adversarial Attack on Faster R-CNN Object Detector](https://arxiv.org/abs/1804.05810) — Shang-Tse Chen, Cory Cornelius, Jason Martin et al., 2018 · `research` · closeness `38`
+- [Adversarial Generative Nets: Neural Network Attacks on State-of-the-Art Face Recognition](https://arxiv.org/abs/1801.00349) — Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer et al., 2017 · `research` · closeness `90`
+- [Adversarial Patch](https://arxiv.org/abs/1712.09665) — Tom B. Brown, Dandelion Mané, Aurko Roy et al., 2017 · `research` · closeness `50`
+- [Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition](https://dl.acm.org/doi/10.1145/2976749.2978392) — Mahmood Sharif, Sruti Bhagavatula, Lujo Bauer et al., 2016 · `research` · closeness `92`
+- [HyperFace](https://adam.harvey.studio/hyperface/) — Adam Harvey, 2016 · `artistic` · closeness `92`
+- [Adversarial Manipulation of Deep Representations](https://arxiv.org/abs/1511.05122) — Sara Sabour, Yanshuai Cao, Fartash Faghri et al., 2015 · `research` · closeness `45`
+- [CV Dazzle](https://adam.harvey.studio/cvdazzle/) — Adam Harvey, 2010 · `artistic` · closeness `100`
+
+# Contributing
+
+```text
+ small patch
+ clear test
+ stable plugin API
+ documented behavior
+```
+Good contributions include:
+- new Ghostyles with clear metadata and reproducible test notes;
+- tighter unit coverage around renamed/refactored functions;
+- e2e scenarios for detection, baseline saving, overlay switching, and match-state transitions;
+- CDN self-hosting options;
+- clearer model-loading failure states;
+- accessibility and mobile UI improvements;
+- better documentation for `faceapi` vs `mediapipe` Ghostyle engines;
+- additions to [`REFERENCES.json`](REFERENCES.json) following [`PROMPT-REFERENCES-UPDATE.txt`](PROMPT-REFERENCES-UPDATE.txt).
-## Recent changes
-- `8296992` added the UX content for ghostyles future developer
-- `261c4f5` unified 2D and 3D ghostyle plugin
-- `0787760` thumbnail added in a list of small pictures per ID.
-- `4f47df3` infomodal added, but I'm not fully happy yet
-- `5404b34` removed some dead code
\ No newline at end of file
+Please keep claims narrow and technical: say which model, browser, lighting, camera, and threshold produced which result.
diff --git a/REFERENCES.json b/REFERENCES.json
deleted file mode 100644
index 01c0754..0000000
--- a/REFERENCES.json
+++ /dev/null
@@ -1,369 +0,0 @@
-{
- "schema_version": "2.0",
- "project_scope": "anti-surveillance / face-obfuscation / makeup-adjacent artistic, research, and activism references",
- "ordering_definition": "Sort newest first. Primary key year descending; secondary key closeness descending; tertiary key title ascending.",
- "closeness_definition": {
- "description": "Integer 1-100 indicating how close a source is to the conceptual core of the project: face-centered anti-surveillance through appearance design, makeup, camouflage, or directly adjacent face-recognition attacks.",
- "anchor_examples": {
- "100": [
- "Michelle Tylicki + Lauri Love — DAZZLE",
- "Adam Harvey — CV Dazzle"
- ],
- "20": [
- "infrared / night-vision sensor disturbance references such as The Camera-Shy Hoodie"
- ]
- },
- "bands": {
- "90_100": "direct face-centered anti-surveillance / makeup / camouflage references",
- "70_89": "directly relevant face-recognition attack literature or strongly adjacent face-obfuscation work",
- "40_69": "enabling or adjacent adversarial-vision methods",
- "1_39": "peripheral or modality-shifted references, especially infrared / sensor-jamming / non-face-centric work"
- }
- },
- "preview_image_definition": "Local site-root path to a preview asset intended for static visualisation. In this package the assets live under /REFERENCES-images/ as SVG files.",
- "references": [
- {
- "slug": "human-imperceptible-nir-face-attack",
- "title": "Human-Imperceptible Physical Adversarial Attack for NIR Face Recognition Models",
- "author": [
- "Songyan Xie",
- "Jinghang Wen",
- "Encheng Su",
- "Qiucheng Yu"
- ],
- "year": 2025,
- "link": "https://arxiv.org/abs/2504.15823",
- "type": "research",
- "closeness": 22,
- "description": "Studio recente su perturbazioni fisiche quasi invisibili per modelli di riconoscimento facciale nel vicino infrarosso, utile come riferimento periferico sul disturbo dei sensori.",
- "preview_image": "/REFERENCES-images/human-imperceptible-nir-face-attack.svg",
- "visual_hint": "nir_subtle_points"
- },
- {
- "slug": "accessorize-in-the-dark",
- "title": "Accessorize in the Dark: A Security Analysis of Near-Infrared Face Recognition",
- "author": [
- "Amit Cohen",
- "Mahmood Sharif"
- ],
- "year": 2024,
- "link": "https://doi.org/10.1007/978-3-031-51479-1_3",
- "type": "research",
- "closeness": 22,
- "description": "Analisi delle vulnerabilità dei sistemi di riconoscimento facciale nel vicino infrarosso, importante per collocare la linea di ricerca che esce dal makeup visibile e si sposta verso la sensoristica.",
- "preview_image": "/REFERENCES-images/accessorize-in-the-dark.svg",
- "visual_hint": "nir_points"
- },
- {
- "slug": "dazzle",
- "title": "DAZZLE",
- "author": [
- "Michelle Tylicki",
- "Lauri Love"
- ],
- "year": 2023,
- "link": "https://www.michelletylicki.info/dazzle/",
- "type": "activism",
- "closeness": 100,
- "description": "Progetto artivista che trasforma il linguaggio del beauty in un dispositivo critico contro la sorveglianza, mettendo il volto e il gesto del trucco al centro della resistenza visiva.",
- "preview_image": "/REFERENCES-images/dazzle.svg",
- "visual_hint": "salon_mask"
- },
- {
- "slug": "physical-world-optical-attacks-3d-face",
- "title": "Physical-World Optical Adversarial Attacks on 3D Face Recognition",
- "author": [
- "Yanjie Li",
- "Yiquan Li",
- "Xuelong Dai",
- "Songtao Guo",
- "Bin Xiao"
- ],
- "year": 2023,
- "link": "https://openaccess.thecvf.com/content/CVPR2023/html/Li_Physical-World_Optical_Adversarial_Attacks_on_3D_Face_Recognition_CVPR_2023_paper.html",
- "type": "research",
- "closeness": 30,
- "description": "Lavoro su attacchi ottici rivolti al riconoscimento facciale 3D; amplia il campo dal piano del volto visibile a quello della profondità e della luce proiettata.",
- "preview_image": "/REFERENCES-images/physical-world-optical-attacks-3d-face.svg",
- "visual_hint": "projector_depth_face"
- },
- {
- "slug": "camera-shy-hoodie",
- "title": "The Camera-Shy Hoodie",
- "author": [
- "Mac Pierce"
- ],
- "year": 2023,
- "link": "https://www.macpierce.com/the-camera-shy-hoodie",
- "type": "artistic",
- "closeness": 20,
- "description": "Capo DIY che usa LED infrarossi per saturare o degradare la lettura di camere night-vision: riferimento laterale, più vicino al disturbo del sensore che al camouflage del volto.",
- "preview_image": "/REFERENCES-images/camera-shy-hoodie.svg",
- "visual_hint": "hoodie_ir"
- },
- {
- "slug": "shadows-can-be-dangerous",
- "title": "Shadows can be Dangerous: Stealthy and Effective Physical-world Adversarial Attack by Natural Phenomenon",
- "author": [
- "Yiqi Zhong",
- "Xianming Liu",
- "Deming Zhai",
- "Junjun Jiang",
- "Xiangyang Ji"
- ],
- "year": 2022,
- "link": "https://arxiv.org/abs/2203.03818",
- "type": "research",
- "closeness": 35,
- "description": "Introduce l’ombra come fenomeno fisico naturale capace di produrre perturbazioni credibili e difficili da notare; è una fonte laterale ma forte per pensare design e mimetismo ambientale.",
- "preview_image": "/REFERENCES-images/shadows-can-be-dangerous.svg",
- "visual_hint": "shadow_cast"
- },
- {
- "slug": "dazzle-club",
- "title": "The Dazzle Club",
- "author": [
- "Evie Price",
- "Emily Roderick",
- "Georgina Rowlands",
- "Anna Hart"
- ],
- "year": 2021,
- "link": "https://emilyroderick.com/work/the-dazzle-club/",
- "type": "activism",
- "closeness": 96,
- "description": "Pratica collettiva tra arte, attivismo e ricerca embodied nello spazio pubblico; sposta il camouflage dal volto singolo a una coreografia sociale contro la normalizzazione della sorveglianza.",
- "preview_image": "/REFERENCES-images/dazzle-club.svg",
- "visual_hint": "group_walk"
- },
- {
- "slug": "adv-makeup",
- "title": "Adv-Makeup: A New Imperceptible and Transferable Attack on Face Recognition",
- "author": [
- "Bangjie Yin",
- "Wenxuan Wang",
- "Taiping Yao",
- "Junfeng Guo",
- "Zelun Kong",
- "Shouhong Ding",
- "Jilin Li",
- "Cong Liu"
- ],
- "year": 2021,
- "link": "https://arxiv.org/abs/2105.03162",
- "type": "research",
- "closeness": 95,
- "description": "Paper cardine sul trucco adversarial centrato sulla regione orbitale: fondamentale per il tema makeup/riconoscimento facciale e per l’idea di blending del gesto cosmetico.",
- "preview_image": "/REFERENCES-images/adv-makeup.svg",
- "visual_hint": "orbital_makeup"
- },
- {
- "slug": "adversarial-attacks-against-face-recognition",
- "title": "Adversarial Attacks against Face Recognition: A Comprehensive Study",
- "author": [
- "Fatemeh Vakhshiteh",
- "Ahmad Nickabadi",
- "Raghavendra Ramachandra"
- ],
- "year": 2020,
- "link": "https://arxiv.org/abs/2007.11709",
- "type": "research",
- "closeness": 82,
- "description": "Survey utile per mappare tassonomie, vettori e limiti degli attacchi contro il riconoscimento facciale; funziona come vista d’insieme del territorio tecnico.",
- "preview_image": "/REFERENCES-images/adversarial-attacks-against-face-recognition.svg",
- "visual_hint": "survey_grid"
- },
- {
- "slug": "breaking-certified-defenses-shadow-attack",
- "title": "Breaking certified defenses: Semantic adversarial examples with spoofed robustness certificates",
- "author": [
- "Amin Ghiasi",
- "Ali Shafahi",
- "Tom Goldstein"
- ],
- "year": 2020,
- "link": "https://arxiv.org/abs/2003.08937",
- "type": "research",
- "closeness": 35,
- "description": "Il cosiddetto Shadow Attack lavora su perturbazioni semantiche ampie e credibili; non è face-specific, ma aiuta a leggere l’evasione come trasformazione percettiva e non solo come rumore digitale.",
- "preview_image": "/REFERENCES-images/breaking-certified-defenses-shadow-attack.svg",
- "visual_hint": "shadow_cast"
- },
- {
- "slug": "vla-visible-light-face-attack",
- "title": "VLA: A Practical Visible Light-based Attack on Face Recognition Systems in Physical World",
- "author": [
- "Meng Shen",
- "Zelin Liao",
- "Liehuang Zhu",
- "Ke Xu",
- "Xiaojiang Du"
- ],
- "year": 2019,
- "link": "https://doi.org/10.1145/3351261",
- "type": "research",
- "closeness": 78,
- "description": "Attacco nel mondo fisico basato su luce visibile: importante perché mostra come l’interferenza possa essere progettata come layer ottico sul volto e non solo come pattern stampato.",
- "preview_image": "/REFERENCES-images/vla-visible-light-face-attack.svg",
- "visual_hint": "light_beam"
- },
- {
- "slug": "art-toolbox",
- "title": "Adversarial Robustness Toolbox v1.0.0",
- "author": [
- "Maria-Irina Nicolae",
- "Mathieu Sinn",
- "Minh Ngoc Tran",
- "Beat Buesser",
- "Ambrish Rawat",
- "Martin Wistuba",
- "Valentina Zantedeschi",
- "Nathalie Baracaldo",
- "Bryant Chen",
- "Heiko Ludwig",
- "Ian M. Molloy",
- "Ben Edwards"
- ],
- "year": 2018,
- "link": "https://arxiv.org/abs/1807.01069",
- "type": "research",
- "closeness": 55,
- "description": "Framework di riferimento per attacchi e difese adversariali; non è una fonte estetica, ma è la cornice tecnica che connette molti dei paper operativi del dataset.",
- "preview_image": "/REFERENCES-images/art-toolbox.svg",
- "visual_hint": "toolbox"
- },
- {
- "slug": "dpatch",
- "title": "DPatch: An Adversarial Patch Attack on Object Detectors",
- "author": [
- "Xin Liu",
- "Huanrui Yang",
- "Ziwei Liu",
- "Linghao Song",
- "Hai Li",
- "Yiran Chen"
- ],
- "year": 2018,
- "link": "https://arxiv.org/abs/1806.02299",
- "type": "research",
- "closeness": 40,
- "description": "Estende la logica della patch agli object detector, mostrando come una piccola superficie progettata possa sabotare localizzazione e classificazione.",
- "preview_image": "/REFERENCES-images/dpatch.svg",
- "visual_hint": "detector_box_patch"
- },
- {
- "slug": "shapeshifter",
- "title": "ShapeShifter: Robust Physical Adversarial Attack on Faster R-CNN Object Detector",
- "author": [
- "Shang-Tse Chen",
- "Cory Cornelius",
- "Jason Martin",
- "Duen Horng Chau"
- ],
- "year": 2018,
- "link": "https://arxiv.org/abs/1804.05810",
- "type": "research",
- "closeness": 38,
- "description": "Riferimento classico sugli attacchi fisici robusti ai detector: meno vicino al volto, ma utile per la genealogia delle perturbazioni materiali e stampabili.",
- "preview_image": "/REFERENCES-images/shapeshifter.svg",
- "visual_hint": "object_shape_distort"
- },
- {
- "slug": "agns-face-recognition",
- "title": "Adversarial Generative Nets: Neural Network Attacks on State-of-the-Art Face Recognition",
- "author": [
- "Mahmood Sharif",
- "Sruti Bhagavatula",
- "Lujo Bauer",
- "Michael K. Reiter"
- ],
- "year": 2017,
- "link": "https://arxiv.org/abs/1801.00349",
- "type": "research",
- "closeness": 90,
- "description": "Estende la genealogia degli occhiali adversarial con una generazione più robusta e scalabile, facendo degli accessori facciali un vero medium di attacco fisico.",
- "preview_image": "/REFERENCES-images/agns-face-recognition.svg",
- "visual_hint": "generated_glasses"
- },
- {
- "slug": "adversarial-patch",
- "title": "Adversarial Patch",
- "author": [
- "Tom B. Brown",
- "Dandelion Mané",
- "Aurko Roy",
- "Martín Abadi",
- "Justin Gilmer"
- ],
- "year": 2017,
- "link": "https://arxiv.org/abs/1712.09665",
- "type": "research",
- "closeness": 50,
- "description": "Paper seminale sulla patch universale e stampabile; è meno face-centered ma fondamentale per capire la logica dell’oggetto grafico che devia l’attenzione algoritmica.",
- "preview_image": "/REFERENCES-images/adversarial-patch.svg",
- "visual_hint": "patch_sticker"
- },
- {
- "slug": "accessorize-to-a-crime",
- "title": "Accessorize to a Crime: Real and Stealthy Attacks on State-of-the-Art Face Recognition",
- "author": [
- "Mahmood Sharif",
- "Sruti Bhagavatula",
- "Lujo Bauer",
- "Michael K. Reiter"
- ],
- "year": 2016,
- "link": "https://dl.acm.org/doi/10.1145/2976749.2978392",
- "type": "research",
- "closeness": 92,
- "description": "Punto di svolta sugli occhiali adversarial fisici: dimostra che un accessorio quotidiano può diventare una superficie di attacco mirata contro la biometria facciale.",
- "preview_image": "/REFERENCES-images/accessorize-to-a-crime.svg",
- "visual_hint": "glasses"
- },
- {
- "slug": "hyperface",
- "title": "HyperFace",
- "author": [
- "Adam Harvey"
- ],
- "year": 2016,
- "link": "https://adam.harvey.studio/hyperface/",
- "type": "artistic",
- "closeness": 92,
- "description": "Tessuto/camouflage basato su false facce che abbassa l’affidabilità della detection; riferimento artistico cruciale per pensare il pattern come rumore semantico.",
- "preview_image": "/REFERENCES-images/hyperface.svg",
- "visual_hint": "false_faces"
- },
- {
- "slug": "adversarial-manipulation-deep-representations",
- "title": "Adversarial Manipulation of Deep Representations",
- "author": [
- "Sara Sabour",
- "Yanshuai Cao",
- "Fartash Faghri",
- "David J. Fleet"
- ],
- "year": 2015,
- "link": "https://arxiv.org/abs/1511.05122",
- "type": "research",
- "closeness": 45,
- "description": "Fonte teorica dietro le feature adversaries: importante per capire come si possa spingere un’immagine verso le rappresentazioni interne di un’altra senza copiarne l’aspetto.",
- "preview_image": "/REFERENCES-images/adversarial-manipulation-deep-representations.svg",
- "visual_hint": "latent_match"
- },
- {
- "slug": "cv-dazzle",
- "title": "CV Dazzle",
- "author": [
- "Adam Harvey"
- ],
- "year": 2010,
- "link": "https://adam.harvey.studio/cvdazzle/",
- "type": "artistic",
- "closeness": 100,
- "description": "Progetto fondativo del camouflage per computer vision: makeup, hairstyling e asimmetria geometrica usati per interrompere i segnali che i detector facciali cercano nel volto umano.",
- "preview_image": "/REFERENCES-images/cv-dazzle.svg",
- "visual_hint": "dazzle_face"
- }
- ]
-}
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..beb0f36
--- /dev/null
+++ b/about.html
@@ -0,0 +1,240 @@
+
+
+
+
+ Ghostmaxxing is a browser-based workshop assistant and public research platform for testing
+ face-recognition camouflage.
+
+
+ It grows out of privacy activism, adversarial makeup workshops, and the need to investigate which biometric
+ systems are actually used in public space.
+
+
+
+
+
+
+
Workshop assistant.
+
+ Designed to support group workshops, where participants play with makeup and learn how different faces
+ read to a recognition model: point a browser camera at your face, record a baseline, apply a Ghostyle,
+ and compare how the local recognition pipeline reacts.
+
+
+ The goal is to lower the barrier to entry. You don't need a makeup specialist to take part — only
+ water-based colors, safe enough for kids. The system runs locally: it uses the webcam or a phone
+ camera, keeps everything on-device, and sends nothing anywhere else, except what you choose to share
+ with us.
+
+
+ The project is built to run in a phone browser, because makeup is usually applied in front of a mirror,
+ not at a desktop workstation.
+
+
+
+ Two kinds of success exist: the face stops being detected as a face at all, or the face is still
+ detected but its extracted points differ enough from the clean-face baseline that matching fails.
+
+
+
What can be sent to us?
+
Three things mostly:
+
+
+ Before/after images of a successful attempt, sent via the
+
+ share icon in the lab.
+
+
A one-second video of a successful attempt.
+
+ Ghostyles: modular camouflage plugins that others can study, adapt, or retest.
+
+ Build your own by following the Ghostyle documentation.
+
+
+
+
+
+
From before/after experiments to Ghostyles.
+
+ This part matters: we want a system that can run a "diff" between an after image and a before image,
+ and turn the result into a Ghostyle plugin that others can upload and retest.
+
+
+
+ These approaches are experimental. We can't guarantee they will work — and a human reviewing
+ camera footage can often still recognize someone even when they're wearing makeup. A browser result
+ is a local, conditional finding, not a general protection claim.
+
+
+
+
+
+
Where it comes from.
+
+ Ghostmaxxing is the international evolution of an experiment run by NINA.watch. As part of the
+ Universal Digital Union, Ghòstati
+ (become a ghost) is a workshop we keep repeating to explore adversarial makeup as a way to
+ resist facial recognition. The project began in May 2026 during the NINA festival, in
+ Milan and Rome. We
+ learned from Michelle Tylicki, an artist who has run
+ this kind of workshop before us — we added the application development, and now this wider
+ vision.
+
+
+ Tylicki's DAZZLE, developed with Lauri Love, is
+ an art-and-tech installation and interactive tool for teaching Computer Vision Dazzle, also known as
+ anti-surveillance makeup. Ghostmaxxing inherits that workshop energy, but turns it into a browser-based
+ system people can run on their own devices.
+
+
+
+
+
Vision.
+
+
Make the workshop easier to run.
+
Make adversarial makeup a popular practice, not a niche one.
+
Collect evidence of what actually works.
+
Support new forms — clothing, 3D-printed objects, and beyond.
+
Support new research.
+
Use network effects to test everywhere, share results, and keep improving.
+
+
+
+
+
The research question is minimal camouflage.
+
+ The core question is simple: how little makeup is needed to disrupt a face-recognition pipeline?
+
+
+ Less makeup matters because it lowers the barrier to practice. It makes the technique easier to learn,
+ easier to repeat, and easier to move from exceptional workshop performance toward everyday culture. The
+ hope is not to sell invisibility; it is to make adversarial makeup legible enough to become pop practice.
+
+
Success should be shareable.
+
+ Ghostmaxxing includes sharing-oriented functions because a successful look is also a teachable pattern.
+ People who want to share a one-second video, a before/after comparison, or a Ghostyle result can help
+ others understand what worked and what still needs to be tested.
+
+
+
+
+
Why leaking matters.
+
+ The lab can test browser pipelines, but real-world facial recognition is a supply chain: camera
+ hardware, edge devices, model vendors, watchlists, matching systems, dashboards, alerts, metadata,
+ operators, procurement contracts, and retention rules.
+
+
+ Leak to us exists to understand that hidden chain. Which technologies are
+ deployed? Who sells them? Who maintains them? What metadata is produced between capture and decision?
+ Where does it go? Who can access it? Tell us what you know, only if it is safe for you to do so —
+ and please don't include unnecessary personal data.
+
+
+ Some allies may be forced to work on or near these systems. If they can safely share information, they
+ may help us understand whether Ghostyles and adversarial makeup are actually affecting real
+ deployments, or whether the resistance needs to change.
+
+
+
+ In Europe, real-time remote biometric identification in publicly accessible spaces for law
+ enforcement is treated as a prohibited AI practice, subject to narrow exceptions and safeguards. That
+ legal frame still leaves a practical question: what is actually being deployed, and under whose
+ control?
+
+
+
A ban that keeps getting reopened.
+
+ The Reclaim Your Face campaign has spent years pushing for a
+ ban on biometric mass surveillance, and it helped get real-time remote biometric identification treated
+ as prohibited in EU law. But the fight didn't end with the text of the regulation: national security
+ agendas keep reopening the exceptions, arguing for carve-outs around major events, "special" cases, and
+ pilot deployments. Reporting
+ from the campaign
+ has documented national authorities attempting to work around the AI Act's limits rather than comply
+ with them. A ban that keeps getting quietly worked around by fear-mongering, securitarian framing needs
+ the same kind of public pressure and evidence-gathering that got it written in the first place —
+ which is part of why the reporting node exists here too.
+
+
+
+
+
Read, test, report.
+
+ Ghostmaxxing is strongest when the lab, the archive, and the reporting channel work together. Test
+ techniques locally, read the lineage of anti-biometric appearance design, and help document the real
+ infrastructure when it appears in the world.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ghostati-docs.html b/ghostati-docs.html
deleted file mode 100644
index e680265..0000000
--- a/ghostati-docs.html
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
-
-
- Ghòstati - Guida per Sviluppatori
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Documentazione
-
Sviluppa il tuo Ghostyle
-
-
-
-
Architettura ad Alto Livello
-
Il sistema "Ghòstati" utilizza un'architettura a plugin modulari pensata per separare il
- nucleo di tracciamento facciale dagli effetti visivi (i "Ghostyles").
-
-
Tecnicamente, l'engine principale è una web app Vanilla JS che inizializza la webcam, e utilizza
- face-api.js per inferire in tempo reale i Landmarks a 68 punti del viso. Il loop di
- rendering è gestito autonomamente per garantire performance scalabili (FPS controllati).
-
-
-
Og intanto, l'engine richiama l'effetto attivo (il plugin). Ogni Ghostyle è un ES Module
- (.js) caricato dinamicamente via import(url). Questo significa che i Ghostyle possono
- essere creati come file locali indipendenti, o addirittura hostati su server remoti e passati via URL.
-
-
L'engine fornisce al plugin due cose: le coordinate del volto aggiornate e le API globali offerte da
- window.Ghostati per semplificare drasticamente la geometria e il disegno su un Canvas dedicato
- (livello di overlay).
-
-
-
-
-
Template Didattico
-
Un plugin Ghòstyle per funzionare deve unicamente esportare un paio di funzioni specifiche (gli "Event Hooks").
- Questo snippet di codice rappresenta lo scheletro di base per cominciare a sviluppare.
-
-
// @name Effetto Base
-
-/**
- * [BLOCCO INIT]
- * Funzione di inizializzazione locale (Opzionale).
- * Chiamata *una sola volta* quando il Ghostyle viene importato in memoria.
- */
-export function onInit() {
- Ghostati.log('Effetto base caricato correttamente!', 'BASE_STYLE');
-}
-
-/**
- * [BLOCCO DRAW]
- * Funzione principale di rendering.
- * L'Engine richiama questa funzione iterativamente nel RAF loop.
- *
- * @param {CanvasRenderingContext2D} ctx - Il contesto 2D nativo.
- * @param {faceapi.FaceLandmarks68} landmarks - Collezione dei landmark spaziali del viso.
- * @param {faceapi.Box} box - Il Bounding Box che riquadra tutto il viso.
- */
-export function onDraw(ctx, landmarks, box) {
- // 1. Estrazione Segmenti (Array di {x,y})
- const leftEye = landmarks.getLeftEye();
- const rightEye = landmarks.getRightEye();
-
- // 2. Logging temporaneo (opzionale) o manipolazione
- // Attenzione: usare Ghostati.log qui scriverà messaggi ad alto rate / frame.
-
- // 3. Staging via ctx standard
- ctx.fillStyle = 'rgba(255, 122, 122, 0.45)';
- ctx.strokeStyle = 'rgba(255, 122, 122, 0.9)';
-
- // 4. Rendering tramite libreria Helper
- Ghostati.drawClosedPath(ctx, leftEye, ctx.fillStyle, ctx.strokeStyle, 2);
- Ghostati.drawClosedPath(ctx, rightEye, ctx.fillStyle, ctx.strokeStyle, 2);
-}
-
-/**
- * [BLOCCO CLEAR]
- * Funzione di smontaggio / teardown (Opzionale).
- * L'Engine svuota automaticamente il Canvas. Usalo se hai timer o memorie da annullare.
- */
-export function onClear(ctx) {
- console.log("Ripristino pulizia plugin base.");
-}
-
-
-
-
-
Spiegazione dei Blocchi
-
-
- 1. Metadati Commentati
- La prima riga // @name [Nome] è letta dall'Engine in fase di fetch come fallback se il plugin non
- ha un id chiaro o necessita di una label UI amichevole. Non è strettamente javascript-eseguibile, ma va in cima
- al modulo!
-
-
-
- 2. Blocco INIT (export function onInit)
- È l'Entry Point primario eseguito all'iniezione nel DOM/Browser dal Plugin Manager. Idealmente usato per
- scaricare asset aggiuntivi o notificare l'interfaccia via Ghostati.log. Può essere asincrono
- (async/await).
-
-
-
- 3. Blocco DRAW (export function onDraw)
- È il cuore pulsante del tuo scrip AR. L'argomento landmarks espone i metodi standard di face-api
- per ottenere array di coordinate {x,y} suddivise semanticamente: getLeftEye(),
- getJawOutline(), getNose(), getMouth(). È tutto disegnato su un livello
- trasparente perfettamente riallineato sulla webcam.
-
-
-
- 4. Utilizzo Metodi Ghostati
- Piuttosto che calcolare le curve Bezier punto per punto, usa le Utility messe a disposizione nell'interfaccia
- window.Ghostati come drawClosedPath. Ci sono anche funzioni di morphing sofisticate
- come Ghostati.expandEyePolygon o Ghostati.drawEyeWing per riprodurre eyeliner e sagome
- senza sforzo matematico.
-
-
-
- 5. Blocco CLEAR (export function onClear)
- L'Engine passa a questo Hook prima di effettuare uno "switch" verso un altro plugin, garantendovi un life-cycle
- appropriato in cui eliminare custom listeners o fermare calcoli costosi derivati se necessario.
-
-
-
-
-
Modalità Diagnostica (Test CV Dazzle)
-
Ghòstati non si limita ad applicare il trucco AR in modo cosmetico, ma include uno strumento di
- Diagnostica e Analisi delle Vulnerabilità progettato per valutare la reale efficacia del
- Ghostyle nel neutralizzare gli algoritmi di Facial Recognition (CV Dazzle).
-
-
-
- Pulsante "Scansiona Trucco" e Compositing Off-screen
- Quando un Ghostyle è attivo, il normale pulsante maschera la sua funzione primaria e si trasforma in "Scansiona
- Trucco". Premendolo, il sistema:
-
-
Genera un canvas off-screen invisibile all'utente.
-
Esegue un compositing fondendo pixel per pixel il feed reale della webcam con l'output grafico
- del trucco (mantenendone inalterate le opacità e i colori originali).
-
Forza il motore neurale (face-api) a scansionare questa nuova immagine sintetica per vedere
- se riesce ad estrarre la stessa identità.
-
- Durante questo processo, l'overlay a schermo rimane "bloccato" per continuare a fungere da specchio di guida,
- senza scomodi fade-out visivi.
-
-
-
- Opacità e Colori: Il fattore di difficoltà
- Ai fini del test, il Canvas composito rispetta testualmente gli stili rgba() del tuo codice (non li
- forza al 100% di opacità). Questo significa che se usi colori troppo tenui, c'è un'alta probabilità che il
- sistema biometrico riesca a "vedere attraverso" il tratto. Nell'archivio locale a schermo è annotata in tempo
- reale "l'Opacità stimata" del trucco.
-
-
-
- Pulsante "Copia Volto Truccato"
- Una volta che la simulazione è conclusa con successo, un pulsante speciale si accende. Cliccandolo, l'immagina
- composita generata (volto della webcam alterato permanentemente dal Ghostyle sovrapposto) viene salvata
- comodamente negli Appunti del sistema operativo, pronta per essere ispezionata.
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ghostyles/00-template.js b/ghostyles/00-template.js
index d4953ec..e24584c 100644
--- a/ghostyles/00-template.js
+++ b/ghostyles/00-template.js
@@ -4,7 +4,7 @@
* @version 2.0.0
* @author NINA
* @release_date 2026-06-29
- * @description Template canonico per plugin Ghòstati: esempio minimo con callback 2D + UV.
+ * @description Template canonico per plugin Ghostmaxxing: esempio minimo con callback 2D + UV.
* ==/Ghostyle==
*/
diff --git a/images/ghostati-hero.png b/images/ghostati-hero.png
deleted file mode 100644
index 24e738c..0000000
Binary files a/images/ghostati-hero.png and /dev/null differ
diff --git a/images/ghostmaxxing-homepage.webp b/images/ghostmaxxing-homepage.webp
new file mode 100644
index 0000000..487e955
Binary files /dev/null and b/images/ghostmaxxing-homepage.webp differ
diff --git a/images/homepage-camera-band.svg b/images/homepage-camera-band.svg
new file mode 100644
index 0000000..b1f1a38
--- /dev/null
+++ b/images/homepage-camera-band.svg
@@ -0,0 +1,502 @@
+
\ No newline at end of file
diff --git a/images/homepage-face-art-clean.png b/images/homepage-face-art-clean.png
new file mode 100644
index 0000000..8860030
Binary files /dev/null and b/images/homepage-face-art-clean.png differ
diff --git a/images/report/affected-individuals.svg b/images/report/affected-individuals.svg
new file mode 100644
index 0000000..a2d5f76
--- /dev/null
+++ b/images/report/affected-individuals.svg
@@ -0,0 +1,6 @@
+
diff --git a/images/report/contracts-market.svg b/images/report/contracts-market.svg
new file mode 100644
index 0000000..99c385a
--- /dev/null
+++ b/images/report/contracts-market.svg
@@ -0,0 +1,10 @@
+
diff --git a/images/report/control-panel.svg b/images/report/control-panel.svg
new file mode 100644
index 0000000..89831d7
--- /dev/null
+++ b/images/report/control-panel.svg
@@ -0,0 +1,9 @@
+
diff --git a/images/report/procurement-officials.svg b/images/report/procurement-officials.svg
new file mode 100644
index 0000000..9f30479
--- /dev/null
+++ b/images/report/procurement-officials.svg
@@ -0,0 +1,10 @@
+
diff --git a/images/report/public-sightings.svg b/images/report/public-sightings.svg
new file mode 100644
index 0000000..dfb4dd7
--- /dev/null
+++ b/images/report/public-sightings.svg
@@ -0,0 +1,6 @@
+
diff --git a/images/report/system-overview.svg b/images/report/system-overview.svg
new file mode 100644
index 0000000..d234d70
--- /dev/null
+++ b/images/report/system-overview.svg
@@ -0,0 +1,12 @@
+
diff --git a/images/report/test-countermeasures.svg b/images/report/test-countermeasures.svg
new file mode 100644
index 0000000..8a6635a
--- /dev/null
+++ b/images/report/test-countermeasures.svg
@@ -0,0 +1,8 @@
+
diff --git a/images/report/weak-spots.svg b/images/report/weak-spots.svg
new file mode 100644
index 0000000..955aa01
--- /dev/null
+++ b/images/report/weak-spots.svg
@@ -0,0 +1,4 @@
+
diff --git a/index.html b/index.html
index d266edb..7720888 100644
--- a/index.html
+++ b/index.html
@@ -1,93 +1,61 @@
-
+
- Ghòstati
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Ghostmaxxing
+
+
-
-
-
Ghostmaxxing it's a realtime webapp for testing face-recognition camouflage is used
+ to run workshops. Runs locally, data stays with you.
+
It can also Augment Reality with overlays over faces, so to drive your makeup with
+ techniques proven to be successful, and Ghostyle is the name of those plugins. Check the
+ Ghostyle archive.