Whistle fits speech to text in 16.9 MB, DeepSeek 4.1 Flash runs all day for a dollar, and Opus 5.5 draws Invisible Cities

3 days ago

Cactus Compute's Whistle puts open speech recognition in a 16.9 MB file that runs on a CPU, and one Hacker News reader got it to understand 164 of 170 commands on a rebuilt Echo Show. Also from Thursday's Hacker News front page: DeepSeek 4.1 Flash running coding sessions for under a dollar, Opus 5.5 and GPT-6 Astra given one prompt to draw Calvino's Invisible Cities, and a minimal kernel in Embedded Swift. Whistle: Speech to Text in 16.9 MB, by Jakub Mroz and Henry Ndubuaku (Cactus Compute) https://cactuscompute.com/blog/whistle Discussion: https://news.ycombinator.com/item?id=50008427 skolos on Whistle in a rebuilt Echo Show: https://news.ycombinator.com/item?id=50011633 Why isn't the industry freaking out about DeepSeek 4.1 Flash? by Jono https://www.dgt.is/blog/2026-10-07-deepseek-freek-out/ Discussion: https://news.ycombinator.com/item?id=50000488 xzjis on token counts: https://news.ycombinator.com/item?id=50014175 I gave Opus 5.5 one prompt and six hours to visualize Invisible Cities, by Piotr Migdał https://quesma.com/blog/invisible-cities-one-shot/ Discussion: https://news.ycombinator.com/item?id=50004790 SiempreViernes on the bridges: https://news.ycombinator.com/item?id=50005329 A minimal kernel in Swift, running in QEMU, by Antonin https://carette.xyz/posts/minimal_swift_kernel_on_qemu/ Discussion: https://news.ycombinator.com/item?id=49977351 Narishma's reply: https://news.ycombinator.com/item?id=50001298 The front page that day: https://news.ycombinator.com/front?day=2026-10-08

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00Whistle: speech to text in 16.9 MB
  2. 0:22An eighth the size of Whisper base
  3. 0:50From a clip to a function call
  4. 1:16An Echo Show that never calls Amazon
  5. 1:51DeepSeek 4.1 Flash for under a dollar
  6. 2:38Opus 5.5 and Invisible Cities
  7. 3:19A kernel in Embedded Swift
Show transcript

Whistle: speech to text in 16.9 MB

Whistle fits speech to text in 16.9 MB, DeepSeek 4.1 Flash runs all day for a dollar, and Opus 5.5 draws Invisible Cities

On Thursday's HN front page, Cactus Compute released Whistle, an open speech recognition model for phones, watches, robots and microcontrollers. It is one file of under seventeen megabytes, runs on the CPU with no dependencies, and transcribes seven languages: English, German, French, Spanish, Italian, Dutch and Polish.

An eighth the size of Whisper base

Whistle is an eighth the size of Whisper base and starts six times sooner

Model size · MB

Whistle
16.9
Moonshine tiny
41.9
Whisper base
145.3

First token · ms

Whistle
11.1
Moonshine tiny
22.8
Whisper base
73.2

Cactus timed ten seconds of audio on an Apple M4 Pro CPU. OpenAI's Whisper base is 145 megabytes, Moonshine tiny is 42, and Whistle is under 17. Whistle's first word comes out in 11 milliseconds, against 73 for Whisper base, which pads every clip to thirty seconds. On accuracy they split: Whistle makes fewer mistakes on audiobooks and earnings calls, and Whisper base makes fewer on TED talks and recorded meetings.

From a clip to a function call

One binary turns a spoken command into a function call

needle --model needle3.cact --model whistle.cact \
       --tools tools.json --audio clip.wav
{"function_calls": [{"name": "set_lights",
   "arguments": {"room": "kitchen", "on": false}}],
 "audio_text": "turn off the kitchen lights"}

Whistle loads into the same C++ engine as Needle, the small tool-calling model Cactus already ships. Give that engine both models, a list of tools and an audio clip, and it transcribes the clip, matches the words against your tools, and returns one JSON object with the call. Your code never handles the transcript. The engine comes prebuilt for seventeen targets, from iOS and watchOS to RISC-V and the browser.

An Echo Show that never calls Amazon

Limited to a fixed set of commands, Whistle went from 70 right to 164 out of 170

Commands understood, of 170 · skolos’s Echo Show

Whistle, free-form
70
Whistle + templates
164
Qwen ASR 1.7B
168

In the thread, skolos describes taking over an Amazon Echo Show so that it never calls Amazon and does all its listening on its own CPU. Out of 170 spoken commands, Qwen's 1.7 billion parameter speech model, running on an RTX 5080, got 168 right. Whistle, transcribing freely, got 70. So skolos trained a tiny network to map Whistle's output onto a fixed list of command templates, and Whistle reached 164, spoken with what skolos calls a heavy accent.

DeepSeek 4.1 Flash for under a dollar

DeepSeek 4.1 Flash runs an all-day coding session for under a dollar

Plan
OpenCode Go, $10 a month
KV cache
about 437× smaller than DeepSeek’s first model

“DeepSeek 4.1 Flash uses 10× more tokens than GPT-6.1 Sol for an equivalent task”

xzjis

Jono, who writes the blog Jono's Corner, has used DeepSeek 4.1 Flash heavily for a month across a dozen projects, and in the middle of a session can't tell it from Opus. On a ten dollar a month OpenCode Go plan it is close to unlimited, and a session rarely costs more than a dollar. The post credits the cache: DeepSeek's is roughly 437 times smaller than in its first model, and holding that cache in GPU memory is one of the big costs of a long session. In the thread, xzjis argues the cheap price is misleading, because Flash spends ten times the tokens of GPT-6.1 Sol on the same task and does it worse. Others add that the big labs' flat-rate subscriptions already buy more tokens than their API prices would.

Opus 5.5 and Invisible Cities

Given six hours to draw Invisible Cities, Opus 5.5 stopped after 85 minutes

Opus 5.5
1 h 25 min · 6 subagents · about $74
GPT-6 Astra
53 min · about $10

In the city where every bridge is different, three of the model’s bridges cross nothing

SiempreViernes, paraphrased

Piotr Migdał gave two models the same prompt: a three.js visualization of all 55 cities in Italo Calvino's Invisible Cities, in one shot, with six hours to make it a masterpiece. GPT-6 Astra finished in 53 minutes, for about ten dollars of API tokens. Opus 5.5 ran six subagents in parallel, said it had used about half the time, and actually stopped at an hour and 25 minutes, for about 74 dollars. Migdał calls the result mesmerizing. Readers of the book were cooler. SiempreViernes opened a city known for bridges that are each different, and found three bridges sitting in the river, crossing nothing at all.

A kernel in Embedded Swift

A Swift kernel boots in QEMU once it writes its own putchar

Embedded Swift aarch64-none-none-elf QEMU virt · PL011 UART at 0x09000000
Swift kernel ready.
> hello kernel
hello kernel

Antonin wrote a minimal kernel in Embedded Swift, the subset of Swift for machines with no operating system, and boots it on QEMU's ARM virt machine. With no C library underneath, the linker could not find putchar or memmove, so the post writes both in Swift, and putchar stores each byte straight into the emulated serial port's register. The kernel now echoes whatever you type, checking the port in a busy loop. In the thread, Narishma calls it more of a hello world than a kernel, and the post ends on its to-do list: interrupts, backspace and a command parser.