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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.