Skip to content

About

Chrome-расширение: оригинальные субтитры и перевод слов по клику через DeepSeek прямо в видеоплеере.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

95 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SubsAnywhere

Оригинальные субтитры поверх видео, перевод целых реплик и отдельных фраз на русский, китайские субтитры с пиньинем для YouTube.

0.12.0 — кандидат первого выпуска, не заявление о готовности 1.0. Проверки и незакрытые сценарии перечислены в матрице приёмки. Обслуживание и диагностика · Данные и приватность.

Возможности

  • Одна выбранная оригинальная дорожка из HTML5-плеера, включая доступные фреймы, либо свой SRT: UTF-8 / Windows-1251, до 5 МБ.
  • Полный перевод английской реплики через собственный ключ DeepSeek или OpenAI - меньшей строкой над оригиналом, без отдельного списка фраз. По желанию - короткие переводы над английскими словами и цельными выражениями.
  • Переводится текущая реплика и отображаемые сочетания субтитров на 30 секунд вперёд: до трёх запросов одновременно, с приоритетом текущей реплики и интервалом между стартами не менее 250 мс. Очередь ограничена 80 репликами; после перемотки неотправленные реплики вне нового окна убираются. При ошибке или пустом ответе реплика возвращается в начало очереди: максимум 3 попытки, затем остановка до ручного повтора по нажатию. Перевод не ждёт локальный сервер; полной подготовки дорожки нет.
  • На YouTube - английские или китайские субтитры из открытого плеера по кнопке «Показать с YouTube», без внешнего сервиса скачивания. Для китайского показывается пиньинь без нижней строки иероглифов; перевод реплики содержит краткий словарь пиньинь — русский.
  • В смешанных многострочных китайских субтитрах (пиньинь, иероглифы, английский перевод) обрабатываются только строки с иероглифами. Цифры, пунктуация и иностранные слова внутри китайских строк сохраняются; исходная дорожка не изменяется.
  • Перетаскивание субтитров за значок ⠿, размер и цвет текста, цвет и непрозрачность фона. Для SRT — смещение и скорость дорожки.
  • Выбор плеера, дорожки, импортированные субтитры и оформление сохраняются отдельно для каждой страницы. Ключи и выбранная модель перевода — общие для расширения.
  • Три размера текста: оригинал (включая пиньинь для китайского), полный русский перевод и русские переводы в ячейках. Ползунки собраны компактно в две колонки; отдельная строка оригинала под ячейками включается по желанию и для китайского показывает иероглифы, а не повторяет пиньинь.
  • Небольшая кнопка копирования справа от субтитров: оригинальная реплика, полный перевод или пиньинь для китайского. Копируется только выбранный текст, без словаря и элементов интерфейса, без дополнительных AI-запросов.
  • Управление расширением открывается постоянно внутри страницы: окно можно перетаскивать, менять его размер и закрывать крестиком. На обычной странице просмотра YouTube оно встраивается над рекомендациями справа; в широком и полноэкранном режимах становится плавающим.

Установка

Расширение устанавливается в Chrome; сервер и Docker для субтитров YouTube больше не нужны. Дорожки берутся из открытого плеера. Необязательный сервер сохраняет дополнительную копию SRT; его прежний API скачивания сохранён для совместимости, но расширение к нему не обращается. Для DeepSeek или OpenAI нужны интернет и собственный API-ключ, но не Docker.

1. Загрузить расширение

Скачайте исходники выпуска или клонируйте репозиторий и сохраните папку в постоянном месте:

git clone https://github.com/niiikkid/SubsAnywhere.git
cd SubsAnywhere

В Chrome 120 или новее откройте chrome://extensions, включите Режим разработчика, нажмите «Загрузить распакованное расширение» и выберите папку с manifest.json. Сборка JavaScript и установка npm-пакетов для этого не нужны.

2. Необязательный сервер для дополнительной копии SRT

Нужны работающие Docker и Compose v2: Docker Desktop на macOS/Windows с Linux-контейнерами либо Docker Engine с Compose на Linux. Для сохранения копии субтитров со страницы ключ Video Download API не требуется. Старые серверные настройки провайдера сохранены только для совместимости; расширение больше не запускает такие загрузки. Команды запускайте из папки проекта:

Если уже работает нативный сервер на 43817, не запускайте второй экземпляр. Можно продолжить пользоваться нативным сервером или дождаться его заданий и штатно остановить его в своём терминале, когда решите перейти на Docker. Не завершайте чужой процесс вслепую; нативные файлы не переносятся в Docker автоматически.

