Skip to content

Releases: alenj0x1/translay

Translay 1.4.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 02:05

Added

  • Dropbox links: paste a shared link to a video (also from a folder, like dropbox.com/scl/fo/…/video.mp4) in «Importar», in the several-links dialog, in a CSV or through the API. It enters the queue, downloads with progress like a YouTube video and its card says «Dropbox».
  • Videos that are already in Spanish: «Importar ▾ › Está en español: solo transcribir», or «Idioma del video» (Video language) in the context menu. They are transcribed in Spanish without translation or dubbing, play with the original audio and a single subtitle, and the transcript shows one column.
  • «Renombrar…» (Rename…) in a video's context menu gives it your own name (for example, instead of 21_10); it stays even if the video is downloaded again. Also PATCH /api/v1/videos/{id} with {"title"}.
  • The import API takes "lang": "es", and a video's data includes its lang and the shared url.

Changed

  • The light profiles («Ligero» and «Subtítulos ligeros») use Whisper small instead of small.en, so they also recognize Spanish.

Fixed

  • On a phone, the player's video had no width and didn't show.

Español

Agregado

  • Enlaces de Dropbox: pega el enlace compartido de un video (también dentro de una carpeta, como dropbox.com/scl/fo/…/video.mp4) en «Importar», en el cuadro de varios enlaces, en un CSV o por la API. Entra a la cola, se descarga con su avance igual que uno de YouTube y su tarjeta dice «Dropbox».
  • Videos que ya están en español: «Importar ▾ › Está en español: solo transcribir», o «Idioma del video» en el menú contextual. Se transcriben en español sin traducir ni doblar, se reproducen con el audio original y un solo subtítulo, y la transcripción muestra una columna.
  • «Renombrar…» en el menú contextual de un video le pone tu propio nombre (por ejemplo, en vez de 21_10); se queda aunque el video se vuelva a descargar. También PATCH /api/v1/videos/{id} con {"title"}.
  • La API de importar acepta "lang": "es", y los datos de un video incluyen su lang y el url compartido.

Cambiado

  • Los perfiles ligeros («Ligero» y «Subtítulos ligeros») usan Whisper small en lugar de small.en, así también reconocen español.

Corregido

  • En el celular, el video del reproductor quedaba sin ancho y no se veía.

Translay 1.3.1

Choose a tag to compare

@github-actions github-actions released this 28 Oct 04:45

Changed

  • Translay is now licensed under MIT (LICENSE); the installer ships it.
  • Commit messages follow Conventional Commits in English, with a body that details every change.

Fixed

  • The docs changelog no longer shows an empty "Unreleased" section above the latest version, which made it look unreleased: the site only lists released versions.

Español

Cambiado

  • Translay ahora tiene licencia MIT (LICENSE); el instalador la incluye.
  • Los mensajes de commit siguen Conventional Commits en inglés, con un cuerpo que detalla cada cambio.

Corregido

  • La página de cambios de la documentación ya no muestra una sección «Sin publicar» vacía encima de la última versión (parecía no lanzada): solo lista versiones publicadas.

Translay 1.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 04:09

Added

  • Desktop app for Windows with an installer (Translay_<version>_x64-setup.exe): it installs without administrator rights, sets up the server and the voice engine by itself, and opens Translay in its own window.
  • «Preparar Translay» (Set up Translay) screen: your GPU, whether you'll get Spanish voice or subtitles only, where to store the library, and installation progress on the button itself. New versions automatically update the packages that changed.
  • The installer ships Python 3.12 and 3.11, ffmpeg, Node.js and uv verified by SHA-256; Python packages are installed pinned with their hash (desktop/locks/).
  • Custom title bar that follows the theme, with Preferences and the light/dark switch as icons next to minimize, maximize and close. The start screen opens with the last theme used.
  • Preferencias › App de escritorio (Preferences › Desktop app): keep running in the tray when the window is closed (the queue continues and, when it finishes, Translay quits and frees everything), change the Main library's folder, and open the logs.
  • Closing the app also closes the server and everything it launched (models, voice, downloads, ffmpeg), even if it is closed abruptly: nothing is left using the GPU or RAM.
  • --data-dir (or TRANSLAY_DATA) sets the data folder, and TRANSLAY_VENVS the voice environments folder.
  • Documentation in English and Spanish, with diagrams; README and changelog in both languages.

Changed

  • The Plus Jakarta Sans font is served by Translay itself: the interface looks the same without internet.

Fixed

  • When switching between light and dark, the gray buttons no longer flicker.

