Voiceprints
CAM++ 512-d voice embeddings, sealed and deterministic.
A voiceprint is how VFTE recognizes a speaker across meetings without ever storing their audio or their words.
What it is
- A CAM++ 512-dimension voice embedding, computed by a pure-numpy fbank front-end feeding a CAM++ ONNX model (CPU — no GPU, no torch in production).
- A voiceprint holds ≤ 20 exemplars with eviction, a recomputed centroid, k-means sub-centroids, and a quality score. Its id is deterministic.
- Stored AES-256-CBC + HMAC-SHA256 sealed at rest (MAGIC + IV + HMAC blob; HKDF-derived enc/mac keys; master key TEE-sealed via dstack).
VFTE holds voiceprints and consent edges — never audio, never transcript content.
Enrollment → identification
- Enroll (
POST /v1/enroll) — labeled audio + identity (email) + workspace → embedding → create-or-strengthen the voiceprint. Gated by consent (enroll_allowed) and a quality threshold. - Identify (
POST /v1/identify-spans, the flagship) — pre-diarized spans are matched, votes are locked across the session, and spans are retro-relabeled. Decision tiers: MATCH (≥ 0.45) · AMBIGUOUS (top-2 within 0.10) · LOW · UNKNOWN, with sigmoid-calibrated confidence.livemode is read-only;offlinemode may write.
The first meeting enrolls a new voice; later meetings recognize it — so the voiceprint count does not grow as the same people keep meeting.
You own it
Because the id is deterministic and the store is portable, a voiceprint is a thing a person can actually control:
- Forget / erasure — hard-delete, leaving only an append-only ledger row + a signed receipt.
- Deletion proof — an Ed25519-signed, offline-verifiable receipt (
#1, merged in VFTE). - Export / import — signed export of the exemplars and re-import elsewhere (
#4, merged), cross-model blocked.
See the consent plane for who is allowed to be recognized, and VFTE features for the full surface.
Source: FEATURE-SPEC.md §4.1–4.8.