// docs / introducción

Documentación de LiveAudio

LiveAudio es una app de escritorio gratuita y de código abierto (MIT) que genera subtítulos de voz Whisper en tiempo real 100% en tu equipo y los envía a OBS por un WebSocket local. Funciona en Windows y Linux: sin nube, sin API key, sin costo por minuto.

Qué es LiveAudio

Plynte LiveAudio es un motor de reconocimiento de voz local-first para streamers y creadores. Transcribe con Whisper (tiny, base, small, turbo), recorta silencios con Silero VAD y emite los subtítulos en JSON por un WebSocket local para que OBS — o cualquier cliente en localhost — muestre los subtítulos en vivo.

  • Procesamiento local. Ningún audio ni texto transcrito sale de tu equipo. Sin telemetría.
  • Aislamiento de procesos. Procesos de trabajo separados mantienen estable la captura y la transcripción bajo carga.
  • Hot-swap. Cambia el dispositivo de audio o el tamaño del modelo sin reiniciar la app.

Requisitos del sistema

ComponenteRequisito
Sistema operativoWindows 10/11 x64 o Linux x86_64. Sin macOS.
GPUOpcional — la CPU funciona. NVIDIA CUDA es recomendada y se detecta sola; necesita driver ≥ 525 y VRAM ≥ 4 GiB.
RAM8 GB mínimo, 16 GB recomendados.
Disco~400 MB (CPU) / ~2.5 GB (CUDA) para app + dependencias, más el almacenamiento de modelos.
PythonNo es necesario para los usuarios — el instalador aprovisiona su propio Python 3.11.
InternetSolo en la primera ejecución (descarga Python, dependencias y modelos). Después funciona sin conexión.

Captura y plataformas

LiveAudio captura desde un micrófono físico en ambas plataformas. En Windows también puede capturar el audio del sistema mediante WASAPI loopback.

Cómo se instala (bootstrap)

Lo que descargas es un pequeño launcher bootstrapper — un ejecutable PyInstaller, no un paquete de varios gigabytes. En la primera ejecución aprovisiona todo lo demás: resuelve la raíz de instalación, detecta tu hardware para elegir un extra de torch, descarga un zip de código verificado por checksum, asegura uv, ejecuta uv sync (que además trae un CPython 3.11 gestionado), escribe installed.json y abre la 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

En ejecuciones posteriores installed.json ya coincide con la versión objetivo del launcher, así que toma el camino rápido y abre la app instalada directamente. En Windows queda un breve splash “Starting LiveAudio…” hasta que aparece la ventana de la app — la app importa torch a nivel de módulo, por lo que un arranque en frío puede tardar 60+ segundos sin interfaz propia.

Estructura de instalación

Todo vive bajo una sola raíz de instalación — el código, el entorno virtual, el Python gestionado y tus datos:

UbicaciónContenido
<root>/app/Código de la aplicación (pyproject.toml, uv.lock, liveaudio/).
<root>/app/.venv/Entorno virtual creado por uv sync.
<root>/python/CPython 3.11 gestionado por uv.
<root>/installed.json{app_version, extra, python, uv_version} — marca la instalación como completa.
<root>/bootstrap.logLog completo del launcher + uv de cada ejecución.
<root>/data/Home de datos (LIVEAUDIO_HOME): config.json, sessions/.

Detección de hardware

El launcher elige entre los extras cpu y cu121 con una escalera de “primera coincidencia gana”:

  • Un flag --device cpu|cuda, si lo pasaste (se persiste en installed.json).
  • Si no, la preferencia persistida (extra en installed.json).
  • Si no, NVML + nvidia-smi: si el driver es ≥ 525 y la VRAM es ≥ 4096 MiBcu121.
  • Cualquier otro caso (sin NVML, fallo de smi o una GPU por debajo de los requisitos) → cpu, con un aviso cuando se encontró una GPU pero no calificó.

Actualizaciones

La app consulta la API de GitHub Releases en segundo plano y muestra un botón de actualización cuando hay una versión más nueva. Al pulsarlo, relanza el launcher con --update vX.Y.Z; también puedes ejecutar --update a mano (sin tag significa “la última”). El launcher verifica el SHA256 del zip de código, preserva el .venv existente y vuelve a correr uv sync --locked. Como uv solo descarga lo que cambió y las ruedas de torch quedan en caché, una actualización típica transfiere unos pocos MB en vez de gigabytes. Si la versión instalada ya coincide, informa “already up to date” y sale.