Español

Agregado

  • App de escritorio para Windows con instalador (Translay_<versión>_x64-setup.exe): se instala sin ser administrador, prepara sola el servidor y el motor de voz y abre Translay en su propia ventana.
  • Pantalla «Preparar Translay»: tu GPU, si tendrás voz en español o solo subtítulos, dónde guardar la biblioteca y el avance de la instalación en el propio botón. Las versiones nuevas actualizan solas los paquetes que cambiaron.
  • El instalador trae Python 3.12 y 3.11, ffmpeg, Node.js y uv verificados por SHA-256; los paquetes de Python se instalan fijados con su huella (desktop/locks/).
  • Barra de título propia que sigue el tema, con Preferencias y el cambio entre claro y oscuro como íconos junto a minimizar, maximizar y cerrar. La pantalla de inicio abre con el último tema usado.
  • Preferencias › App de escritorio: seguir en la bandeja al cerrar la ventana (la cola continúa y, al terminar, Translay se cierra y libera todo), cambiar la carpeta de la biblioteca Principal y abrir los registros.
  • Cerrar la app cierra también el servidor y todo lo que lanzó (modelos, voz, descargas, ffmpeg), aunque se cierre de golpe: no queda nada usando la GPU ni la RAM.
  • --data-dir (o TRANSLAY_DATA) elige la carpeta de datos, y TRANSLAY_VENVS la de los entornos de voz.
  • Documentación en inglés y en español, con diagramas; README y changelog en los dos idiomas.

Cambiado

  • La fuente Plus Jakarta Sans la sirve el propio Translay: la interfaz se ve igual sin internet.

Corregido

  • Al cambiar entre claro y oscuro, los botones grises ya no parpadean.

Translay 1.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 18:42

Agregado

  • Soporte para equipos con memoria unificada, como NVIDIA DGX Spark (GB10): la GPU se detecta con la RAM del sistema como memoria, así que Rendimiento ya no la trata como «sin GPU» (marcaba «Muy forzado» a 0,02×) y el perfil automático elige «Máxima calidad». Los equipos con GPU dedicada no cambian.
  • Con memoria unificada, el reposo ligero se hace junto con el profundo: pasar los modelos a la RAM no liberaba nada.

Translay 1.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 12:14

Corregido

  • Crear, renombrar o eliminar una biblioteca fallaba al avisar a los webhooks y la pestaña no se actualizaba.
  • El id (y el enlace /b/<id>) de una biblioteca con tildes o eñes ya no se rompe: «Océanos» es oceanos, no oc-anos.
  • «Editar» y «Otro patrón» de una biblioteca funcionan ahí mismo, sin llevar al inicio.
  • Los menús ya no se cierran solos cuando algo se desplaza por su cuenta, y las opciones que abren otro panel ya no lo cierran en el mismo clic.
  • Al recargar no aparece por un instante «Traduce tu primer video» ni el banner roto de un canal.
  • El aviso «Listo para reproducir» ya no tapa el subtítulo en inglés.
  • La cola ya no reemplaza frases ya dobladas por fragmentos al retomar un video desde otro punto, ni pierde texto en la segunda pasada.
  • Dos partes de Translay que abrían la misma transcripción a la vez podían quedarse con copias distintas y perder frases guardadas.
  • Una frase cuya voz falla ya no deja el video entero en «error»: queda sin voz y se reintenta.
  • Si el proceso de voz se cuelga, se cierra a los 5 min en vez de trabar la GPU para siempre; si no carga, se reinicia limpio.
  • El reposo ligero libera la VRAM también con Chatterbox y VoxCPM, y un error al dormir los modelos ya no deja el estado en «cargando».
  • Al fusionar dos personas, la voz clonada ya no se pierde (sobre todo al reabrir el video).
  • Las frases muy largas sin puntuación ya no cortan el audio de su voz de referencia.
  • El audio de un video terminado no se queda en memoria.
  • Biblioteca, voces y personas se guardan sin poder quedar a medias, con una copia de respaldo (.bak) que se usa si el archivo se daña.
  • «Mover a…» otra biblioteca devuelve los archivos si alguno está en uso, en vez de dejar el video partido.
  • Desde otro equipo de la red (http) ya se puede reproducir con voz e importar archivos.
  • Los primeros mensajes del servidor ya no se pierden en conexiones lentas (el invitado veía la interfaz del dueño).
  • Al reconectar (o tras «Reiniciar ahora»), el video que ves vuelve a tener prioridad en la cola.
  • Enter en los cuadros de texto de los diálogos acepta en vez de cancelar.
  • En Cola → Exportaciones, «Descargar» y «Cancelar» funcionan; en el panel, el botón de quitar una exportación se ve.
  • Borrar el video que suena en miniatura cierra la miniatura.
  • Pasar rápido entre videos ya no aplica la posición ni la duración de uno al otro.
  • Cancelar «Importar» desde una colección ya no deja esa colección elegida para la próxima importación.
  • Un invitado ya no puede abrir Preferencias por la URL (salían avisos de permiso en bucle).
  • Reproducir a otra velocidad ya no acumula audio en memoria.
  • Lo que se escribe en Preferencias (una contraseña, una URL) ya no se borra si llega un aviso de otra pestaña.
  • En el celular hay botón para crear una colección.
  • Eliminar la biblioteca abierta cierra el video que se estaba viendo de ella.
  • Los toasts de Acceso ya no dicen «Copiado copiado».
  • Los avatares y banners de canales se bajan aparte y de a uno: ya no ocupan las conexiones del navegador (el video no cargaba) ni disparan el límite de YouTube.