docker compose up -d --build --wait

Первая сборка требует интернета и места для образа. Сервер использует Python 3.11 и только pypinyin из Python-зависимостей; образ не содержит FFmpeg, Torch, моделей распознавания или cookies. Compose подключает только том subsanywhere_subtitles; фиксированные лимиты — 1 CPU / 512 MiB, без автоматического расчёта бюджета. Это настройки, не отчёт об испытаниях. npm run docker:up выполняет ту же команду запуска.

Сервер доступен только на http://127.0.0.1:43817. Адрес в расширении фиксирован; смена опубликованного порта в Compose сама по себе его не перенастраивает.

docker compose ps
docker compose exec subtitles python healthcheck.py

Проверьте также http://127.0.0.1:43817/health в браузере. healthy означает доступность API, а не успешную загрузку конкретного видео. Сервер проверяет только ключ провайдера и локальный пиньинь.

Сервер поддерживает только готовые субтитры на английском или китайском; загрузка аудио, конвертация и распознавание речи недоступны. Импорт моделей/cookies и активная база словаря также удалены. Ранее сохранённые аудио, кэши моделей, words.sqlite3 и старые тома остаются неиспользуемыми архивами; ID заданий загрузки субтитров сохраняются для проверки статуса.

Использование

  1. Откройте страницу с видео. Панель SubsAnywhere появится внутри страницы; крестик закрывает её, а значок расширения открывает снова. Во вкладке «Видео» нажмите «Включить субтитры» и разрешите запрошенный доступ, в том числе к встроенному видео на другом домене.
  2. Одно видео подключается без дополнительного выбора; если их несколько, выберите нужное. Сохранённый выбор имеет приоритет; временно отсутствующее видео не заменяется другим автоматически. Единственная встроенная дорожка обычного сайта выбирается при подключении, если ранее ничего не было выбрано. На рабочем экране видно выбранное видео, субтитры и их происхождение. «Другие субтитры» открывает общий список дорожек сайта, YouTube и файлов SRT. После смены видео или дорожек используйте «Изменить» → «Найти видео заново». Само открытие окна не выполняет новое подключение.
  3. В разделе «Внешний вид» настройте оформление — подключённый плеер для этого не нужен. На видео перемещайте субтитры за значок ⠿.
  4. В «Настройках» доступен перевод через ИИ; озвучки нет. Файл добавляется в «Видео» → «Другие субтитры» → «Добавить файл SRT» и выбирается сразу, если за время загрузки вы не выбрали другую дорожку. «Настроить время» относится только к текущей выбранной дорожке SRT: минус показывает реплики раньше, плюс - позже; скорость исправляет постепенно растущее расхождение. Сохранённые файлы доступны там же для управления, временная ошибка их не удаляет.
  5. Для перевода выберите DeepSeek или OpenAI в «Настройках» → «ИИ». Сохраните ключ, загрузите доступные вашему аккаунту текстовые модели, выберите одну и нажмите «Использовать модель». Полностью активен только один сервис. Готовый перевод английской реплики показывается сверху; нажатие на оригинал открывает только полный перевод, без отдельного списка фраз. Для китайского в подсказке остаётся словарь с пиньинем. Повторное нажатие или крестик закрывает подсказку.
  6. В «Внешнем виде» включите «Переводы над фразами»: вместо отдельной строки оригинала появятся ячейки с исходными фразами и русскими значениями над ними. Для китайского оригиналом при отображении считается пиньинь, не иероглифы. Общий русский перевод остаётся над ячейками. Переключатель «Отдельная строка оригинала под ячейками» возвращает цельную реплику ниже; по умолчанию она скрыта. Без ячеек показываются оригинал и полный русский перевод. Размер оригинала общий для всех языков и обоих режимов; размеры полного перевода и переводов в ячейках настраиваются отдельно. Длинное значение сокращается многоточием; наведение или клик показывает его полностью. Клик по ячейке открывает только перевод выбранного слова или выражения. Настройки сохраняются для страницы и не делают дополнительных AI-запросов. Если модель не вернула разбор, оригинал и полный перевод остаются; отсутствующие значения не придумываются. Полнота и качество разбора зависят от выбранной модели.

Перевод не строго «по запросу после клика»: при полностью настроенном активном сервисе расширение заранее переводит текущую и несколько ближайших реплик. Это внешние, потенциально платные API-запросы. Полный SRT одним запросом не отправляется; подробности и фактические ограничения — в PRIVACY.md.

