Skip to content

Latest commit

 

History

915 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RuVox

English version

CI License: GPL-3.0

Desktop-приложение для быстрого прослушивания текстов и статей на русском языке — локально, без GPU и облака. Для случаев, когда в первую очередь важно быстро понять содержимое, а не красота сгенерированной речи — например, технические статьи.

Задача — временно и частично снять нагрузку с глаз. За рабочий день и после него они и так перегружены чтением: рабочие тексты, соцсети, новости. RuVox позволяет не читать большие тексты и статьи, а прослушать их — быстро, целиком, локально; а если что-то расслышать не удалось, оригинал перед глазами, текущее слово подсвечено.

Современные тяжёлые TTS, как правило, сами грамотно читают цифры, ссылки и английский текст, но требуют мощный GPU и синтезируют заметно дольше. Быстрые лёгкие движки (Silero, Piper) наоборот: моментальны и нетребовательны к ресурсам, но прочитать getUserData() или /api/v2/users не умеют. Когда лёгкий движок встречает такой фрагмент, варианты очевидны:

  • просто пропустить его — но вместе с ним может уйти важная информация из текста;
  • попытаться имитировать произношение — озвучить фрагмент приближённо, как он прозвучал бы при грамотном чтении.

RuVox идёт по второму пути: нормализация — компенсирующая прослойка, которая переписывает английские термины, аббревиатуры, код, числа и URL в «звучащую» русскую форму, чтобы лёгкий движок прочитал текст целиком. getUserData() → «гет юзер дата», API → «эй пи ай», /api/v2/users — как путь, а не по буквам. Произношение при этом остаётся приближённым, и это осознанный размен: вместо красоты речи и мощного железа RuVox даёт скорость понимания и легковесность по ресурсам.

Озвучивает один из трёх TTS-движков: Silero TTS v5 in-process на ONNX Runtime (крейт silero-native, движок по умолчанию, бандл модели скачивается по запросу), Piper (in-process, через piper-rs, запасной вариант без внешних зависимостей) или, опционально, Silero TTS out-of-process через Python-сайдкар ttsd (оставлен как fallback).

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

Скриншот RuVox

Установка

Готовые сборки публикуются в Releases:

Платформа Пакет Примечания
Windows 10 22H2+ / 11 (x86_64) *-setup.exe NSIS-установщик; WebView2, mpv и ONNX Runtime встроены; автообновление из приложения
Debian / Ubuntu *.deb sudo dpkg -i ./ruvox_*.deb; системный mpv ставится автоматически как зависимость; обновляется вместе с системой
Любой дистрибутив Linux *.AppImage запускается напрямую (нужен FUSE; там, где его нет, — --appimage-extract-and-run); mpv встроен; автообновление из приложения

Голосовая модель движка скачивается по запросу при первом использовании (для Silero Native — бандл ~230 МБ).

Стек

Слой Технология
Shell Tauri 2 (Rust + нативный webview)
Frontend React 18 + TypeScript 5 + Mantine 8
Backend Rust (pipeline нормализации, storage, TTS-менеджер)
TTS Silero v5 нативный (in-process, ONNX Runtime, крейт silero-native, по умолчанию); Piper (in-process, piper-rs + onnxruntime, fallback); Silero через ttsd (опциональный Python 3.12 subprocess, fallback)
Аудио tauri-plugin-mpv (libmpv с scaletempo2)

