Whistle speech model: Apache 2.0, 16.9 MB, offline or Sume STT?
Cactus Whistle is a 16.9 MB Apache 2.0 speech-to-text model for seven languages. Run it on-device, or send the clip to Sume STT for other languages.

Yes, Whistle can ship inside an app: its Hugging Face model card lists the license as Apache 2.0, the model as one 16.9 MB file, and the runtime as needing no dependencies and no GPU. It covers seven languages (English, German, French, Spanish, Italian, Dutch and Polish). If your audio is in another language, or you want a transcript tied to a hosted clip, Sume's video-inspect transcript is the server-side route.
The Whistle facts below come from the model card, read on 2026-10-13. The Sume facts come from the video inspect docs.
| Question | Whistle (model card) | Sume video inspect |
|---|---|---|
| License | Apache 2.0 | Hosted API; no model license to carry |
| Size / runtime | 16.9 MB single file, no dependencies, no GPU | Runs on Sume workers |
| Languages | English, German, French, Spanish, Italian, Dutch, Polish | language_code is a hint; auto-detect when omitted |
| Input | 16 kHz mono; one pass up to 30 seconds, windowed beyond | A media.sume.com clip you already own |
| Billing | Your own compute | Per audio minute; minimum and maximum hold documented on the rate card |
What does the Apache 2.0 license change for a product team?
It tells you the model files can be bundled in a product you distribute, under the license terms. This is a statement about the license shown on the card, not legal advice: read the license text and the licenses of any training data or runtime you add before you ship.
A license does not tell you accuracy on your audio. The card publishes word error rate tables measured over 86,174 utterances against Whisper and Moonshine; treat those as a starting point and test your own clips.
When should a clip go to Sume instead?
Send it to Sume when the language is outside the seven, when the clip already lives in the Sume media library, or when the next step is a Sume job such as captions. POST /v1/video-inspect with transcribe: true returns word timings and, with segmentation.mode: "sentence", sentence segments. Without duration_seconds Sume reserves one minute, with a 600 second hint maximum.
A silent clip fails with inspect_source_has_no_audio, so probe has_audio first. The rate card lists the current credits.
curl -X POST https://api.sume.com/v1/video-inspect \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: whistle-compare-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"frames": 0,
"transcribe": true,
"language_code": "en",
"duration_seconds": 60
}'Sources
Related posts
More in Models
- ACE-Step on Sume: 240 s max, billed per second not per minute
ACE-Step is the Music Router id ace-step: 5–240 s via duration_seconds, billed per second of audio, so a 45 s clip costs less than a 60 s one.
- CassetteAI Music on Sume: a 90 s track bills 2 minutes
CassetteAI Music runs on Sume's Music Router as cassetteai-music: 10–180 s via duration_seconds, billed per started minute, so 90 s costs two minutes.
- ElevenLabs Music v2.5 on Sume: 300 s max, started-minute billing
ElevenLabs Music v2.5 is the Music Router id elevenlabs-music-2.5: 10–300 s via duration_seconds, billed per started minute, so 61 s costs two minutes.
- HelixWorld makes 121 frames at 24 FPS: Sume rows that run longer
HelixWorld's preview caps a run at 121 frames, about 5 seconds at 24 FPS. Sume's video rows with sound run 5 to 15 seconds; here is the arithmetic and the rows.
Written by Sume