Waking to your voice, not to the room #92
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
v2
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wayfinder:ticket
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiko/denpa#92
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A wake word answers "was that the phrase". It does not answer "was that you". A television saying "Hey Denpa" wakes her; so does anyone else in the room, and so does a recording of you.
The want is real — hands-free is only comfortable if she answers her operator and not the room. But it is a second, separate model, and the tempting shortcut is the wrong one, so this issue exists mainly to record why.
Not by training the wake word on one voice
The obvious idea is to train
#87's keyword head on recordings of one person instead of synthetic voices. It does not work, for two reasons worth stating once so nobody tries it twice:#89is already trying to avoid.By a speaker embedding, after the phrase
The standard shape, and the one that fits where
#89already put the gate:The models are text-independent, so enrolment does not have to be the wake phrase and the profile keeps working if the phrase changes later. Current options that export ONNX and therefore run through the
ortalready in the tree (Cargo.toml:47): wespeaker's ECAPA-TDNN — including a 512-channel light variant meant for smaller deployments — and 3D-Speaker's CAM++ / ERes2NetV2. Any of them is a drop-in at the same point; the choice is a size and accuracy trade, not an architectural one.Size is the open cost. These are tens of megabytes rather than
#87's 1.7, which puts this in the same conversation as#44's 27 MB runtime rather than in the free-lunch category the wake word itself is in. Quantisation likely helps a lot. Measure before committing.Two things it must not be sold as
#89already keeps that audio together, which is the reason to build this after it rather than beside it.Open questions before building
#15is already about not being invisibly stuck. Some visible "heard, not recognised" may be needed.Related
#89— the gate this hangs off, and the utterance audio it needs#87— why the wake model stays speaker-independent#44— the size budget this eats into#15— invisible failure statesThe "it is not security" warning above is sharper than it was written.
#87now plans to generate wake-phrase positives with the Qwen3-TTS already running in Comfy, which clones a speaker from three seconds of reference audio. That capability sits in this project's own stack, on this machine.So the replay concern is not theoretical and does not require an attacker with resources. Anything that has captured a few seconds of the operator speaking — a video call, a voice note, a clip posted anywhere — is enough input for a generator we already run to produce arbitrary new speech in that voice. A speaker-embedding gate compares timbre and prosody; that is precisely what the cloner reproduces.
This does not argue against building the gate. It filters the television, the flatmate, and the podcast playing in the next room, which is the entire job it was asked to do. It argues against ever letting it grow into something else: no downstream capability should be unlocked by "the speaker was verified". If a decision ever needs to be gated on identity rather than convenience, it needs a different mechanism and its own issue.
Worth keeping in mind when
#91's answer arrives too — the friendlier a gate feels in daily use, the more tempting it becomes to lean on it.