Why openWakeWord Fails on French, German, Japanese & Chinese Wake Words

August 2026 · Voicute

openWakeWord is English-only at the architecture level. It's not a missing config flag — the frozen backbone never learned non-English phonemes. Here's why, and what works instead.

The symptom: scores collapse to ~0.001

Community tests on non-English wake words tell the same story. A Korean wake word returned prediction scores of 0.0008–0.0015 — a range where the model effectively says "no word here" (issue #136). The same collapse shows up for German, French, Japanese, and Chinese, because they all share one cause.

The cause: a frozen, English-trained embedding

openWakeWord's backbone is a frozen speech_embedding trained on English speaker-verification data. When you train a custom wake word, only the small classification head updates — the embedding that turns audio into features is permanently fixed at what it learned from English speakers.

That means German umlauts, French nasals, Japanese mora timing, and Chinese tones were never encoded into the feature space. The head can only work with whatever the English embedding already separates — and for non-English phonemes, that's close to nothing.

Per-language reality

What works: train from scratch in the target language

The fix isn't more tuning; it's a different training path. When you train a model from scratch on the target language's phonemes, the filters learn what that language's words actually sound like. Voicute does exactly this: type a French, German, or Japanese word, and the pipeline synthesizes training audio in that language and trains a from-scratch TCN.

LanguageopenWakeWordVoicute (from-scratch TCN)
EnglishWorks (with tuning)Stable 90%+
German~0.001 scoresStable 90%+
French~0.001 scoresStable 90%+
Japanese~0.001 scoresStable 90%+
Chinese~0.001 scoresStable 90%+

FAQ

Why does openWakeWord fail on French wake words?

Its backbone is a frozen embedding trained on English speaker-verification data. French phonemes were never part of its objective, so the model can't reliably separate French words — prediction scores collapse toward zero.

Can openWakeWord handle German, Japanese, or Chinese wake words?

Not reliably. Community reports show non-English words returning prediction scores of 0.0008–0.0015 — effectively unusable — because the frozen embedding never learned those phonemes.

How do I get a French, German, or Japanese wake word with 90%+ recall?

Train from scratch in the target language so the filters learn that language's phonemes directly. Voicute does this from a typed word in 10–20 minutes, holding 90%+ recall across English, German, French, Japanese, and Chinese.

Train a non-English wake word →