Seguridad

  • Otro sitio abierto en el navegador ya no puede usar Translay como el dueño: el WebSocket y los pedidos que cambian algo exigen que el Origin sea la propia app (--allow-origin / TRANSLAY_ORIGINS para proxies que cambian el Host).
  • GET /api/v1/exports/{id} solo muestra exportaciones de videos que se pueden ver.
  • Al volver una biblioteca a «con contraseña», las sesiones de antes ya no reviven.
  • Revisión de todo el código: los videos ya no pueden registrar rutas de archivos (solo título, duración y origen); las rutas de archivos de los videos nunca salen de su carpeta.
  • Las subidas solo aceptan video o audio (y la miniatura, JPEG de hasta 2 MB); una subida cortada no deja el archivo a medias.
  • Los archivos de las bibliotecas se sirven siempre como medios o descargas, nunca como páginas, con X-Content-Type-Options: nosniff.
  • «Desde este equipo» solo vale si el pedido llega a localhost/127.0.0.1 (protección contra DNS rebinding).
  • Iniciar sesión siempre da un token nuevo (fijación de sesión), con un máximo de 10 intentos fallidos cada 10 minutos por equipo; el hash de la contraseña ya no frena al servidor.
  • Importar o ver un video exige permiso en la biblioteca de ese video, no en la abierta.
  • WebSocket: marcos sin máscara, de control demasiado largos o mensajes que superan 16 MB entre fragmentos cierran la conexión; las cabeceras HTTP tienen un máximo de 100 y 15 s para llegar.
  • Los avatares de canales (/chan/) piden acceso como el resto de las miniaturas.

Agregado

  • Rendimiento (Preferencias): detecta GPU, VRAM, RAM y CPU y elige un perfil de modelos (Máxima calidad, Equilibrado, Ligero, Solo subtítulos, Subtítulos ligeros) con velocidades medidas en equipos de 8, 6, 4 y 2 GB y sin GPU. Muestra si cada perfil va bien, al límite o forzado, cuánto tarda un video y si se puede ver en vivo; cambiar de perfil reinicia Translay solo.
  • Límites de VRAM, RAM e hilos de CPU para Translay; la RAM y la CPU se aplican al momento (Job Object de Windows, sin administrador).
  • Avisos de por qué algo va lento: perfil forzado, VRAM que desborda a memoria compartida, poca RAM, límites demasiado bajos, otro programa en la GPU.
  • Papelera: eliminar videos, vaciar o eliminar una biblioteca los guarda 30 días; «Deshacer» en el aviso y Preferencias › Papelera para restaurar o borrar para siempre.
  • Labs de hardware (tools/lab/) que emulan equipos menores con límites reales de VRAM, RAM y CPU, y vt/hardware.py para detectar el equipo.
  • Barra lateral también en el reproductor (se pliega a íconos con el botón junto al logo).
  • «Bajar video» en la barra del reproductor y en el clic derecho para videos con solo audio.
  • Los botones que trabajan muestran su avance: «Bajando video 42 %», «Exportando 63 %».

Cambiado

  • Vaciar y eliminar una biblioteca piden escribir su nombre; «Vaciar…» pasó de la cabecera de «Todos» al menú «⋯» de la biblioteca.
  • --model, --compute-type, --beam, --translator, --voice y --device ya no tienen valor fijo: sin ellos, los decide el perfil de rendimiento.
  • Lo que se edita (bibliotecas, colecciones, comentarios, personas) se ve al instante en todos lados, sin esperar al servidor.
  • Las flechas de las filas del inicio quedan dentro de la fila y solo aparecen si hay más videos hacia ese lado.

