Sobre o projeto

## O que é O ChatGPT Subtitle Translator é um utilitário de tradução construído em torno da API OpenAI ChatGPT (ou qualquer endpoint de chat completion compatível com OpenAI, incluindo uma instância local do Ollama). Seu foco é a tradução baseada em linhas, especialmente legendas SRT, onde preservar a correspondência entre linhas de entrada e saída é importante para manter o tempo das legendas intacto. ## Como funciona Os índices e timestamps do SRT são removidos ou simplificados antes de serem enviados ao modelo para reduzir o uso de tokens. As linhas são agrupadas em lotes dentro de um único prompt, removendo o overhead repetido por entrada e permitindo que arquivos arbitrariamente longos sejam traduzidos sem consumo excessivo de tokens. A instrução padrão do sistema é um mínimo `Translate to <language>`. Cinco modos estruturados são selecionáveis via `--structured`: - `array` (padrão): as linhas são enviadas como um array JSON e o modelo retorna um array correspondente. - `object`: as linhas de origem se tornam chaves no esquema de resposta, então nenhuma mensagem explícita do usuário é enviada. - `timestamp`: os tempos são preservados junto ao texto usando um formato Toon compacto com deslocamento de lote mais deslocamento/comprimento por entrada em milissegundos; o modelo pode mesclar entradas adjacentes. Novas tentativas ocorrem apenas quando os limites de duração de tempo da saída não correspondem aos da entrada. - `agent`: alias para o subcomando agent com opções padrão. - `none`: modo legado sem saída estruturada. ## Recursos - Interface web (hospedada no GitHub Pages) e CLI - Suporte a Saída Estruturada, habilitado por padrão em ambas as interfaces - Suporte a Cache de Prompts, controlado com `-c, --context` (apenas CLI) - Funciona com qualquer provedor compatível com a API OpenAI, ex.: Ollama local - Agrupamento de linhas em lotes com dimensionamento automático de lote derivado do orçamento de tokens de contexto - Verificação opcional de Moderação OpenAI (`--use-moderator`, apenas CLI) para evitar desperdício de tokens em recusas prováveis - Saída de processo em streaming - Limitação de taxa de requisições por minuto - Retomada de progresso (apenas CLI) - Detecção de loop de repetição durante streaming (`--guard-repetition`) ## Modo agent O subcomando `agent` executa múltiplas passagens antes de traduzir: uma passagem de visão geral amostra o arquivo para identificar conteúdo, duração, gênero/tom e nomes de personagens e detectar o idioma de origem; uma passagem de planejamento examina o arquivo em janelas limitadas por tokens, produzindo resumos de lote que são consolidados em uma instrução de tradução refinada; a passagem de tradução então usa essa instrução enriquecida e verifica o idioma de destino após o primeiro lote. As opções incluem `--no-refine`, `--no-fitting` e `--context-summary`. ## Configuração e uso Node.js >= 20 é necessário. Após clonar, execute `npm install`, torne `cli/translator.mjs` executável, copie `.env.example` para `.env` e adicione uma chave de API. Invocações típicas incluem `cli/translator.mjs --input subtitles.srt --from Japanese --to English`, entrada de texto simples via `--plain-text`, e instruções personalizadas via `--system-instruction`. Modelo, temperatura, top_p, penalidades e logit bias podem ser configurados através de parâmetros padrão da OpenAI.