manifest: {
id: "transcription";
requires: readonly ["modelHost", "catalog"];
routes: readonly [
{
id: "transcriptions";
method: "POST";
mount: "root";
path: "/v1/audio/transcriptions";
response: "json";
summary: "Transcribe an uploaded clip (multipart or JSON body); text, json, verbose_json, srt or vtt, or an SSE stream";
},
{
id: "translations";
method: "POST";
mount: "root";
path: "/v1/audio/translations";
response: "json";
summary: "Translate an uploaded clip to English";
},
{
id: "unload";
method: "POST";
mount: "root";
path: "/admin/transcription/unload";
response: "json";
summary: "Page the Whisper weights out now; reports the residency counters";
},
{
id: "session-create";
method: "POST";
mount: "root";
path: "/v1/audio/sessions";
response: "json";
summary: "Open a streaming dictation session";
},
{
id: "session-audio";
method: "POST";
mount: "root";
path: "/v1/audio/sessions/:id/audio";
response: "json";
summary: "Append a chunk of 16 kHz float32 PCM (or an encoded clip) to a session";
},
{
id: "session-finish";
method: "POST";
mount: "root";
path: "/v1/audio/sessions/:id/finish";
response: "json";
summary: "Transcribe the remainder and close the session";
},
{
id: "session-delete";
method: "DELETE";
mount: "root";
path: "/v1/audio/sessions/:id";
response: "json";
summary: "Close a session that was abandoned";
},
];
summary: "Speech-to-text with a local Whisper model: OpenAI-compatible audio routes, streaming dictation sessions, and the transcribe and dictate verbs.";
title: "Transcription";
verbs: readonly [
{
name: "transcribe";
options: readonly [
{
name: "model";
summary: "Whisper model directory or cached query (overrides the positional query) [default: the first downloaded whisper checkpoint]";
type: "string";
},
{
name: "query";
summary: "Cached Whisper query when no positional/model override is supplied";
type: "string";
},
{
name: "language";
summary: "ISO code or name (en, japanese); auto or omitted detects from the first 30 s";
type: "string";
},
{
name: "task";
summary: "transcribe | translate (to English) [default: transcribe]";
type: "string";
},
{
name: "beam-size";
summary: "Beam search width [default: greedy]";
type: "number";
},
{
name: "temperature";
summary: "One sampling temperature; omitted runs the (0, 0.2, …, 1.0) fallback ladder like mlx-whisper";
type: "number";
},
{
name: "no-fallback";
summary: "Temperature 0 only, no retry ladder";
type: "boolean";
},
{
name: "prompt";
summary: "Initial prompt (vocabulary hints / style)";
type: "string";
},
{
name: "no-timestamps";
summary: "Decode text only (<|notimestamps|>)";
type: "boolean";
},
{
name: "no-condition";
summary: "Do not condition each window on the previous text";
type: "boolean";
},
{
name: "vad";
summary: "Silero VAD gate: no detected speech prints an empty result and Whisper never runs (weights: ggml-org/whisper-vad in the HF cache)";
type: "boolean";
},
{
name: "vad-threshold";
summary: "Speech probability threshold for --vad [default: 0.5]";
type: "number";
},
{
name: "vad-model";
summary: "Explicit Silero ggml path for --vad";
type: "string";
},
{
name: "vad-trim";
summary: "Accepted with --vad; the clip is still transcribed whole, as in main";
type: "boolean";
},
{
name: "word-timestamps";
summary: "Word-level timestamps (verbose_json words)";
type: "boolean";
},
{
name: "faithful";
summary: "Run the oracle-parity graph instead of the fast path";
type: "boolean";
},
{
name: "audio-ctx";
summary: "Lab: encode only n of the 1500 encoder positions (whisper.cpp -ac); degrades below ~1024";
type: "number";
},
{
name: "format";
summary: "text | json | verbose_json | srt | vtt [default: text]";
type: "string";
},
{
name: "verbose";
summary: "Print each segment with its time range as it decodes, then a realtime-factor summary (stderr)";
type: "boolean";
},
];
positional: readonly [
{
name: "audio-file";
required: true;
summary: "The clip to transcribe";
},
{
name: "query";
summary: "The Whisper checkpoint (a directory or a cached query)";
},
];
summary: "Speech-to-text from an audio file with a local Whisper model (no server)";
usage: "usage: mlx-bun transcribe <audio-file> [query] [--language en] [--format text|json|verbose_json|srt|vtt]";
},
{
name: "dictate";
options: readonly [
{
name: "model";
summary: "Whisper model directory or cached query for in-process transcription (overrides the positional query) [default: the first downloaded whisper checkpoint]";
type: "string";
},
{
name: "query";
summary: "Cached Whisper query when no positional/model override is supplied";
type: "string";
},
{
name: "server";
summary: "Use a running mlx-bun server's /v1/audio/sessions instead of loading the model here";
type: "string";
},
{
default: 61;
name: "hotkey";
optionalValue: true;
summary: "Hold a key to talk instead of Enter toggling: macOS virtual keycode, value optional [default: 61 = Right Option]; needs Input Monitoring for your terminal";
type: "number";
},
{
name: "language";
summary: "Language code; auto detects [default: en]";
type: "string";
},
{
name: "beam-size";
summary: "Beam search width [default: greedy]";
type: "number";
},
{ name: "prompt"; summary: "Initial prompt"; type: "string" },
{
name: "vocabulary";
summary: "Comma-separated hint terms, fitted into the prompt budget";
type: "string";
},
{
name: "no-vad";
summary: "Skip the Silero gate (by default silence never runs Whisper)";
type: "boolean";
},
{
name: "idle-unload";
summary: "Release the weights after this many idle seconds; 0 = right after each take [default: 30]";
type: "number";
},
{
name: "resident";
summary: "Keep the weights loaded";
type: "boolean";
},
{
name: "copy";
summary: "Copy the transcript to the clipboard (pbcopy)";
type: "boolean";
},
{
name: "type";
summary: "Type it into the frontmost app via System Events keystrokes (needs Accessibility for your terminal)";
type: "boolean";
},
{
name: "type-delay";
summary: "Seconds to wait before typing so you can Cmd-Tab [default: 1 in Enter mode, 0 with --hotkey]";
type: "number";
},
];
positional: readonly [
{
name: "query";
summary: "The Whisper checkpoint (a directory or a cached query)";
},
];
summary: "Push-to-talk: stream your microphone into Whisper, print/copy/type the text";
},
];
} = ...
Type Declaration
-
Readonlyid: "transcription"
-
Readonlyrequires: readonly ["modelHost", "catalog"]
-
Readonlyroutes: readonly [
{
id: "transcriptions";
method: "POST";
mount: "root";
path: "/v1/audio/transcriptions";
response: "json";
summary: "Transcribe an uploaded clip (multipart or JSON body); text, json, verbose_json, srt or vtt, or an SSE stream";
},
{
id: "translations";
method: "POST";
mount: "root";
path: "/v1/audio/translations";
response: "json";
summary: "Translate an uploaded clip to English";
},
{
id: "unload";
method: "POST";
mount: "root";
path: "/admin/transcription/unload";
response: "json";
summary: "Page the Whisper weights out now; reports the residency counters";
},
{
id: "session-create";
method: "POST";
mount: "root";
path: "/v1/audio/sessions";
response: "json";
summary: "Open a streaming dictation session";
},
{
id: "session-audio";
method: "POST";
mount: "root";
path: "/v1/audio/sessions/:id/audio";
response: "json";
summary: "Append a chunk of 16 kHz float32 PCM (or an encoded clip) to a session";
},
{
id: "session-finish";
method: "POST";
mount: "root";
path: "/v1/audio/sessions/:id/finish";
response: "json";
summary: "Transcribe the remainder and close the session";
},
{
id: "session-delete";
method: "DELETE";
mount: "root";
path: "/v1/audio/sessions/:id";
response: "json";
summary: "Close a session that was abandoned";
},
]
-
Readonlysummary: "Speech-to-text with a local Whisper model: OpenAI-compatible audio routes, streaming dictation sessions, and the transcribe and dictate verbs."
-
Readonlytitle: "Transcription"
-
Readonlyverbs: readonly [
{
name: "transcribe";
options: readonly [
{
name: "model";
summary: "Whisper model directory or cached query (overrides the positional query) [default: the first downloaded whisper checkpoint]";
type: "string";
},
{
name: "query";
summary: "Cached Whisper query when no positional/model override is supplied";
type: "string";
},
{
name: "language";
summary: "ISO code or name (en, japanese); auto or omitted detects from the first 30 s";
type: "string";
},
{
name: "task";
summary: "transcribe | translate (to English) [default: transcribe]";
type: "string";
},
{
name: "beam-size";
summary: "Beam search width [default: greedy]";
type: "number";
},
{
name: "temperature";
summary: "One sampling temperature; omitted runs the (0, 0.2, …, 1.0) fallback ladder like mlx-whisper";
type: "number";
},
{
name: "no-fallback";
summary: "Temperature 0 only, no retry ladder";
type: "boolean";
},
{
name: "prompt";
summary: "Initial prompt (vocabulary hints / style)";
type: "string";
},
{
name: "no-timestamps";
summary: "Decode text only (<|notimestamps|>)";
type: "boolean";
},
{
name: "no-condition";
summary: "Do not condition each window on the previous text";
type: "boolean";
},
{
name: "vad";
summary: "Silero VAD gate: no detected speech prints an empty result and Whisper never runs (weights: ggml-org/whisper-vad in the HF cache)";
type: "boolean";
},
{
name: "vad-threshold";
summary: "Speech probability threshold for --vad [default: 0.5]";
type: "number";
},
{
name: "vad-model";
summary: "Explicit Silero ggml path for --vad";
type: "string";
},
{
name: "vad-trim";
summary: "Accepted with --vad; the clip is still transcribed whole, as in main";
type: "boolean";
},
{
name: "word-timestamps";
summary: "Word-level timestamps (verbose_json words)";
type: "boolean";
},
{
name: "faithful";
summary: "Run the oracle-parity graph instead of the fast path";
type: "boolean";
},
{
name: "audio-ctx";
summary: "Lab: encode only n of the 1500 encoder positions (whisper.cpp -ac); degrades below ~1024";
type: "number";
},
{
name: "format";
summary: "text | json | verbose_json | srt | vtt [default: text]";
type: "string";
},
{
name: "verbose";
summary: "Print each segment with its time range as it decodes, then a realtime-factor summary (stderr)";
type: "boolean";
},
];
positional: readonly [
{
name: "audio-file";
required: true;
summary: "The clip to transcribe";
},
{
name: "query";
summary: "The Whisper checkpoint (a directory or a cached query)";
},
];
summary: "Speech-to-text from an audio file with a local Whisper model (no server)";
usage: "usage: mlx-bun transcribe <audio-file> [query] [--language en] [--format text|json|verbose_json|srt|vtt]";
},
{
name: "dictate";
options: readonly [
{
name: "model";
summary: "Whisper model directory or cached query for in-process transcription (overrides the positional query) [default: the first downloaded whisper checkpoint]";
type: "string";
},
{
name: "query";
summary: "Cached Whisper query when no positional/model override is supplied";
type: "string";
},
{
name: "server";
summary: "Use a running mlx-bun server's /v1/audio/sessions instead of loading the model here";
type: "string";
},
{
default: 61;
name: "hotkey";
optionalValue: true;
summary: "Hold a key to talk instead of Enter toggling: macOS virtual keycode, value optional [default: 61 = Right Option]; needs Input Monitoring for your terminal";
type: "number";
},
{
name: "language";
summary: "Language code; auto detects [default: en]";
type: "string";
},
{
name: "beam-size";
summary: "Beam search width [default: greedy]";
type: "number";
},
{ name: "prompt"; summary: "Initial prompt"; type: "string" },
{
name: "vocabulary";
summary: "Comma-separated hint terms, fitted into the prompt budget";
type: "string";
},
{
name: "no-vad";
summary: "Skip the Silero gate (by default silence never runs Whisper)";
type: "boolean";
},
{
name: "idle-unload";
summary: "Release the weights after this many idle seconds; 0 = right after each take [default: 30]";
type: "number";
},
{ name: "resident"; summary: "Keep the weights loaded"; type: "boolean" },
{
name: "copy";
summary: "Copy the transcript to the clipboard (pbcopy)";
type: "boolean";
},
{
name: "type";
summary: "Type it into the frontmost app via System Events keystrokes (needs Accessibility for your terminal)";
type: "boolean";
},
{
name: "type-delay";
summary: "Seconds to wait before typing so you can Cmd-Tab [default: 1 in Enter mode, 0 with --hotkey]";
type: "number";
},
];
positional: readonly [
{
name: "query";
summary: "The Whisper checkpoint (a directory or a cached query)";
},
];
summary: "Push-to-talk: stream your microphone into Whisper, print/copy/type the text";
},
]