// docs / overview

LiveAudio documentation

LiveAudio is a free, open-source (MIT) desktop app that generates real-time Whisper speech captions 100% locally and streams them to OBS over a local WebSocket. It runs on Windows and Linux — no cloud, no API key, no per-minute cost.

What LiveAudio is

Plynte LiveAudio is a local-first speech-recognition engine for streamers and creators. It transcribes with Whisper (tiny, base, small, turbo), trims silence with Silero VAD, and broadcasts subtitle JSON over a local WebSocket so OBS — or any localhost client — can render live captions.

  • Local processing. No audio or transcribed text leaves your machine. No telemetry.
  • Process isolation. Separate worker processes keep capture and transcription stable under heavy load.
  • Hot-swap. Change the audio device or model size without restarting the app.

System requirements

ComponentRequirement
Operating systemWindows 10/11 x64, or Linux x86_64. No macOS.
GPUOptional — CPU works. NVIDIA CUDA is recommended and auto-detected; needs driver ≥ 525 and VRAM ≥ 4 GiB.
RAM8 GB minimum, 16 GB recommended.
Disk~400 MB (CPU) / ~2.5 GB (CUDA) for app + deps, plus model storage.
PythonNot required for users — the installer provisions its own Python 3.11.
InternetFirst run only (downloads Python, deps and models). Fully offline afterward.

Capture and platforms

LiveAudio captures from a physical microphone on both platforms. On Windows it can also capture system audio via WASAPI loopback.

How it installs (bootstrap)

What you download is a small bootstrapper launcher — a frozen PyInstaller executable, not a multi-gigabyte bundle. On first run it provisions everything else: it resolves the install root, detects your hardware to pick a torch extra, downloads a checksum-verified source zip, ensures uv, runs uv sync (which also fetches a managed CPython 3.11), writes installed.json, then launches the app.

first-run bootstrap
LiveAudio-Setup-X.Y.Z.exe  /  liveaudio-launcher
  │
  ├─ 1. Resolve install root (portable.marker / default per-user dir)
  ├─ 2. Detect hardware → torch extra: cpu | cu121
  ├─ 3. Download liveaudio-src-X.Y.Z.zip (URL + SHA256 baked into the exe)
  ├─ 4. Ensure uv (bundled > on PATH > previously downloaded)
  ├─ 5. uv sync --locked --extra <cpu|cu121> --python 3.11
  │     (uv also fetches a managed CPython 3.11 into <root>/python)
  ├─ 6. Write installed.json (atomic — marks the install complete)
  └─ 7. Launch <root>/app/.venv/.../liveaudio

On later runs installed.json already matches the launcher's target version, so it takes the fast path and spawns the installed app directly. On Windows a brief “Starting LiveAudio…” splash stays up until the app window appears — the app imports torch at module level, so a cold start can take 60+ seconds with no UI of its own.

Install layout

Everything lives under one install root — the source, the virtual environment, the managed Python, and your data:

LocationContent
<root>/app/Application source (pyproject.toml, uv.lock, liveaudio/).
<root>/app/.venv/Virtual environment created by uv sync.
<root>/python/uv-managed CPython 3.11.
<root>/installed.json{app_version, extra, python, uv_version} — marks the install complete.
<root>/bootstrap.logFull launcher + uv log of every run.
<root>/data/App data home (LIVEAUDIO_HOME): config.json, sessions/.

Hardware detection

The launcher decides between the cpu and cu121 torch extras with a first-match-wins ladder:

  • A --device cpu|cuda CLI flag, if you passed one (persisted in installed.json).
  • Otherwise the persisted preference (extra in installed.json).
  • Otherwise NVML + nvidia-smi: if the driver is ≥ 525 and VRAM is ≥ 4096 MiBcu121.
  • Anything else (no NVML, smi failure, or a GPU below requirements) → cpu, with a note when a GPU was found but did not qualify.

Updates

The app checks the GitHub Releases API in the background and shows an update button when a newer version exists. Clicking it relaunches the launcher with --update vX.Y.Z; you can also run --update by hand (no tag means “latest”). The launcher verifies the source zip’s SHA256, preserves the existing .venv, and re-runs uv sync --locked. Because uv only downloads what changed and torch wheels are cached, a typical update transfers a few MB rather than gigabytes. If the installed version already matches, it reports “already up to date” and exits.