this holds a connection open while whisper works, and nothing flows on it meanwhile — exactly what an idle timeout kills. unset, Bun drops the platform's connection at around 255s. it was the last of three hops still doing it. the proxy's outbound fetch and the platform's inbound timeout were both fixed earlier today and a 42-minute recording still died at 4m16s. whisperx went on and finished it; the result was discarded. with diarization on, align runs at roughly 1.5x the audio duration, so an hour-long episode needs ninety minutes. no ceiling is both safe and high enough, and 255 is Bun's maximum anyway — "raise it" was never available. 0 disables it.
Transcribe
Officer's speech-to-text, talking to a self-hosted whisper.cpp server.
Transcribe does not run Whisper and ships no model. You point it at a whisper.cpp /inference server
you already run and it forwards to it, tuned for one person talking into a phone: detect the spoken
language, then transcribe faithfully in it — never translated, never guessed at in English when the
audio is not.
What you get
POST /api/transcribe/transcribe— send an audio file, get back its text and the language Whisper detected. Two-pass under the hood (detect, then transcribe in that language) so a low-confidence guess never quietly defaults to English.- A file-browser task. Right-click an
.mp3,.wavor.m4aand transcribe it without a model turn — the task is a plain script that calls this plugin's own route and files the result next to the original. - A skill, so an agent asked to transcribe something knows the route, the shape, and what to say when nothing is configured, without being told.
What you need
A whisper.cpp server you already run, reachable from this machine, answering POST /inference —
the same container the platform used to talk to directly. Nothing else. No system packages, no host
binaries; the sidecar reaches it with fetch.
Setup
PUT /api/transcribe/config
{ "url": "http://192.168.1.50:64201" }
Validated against the server before it is stored — a wrong URL is a 400 with the reason, not a saved value that fails on the first real transcription.
What this plugin deliberately does not have
- No dashboard route, no dock tile. There is nothing to look at — this is reached through the file
browser's task menu and by an agent that has read the skill, not through a screen. Shipping no
web/is a supported shape, not an oversight. - No streaming. One file in, one answer back. If you want a live microphone, that is a different feature built on top of this one, not something this plugin does today.
- No translation. It transcribes in whatever language was spoken. Whisper's own translate mode is English-only, so honouring "translate into <language>" for anything else would mean silently handing back a rough English rendering of, say, Portuguese audio — worse than refusing.