Ранее сохранённая база words.sqlite3 остаётся в пользовательских данных или Docker-томе; обновление её не удаляет. В этой версии расширение больше не сохраняет слова и предложения и не открывает панель повторения.

YouTube

Выберите английский (en) или китайский (zh) и нажмите «Показать с YouTube». Расширение использует текстовую дорожку текущего видео из открытого плеера. Если подходящая дорожка уже сохранена, она выбирается без нового получения. Открытие панели само по себе ничего не загружает. Ручной выбор не заменяется поздним результатом; прежние субтитры не удаляются.

Video Download API больше не вызывается расширением: ни новые задания, ни проверка старых. Получение идёт только через открытую вкладку YouTube. Поддерживаются английский и китайский, включая региональные варианты; автоперевод YouTube не подставляется. При отсутствии дорожки показывается сообщение, без обращения к платному провайдеру.

Расширение использует данные текущего плеера и ответ его запроса субтитров в браузерной сессии. При необходимости оно ненадолго переключает штатные субтитры на выбранный язык, после получения возвращает прежний выбор; источник результата отмечается «Со страницы». Если у ролика нет текстовой дорожки, надписи внутри изображения извлечь нельзя. Временные перехватчики запросов удаляются после получения, ошибки или смены видео.

Со страницы сохраняется исходный текст; существующий ИИ-перевод при настройке модели добавляет к китайским репликам пиньинь. Ключ Video Download API для этого не требуется. yt-dlp, скачивание аудио и экспорт cookies браузера не используются.

Дорожки YouTube привязаны к точному ID ролика из ссылки. Расширение проверяет соответствие при получении, сохранении и показе; дорожка другого видео не подставляется по совпадению языка. Запоздавшее действие панели после перехода на другой ролик отклоняется, в том числе перед новой загрузкой. Чужие дорожки в старом хранилище не показываются, но автоматически не удаляются.

Полученная дорожка сохраняется в Chrome. При доступном локальном сервере дополнительно сохраняется копия SRT; ошибка этой копии не мешает использовать дорожку. Исторические задания провайдера и файлы остаются на сервере без изменений.

Сервер сохраняет оплаченные задания загрузки субтитров и продолжает проверять их после перезапуска без повторной отправки. Ранее сохранённые аудио, результаты распознавания и модели не удаляются, но сервер больше не предоставляет операции распознавания или загрузки аудио.

Если сервер выключен, получение с YouTube, встроенные дорожки, сохранённые SRT и настройки остаются доступны. Для дополнительной серверной копии можно использовать LaunchAgent на текущем Mac либо Docker. Не запускайте оба варианта одновременно и не удаляйте данные ради сетевой ошибки.

Ограничения

  • Поддерживаются текстовые дорожки обычного <video>, не надписи, впаянные в изображение; OCR и обход DRM не предусмотрены.
  • Доступность встроенных дорожек, iframe и полноэкранного режима зависит от сайта. Совместимость со всеми плеерами не заявляется.
  • Доступность видео, субтитров и выбранного языка зависит от открытого плеера YouTube. Обход DRM не предусмотрен; используйте только доступные вам материалы.
  • Пиньинь может содержать ошибки; таймкоды готовой дорожки зависят от источника субтитров.
  • Подтверждение работы на Windows, Linux/amd64 и реальных сторонних плеерах — отдельные пункты приёмки, не следствие успешной сборки.

Обновление и разработка

Текущий рабочий режим на локальном Mac — без Docker. Сервер уже запускается через macOS LaunchAgent; данные перенесены с сохранением оригиналов. Пути, перезапуск, резервные копии и ограничения описаны в LOCAL-DEVELOPMENT.md. Команды Docker ниже относятся к контейнерному варианту, а не к текущей локальной разработке.

Обновляйте исходники в той же папке, выполните docker compose up -d --build --wait, затем Reload в chrome://extensions, обновите страницу с видео и при необходимости подключитесь заново. Предварительно дождитесь завершения заданий и сделайте резервную копию. Переустановка расширения не нужна.

Нативный npm run local-server сохранён как необязательный путь для разработчика с самостоятельно настроенными зависимостями; он не нужен для Docker. Настройка и отличия хранения описаны в RELEASE.md.

Локальные автоматические проверки требуют Node.js и Python 3; это команды для запуска, не отчёт об их прохождении:

npm test
npm run check

About

Chrome-расширение: оригинальные субтитры и перевод слов по клику через DeepSeek прямо в видеоплеере.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages