Cómo funciona
Cómo funciona el motor local, cómo difiere realmente la captura en Wayland y X11, qué añade la interfaz y qué significa la «latencia cero», con cifras medidas.
Un orquestador local, no un servicio en la nube
PiperRead es un script Bash ligero que se sitúa entre su escritorio y el motor neuronal de texto a voz Piper — no sintetiza voz por sí mismo. Piper se instala una vez, dentro de su propio entorno virtual de Python, por lo que nunca toca los paquetes Python ya presentes en su sistema.
La red interviene exactamente dos veces, cada una una sola vez: pip descarga el motor Piper (unos 75 MB, de 200 a 250 MB una vez descomprimido), y un modelo de voz (un archivo .onnx, de unas decenas de megabytes) se descarga la primera vez que usted elige uno. Después de eso, leer una selección consta de tres pasos locales — capturar el texto, pasarlo por el motor ya presente en el disco, reproducir el audio resultante con aplay — y ninguno de los tres abre una conexión de red. Ningún texto que usted seleccione o copie sale de la máquina para ser leído en voz alta.
Lectura de la selección: Wayland y X11
PiperRead nunca escribe ni pega en otra ventana — solo lee hacia afuera, desde lo que esté seleccionado o copiado, hacia el motor. Esa captura unidireccional es el único punto en el que Wayland y X11 siguen rutas distintas, y la diferencia es una elección de herramienta, no una diferencia de comportamiento:
| Fuente leída | Wayland | X11 |
|---|---|---|
| Selección del ratón (primaria) | wl-paste --primary | xsel --primary |
| Portapapeles | wl-paste | xsel --clipboard |
No se comprueba XDG_SESSION_TYPE ni ninguna otra marca de sesión. read.sh prueba primero el comando de Wayland; si falta, o solo devuelve caracteres en blanco, recurre al comando de X11. En Wayland, wl-paste tiene éxito y la ruta de X11 nunca se alcanza; en X11, wl-paste está ausente o solo devuelve caracteres en blanco, por lo que xsel toma el relevo en su lugar. De forma predeterminada, PiperRead prueba primero la selección del ratón y solo lee el portapapeles si no hay nada seleccionado; solicitar explícitamente el modo solo-selección o solo-portapapeles omite esa alternativa y lee únicamente el que usted haya indicado.
La interfaz
PiperRead también incluye una interfaz, en un paquete aparte que la página de descargas instala junto con el lanzador: un icono de bandeja que se inicia con su sesión y mantiene la voz cargada. No sustituye al lanzador, y ninguno dirige al otro. Ejecuta el motor Piper como un programa aparte que responde por HTTP, solo en 127.0.0.1 y nunca en una interfaz de red, y captura el texto como lo hace el lanzador (selección del ratón, luego portapapeles) en Linux, o desde el portapapeles en Windows. Sintetiza la frase siguiente mientras se reproduce la actual, que es lo que muestra la segunda medición de más abajo.

Tampoco hay eventos de uso
La biblioteca de inferencia que Piper incorpora, onnxruntime, envía eventos de uso a Microsoft de forma predeterminada. PiperRead los desactiva antes de iniciar el motor: strace no muestra ninguna conexión al exterior durante la lectura, ni con el lanzador ni con la interfaz. En Windows la biblioteca notifica sus eventos al sistema en lugar de enviarlos ella misma, por lo que PiperRead utiliza el propio interruptor de la biblioteca; una medición aun así encontró 4 eventos de inicialización, frente a 15 sin el interruptor. El ajuste telemetry=on los vuelve a activar.
Qué significa realmente “latencia cero” y qué se midió
“Latencia cero” expresa primero un hecho arquitectónico: como Piper se ejecuta como un proceso local, no hay ida y vuelta por la red entre seleccionar una frase y el primer sonido — nada que esperar de un servidor remoto. No es una promesa de duración. Se midieron dos duraciones, y se publican aquí con sus condiciones.
| Ruta | Medido |
|---|---|
| Lanzador: la voz se carga en cada clic | 1,31 a 1,34 s desde el lanzamiento hasta el primer byte de audio |
| Interfaz: la voz permanece cargada, la frase siguiente se prepara mientras se reproduce una | 168 ms desde el clic hasta la apertura del flujo de audio |
Medido el 23 de septiembre de 2026, en Linux, en la máquina del mantenedor (32 núcleos), con la voz fr_FR-siwis-medium. En otra máquina o con otra voz las cifras cambian: dan un orden de magnitud, no una garantía. El lanzador cuesta unos 1,3 segundos porque inicia el motor y carga la voz en cada lectura. La interfaz lo paga una vez, al iniciarse, y mantiene la voz en memoria: unos 150 MB, hasta 370 MB tras el uso, y sin tiempo de procesador en reposo.