Об этом проекте

## Что это ChatGPT Subtitle Translator — это утилита перевода, построенная вокруг API OpenAI ChatGPT (или любой совместимой с OpenAI конечной точки чат-комплишн, включая локальный экземпляр Ollama). Её основное внимание уделяется построчному переводу, особенно субтитров SRT, где сохранение соответствия между входными и выходными строками важно для сохранения синхронизации субтитров. ## Как это работает Индексы и временные метки SRT удаляются или упрощаются перед отправкой модели для сокращения использования токенов. Строки группируются в пакеты внутри одного промпта, что устраняет повторяющиеся накладные расходы на каждую запись и позволяет переводить файлы произвольной длины без чрезмерного потребления токенов. Системная инструкция по умолчанию — минимальная: `Translate to <language>`. Пять структурированных режимов выбираются через `--structured`: - `array` (по умолчанию): строки отправляются как массив JSON, и модель возвращает соответствующий массив. - `object`: исходные строки становятся ключами в схеме ответа, поэтому явное пользовательское сообщение не отправляется. - `timestamp`: тайминги сохраняются вместе с текстом с использованием компактного формата Toon со смещением пакета плюс смещением/длиной каждой записи в миллисекундах; модель может объединять соседние записи. Повторные попытки происходят только тогда, когда границы временных диапазонов вывода не совпадают с входными. - `agent`: псевдоним для подкоманды agent с параметрами по умолчанию. - `none`: устаревший режим без структурированного вывода. ## Возможности - Веб-интерфейс (размещён на GitHub Pages) и CLI - Поддержка структурированного вывода, включена по умолчанию в обоих интерфейсах - Поддержка кэширования промптов, управляется с помощью `-c, --context` (только CLI) - Работает с любым провайдером, совместимым с OpenAI API, например локальным Ollama - Построчная пакетная обработка с автоматическим размером пакета, определяемым бюджетом токенов контекста - Необязательная проверка OpenAI Moderation (`--use-moderator`, только CLI) для предотвращения траты токенов на вероятные отказы - Потоковый вывод процесса - Ограничение скорости запросов в минуту - Возобновление прогресса (только CLI) - Обнаружение циклов повторения во время потоковой передачи (`--guard-repetition`) ## Режим агента Подкоманда `agent` выполняет несколько проходов перед переводом: обзорный проход выбирает образцы файла для определения содержимого, длительности, жанра/тона и имён персонажей, а также для обнаружения исходного языка; проход планирования сканирует файл в ограниченных по токенам окнах, создавая сводки пакетов, которые объединяются в уточнённую инструкцию перевода; затем проход перевода использует эту обогащённую инструкцию и проверяет целевой язык после первого пакета. Параметры включают `--no-refine`, `--no-fitting` и `--context-summary`. ## Установка и использование Требуется Node.js >= 20. После клонирования выполните `npm install`, сделайте `cli/translator.mjs` исполняемым, скопируйте `.env.example` в `.env` и добавьте API-ключ. Типичные вызовы включают `cli/translator.mjs --input subtitles.srt --from Japanese --to English`, ввод простого текста через `--plain-text` и пользовательские инструкции через `--system-instruction`. Модель, temperature, top_p, штрафы и logit bias можно настроить через стандартные параметры OpenAI.