Возможности

  • Сверка с текстом — синхронная подсветка читаемого слова: непонятный на слух фрагмент можно тут же уточнить по оригиналу.
  • Нормализация — английский (camelCase/snake_case), аббревиатуры, числа, даты, URL, email, код.
  • Markdown + HTML — рендер и озвучивание с сохранением смысла; формат источника определяется автоматически.
  • Импорт из файлов и ссылок — «Файл…», «Файл с кодировкой…», «По ссылке…», а также drag-n-drop .txt/.md/.html и ссылок в окно; кодировка (UTF-8, CP1251, KOI8-R и другие) определяется автоматически, с ручным переопределением.
  • Mermaid-диаграммы — визуализация в UI; для TTS заменяются маркером «Тут мермэйд диаграмма».
  • Preview-диалог — предпросмотр нормализованного текста до синтеза.
  • Экспорт аудио — «Сохранить аудио как…» в контекстном меню очереди: WAV или Ogg Opus.
  • Параметры записи — в контекстном меню очереди и по двойному клику: каким движком, голосом и настройками создана запись.
  • Скорость воспроизведения — до 3×, сохраняется между запусками.
  • Системный трей — close-to-tray, фоновый режим.
  • Уведомления — о готовности записи и об ошибках (отключаются в настройках).
  • Локализация — интерфейс на русском и английском, переключается в настройках.
  • Автообновления — Windows-установщик и AppImage сами проверяют и ставят обновления с проверкой подписи.

Нормализация

Быстрые лёгкие движки читают только русский текст: английские слова, код и спецсимволы в чистом виде синтезатор произнести не может, а пропускать фрагменты — значит терять смысл. Поэтому перед озвучкой RuVox переписывает текст так, чтобы он звучал естественно:

  • идентификаторы кода: getUserData → «гет юзер дата», user_id → «юзер ай ди»;
  • аббревиатуры: HTTP → «эйч ти ти пи», API → «эй пи ай»;
  • числа, версии и даты: v1.2.3 → «один точка два точка три», 2024-05-12 → «двенадцатое мая две тысячи двадцать четвёртого года»;
  • URL и email: user@example.com → «юзер собака экзампл точка ком»;
  • операторы и символы: != → «не равно», === → «строго равно», -> → «стрелка», α → «альфа»;
  • блоки кода: по умолчанию заменяются фразой вида «далее следует пример кода на пайтон», а в режиме «Читать полностью» проговариваются целиком с расшифровкой идентификаторов и операторов; mermaid-диаграмма всегда заменяется фразой «Тут мермэйд диаграмма».

Увидеть результат до синтеза можно в диалоге предпросмотра (открывается при добавлении текста): слева — оригинал, справа — то, что будет прочитано вслух.

Как управлять

  • Формат источника в диалоге предпросмотра: «Авто», «Обычный текст», «Markdown» или «HTML». По умолчанию включён «Авто» — RuVox сам распознаёт формат: из HTML извлекается читаемый текст, а разметка Markdown (заголовки, списки, блоки кода) обрабатывается по смыслу, а не зачитывается посимвольно. HTML-разметка распознаётся только когда текст начинается и заканчивается тегом — поэтому вставленный CHANGELOG и техническая проза с угловыми скобками (Vec<T>, <type>(<module>): <desc>) остаются обычным текстом или Markdown. Если автоопределение ошиблось, формат можно выбрать вручную.
  • Озвучка блоков кода в настройках: «Кратко» (по умолчанию) — блок кода заменяется фразой «далее следует пример кода на <язык>»; «Читать полностью» — код проговаривается целиком, с нормализацией идентификаторов, операторов и скобок. Настройка применяется сразу, без перезапуска приложения.

Требования

  • ОС: Windows 10 22H2+ / 11 (x86_64) или Linux (X11 или Wayland; Ubuntu 24.04+, Debian 13+, Fedora 40+, Arch).
  • Nix (для сборки из исходников на Linux): рекомендуется — всё окружение (Rust, Node, Python, Tauri-зависимости) собирается из flake.nix (dev-shell живёт в nix/devshell.nix).
  • Без Nix (сборка из исходников на Linux): дистрибутив с webkit2gtk-4.1 (Ubuntu 24.04+, Debian 13+, Fedora 40+, Arch). Подробная пошаговая инструкция по сборке: docs/install.md (на английском). Python 3.12 + uv нужны только для Python-движка Silero (сайдкар ttsd) — Piper и нативный движок Silero в них не нуждаются.

