Skip to content

Live Dictation & Captions

openasr live captures audio from a microphone or system loopback and prints final-per-utterance live captions. For packs that declare streaming-partial support, it also emits incremental partial transcripts.

bash
openasr live

By default this opens the system’s default input device (--source mic) and prints human-readable captions to stdout.

FlagEffect
--source micDefault input device (the default).
--source systemLoopback / system audio capture.
--device <NAME>Select a specific microphone by exact or best-effort name.
--list-devicesList available input devices and configs, then exit.
--input-file <PATH>Simulate live streaming from a local file (WAV/MP3/MP4/M4A/WEBM/FLAC/OGG) instead of capturing from a device — useful for testing or demos.

-f / --format controls what reaches stdout:

  • text (default) — human-readable line-per-utterance captions.
  • jsonl — one JSON object per line, suited for piping into another tool.
bash
openasr live --source mic --max-seconds 5 --format jsonl

Voice-activity detection controls when an utterance opens and closes. All thresholds are optional; the defaults come from the loaded model pack.

FlagPurpose
--frame-duration-ms <10|20|30>Realtime frame duration (default 20).
--speech-start-ms <N>Required speech duration before VAD starts an utterance.
--speech-stop-ms <N>Required silence duration before VAD closes an utterance.
--pre-roll-ms <N>Audio kept before the VAD speech-start point.
--max-utterance-ms <N>Maximum utterance duration before a forced close.
--no-speech-timeout-ms <N>Initial no-speech timeout.
--energy-threshold <F>Energy threshold for the MVP VAD.

Lowering --speech-stop-ms produces shorter, snappier segments; raising it lets the speaker pause mid-sentence without splitting the utterance.

Packs that declare streaming-partial support emit incremental transcript snapshots between finalized utterances. Two flags control cadence:

FlagDefaultPurpose
--partial-interval-ms <N>300Minimum interval between partial emissions.
--partial-window-ms <N>3 000Sliding-window duration for partial snapshot audio.

These flags have no effect on packs that do not support partials.

FlagEffect
--max-seconds <N>Stop after N seconds.
--max-utterances <N>Stop after N completed utterances.

Both are optional; without either the session runs until you interrupt it.

Save the finalized transcript when the session ends. The file extension controls the export format:

bash
openasr live --save meeting.srt

Supported extensions: .txt, .json, .md, .srt, .vtt.

FlagEffect
--save-join-segmentsJoin finalized caption segments into one paragraph.
--save-suggest-titleSuggest a conservative title derived from the transcript text.

For live-streaming setups, openasr live can continuously update a local text file that an OBS Text Source reads via its “Read from file” mode:

bash
openasr live --obs-text-file captions.txt --obs-max-lines 2
FlagDefaultEffect
--obs-text-file <PATH>Path to the text file OBS reads.
--obs-max-lines <N>3Max finalized/revised lines kept in the file.
--obs-clear-on-startoffClear the file when the session starts.
--obs-clear-on-stopoffClear the file when the session stops.

Write a Markdown note from the session on stop:

bash
openasr live --markdown-note session.md --markdown-suggest-title
FlagEffect
--markdown-note <PATH>Write a Markdown live-session note on stop.
--markdown-appendAppend to an existing file instead of replacing it.
--markdown-title <STR>Override the note title.
--markdown-suggest-titleSuggest a title from the transcript text.

--diarize labels finalized utterances with anonymous speakers (SPEAKER_00, SPEAKER_01, …). Unlike openasr transcribe, live diarization does not accept a --speakers count hint.

Passing --diarize may install the required WeSpeaker speaker-embedder capability pack — the flag itself serves as consent. See the Diarization page for the full speaker-enrollment story.

FlagEnvEffect
-m / --model <ID>OPENASR_MODELModel id from the registry.
--model-pack <PATH>Use a local .oasr pack file directly.
-y / --yesOPENASR_ASSUME_YESDownload a missing model without the interactive prompt.
--offline (alias --no-pull)OPENASR_OFFLINENever download; fail if the model is not already installed.

Nothing is auto-downloaded silently. The download path only runs when gated by an interactive confirmation, --yes, or OPENASR_ASSUME_YES; --offline disables it entirely.

openasr live runs the native backend — the same fail-closed, locally-executed engine as openasr transcribe. There is no cloud fallback and no telemetry. Unsupported configurations error out rather than producing fabricated results.

  • CLI reference — full command overview including transcribe, serve, and model management.
  • Server API — the GET /v1/audio/realtime WebSocket endpoint provides a server-side streaming path that shares the same underlying event vocabulary (VAD, partial/final transcript segments, speech-boundary).
  • Diarization — speaker enrollment, embedding packs, and per-speaker labeling details.
  • Models — available model packs and quantizations.