TTS y STT: voz local, dictado y transcripción en macOS
App macOS que une STT, modelo local y TTS en un ciclo privado: dictado global, voces neuronales, transcripción de audios, bot Telegram y exportación a Obsidian.
Navegando en el blogver navegación en todos los blogs
TTS-STT es una aplicación para Mac que junta en un solo sitio tres cosas que normalmente están separadas:
- STT (Speech To Text): convertir tu voz en texto.
- Un modelo de inteligencia artificial que corre en tu propio Mac y responde a lo que dices o escribes.
- TTS (Text To Speech): convertir un texto en voz, para que el Mac te lea las respuestas.
El resultado es un ciclo completo:
hablas → se convierte en texto → el modelo responde → la respuesta se lee en voz alta
Todo ocurre dentro de tu ordenador. No hay cuentas, no hay suscripciones y no se envía tu voz ni tus textos a ningún servidor.
Pero lo más útil es que no te obliga a vivir dentro de su ventana. La app también funciona desde la barra de menús, desde atajos de teclado, desde el menú contextual de cualquier programa y desde direcciones especiales (ttsstt://). Así puedes dictar dentro de Obsidian, pedir que te lea lo que has seleccionado en Safari o transcribir un audio desde el Finder, sin abrir la app.
| Plataforma | macOS 15 (Sequoia) o superior. Probada en macOS Tahoe 26.5.1 |
| Lenguaje | Swift 6 |
| Interfaz | SwiftUI + AppKit |
| Dependencias para funcionar | Ninguna: solo componentes que ya trae el Mac |
| Opcionales | Voz neuronal Kokoro, codificador MP3 (lame), Ollama |
| Privacidad | Todo se procesa en local |
Es una pregunta muy buena. macOS ya trae dictado, lectura de texto en voz alta y Apple Intelligence. Entonces, ¿qué añade TTS-STT?
Lo que ya hace tu Mac por su cuenta:
- Dictado básico.
- Leer una selección en voz alta con las voces del sistema.
- Charlar con Apple Intelligence.
Lo que TTS-STT añade y el sistema no ofrece de serie:
| Función | Qué te da |
|---|---|
| Ciclo completo en una ventana | Dictas, el modelo responde y se lee en voz alta, todo junto |
| Voces neuronales (Kokoro) | Voces mucho más naturales que las del sistema, incluido español de España |
| Dictado en cualquier app | Atajo global, panel flotante con tu transcripción en vivo y elección de cómo se inserta el texto |
| Transcripción de audios | Clic derecho sobre un audio en el Finder y listo; también por lotes y a subtítulos |
| Leer selección o portapapeles | Con atajo global y la voz que tú elijas |
| Editor de texto y reproductor de audio | Abrir, editar, guardar y convertir ficheros (.md, .txt, .mp3, .wav…) |
| Conversaciones largas sin romperse | El modelo resume lo antiguo para no quedarse sin memoria |
| Bot de Telegram | Escribes o mandas una nota de voz desde el móvil y tu Mac responde |
| Automatización | Atajos de Apple, Raycast, Alfred, Obsidian, scripts… |
| Historial y exportación a Obsidian | Tus conversaciones y transcripciones guardadas y buscables |
Dicho claro: si solo quieres dictar un mensaje y charlar con Apple Intelligence, tu Mac ya te basta. TTS-STT merece la pena si quieres voces más naturales, dictado y lectura con atajos propios en cualquier app, transcribir audios, o conectarlo con Telegram, Obsidian y tus automatizaciones.
La app tiene tres “motores”, como tres especialistas que trabajan en equipo:
| Especialista | Qué hace | Quién lo hace |
|---|---|---|
| Oído (voz → texto) | Escucha y escribe lo que dices | El reconocimiento de voz de Apple. En macOS 26 usa el motor nuevo (SpeechAnalyzer), más preciso; en macOS 15 usa el clásico (SFSpeechRecognizer) |
| Cerebro (texto → texto) | Entiende y responde | El modelo de Apple Intelligence que ya vive en tu Mac (FoundationModels). Alternativamente, Ollama |
| Voz (texto → voz) | Lee en voz alta | Las voces del sistema y, si quieres, la voz neuronal Kokoro |
🎤 Tu voz ──► [ Oído ] ──► texto ──► [ Cerebro ] ──► respuesta ──► [ Voz ] ──► 🔊
La app está pensada para no romperse nunca:
- ¿Tu Mac no tiene Apple Intelligence? La app cambia sola a un modo alternativo (sin modelo, con reglas simples) y te avisa en la barra lateral.
- ¿No has instalado la voz neuronal? Usa la mejor voz del sistema para tu idioma.
- ¿No has concedido Accesibilidad? Lo que no funciona es escribir o leer en otras apps, y la app te lo dice en pantalla, en vez de fallar en silencio.
La app no ordena las voces por orden alfabético, sino por calidad: neuronal, premium, mejorada y estándar. Al arrancar, usa Santa (español de España, neuronal) si no has guardado otra. Si el motor neuronal no está, usa la mejor voz del sistema para el idioma de tu Mac.
Kokoro es un modelo de voz pequeño (unos 310 MB) que funciona en el procesador, sin tarjeta gráfica. La app lo ejecuta en un proceso aparte que se queda abierto: cargar el modelo tarda unos segundos, pero una vez cargado, las respuestas llegan en décimas de segundo. Se carga la primera vez que lo necesitas, no al abrir la app. Está en una carpeta propia con su propio Python, así que no ensucia tu sistema: desinstalarlo es borrar esa carpeta.
Imprescindible
-
Un Mac con macOS 15 (Sequoia) o superior.
-
Las herramientas de línea de comandos de Apple (Command Line Tools). No hace falta Xcode. Se instalan con:
xcode-select --install
Para la inteligencia artificial local
- macOS 26 (Tahoe) con Apple Intelligence activada y un Mac compatible. Sin esto, la app funciona igual, pero con el modo alternativo en lugar del modelo.
Opcionales (cada uno añade algo y ninguno es obligatorio)
| Opcional | Para qué sirve | Tamaño aproximado |
|---|---|---|
| Voz neuronal Kokoro | Voces muy naturales | ~480 MB (modelo, voces y entorno Python) |
lame (o ffmpeg) | Guardar audio en MP3 | Muy pequeño |
| Ollama | Usar otro modelo de texto en tu Mac, además del de Apple | Depende del modelo |
| Certificado de firma local | Que macOS no te pida los permisos de nuevo cada vez que recompilas | Nada |
Dependencias de terceros: ninguna. Todo se apoya en componentes de Apple (Speech, AVFoundation, FoundationModels, PDFKit, ScreenCaptureKit…). Incluso el bot de Telegram habla con la API usando solo herramientas del propio sistema, así que no hay paquetes ajenos que revisar ni actualizar.
- El reconocimiento de voz lo hace el sistema.
- El modelo de texto es el de Apple (o Ollama, solo contra tu propio Mac, nunca hacia fuera).
- Las voces se generan en tu Mac.
- Ninguna petición de dictado, transcripción o generación sale de tu equipo.
Excepciones, siempre voluntarias:
- Telegram: solo si enciendes el bot. Lo que escribas viaja por los servidores de Telegram, como cualquier mensaje de Telegram. Si nunca pegas un token, la app no abre ni una conexión de red.
- Leer una página web: solo si tú se lo pides, y la descarga es una acción explícita.
- Descargas puntuales: al instalar Kokoro, y los modelos de idioma del reconocimiento de voz de Apple si tu Mac los necesita.
Permisos: la app solo pide los que de verdad usa: reconocimiento de voz, micrófono y Accesibilidad (y, si quieres grabar reuniones, grabación de pantalla y audio del sistema). Puedes revisarlos o quitarlos cuando quieras en Ajustes del Sistema › Privacidad y seguridad.
Importante: hay que empaquetar la app. macOS solo concede los permisos de micrófono, reconocimiento de voz y Accesibilidad a programas con un paquete
.appy unInfo.plistque explique para qué los quiere. Si ejecutas el binario suelto, la app arranca y sirve para escribir, pero no podrá dictar.
xcode-select --install
Desde la carpeta del proyecto:
./Scripts/build-app.sh
open /Applications/TTS-STT.app
Este script hace todo: compila, crea el .app, escribe el Info.plist, genera el icono, firma la app y la instala en /Applications. Si tu cuenta no puede escribir ahí, la deja en ~/Applications.
Otras variantes:
./Scripts/build-app.sh --debug # compilación de depuración
./Scripts/build-app.sh --no-install # solo deja el paquete en dist/
swift run TTSSTTApp # probar rápido, sin empaquetar (no dicta)
- Reconocimiento de voz: se pide al arrancar.
- Micrófono: se pide la primera vez que pulsas dictar.
- Accesibilidad: necesaria para escribir el dictado en otras apps y leer la selección. Se concede en Ajustes del Sistema › Privacidad y seguridad › Accesibilidad. El botón Conceder de la barra lateral abre ese panel directamente.
./Scripts/setup-kokoro.sh
Instala el modelo, las voces y un entorno de Python propio en ~/Library/Application Support/TTS-STT/kokoro, y comprueba que funciona. La app lo detecta al arrancar y muestra la etiqueta Neuronal en la barra lateral.
¿Prefieres otra carpeta?
./Scripts/setup-kokoro.sh --dir /ruta
TTSSTT_KOKORO_DIR=/ruta open dist/TTS-STT.app
Para desinstalarla, borra la carpeta kokoro.
macOS sabe leer MP3, pero no sabe crearlos. Para poder guardar en MP3, instala un codificador:
brew install lame
La app lo detecta sola. Si no está, la opción MP3 aparece desactivada con una explicación, y puedes usar M4A, que suena igual de bien.
Una firma “ad-hoc” cambia en cada compilación y macOS puede volver a pedirte los permisos. Para evitarlo, el proyecto incluye Scripts/setup-signing.sh, que te guía (y te pide confirmación) para crear un certificado de firma local. Después, build-app.sh lo usa solo.
En Ajustes › Sistema puedes activar que la app se abra sola, para tener los atajos listos desde el principio.
Tiene tres zonas:
- Barra lateral: estado de los tres motores, métricas rápidas (turnos, voces, voz activa), selector de voz con velocidad y botón “Probar voz”, opciones de dictado, atajos, interruptor del bot y la tarjeta de permisos.
- Conversación: el hilo de mensajes en burbujas. Los mensajes que nacen de audio llevan marcado su origen: dictado (micrófono) o audio (fichero). Al pasar el ratón por una burbuja aparecen sus acciones: copiar, leer en voz alta y guardar como audio.
- Cuadro de escritura: para dictar (
⌘R), escribir a mano, enviar (⌘↩), detener la generación (⌘.) y controlar la reproducción (pausar, reanudar, detener).
Las respuestas llegan palabra a palabra y las puedes cortar a mitad. El modelo recuerda la conversación, así que puedes seguir preguntando sin repetir nada.
- Dictar en la ventana (
⌘R). - Dictar en otra aplicación (
⌥⌘D). - Leer la selección de cualquier app (
⌥⌘L). - Abrir un audio para transcribirlo.
Pulsa ⌘R y habla. Verás el texto aparecer en tiempo real, con un medidor de nivel de entrada. Al terminar, el texto queda en el cuadro de escritura, o se envía solo si tienes activado Enviar al terminar de hablar.
Pon el cursor en un campo de texto (TextEdit, Obsidian, Safari, Terminal…), pulsa ⌥⌘D y habla. Mientras grabas aparece un panel flotante que muestra el nivel de entrada, la app de destino y la transcripción en vivo, sin quitarle el foco a nadie. Al terminar, el texto aparece donde tenías el cursor.
Hay dos formas de insertar el texto:
| Método | Cómo funciona | Cuándo usarlo |
|---|---|---|
Pegar con ⌘V | Copia el texto y pega | Funciona en casi todo, incluidas las apps Electron |
| Accesibilidad | Escribe directamente | No toca tu portapapeles. Si la app no lo admite, cae sola al pegado |
Si algo falla, el texto se queda en el portapapeles para que no lo pierdas.
Además puedes elegir:
- Mantener pulsado para hablar (push-to-talk): mientras mantienes el atajo, graba; al soltar, escribe. O el modo clásico: pulsas para empezar y pulsas para parar.
- Fin automático por silencio: si dejas de hablar un momento, termina solo. Puedes ajustar cuánto silencio y lo sensible que es, o desactivarlo.
- Sonidos al empezar y terminar, por si el panel no está a la vista.
- Cancelar una grabación sin enviar nada.
Antes de insertar el texto, la app puede limpiarlo (todo opcional):
- Quitar muletillas y repeticiones (“eh”, “o sea”, palabras repetidas).
- Mejorar la puntuación y las mayúsculas con el modelo local, con la orden estricta de no cambiar lo que dijiste.
- Comandos de voz: puedes decir “punto”, “coma”, “nueva línea”, “nuevo párrafo”, “abre comillas” o “borra eso”, en español e inglés.
- Perfiles por aplicación: cada programa puede tener su configuración. Por ejemplo, en la Terminal sin puntuación automática, y en Obsidian con formato Markdown.
- Siempre puedes ver el texto original frente al procesado y desactivarlo con un gesto.
El dictado funciona en 11 idiomas y variantes: español (España, México, EE. UU.), inglés (EE. UU., Reino Unido), catalán, gallego, portugués de Brasil, francés, alemán e italiano.
⌥⌘L: lee la selección de la app que tengas delante.⌥⌘B: lee el contenido del portapapeles.- Lectura automática: cada respuesta del modelo se lee sola (se puede desactivar).
- Pausar, reanudar y detener en cualquier momento (
⌘.detiene). - Empieza a hablar enseguida: la app no espera a que el modelo termine; lee la primera frase en cuanto está completa, mientras sigue escribiendo el resto. Así la respuesta se siente mucho más rápida.
- Velocidad ajustable de 0,5× a 1,8×, y también velocidad distinta para cada voz.
- Probar la voz con una frase de muestra.
- Diccionario de pronunciación: si la voz pronuncia mal una palabra (un nombre, una marca, una sigla), la corriges una vez y queda guardada.
La lista junta las voces neuronales primero y después las del sistema, cada una con su idioma y calidad. Hay una lista corta con la mejor voz de cada idioma, y un interruptor para ver el catálogo completo.
La app incluye un editor de texto y un reproductor de audio, para que no tengas que salir de ella.
Puedes tener varios documentos abiertos en pestañas.
| Acción | Atajo |
|---|---|
| Nuevo | ⌘N |
| Abrir | ⌘O |
| Abrir recientes | menú Archivo |
| Guardar | ⌘S |
| Guardar como | ⇧⌘S |
| Cerrar | ⌘W |
| Cerrar todo / Revertir | menú Archivo |
Formatos de texto que abre y guarda:
| Formato | Para qué |
|---|---|
.txt | Texto plano |
.md / .markdown | Markdown (con vista previa) |
.rtf | Texto enriquecido |
.html | Páginas web |
.json | Datos |
.csv | Tablas |
.srt y .vtt | Subtítulos |
.log | Registros |
Cuidados que se tienen contigo:
- Detecta la codificación al abrir (UTF-8, UTF-16, ISO-8859-1, Windows-1252) para que las tildes y la eñe salgan bien. Puedes elegirla al guardar. Por defecto, UTF-8.
- Punto en la pestaña cuando hay cambios sin guardar, y aviso al cerrar (Guardar / No guardar / Cancelar), también al salir de la app.
- Guardado seguro: nunca pierdes el fichero original si algo falla. Si el archivo cambió en el disco mientras lo tenías abierto, te avisa antes de sobrescribir.
- Borradores automáticos: si la app se cierra de golpe, recuperas tu trabajo.
- Puedes arrastrar ficheros a la ventana, usar Abrir con ▸ TTS-STT desde el Finder, o
ttsstt://open?path=….
Voz sobre tus documentos:
- Lee el documento entero o solo la selección, resaltando la frase que se está leyendo.
- Dicta directamente donde tengas el cursor.
- Pídele al modelo que resuma, corrija o traduzca la selección, y aplica el resultado con un clic. Se puede deshacer con
⌘Z.
Se pueden abrir: .wav, .mp3, .m4a, .aac, .aiff, .caf, .flac, y el audio de vídeos .mp4 y .mov.
Reproductor integrado: reproducir, pausar, saltar a cualquier punto, velocidad de 0,5× a 2×, forma de onda y duración.
Se pueden guardar o exportar:
| Formato | Disponible |
|---|---|
.wav | Siempre |
.m4a (AAC) | Siempre |
.aiff | Siempre |
.caf | Siempre |
.flac | Siempre |
.mp3 | Solo si tienes lame o ffmpeg instalado (128, 192, 256 o 320 kbps) |
Cualquier respuesta del asistente se puede guardar como audio en el formato que elijas. También puedes convertir un audio a otro formato, cambiando la frecuencia de muestreo o pasándolo a mono o estéreo, con barra de progreso y botón de cancelar.
Hay cinco formas de transcribir un audio:
- El botón “Abrir audio…”.
- Arrastrar el fichero sobre la conversación.
- El menú de la barra de menús (“Transcribir un audio…”).
- Clic derecho sobre el audio en el Finder › Servicios › Transcribir con TTS-STT.
- La dirección
ttsstt://transcribe?path=….
El resultado se abre como un documento nuevo, que puedes guardar como .txt, .md, .srt o .vtt.
Transcripción avanzada:
- Marcas de tiempo por fragmento, para subtítulos y para localizar partes.
- Por lotes: arrastra varias carpetas o ficheros y se procesan en cola, con progreso y cancelación. Cada transcripción se guarda junto a su audio. Si se interrumpe, se reanuda sin repetir lo ya hecho.
- Audios largos: con el motor nuevo de macOS 26 aguantan bien.
- Aviso del Centro de notificaciones cuando termina.
- Usa Apple Intelligence (
FoundationModels), que ya está en tu Mac. - Respuestas en directo, que puedes detener a mitad.
- Memoria de la conversación: cada turno recibe los anteriores.
- No se queda sin memoria: el modelo tiene una “ventana” limitada de lo que puede recordar. La app lo controla, y cuando la conversación se hace larga resume automáticamente lo antiguo y conserva lo reciente. Verás un indicador discreto de “conversación resumida” y podrás leer ese resumen.
- Otros modelos: puedes elegir Ollama (un programa que ejecuta modelos de IA en tu Mac) como alternativa, si el de Apple se te queda corto. Se conecta solo a tu propio ordenador.
- Herramientas del modelo (opcional): puede leer el portapapeles, la selección, abrir un documento, guardar texto en un fichero o buscar en tu historial. Las que hacen cambios vienen desactivadas y las activas tú en Ajustes. Cada vez que usa una, la conversación lo muestra (“Ha leído el portapapeles”).
- La app guarda tus conversaciones y transcripciones en tu Mac, en una carpeta propia. Puedes buscar en ellas, borrar una o todas, o desactivar el historial.
- Exportar a Markdown con cabecera de datos (fecha, idioma, origen, voz), lista para guardarse en tu bóveda de Obsidian.
Lleva tu voz y tu modelo al móvil. Se configura una vez:
- Escribe
/newbota @BotFather en Telegram y copia el token. - Pégalo en Ajustes › Telegram y pulsa Probar.
- Enciende Escuchar en Telegram. El primer chat que le escriba queda autorizado automáticamente.
Qué entiende:
| Tú envías | El bot responde |
|---|---|
| Un texto cualquiera | Te lo devuelve como nota de voz con la voz que elegiste |
| Una nota de voz | La transcribe; si lo activas, el modelo responde y te lee la respuesta |
/decir texto | Lo lee en voz alta |
/preguntar texto | El modelo responde (en texto y, si quieres, en voz) |
/voz nombre | Cambia la voz (vale un trozo del nombre) |
/estado | Dice qué motor y voz están activos y el último error |
/parar | Detiene la locución |
/ayuda o /start | Lista los comandos |
También entiende variantes en inglés (/ask, /status, /stop, /voice…).
Seguridad:
- Lista blanca de chats: si desactivas Autorizar el primer chat automáticamente, solo atiende a los de la lista. Es la diferencia entre un bot privado y uno público que gasta la CPU de tu Mac.
- Sin servidor ni abrir puertos: funciona preguntando a Telegram cada poco (“¿hay mensajes?”), así que va detrás de cualquier router.
- Respuestas pensadas para oírse: el modelo contesta en dos o tres frases, sin listas ni Markdown, y los textos largos se trocean.
- El token se guarda en el Llavero de macOS (la app migra solo el valor antiguo la primera vez).
- El bot es independiente de la ventana: su conversación no se mezcla con la tuya.
| Atajo | Acción |
|---|---|
⌥⌘D | Dictar y escribir en la app activa |
⌥⌘L | Leer la selección |
⌥⌘B | Leer el portapapeles |
Se graban desde Ajustes. Funcionan aunque la app esté en segundo plano.
⌥⌘Vno se usa a propósito: muchas apps lo tienen para “Pegar y ajustar estilo” y un atajo global se comería la pulsación.
| Atajo | Acción |
|---|---|
⌘R | Dictar en la ventana |
⌘↩ | Enviar |
⌘. | Detener generación o voz |
⌘K | Borrar la conversación |
⌘, | Abrir ajustes |
⌘N / ⌘O / ⌘S / ⇧⌘S / ⌘W | Nuevo, abrir, guardar, guardar como, cerrar |
⇧⌘O | Abrir audio |
⇧⌘D / ⇧⌘L / ⌥⌘L | Variantes de menú: dictar fuera, leer selección, leer portapapeles |
Icono con las mismas acciones, que cambia mientras dictas y muestra el estado del bot. Ideal para no tener que recordar combinaciones.
Aparecen en el menú contextual de cualquier app:
- Leer la selección con TTS-STT.
- Leer el contenido del portapapeles.
- Transcribir con TTS-STT (clic derecho sobre un audio en el Finder).
Este camino no necesita Accesibilidad: macOS te entrega el texto ya recogido. Si no aparecen tras instalar, hay un botón para volver a registrarlos en Ajustes › Sistema.
Cualquier programa puede pedirle cosas a la app abriendo una dirección:
open "ttsstt://speak?text=Hola%20mundo" # leer un texto
open "ttsstt://speak?clipboard=1" # leer el portapapeles
open "ttsstt://read" # leer la selección
open "ttsstt://dictate" # dictar en la app activa
open "ttsstt://transcribe?path=/tmp/a.wav" # transcribir un audio
open "ttsstt://open?path=/tmp/nota.md" # abrir un documento
open "ttsstt://stop" # detener la voz
open "ttsstt://telegram" # encender o apagar el bot
open "ttsstt://window" # traer la ventana
open "ttsstt://settings" # abrir ajustes
Sirven en Atajos de Apple, Raycast, Alfred, Automator, Obsidian o un script. Entienden rutas en español y en inglés, y lo que no reconocen no lo ejecutan: mejor callar que adivinar. Si la orden llega con la app cerrada, se guarda y se ejecuta en cuanto está lista.
Las acciones principales (dictar, leer selección, leer portapapeles, transcribir un audio, preguntar al modelo y detener la voz) aparecen también como acciones nativas en la app Atajos y en Spotlight.
- Leer una página web o un PDF: extrae el texto principal y lo lee, con cola de lectura, avance y retroceso por párrafo, y recuerda dónde te quedaste.
- Grabar reuniones: captura el audio del sistema y el micrófono, lo guarda en
.m4ao.wavy lo transcribe después. Pide un permiso extra, muestra un aviso visible mientras graba, y recuerda que grabar a otras personas puede tener implicaciones legales: avísalas siempre. - Avisos del Centro de notificaciones: transcripción terminada, bot detenido, chat autorizado. Solo se piden con tu permiso.
Se abren con ⌘,. Todo se guarda solo, sin botón de guardar.
| Pestaña | Qué configuras |
|---|---|
| General | Lectura automática, envío automático, idioma, voz, velocidad, motor de texto, estado del motor neuronal |
| Voz | Catálogo de voces con detalle (motor, idioma, calidad), velocidad por voz y diccionario de pronunciación |
| Dictado | Método de inserción, modo (mantener o conmutar), silencio automático, postprocesado, perfiles por app, panel flotante y sonidos |
| Atajos | Los atajos globales con grabador, restaurar los de fábrica y otras formas de entrar |
| Telegram | Token, qué contesta, chats autorizados y registro |
| Sistema | Permiso de Accesibilidad, arranque al iniciar sesión, icono de la barra, Servicios y avisos |
| Avanzado | Diagnóstico de motores, recargar motores, actualizar voces y “zona de riesgo” (restaurar ajustes o borrar la conversación) |
El proyecto se divide en piezas pequeñas, cada una con una sola responsabilidad:
| Pieza | Qué contiene |
|---|---|
TTSCore | Las “reglas del juego”: protocolos, modelos, catálogo de voces, gestión del contexto. Sin dependencias |
TTSEngines | Los motores reales: Speech, AVFoundation, FoundationModels, Kokoro, conversión de audio |
TTSCoreMocks | Motores simulados para tests y modo alternativo |
TTSTelegram | El bot, sin interfaz gráfica para poder probarlo sin ventana |
TTSSTTApp | La aplicación y la elección de qué motor usar |
Gracias a esto, cambiar un motor no obliga a tocar la interfaz. La app usa una sola instancia de dictado y de bot, así que nunca hay dos sesiones de micrófono peleándose.
Se compila con concurrencia estricta de Swift 6 y cero avisos, y lleva tests que no piden permisos (se hacen con motores simulados y audios de prueba). Se lanzan con:
swift build -Xswiftc -strict-concurrency=complete -Xswiftc -warnings-as-errors
./Scripts/test.sh
Limitaciones que conviene conocer
- MP3 necesita un codificador externo (
lame), porque macOS no lo trae. - Apple Intelligence exige macOS 26 y un Mac compatible. Sin ello, modo alternativo.
- Firma local: sin certificado propio, macOS puede volver a pedir permisos tras recompilar.
- Sin Xcode: no hay proyecto
.xcodeprojni notarización de serie (requiere una cuenta de desarrollador de Apple). - Algunos formatos como
.ogg/.opusdependen de lo que soporte la conversión interna.
Problemas típicos y su solución
| Problema | Solución |
|---|---|
| No puedo dictar | Comprueba que ejecutas el .app (no swift run) y que concediste Micrófono y Reconocimiento |
| Dicta en la ventana pero no en otras apps | Falta el permiso de Accesibilidad |
| No me aparecen los Servicios | Ajustes › Sistema › volver a registrar, y usa siempre la copia de /Applications |
| Me vuelve a pedir permisos | Cambió la firma al recompilar: usa un certificado estable |
| No oigo la voz neuronal | Ejecuta ./Scripts/setup-kokoro.sh y reinicia la app; revisa Ajustes › Avanzado |
| No puedo guardar MP3 | Instala lame con brew install lame |
| Un atajo no responde | Otra app lo usa; cámbialo en Ajustes › Atajos |
| La respuesta del modelo es muy básica | Tu Mac no tiene Apple Intelligence activa: la app está en modo alternativo |
| Dos copias de la app | Mantén solo la de /Applications para que macOS no abra la equivocada |
- Voz neuronal sin Python, más ligera (cuantizada) y con instalación más simple.
- Identificación de hablantes en las transcripciones.
- Más motores de voz y de texto bajo demanda.
- Notarización y actualizaciones automáticas para distribuirla fácilmente.
- Proyecto
.xcodeprojnativo.
| Palabra | Significa |
|---|---|
| STT | Convertir voz en texto |
| TTS | Convertir texto en voz |
| On-device / local | Se hace en tu Mac, sin internet |
| Modelo | El “cerebro” de IA que responde |
| Neuronal | Voz generada por IA, más natural |
| Streaming | Llega poco a poco, no de golpe |
| VAD | Detector de silencio |
| Push-to-talk | Mantener pulsado para hablar |
| HUD / panel flotante | Ventanita que flota mientras dictas |
| Accesibilidad | Permiso de macOS para escribir o leer en otras apps |
Bundle / .app | El paquete que macOS necesita para dar permisos |
| Firma ad-hoc | Firma básica que cambia en cada compilación |
| Llavero | Caja fuerte de macOS para contraseñas |
| Token | Contraseña de un bot de Telegram |
| Ollama | Programa para ejecutar modelos de IA en tu Mac |
| Markdown | Formato de texto simple (.md) |
¿Necesito internet? No para dictar, transcribir, conversar con el modelo ni leer en voz alta. Solo para instalar Kokoro, descargar modelos de idioma, usar Telegram o leer páginas web.
¿Es gratis? Sí. No hay cuentas ni suscripciones.
¿Puedo usarla sin Apple Intelligence? Sí. Dictado, voces, archivos y transcripción funcionan igual; solo el modelo pasa a un modo básico.
¿Funciona en macOS 15? Sí, con el reconocimiento clásico y sin el modelo de Apple.
¿Se guarda lo que digo? Solo en tu Mac, en el historial, que puedes borrar o desactivar.
¿Puedo cambiar los atajos? Sí, desde Ajustes o la barra lateral.
¿Funciona con Obsidian? Sí: dicta dentro de Obsidian, exporta tu historial a tu bóveda y usa ttsstt:// desde sus plugins.
¿Puedo desinstalarla? Borra la app de /Applications y, si instalaste la voz neuronal, la carpeta ~/Library/Application Support/TTS-STT.
TTS-STT convierte tu Mac en un asistente de voz completo, privado y que no depende de nadie. No pretende sustituir lo que macOS ya hace bien, sino unirlo y llevarlo más lejos: voces naturales, dictado y lectura en cualquier app con tus propios atajos, transcripción de audios, edición de ficheros, automatización y hasta un bot en el móvil.
Si te interesa hablar con tu ordenador sin enviar nada a la nube, es una muy buena base para empezar.
TTS y STT
Explora las ramas del artículo