Dev-окружение

# Интерактивная оболочка
nix develop
pnpm install
pnpm tauri dev

# Или одну команду без входа в оболочку
nix develop -c pnpm install
nix develop -c pnpm tauri dev

Все команды в документации подразумевают запуск внутри nix develop (либо через nix develop -c ...).

Сборка production-бинаря

# По умолчанию (slim) — Piper + нативный Silero, без Python/torch в closure.
nix build .#ruvox
./result/bin/ruvox

# Опционально (full) — дополнительно встраивает сайдкар ttsd, чтобы был
# доступен Python-движок Silero.
nix build .#ruvox-with-silero
./result/bin/ruvox

Оба варианта собирают release-бинарь Tauri и оборачивают его через wrapProgram (runtime LD_LIBRARY_PATH + GIO_EXTRA_MODULES); mpv в обоих случаях попадает в PATH. Вариант .#ruvox-with-silero дополнительно кладёт в PATH бинарь ttsd (Silero Python subprocess). Slim-вариант его не содержит — на runtime в Settings опция Python-движка Silero окрашена серым. Нативный движок Silero работает в обоих вариантах — его бандл ONNX-моделей (~230 МБ) скачивается по запросу из Settings.

Windows-установщик и Linux-пакеты (.deb, .AppImage) собираются в CI при пуше тега v* (см. .github/workflows/release.yml).

Первый запуск nix build: derivation frontend использует pnpm.fetchDeps с lib.fakeHash — Nix упадёт с hash mismatch, напишет реальный hash; его нужно подставить в flake.nix и повторить build. Это стандартная процедура pnpm2nix.

Тесты

Все команды ниже выполняются внутри nix develop (или через nix develop -c ...).

just lint                                                       # все статические проверки (fmt, clippy, cargo-deny, eslint, knip, tsc, ruff)
just test                                                       # все тесты (Rust + TypeScript + Python)
pnpm typecheck                                                  # TypeScript
pnpm test:unit                                                  # TS unit-тесты
cargo test --manifest-path src-tauri/Cargo.toml                 # Rust (включая golden-тесты pipeline)
cargo test --manifest-path src-tauri/Cargo.toml --test golden   # только golden-тесты
cargo test --manifest-path silero-native/Cargo.toml             # нативный движок Silero (bundle-gated тесты скипаются без SILERO_NATIVE_BUNDLE)
cd ttsd && uv run python -m pytest                              # Python subprocess

Документация

Файл Описание
docs/index.md Указатель документации: архитектура, спеки поведения, процесс разработки
AGENTS.md Правила разработки, структура проекта, соглашения
docs/install.md Сборка из исходников на Linux без Nix (Ubuntu 24.04+, на английском)
docs/development.md Dev-окружение, команды, отладка
docs/contributing.md Контрибуция: словари, правила коммитов и стиля
silero-native/ Крейт нативного движка Silero v5 (ONNX Runtime): архитектура, экспорт бандла, parity-тесты (на английском)
openspec/specs/ Спецификации поведения (OpenSpec): IPC, хранилище, pipeline, UI, плеер
CHANGELOG.md Хронология изменений

Лицензия

Код приложения — GPL-3.0, см. LICENSE.md.

Важно: голосовая модель движка по умолчанию (Silero Native) распространяется по лицензии CC BY-NC-SA 4.0 — использовать её можно только в некоммерческих целях. Подробности: silero-native/NOTICE. Для использования без лицензионных ограничений выбирайте движок Piper — он сам и его голосовые модели распространяются по MIT.

About

Desktop-приложение для быстрого прослушивания текстов и статей на русском языке — локально, без GPU и облака. Для случаев, когда в первую очередь важно быстро понять содержимое, а не красота сгенерированной речи — например, технические статьи.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages