Subtítulos automáticos para Windows, en tu PC y sin conexión. Le das un video o un audio y te devuelve el .srt, si quieres traducido a otro idioma o leído en voz alta.
Fase 3 completada: distribución AOT autocontenida (zip e instalador Inno Setup), entrada de catálogo firmado de Rodaje y flujos de GitHub Actions.
Subtitular.exe(ventana): suelta un video o audio (o varios: se procesan en cola y cada uno se guarda al terminar), elige idioma, formato (SRT/VTT), carpeta, «Traducir a…» y «Leer en voz alta»; barra de progreso por etapa y por archivo, Cancelar, vista previa editable bloque a bloque y Guardar. Recuerda lo último elegido, abre la carpeta del resultado al terminar y responde aCtrl+OyCtrl+Entrar. Los errores salen en español dentro de la ventana. Avisa con una franja discreta cuando hay una versión nueva en GitHub (como mucho una consulta cada 24 h, sin cuenta; se puede apagar en Ajustes y hay «Buscar actualizaciones» para consultar al momento); «Ver novedades» abre la release y, si el Lanzador está instalado, «Abrir el Lanzador» lleva a quien la instala.Subtitular.Cli.exe:Subtitular.Cli video.mp4 [--idioma es] [--formato vtt] [--traducir en] [--voz] [--salida carpeta]. Dejavideo.srt(ovideo.en.srt) y, con--voz,video.wavcon cada frase en su tiempo.- Toda la lógica vive en
Subtitular.Core; la ventana y la CLI solo la llaman. Cifras endocs/informe-fase-1.mdydocs/informe-fase-2.md.
- Saca el audio del archivo con FFmpeg (LGPL).
- Lo pasa a los módulos de IA de Rodaje, que corren como procesos aparte y hablan con la app por una tubería con nombre (protocolo de módulos v1):
- modulo-subtitulos: Whisper (whisper.cpp) en la GPU por Vulkan, o en la CPU.
- modulo-traducir: Qwen3-4B-Instruct en llama.cpp.
- modulo-voz: Kokoro-82M en ONNX Runtime, con fonemizador propio para español.
- Los modelos se bajan una sola vez desde el catálogo firmado de Rodaje y se comprueba su SHA-256.
git clone --recursive https://github.com/Dathinel/subtitular
cd subtitular
powershell -NoProfile -ExecutionPolicy Bypass -File build\preparar-entorno.ps1
build\dotnet.cmd build src\Subtitular.slnx
build\publicar.cmd
build\publicar.cmd deja la ventana y la CLI publicadas con Native AOT en dist\Subtitular\. Los módulos de IA (Rodaje.Module.Subtitles.exe, .Translate.exe, .Voice.exe) se buscan en SUBTITULAR_MODULOS, donde los instala el Lanzador (%LOCALAPPDATA%\Dathinel\Comun\modulos\modulo-*\<versión>), donde los instala Rodaje (%LOCALAPPDATA%\Rodaje\complementos\modulos\modulo-*) o junto al exe (modulos\).
El SDK de .NET y FFmpeg se instalan en .entorno\ con huella fijada, sin tocar nada global. Los scripts son los de Rodaje (submódulo externo/rodaje, fijado a un commit). Para no bajar el SDK otra vez se puede apuntar RODAJE_ENTORNO al .entorno de Rodaje.
Para empaquetar la distribución:
powershell -NoProfile -ExecutionPolicy Bypass -File build\distribuir.ps1Genera en dist\:
Subtitular-<versión>-win-x64.zip: autocontenido (App, Cli, el runtime del Windows App SDK que exige AOT, licencias y README corto). 26,2 MB; el instalador, 16,8 MB; la App pinta su primer cuadro en menos de 300 ms desde una carpeta limpia.Subtitular-<versión>-instalador.exe: instalador por usuario con Inno Setup (sin permisos de administrador; se baja a.entornocon huella fijada).SHA256SUMS: huellas de los artefactos.notas-version.md: notas extraídas desdeCHANGELOG.md.catalogo-subtitular.json: entradaapppara el catálogo firmado de Rodaje.
Firma del catálogo: build\catalogo-entrada.ps1 deja el JSON en dist\catalogo-subtitular.json sin firmar; Daniel lo firma con la clave privada del catálogo usando firmar-indice.ps1 del repositorio Dathinel/rodaje-catalogo.
GPLv3, solo la versión 3 (GPL-3.0-only). Va con GPLv3 porque reutiliza código de Rodaje (el protocolo de módulos, entre otras piezas) y sus módulos de IA, que son GPLv3. Ver LICENSE y LICENCIAS.md.
Basado en el editor de video de código abierto de Dathinel / Rodaje.