HDRezkaSpeeds

HDRezka Speed Controller

English Русский

English

Browser extension (Chrome MV3 + Firefox MV3) that adds an always-visible row of speed buttons, a fine-grained slider, and customizable keyboard shortcuts to the HDRezka video player.

Bilingual interface (English / Russian). No ads, no telemetry.

Features

Reliability

When HDRezka ships a layout change, the panel recovers automatically through a five-strategy discovery chain (cached selector → exact match → substring match → walk up from the video element → geometric heuristic). A built-in watchdog detects broken state, purges bad cache entries, and re-attaches the panel. Plyr’s playback rate persistence is intercepted so the player can’t race the extension’s restore on every episode change.

Privacy

See PRIVACY.md.

Install

Manual install from a build (Chrome, until the CWS listing is approved):

git clone https://github.com/danscMax/HDRezkaSpeeds.git
cd HDRezkaSpeeds
npm install
npm run build           # → .output/chrome-mv3/
npm run build:firefox   # → .output/firefox-mv3/

Then in Chrome → chrome://extensions → enable Developer mode → “Load unpacked” → point at .output/chrome-mv3/. Firefox → about:debugging → “This Firefox” → “Load Temporary Add-on…” → pick .output/firefox-mv3/manifest.json.

Develop

npm run dev             # Chrome MV3 with hot reload
npm run dev:firefox     # Firefox MV3 with hot reload
npm run typecheck       # tsc --noEmit
npm run test            # vitest unit tests
npm run test:smoke      # Playwright extension smoke (needs `npx wxt build` first)

Maintenance & twin sync

This project shares most of src/ with the sibling VideoSpeeds extension (YouTube + RuTube) by copy-paste. Before each release:

  1. npm run drift — compares the shared core against the sibling checkout (../VideoSpeeds by default) and lists drifted files.
  2. Port bug fixes in shared modules (discovery/, storage/, speed/, health/, ui/, i18n/ framework) to the twin unless site-specific.
  3. npm run typecheck && npm test in BOTH repos.

Project layout

Sister project

VideoSpeeds — the same controller for YouTube + RuTube. Two extensions are kept separate so each can declare narrow host_permissions in its manifest, which makes Chrome Web Store and AMO review faster.

License

GPL-3.0-or-later. See LICENSE.


Русский

English Русскийк началу

Расширение для браузера (Chrome MV3 + Firefox MV3), которое добавляет всегда видимую панель кнопок скорости, точный ползунок и настраиваемые горячие клавиши в плеер HDRezka.

Двуязычный интерфейс (English / Русский). Без рекламы, без телеметрии.

Возможности

Надёжность

Когда HDRezka меняет вёрстку, панель восстанавливается автоматически через цепочку из пяти стратегий поиска (кеш → точное совпадение → подстрока → подъём от <video> → геометрическая эвристика). Встроенный watchdog обнаруживает поломки, очищает плохой кеш и переустанавливает панель. Сохранение скорости Plyr перехватывается, поэтому плеер не сбрасывает выбранную скорость на каждой смене серии.

Приватность

См. PRIVACY.md.

Установка

Ручная установка из исходников (для Chrome — пока листинг не одобрен):

git clone https://github.com/danscMax/HDRezkaSpeeds.git
cd HDRezkaSpeeds
npm install
npm run build           # → .output/chrome-mv3/
npm run build:firefox   # → .output/firefox-mv3/

Затем в Chrome → chrome://extensions → включить «Режим разработчика» → «Загрузить распакованное расширение» → указать на .output/chrome-mv3/. В Firefox → about:debugging → «Этот Firefox» → «Загрузить временное дополнение…» → выбрать .output/firefox-mv3/manifest.json.

Разработка

npm run dev             # Chrome MV3 с горячей перезагрузкой
npm run dev:firefox     # Firefox MV3 с горячей перезагрузкой
npm run typecheck       # tsc --noEmit
npm run test            # vitest unit-тесты

Структура проекта

Связанный проект

VideoSpeeds — тот же контроллер для YouTube + RuTube. Два расширения сделаны отдельно, чтобы каждое могло объявлять узкие host_permissions в манифесте — это ускоряет ревью в Chrome Web Store и AMO.

Лицензия

GPL-3.0-or-later. См. LICENSE.