Sobre el proyecto

## Qué es ChatGPT Subtitle Translator es una utilidad de traducción construida en torno a la API de OpenAI ChatGPT (o cualquier endpoint de chat completion compatible con OpenAI, incluida una instancia local de Ollama). Su enfoque es la traducción basada en líneas, especialmente de subtítulos SRT, donde preservar la correspondencia entre las líneas de entrada y salida es importante para mantener intacta la sincronización de los subtítulos. ## Cómo funciona Los índices y las marcas de tiempo de SRT se eliminan o simplifican antes de enviarlos al modelo para reducir el uso de tokens. Las líneas se agrupan en lotes dentro de un único prompt, eliminando la sobrecarga repetida por entrada y permitiendo traducir archivos arbitrariamente largos sin un consumo excesivo de tokens. La instrucción de sistema predeterminada es un mínimo `Translate to <language>`. Se pueden seleccionar cinco modos estructurados mediante `--structured`: - `array` (predeterminado): las líneas se envían como un array JSON y el modelo devuelve un array correspondiente. - `object`: las líneas de origen se convierten en claves del esquema de respuesta, por lo que no se envía ningún mensaje de usuario explícito. - `timestamp`: los tiempos se conservan junto al texto usando un formato Toon compacto con desplazamiento de lote más desplazamiento/longitud por entrada en milisegundos; el modelo puede fusionar entradas adyacentes. Solo se reintenta cuando los límites del intervalo temporal de salida no coinciden con la entrada. - `agent`: alias del subcomando agent con opciones predeterminadas. - `none`: modo heredado sin salida estructurada. ## Características - Interfaz web (alojada en GitHub Pages) y CLI - Compatibilidad con Structured Output, habilitada de forma predeterminada en ambas interfaces - Compatibilidad con Prompt Caching, controlada con `-c, --context` (solo CLI) - Funciona con cualquier proveedor compatible con la API de OpenAI, por ejemplo Ollama local - Agrupación por líneas con tamaño de lote automático derivado del presupuesto de tokens de contexto - Comprobación opcional de OpenAI Moderation (`--use-moderator`, solo CLI) para evitar desperdiciar tokens en rechazos probables - Salida del proceso en streaming - Limitación de tasa de solicitudes por minuto - Reanudación del progreso (solo CLI) - Detección de bucles de repetición durante el streaming (`--guard-repetition`) ## Modo agent El subcomando `agent` ejecuta varias pasadas antes de traducir: una pasada de visión general muestrea el archivo para identificar contenido, duración, género/tono y nombres de personajes, y para detectar el idioma de origen; una pasada de planificación escanea el archivo en ventanas limitadas por tokens, produciendo resúmenes por lote que se consolidan en una instrucción de traducción refinada; la pasada de traducción usa entonces esa instrucción enriquecida y verifica el idioma de destino después del primer lote. Las opciones incluyen `--no-refine`, `--no-fitting` y `--context-summary`. ## Configuración y uso Se requiere Node.js >= 20. Después de clonar, ejecute `npm install`, haga ejecutable `cli/translator.mjs`, copie `.env.example` a `.env` y añada una clave de API. Las invocaciones típicas incluyen `cli/translator.mjs --input subtitles.srt --from Japanese --to English`, entrada de texto plano mediante `--plain-text` e instrucciones personalizadas mediante `--system-instruction`. El modelo, la temperatura, top_p, las penalizaciones y el logit bias se pueden configurar mediante los parámetros estándar de OpenAI.