Manual completo de
Dicta
Guía técnica detallada del sistema de dictado por voz de InnovaAI. Arquitectura, modos, comandos, configuración y más.
v1.16.1 · Última actualización: Marzo 2026
1 Arquitectura General
Sistema de dictado por voz con servidor Windows y app Android
Dicta es un sistema de dictado por voz que convierte voz en texto y lo pega automáticamente donde está el cursor. Tiene dos fuentes de audio: el micrófono del PC (hotkey push-to-talk) y la app Android (streaming via WebSocket).
La transcripción usa APIs cloud: Groq (default, ~0.3s) o OpenAI Whisper (~1-3s).
El post-procesamiento con LLM usa llama-3.3-70b-versatile (Groq) o gpt-4o-mini (OpenAI).
El modo Smart agrega análisis visual con Claude Sonnet de Anthropic.
2 Componentes del Servidor
12 módulos Rust que componen el servidor de escritorio
_dicta._tcp.local. para auto-discovery AndroidLibrería compartida: takenotes-core
3 Modos de Transcripción
4 niveles de procesamiento, seleccionables en tiempo real desde el menú de la bandeja
Solo la salida de Whisper, sin ningún post-procesamiento. Ideal para testing o cuando la velocidad es prioridad.
Whisper + eliminación de muletillas + comandos de voz. No usa LLM. Buena calidad sin latencia extra.
Clean + pulido con LLM para puntuación, mayúsculas y gramática. Usa llama-3.3-70b via Groq.
Polish + análisis visual (Claude Vision) + contexto de ventana + perfil de usuario. Formatea código, emails, etc.
| Config | polish |
experiment |
Modo |
|---|---|---|---|
| Mínimo | false | cualquiera | Clean |
| Recomendado | true | false | Polish |
| Avanzado | true | true | Smart |
4 Sistema de Hotkey
Push-to-talk y manos libres con una sola tecla
| Gesto | Acción | Descripción |
|---|---|---|
| Mantener presionado | Push-to-Talk | Graba mientras mantienes la tecla. Al soltar, transcribe. |
| Doble tap (<500ms) | Manos Libres | Activa grabacion continua. Doble tap de nuevo para detener. |
Flujo Push-to-Talk
La tecla se configura en dicta.toml con el campo hotkey.
Soporta teclas F1-F12, letras, numeros, y combinaciones con Ctrl, Shift, Alt, Win.
5 Post-Procesamiento
Muletillas, comandos de voz, limpieza y pulido con IA
Eliminación de muletillas
Se eliminan automáticamente en modos Clean, Polish y Smart:
| Idioma | Muletillas eliminadas |
|---|---|
| Inglés | um, uh, er, ah, "you know", "I mean", "like" |
| Español | eh, este, "o sea", "pues", "digamos", "básicamente" |
LLM Polish
En modos Polish y Smart, el texto se envía a un LLM con temperatura 0 (determinístico). El prompt instruye al modelo a corregir solo puntuación, mayúsculas y gramática sin cambiar el significado. Si el LLM falla, se usa el texto sin pulir como fallback.
| Proveedor | Modelo | Uso |
|---|---|---|
| Groq | llama-3.3-70b-versatile | Polish básico y contextual |
| OpenAI | gpt-4o-mini | Alternativa |
| Anthropic | claude-sonnet-4 | Vision (Smart mode) |
6 Comandos de Voz
27 comandos que convierten palabras habladas en puntuación y formato
| Español | English | Resultado |
|---|---|---|
| "punto" | "period" | . |
| "coma" | "comma" | , |
| "nueva linea" | "new line" | \n |
| "nuevo parrafo" | "new paragraph" | \n\n |
| "punto y coma" | "semicolon" | ; |
| "punto y aparte" | — | .\n |
| "puntos suspensivos" | "ellipsis" | ... |
| "signo de interrogación" | "question mark" | ? |
| "signo de exclamación" | "exclamation mark" | ! |
| "abrir paréntesis" | "open paren" | ( |
| "cerrar paréntesis" | "close paren" | ) |
| "dos puntos" | "colon" | : |
| "arroba" | "at sign" | @ |
| "guion" | "hyphen" | - |
hola, mi correo es juan@gmail.com
Los comandos compuestos ("punto y coma") se procesan antes que los simples ("punto") para evitar conflictos. Después de aplicar comandos, 5 regexes de limpieza eliminan espacios innecesarios alrededor de la puntuación.
7 Bandeja del Sistema
Icono de estado y menú contextual completo
Estados del icono
Verde — Idle, listo para dictar
Rojo — Grabando audio
Cyan — Procesando/transcribiendo
Menú contextual (click derecho)
8 Overlay de Estado
Ventana transparente en la esquina inferior derecha
El overlay usa WS_EX_LAYERED | WS_EX_TOPMOST para ser transparente y siempre visible.
Los estados Done y Error usan timers de Win32 (SetTimer) para ocultarse automáticamente.
9 Clipboard y Auto-Pegado
Texto se pega automáticamente donde está el cursor
El texto se copia en dos formatos simultaneos: CF_UNICODETEXT (texto plano) y
CF_HTML (HTML renderizado). El formato markdown **texto** se convierte
a <strong> para apps que soporten rich text.
10 WebSocket y Android
App Android como micrófono inalámbrico via WebSocket
Protocolo (Puerto 9876)
Descubrimiento mDNS
El servidor publica _dicta._tcp.local. para que la app Android lo descubra automaticamente
via Android NSD. No es necesario ingresar la IP manualmente.
App Android
| Componente | Función |
|---|---|
| DictationManager | Coordinador: graba, envía, recibe resultado |
| AudioRecorder | Captura 16kHz mono PCM16, chunks de 60ms |
| WebSocketClient | Conexion OkHttp3 al servidor |
| ServerDiscovery | Descubrimiento mDNS automático |
| FloatingBubbleService | Burbuja flotante para dictar sin abrir la app |
11 Configuración
Archivo dicta.toml y vocabulario personalizado
dicta.toml
dicta.toml. Nunca se envían a terceros excepto a los proveedores de API correspondientes. El script de empaquetado verifica que no haya keys reales en la distribución.
dicta-vocab.txt
Una palabra o frase por línea. Se envía al API de Whisper como parámetro prompt
para mejorar la precisión en terminología específica.
Ubicación de archivos
| Archivo | Ubicación |
|---|---|
dicta.toml | Junto al exe o %APPDATA%\Dicta\ |
dicta-vocab.txt | Junto al exe o %APPDATA%\Dicta\ |
dicta.log | %APPDATA%\Dicta\dicta.log |
history.db | %APPDATA%\Dicta\history.db |
| Experimentos | %APPDATA%\Dicta\experiments\ |
12 Autenticación Cloud
JWT, planes de suscripción y sistema de créditos
Autenticación JWT
Dicta utiliza JSON Web Tokens (JWT) para autenticar usuarios contra el backend cloud.
El flujo de login se realiza mediante un diálogo nativo Win32 (login_dialog.rs)
que solicita email y contraseña sin depender de un navegador.
| Token | Duración | Uso |
|---|---|---|
| Access Token | 1 hora | Autenticación de requests al backend |
| Refresh Token | 30 días | Renovar access token sin re-login |
Hashing de contraseñas
Las contraseñas se hashean con Argon2 (ganador de PHC) en el backend. Nunca se almacenan en texto plano. El cliente envía la contraseña via HTTPS y el servidor aplica Argon2id con salt aleatorio antes de guardar en la base de datos.
Planes de suscripción
| Plan | Descripción | Límite |
|---|---|---|
| Free | Acceso básico sin costo | Funcionalidad limitada |
| Trial | Prueba completa de funciones Pro | 50 transcripciones |
| ProMonthly | Suscripción mensual | Créditos mensuales renovables |
| ProAnnual | Suscripción anual (descuento) | Créditos anuales renovables |
| Lifetime | Pago único, acceso permanente | Sin límite de créditos |
Sistema de créditos
Los usuarios Pro reciben créditos que se consumen con cada transcripción.
Los planes Lifetime y ProAnnual no verifican créditos (acceso ilimitado).
El endpoint GET /api/v1/credits retorna el saldo actual del usuario.
login_dialog.rs) que se integra con el sistema de bandeja.
Los tokens se almacenan de forma segura en %APPDATA%\Dicta\.
13 API Endpoints
Endpoints REST del backend cloud de Dicta
| Método | Endpoint | Descripción | Auth |
|---|---|---|---|
POST |
/api/v1/auth/register |
Registro de nuevo usuario (email + password) | No |
POST |
/api/v1/auth/login |
Login, retorna access + refresh tokens | No |
GET |
/api/v1/me |
Perfil del usuario autenticado | JWT |
GET |
/api/v1/version |
Versión más reciente disponible | No |
POST |
/api/v1/transcribe |
Transcripción de audio (multipart/form-data) | JWT |
GET |
/api/v1/subscription |
Estado de suscripción del usuario | JWT |
GET |
/api/v1/credits |
Saldo de créditos restantes | JWT |
/api/v1/transcribe acepta audio
como multipart/form-data con el archivo WAV en el campo audio.
El backend reenvía a Groq o OpenAI según la configuración del servidor.
14 Traducción
Traducción automática del texto transcrito
Dicta soporta traducción automática del texto transcrito como paso adicional en el pipeline de post-procesamiento. El usuario puede configurar un idioma destino y el texto se traduce después de la transcripción y el pulido, antes de pegarse en el cursor.
La traducción utiliza el mismo LLM del pipeline de polish (llama-3.3-70b via Groq
o gpt-4o-mini via OpenAI) con un prompt especializado que preserva el formato
y la puntuación del texto original.
15 Sistema de Actualizaciones
Actualizaciones automáticas con Inno Setup y verificación semver
Arquitectura de auto-update
El cliente Dicta verifica periódicamente si hay una nueva versión disponible consultando
el endpoint GET /api/v1/version del backend. El módulo updater.rs
gestiona todo el ciclo de actualización de forma transparente para el usuario.
Proceso detallado
| Paso | Descripción |
|---|---|
| 1. Verificación | Cada 6 horas, updater.rs consulta GET /api/v1/version para obtener la versión más reciente |
| 2. Comparación | Comparación semántica (semver) entre la versión local (CARGO_PKG_VERSION) y la del servidor |
| 3. Descarga | Si hay versión nueva, descarga el instalador al directorio %TEMP% |
| 4. Instalación | Ejecuta Inno Setup con flag /VERYSILENT para instalación sin interacción del usuario |
| 5. Reinicio | Después de la instalación, Dicta se reinicia automáticamente con la nueva versión |
16 APIs Externas
Servicios cloud utilizados para transcripción, pulido y visión
| Servicio | Proveedor | Modelo | Latencia |
|---|---|---|---|
| Transcripción | Groq (default) | whisper-large-v3 |
~0.3-0.8s |
| Transcripción | OpenAI | whisper-1 |
~1-3s |
| LLM Polish | Groq (default) | llama-3.3-70b-versatile |
~0.2-0.5s |
| LLM Polish | OpenAI | gpt-4o-mini |
~0.5-1s |
| Visión | Anthropic | claude-sonnet-4 |
~1-2s |
17 Base de Datos e Historial
SQLite local con historial completo de dictados
Perfil de usuario automático
En modo Smart, el sistema analiza las últimas 100 dictaciones para construir un perfil: apps más usadas (ranking con porcentaje), idioma dominante (español vs inglés), y categorías de contexto (coding, email, chat, docs). El perfil se refresca cada 20 dictaciones.
18 Estructura del Proyecto
Organización de archivos del repositorio
19 Build y Distribución
Compilar, empaquetar y distribuir Dicta
Compilar
Empaquetar
Gestión de versión
Cargo.toml es la fuente única de verdad para la versión. Se propaga automáticamente a:
| Destino | Mecanismo |
|---|---|
| Log de arranque y About | env!("CARGO_PKG_VERSION") |
| Metadata del .exe | build.rs via winres |
| Nombre del ZIP | package.ps1 lee Cargo.toml |