Спасибо!

Мы очень рады, что Вам нравится данный проект и вы проголосовали за его развитие.

Работа над задачами по проекту отнимает у его разработчика самое ценное — время, так что небольшая компенсация в виде материальной поддержки поднимет интерес к разработке и позволит сделать больше задач для общей пользы :)

OK

Дополнение Piper TTS

Владелец задачи: golnet, Moscow - Russia
Текущий статус: Поддержка
Страница дополнения

Модуль синтеза речи на основе Piper TTS. Полностью локальный, работает на CPU, не требует облачных сервисов. Поддерживает русские голоса (Ирина, Руслан, Денис, Дмитрий), кэширование, WebSocket-воспроизведение в браузере, установку голосов из админ-панели. Требуется Linux x86_64 / aarch64.

20.10.2026

fix: MODEL приводится к форме текущего режима (путь для локального Pi…

(golnet)

fix: MODEL приводится к форме текущего режима (путь для локального Piper, имя для удалённого сервера)

Голое имя голоса в локальном режиме роняло Piper с PermissionError: [Errno 13] Permission denied: 'ru_RU-denis-medium': ветка удалённого режима в admin() сохраняет basename, а обратной конвертации не было. Теперь getConfig() нормализует MODEL при каждом чтении — в локальном режиме через resolveModelPath(), в удалённом — в имя голоса.

Также: отсутствующий файл модели пишется в журнал до запуска piper; пустой MODEL (POST без поля model, когда голосовой список не загрузился) больше не затирает выбранный голос, а откатывается на дефолт режима; в аддоне terminals своя resolveModelPath() и дефолт MODELS_DIR.
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

19.10.2026

fix: тишина в начале фразы учитывается в ключе кэша кнопки Проверить

(golnet)

fix: тишина в начале фразы учитывается в ключе кэша кнопки Проверить
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

15.10.2026

help: свернуть все разделы аккордеона по умолчанию

(golnet)

help: свернуть все разделы аккордеона по умолчанию
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

15.10.2026

feat: словарь произношения, проверка/разбор и нормализация текста (v1…

(golnet)

feat: словарь произношения, проверка/разбор и нормализация текста (v1.2.1)

  • вкладка «Словарь»: правила чтения (слово / текст / regex), порядок применения,
    вкл-выкл, прослушивание, импорт и экспорт; примеры правил засеиваются в пустую
    таблицу при установке (единицы, часовые пояса, служебные знаки, МСК)
  • «Настройки»: блок «Проверка» — кнопки «Проверить» и «Разбор»
  • нормализация текста: числа и единицы с падежами, диапазоны «от … до …»,
    знаки (=, ≠, ≤, ≥, ±), «№», «~», часовые пояса и смещения UTC
  • числа обрабатываются до словаря: правило «м/с» не ломает склонение,
    «UTC» не отрезает знак смещения
  • установщик движка и кнопка «Обновить Piper» — только при обновлении или сбое
  • кэш учитывает версию обработки текста и набор правил словаря
  • аддон терминалов переименован в piper_tts.addon.php
  • помощь и «О модуле» дополнены разделами про словарь и нормализацию
    https://github.com/golnet1/majordomo-piper_tts/com...
Обсуждение (0) (0)

27.09.2026

fix: cache key covers synthesis settings, fix silent loudnorm failure…

(golnet)

fix: cache key covers synthesis settings, fix silent loudnorm failure, remote sentence silence

Synthesis:

  • cache key now includes MODEL, LENGTH_SCALE, SENTENCE_SILENCE, so changing a
    voice or speed no longer serves a WAV built with the old settings; parts are
    joined with length-prefixed values to avoid collisions
  • remote mode: piper1-gpl accepts length_w_scale, not noise_w, and ignores the
    latter silently; phoneme width was stuck at its default
  • remote mode: sentence_silence is a server start-up argument, not a per-request
    field, so silence is now assembled locally by synthesising each sentence
    separately and concatenating with a gap
  • post-processing used a .tmp output name, which ffmpeg rejects with
    "Error initializing the muxer"; the step failed silently, so loudnorm never
    ran and cached audio was clipped at 0.0 dB. Now .tmp.wav with explicit -f wav,
    and a failure is logged instead of swallowed
  • loudnorm computes at 192 kHz and leaked that rate into the result, inflating
    files from 186 KB to 2 MB. Sample rate of the source is probed and restored
  • LEAD_SILENCE adds a configurable pause before the phrase (default 1.0 s), it is
    part of the cache key
  • keep punctuation: the previous [^\p{L}\p{N}\s] filter dropped it all, making
    speech monotonous with no pauses or question intonation
  • WAV URL in CLI mode is built from ROOT, so the browser no longer receives a
    filesystem path

Browser and delivery:

  • cache buster used filemtime(prepend.php) instead of the script's, so edits to
    piper_tts.js did not change the URL and the old version was served
  • wait for readyState 4 / canplaythrough before play(), otherwise the media
    pipeline starts ahead of real time and the start of the phrase is lost
  • socket handlers are bound to the captured socket, fixing the null close error
    and CONNECTING sockets being overwritten
  • autoplay rejection and load errors are reported instead of swallowed
  • WS port comes from the core WEBSOCKETS_PORT constant; status reports the
    websocket separately from piper, since a reachable piper says nothing about
    delivery to a browser tab

Addon renamed to piper_tts_addon: the old class name collided with the module
and produced a fatal "Cannot redeclare class piper_tts". It now supports remote
mode, shares text normalisation, stops leaking dynamic properties, closes its
handles, and falls back between paplay/aplay/ffplay.

Hardening: voice and quality are whitelisted and model paths are confirmed to
stay inside MODELS_DIR, since they reach mkdir/chown/rm; form values are escaped;
install_model and delete_model are refused in remote mode; install/uninstall
survive mysqli exceptions on PHP 8.1+; uname is cached and remote requests use
curl instead of shell.
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

19.08.2026

feat: SAYTO via SAY_CACHED_READY to terminals, addon reads config fro…

(golnet)

feat: SAYTO via SAY_CACHED_READY to terminals, addon reads config from DB
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

19.08.2026

feat: add SAYTO subscription and destination routing

(golnet)

feat: add SAYTO subscription and destination routing
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

11.06.2026

help: add nginx+dual-PHP, prepend mechanism, hidden tab WS nuances

(golnet)

help: add nginx+dual-PHP, prepend mechanism, hidden tab WS nuances
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

11.06.2026

piper_tts.js: close WS on visibilitychange (background tabs)

(golnet)

piper_tts.js: close WS on visibilitychange (background tabs)

  • WS disconnect on document.hidden, reconnect on visible
  • replaces windowActive/tryPlay/localStorage approach
  • background tabs no longer receive TTS events at all

install/uninstall: align with Vosk on modules/prepend.php

  • install: create shared modules/prepend.php loader if missing
  • install: clean up old direct Piper .htaccess line
  • install: add auto_prepend_file for modules/prepend.php
  • uninstall: check if Vosk is still installed before removing
    shared loader and .htaccess line
  • prepend.php: add cache buster via filemtime
    https://github.com/golnet1/majordomo-piper_tts/com...
Обсуждение (0) (0)

10.06.2026

piper_tts.js: windowActive flag with proper focus target check + loca…

(golnet)

piper_tts.js: windowActive flag with proper focus target check + localStorage token lock
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

10.06.2026

help: clarify prepend.php troubleshooting, make section collapsible

(golnet)

help: clarify prepend.php troubleshooting, make section collapsible
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

09.06.2026

Bootstrap styling: settings and models templates

(golnet)

Bootstrap styling: settings and models templates
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

09.06.2026

prepend: inject script only if not in frame (window.top===window.self)

(golnet)

prepend: inject script only if not in frame (window.top===window.self)
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

09.06.2026

cleanup: remove dead code and fix stale references

(golnet)

cleanup: remove dead code and fix stale references

  • Removed unused language constants PIPER_TTS_PLAYER_SETUP,
    PIPER_TTS_AUTO_SETUP, PIPER_TTS_SPA_SETUP from both ru/en files
  • Removed dead handlers install_start, install_progress (replaced by install_model)
  • Removed creation of unused /tmp/piper-tts directory in install()
  • Fixed help.html voice list to match actual 5 voices
  • Fixed help.html cache dir default path to match code
  • Fixed WS_PORT not being passed to JS (added window.PIPER_WS_PORT
    in piper_tts.html)
    https://github.com/golnet1/majordomo-piper_tts/com...
Обсуждение (0) (0)

09.06.2026

fix: check prepend.php exists before adding .htaccess entry; prevent …

(golnet)

fix: check prepend.php exists before adding .htaccess entry; prevent system crash on install
https://github.com/golnet1/majordomo-piper_tts/com...

Обсуждение (0) (0)

 
(0)
 
Подписаться на обновления (1)
 

Идеи по развитию

Вы можете помочь в развитии проекта, сообщив об ошибках, поделившись своими идеями или проголосовав за уже добавленные. В случае добавления ошибок, обязательно указывайте детали окружения (ОС, версия ПО и т.п.), сообщения об ошибках без деталей будут игнорироваться.


 
ERROR: Package 'piper-tts' requires a different Python: 3.8.10 not in '>=3.9' 0

Другие задачи пользователя

Дополнение OpenCode
Дополнение DashBoard Pro
Модуль MCP XiaoZhi AI
Дополнение PHP Manager
Дополнение Котел Stout Plus