← sound-play

Mimi in the browser — can it keep up?

A frame is 80 ms, so to listen in real time the encoder has to finish one in less than that — and it has to do it without taking the main thread with it, which is why it runs in a worker. Everything is served from this tree.

checking for threads…

Encode — listening

frames timed
—
median
—
p90
—
real-time factor
—

Is the main thread still free?

animation, idle
—
animation, while encoding
—
longest stall
—
frames dropped by the codec
—

What came out

codebooks
—
frames for 1s
—
backend
—

not run

idle

Credit. Mimi is Kyutai's codec (CC-BY-4.0). What runs here is a third-party ONNX conversion and int8 quantisation, onnx-community/kyutai-mimi-ONNX, pinned to revision 992dd4d5 and verified against recorded SHA-256s — a Hub branch is mutable, so the pin is what makes this reproducible. It runs under transformers.js 3.4.0, vendored and hash-pinned rather than fetched from a CDN at load.