Skip to content
WM KeyboardWM Keyboard
Accessibility

Offline voice (Whistle)

Fast dictation on your phone in seven languages, with one small Cactus Whistle model.

Offline Whistle is a dictation engine that runs entirely on your phone, like offline Whisper, but with one small model instead of a catalog. Cactus Whistle is a 16.9 MB speech recognition model by Cactus Compute, run by their Needle engine. Once the model is downloaded, no audio leaves the phone.

It was contributed by @Guillermode20.

WhistleWhisper
LanguagesEnglish, German, French, Spanish, Italian, Dutch, Polishclose to a hundred, depending on the model
Downloadone model, 16.9 MBa catalog of 29, from about 40 MB to 1.5 GB
Words to listen foryes, as words to favourno
Translate to Englishnoon most multilingual models
Devices64-bit ARM phones (arm64) onlyevery phone the Full edition runs on

Cactus’s published figures put Whistle well ahead of Whisper Base on speed and ahead on several English and European test sets, though not all of them. Those are the model makers’ own measurements on a desktop processor, not this app’s on a phone.

Pick Whistle when you dictate in its languages and want a small download and a quick answer. Pick Whisper when you need any other language, or want to choose a bigger model for accuracy.

WM Keyboard  Voice typing  Recognition engine

Choose Offline Whistle under Recognition engine. A Whistle model group appears below the dictation settings with one row: Download fetches the model, a cross pauses it, Resume carries on from where it stopped, and the bin deletes it. On a metered connection the download asks first, as every model download does (see Data saver).

The option is only offered where the engine can run: the Full edition on a 64-bit ARM phone. Cactus publishes no engine for x86 phones, and the one they publish for older 32-bit ARM phones cannot be built into an Android app, so those phones do not see Whistle at all.

Dictate without the model downloaded and the voice panel says there is no model yet, with the same two ways forward Whisper offers: open settings to download it, or switch to the system recognizer.

Dictation follows the language of the layout you are typing on, or the language you set under Voice typing language. When that is one of Whistle’s seven, Whistle hears it. When it is any other language, dictation uses the system recognizer instead, without a prompt, because there is no Whistle model that could help.

Set to listen for several languages at once, Whistle hears them only when all of them are among its seven, and it works out which one you spoke. Otherwise the system recognizer takes the whole session.

Unlike Whisper, Whistle can be told words to favour. The Words to listen for group stays on the screen with Whistle selected, and the same list the system recognizer gets, your own words and the ones you type into More words to listen for, goes to Whistle with each phrase. See Words to listen for.

Whistle works the way Whisper does in the keyboard: it records the phrase and transcribes it once you stop, when Stop after a pause ends it, or at 30 seconds. A clip with no speech in it is never shown to the model, a microphone that drops out keeps what it had, and the panel’s own keys type without ending the recording. All of that is described under offline Whisper’s details and applies here unchanged.

The model loads while you are speaking your first phrase, so that phrase does not wait for it. It then stays loaded until the keyboard’s process ends: the engine has no way to unload a model, and at 17 MB it is not worth reloading.

With the transcription server as your engine and Use on-device models offline on under Data saver, a phrase that cannot reach the server is transcribed on the phone instead. Whistle does that job when its model is downloaded and it knows the language; otherwise a downloaded Whisper model does.

The model is kept in the keyboard’s private storage and listed under Storage > Voice models beside any Whisper models, where it can be deleted too.

A phone that cannot download it can import it: fetch whistle.cact on any device and import it like any other file (see Using it without internet). The download and the import both check the file’s SHA-256 before it is used, so only that exact file is accepted.

Transcription makes no network calls. The one network request Whistle causes is the model download from Hugging Face, made when you press Download. See Network policy.

The Needle engine and the Whistle model are Cactus Compute’s, under the Apache 2.0 licence. The engine ships in the app as Cactus’s own published build, behind a small bridge of the keyboard’s own; F-Droid builds are Lite and carry neither.