loading levels…
ISO 639, two or three lowercase letters (bn, en). Leave empty or the model tries to write everything in one script.
Comma-separated. Up to 200 terms, 100 characters each, no < or >.
Adds the per-model draft, cost and latency to the result. The models run either way.
Optional, file and stream only. 1–8 ids. Live ignores this.
Will send
Record or pick an audio file, send it, and get the whole transcript back in one response.
Partials come from the level's first ASR model, about once a second. After a pause, that sentence is replaced by a final from the full quality path.
socket closed
Must be 16000. The worklet always sends 16 kHz mono PCM16. A different value here is how you test the rejection.
Unsent recordings
Each second of a take is written to IndexedDB on this browser. A failed upload, a reload, or a closed tab can be sent again. A successful response deletes it.
Every request the server handled, newest first, 100 to a page. Tap one to read its transcript and see its model calls. Each row keeps the transcript the server returned plus time, endpoint, quality, status, audio length, cost and latency. Audio is never stored.
Credit left on the account and the spending cap on the key this server uses. Read from OpenRouter, a few seconds behind.
/healthz is always open. /v1/qualities and every other /v1 route need the app secret key from the top bar once the server has APP_SECRET_KEY set. A level added with SST_QUALITY_* shows up here after a restart.
The server keeps audio in memory for the request, then drops it. The log keeps each request's final text and its metadata: time, quality, model, tokens, cost, latency. Turn the text off with SST_LOG_TEXT=false.