Steps in the face-api comparison pipeline.
Each stage depends on the previous one. If detection returns no face, the current 2D path cannot produce landmarks or a face descriptor. A missing result is therefore different from a descriptor that exists but falls beyond the match threshold.
Detection asks where a face might be.
The current Lab uses face-api's TinyFaceDetector with an input size of 416 and a normal score threshold of 0.5. A bounding box means that the detector found a candidate. It does not establish identity.
For analysis of a modified composite, the implementation may retry a failed detection at 0.1. That relaxed pass can recover diagnostic measurements, but it is more permissive and should not be presented as equivalent evidence.
Historical context: Haar cascades and the high-contrast T-zone are useful for understanding early CV Dazzle tactics. They are not the detector used by the current Lab.
Landmarks estimate structure, not identity.
The 2D path estimates 68 face landmarks. The Face Brush and 2D Ghostyles can use them to place marks around eyes, brows, nose, mouth and the outline of the face. The separate MediaPipe FaceLandmarker supplies 478 normalised landmarks for mesh and UV effects.
These points are model estimates. Pose, occlusion, expression, blur and lighting can move them or make them unstable. When a hidden feature receives an estimated position, that estimate is not direct evidence that the feature was observed.

Comparing face descriptors.
A face descriptor is a 128-value representation produced from the detected face. The Lab stores a descriptor as a local baseline, then measures the Euclidean distance from a new descriptor to the saved records.
| Rule | Current value | Interpretation |
|---|---|---|
| Distance is at or below threshold | <= 0.58 | The nearest saved baseline is classified as a match. |
| Distance is above threshold | > 0.58 | A descriptor exists, but it is classified outside the current match boundary. |
| No descriptor | None | The pipeline did not reach a comparable identity representation. |
The distance is not a probability. A result of 0.40 does not mean “40% the same person”, and a result beyond 0.58 does not demonstrate invisibility to other systems.
The 3D label combines two different functions.
MediaPipe FaceLandmarker produces 478 landmarks for geometry. Separately, MediaPipe ImageEmbedder with MobileNetV3 Small produces a general visual embedding. Ghostmaxxing compares those image embeddings with cosine similarity and currently uses 0.85 as its threshold.
This ImageEmbedder is sensitive to global image content, including colour and background. It is not a dedicated ArcFace-style face-recognition descriptor. The documentation therefore calls it an experimental visual embedding, even where the current interface uses the shorter “3D” label.
Do not compare 0.58 and 0.85 directly. Face-api uses distance, where lower is closer. ImageEmbedder uses cosine similarity, where higher is closer.
A Ghostyle creates a second image to inspect.
The live detector follows the original camera image so the effect can remain attached to the face. On a slower loop, the Lab draws the Ghostyle onto a composite image and analyses that modified image. Keeping these paths separate makes the overlay responsive while allowing the intervention to affect the measured result.
An experiment can therefore change at several points: the composite detector may stop returning a box, landmarks may shift, the face descriptor may move beyond its threshold, or the two comparison paths may disagree. Record which event occurred.
This is a local experiment, not an authentication system.
- The Lab tests model behaviour under current conditions. It does not establish performance against a named external deployment.
- The current comparison is not presentation-attack detection and includes no liveness challenge.
- A saved baseline is a local experimental reference, not proof of civil identity.
- One favourable frame does not establish repeatable evasion. Test pose, light, distance, motion and multiple frames.
- Face templates are sensitive biometric-derived data. Keep them local and do not publish raw descriptors.