Translay 1.0.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 04:42

Primera versión pública.

Traducción y doblaje

  • Reconocimiento con Whisper large-v3-turbo en streaming, con VAD y acuerdo local propios.
  • Traducción con Opus-MT big (fp16) y capas propias para español latinoamericano: división por oraciones, modismos y giros literales. NLLB-1.3B y MADLAD-3B como alternativas (--translator).
  • Diarización propia (WeSpeaker en ONNX + agrupamiento incremental): 97.6 % de frases con la persona correcta en 12 videos de prueba.
  • Doblaje con la voz clonada de cada persona (OmniVoice), referencias de hasta 8 s limpiadas con DeepFilterNet si tienen ruido, duración ajustada al espacio de cada frase y WSOLA de respaldo.
  • Procesamiento adelantado: la voz suena sincronizada con la imagen (desfase mediano 0.08 s; 0.25 s en un video de 28 min).
  • Persistencia por huella del video: lo procesado no se vuelve a procesar; si cambia el texto, la persona o el motor, la frase se vuelve a doblar sola.

Biblioteca

  • Portada con «Seguir viendo» y filas por colección; colecciones automáticas (Recientes, Todos, canales y categorías de YouTube) y propias.
  • Varias bibliotecas, cada una en su carpeta (otro disco, por ejemplo), con sus videos, colecciones, glosario, personas, tema y modo de importar; «Mover a…» lleva los archivos.
  • Banners y distintivos con patrones Bauhaus por colección y biblioteca; avatar y banner reales de los canales.
  • Búsqueda en todas las transcripciones (inglés, español y comentarios, sin importar tildes).
  • Selección múltiple para abrir, procesar, exportar, mover o eliminar.

Importar y cola

  • Enlaces de YouTube, playlists, varios enlaces a la vez, CSV con miles de enlaces y archivos del equipo; importar directo a una colección.
  • Una sola cola en el servidor que sobrevive a recargar: el video que ves va primero y sigue tus saltos; «Priorizar», pausa y pantalla propia con estados.
  • Descargas espaciadas y en orden o al azar, solo audio o video, «Solo descargar»; pausa automática si YouTube pide verificación y reintentos espaciados.
  • Sesión de YouTube con cookies.txt o desde el navegador instalado.
  • Modo reposo: los modelos dejan la GPU a los 45 s sin uso y el proceso de voz se cierra a los 2 min.

Reproductor

  • Vista ampliada y dividida, controles propios, velocidad de 0.75× a 2× sin cambiar el tono, subtítulos ES/EN.
  • Indicador «Preparando NN % / Listo para reproducir» según la velocidad real del doblaje; pausa hasta que esté listo y reproducción automática del siguiente.
  • Transcripción alineada EN | ES con la persona que habla, comentarios por frase y marcas en la línea de avance.
  • Personas: nombre y voz de cada una (la suya clonada o la de otra persona del video).
  • Glosario por biblioteca: términos fijos o sin traducir; al cambiarlo se re-traduce y se rehace la voz.

Exportar

  • Video traducido (voz en español + inglés como segunda pista + subtítulos), audio traducido, video y audio originales, subtítulos SRT en ambos idiomas y transcripción TXT; varios en un .zip.

Acceso e integraciones

  • Dueño sin sesión desde el mismo equipo y con contraseña desde otros; cada biblioteca privada, con contraseña o pública, de solo ver o ver e importar.
  • Acceso desde otros equipos de la red local.
  • API REST /api/v1 con claves por biblioteca (lectura o escritura).
  • Webhooks firmados con HMAC-SHA256, con reintentos y 21 eventos.

Interfaz

  • Diseño «Translay»: una sola fuente, claro y oscuro grafito, menús, listas y casillas propios, menú contextual por zona, barra lateral colapsable y silueta al cargar.
  • La dirección guarda dónde estás: recargar no vuelve al inicio y atrás/adelante funcionan.

Instalación y documentación

  • Imagen Docker con CUDA 12.8, servidor y motor de voz; docker-compose.yml y --owner-password / TRANSLAY_OWNER_PASSWORD para el acceso del dueño en el contenedor.
  • Documentación en Starlight (docs/) con referencia generada desde el código.
  • Convención de commits (Conventional Commits) con validación en .githooks/commit-msg.