Спасибо!

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

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

OK

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

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

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

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

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

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