ComfyUI i TTS - Przykład z HiggsTTS

Autor

Wstęp

Tutaj zaprezentuję przykładowe zastosowanie ComfyUI z TTS.

ComfyUI natywnie nie ma TTSa, ale jest TTS Audio Suite, które zawiera kompilację różnych TTSów do wypróbowania.

Na bazie testów, Higgs Audio v3 Engine najlepiej się sprawdził w języku polskim, zatem będę go stosować w dalszym wpisie.

Instalacja

Sam używałem ręcznej instalacji TTS-Audio-Suite więc jak ComfyUI Manager nie styknie, to oto lista kroków:

## Idziemy do folderu ComfyUI z rozszerzeniami
cd /path/to/comfy-ui/custom_nodes
## Klonujemy repo
git clone https://github.com/diodiogod/TTS-Audio-Suite
## Idziemy do korzenia ComfyUI
cd ..
## Instalujemy zależności
uv pip install -r custom_nodes/tts_audio_suite/requirements.txt
## Uruchamiamy serwer i jak wszystko git, powinno dać informacje o tym, że załadowały się TTSy
uv run main.py

Składanie workflow

  1. Na początku należy kliknąć + na samej górze lub w New po kliknięciu loga ComfyUI w bocznym menu, by utworzyć nową przestrzeń roboczą (workflow).
Pozycje plusa
  1. Potem należy kliknąć w Nodes i w sekcji Extensions powinien być TTS Audio Suite

    1. Z Engines należy przeciągnąć Higgs Audio v3 Engine do przestrzeni roboczej
    2. Z Text to Speech należy przeciągnąć TTS Text
Pozycje silników TTSPozycja text to speech
  1. Następnie trzeba zescrollować w górę do kategorii Comfy nodes i kliknąć w audio i przeciągnąć Save Audio oraz Load Audio
Widok ComfyUI
  1. Load Audio należy podłączyć do opt_narrator a Higgs Audio v3 Engine - TTS_engine w node TTS Text

Load Audio - ustala, jaka próbka audio ma być sklonowana

Higgs Audio v3 Engine - ustala, jaki silnik TTS ma być użyty. Można zamienić na inny dostępny TTS Audio Suite do testów

  1. Pole audio z TTS Text należy podłączyć do audio w node Save Audio, który zapisze plik w podanym formacie do output w folderze ComfyUI
Widok ComfyUITak mniej więcej powinno to wyglądać

Po złożeniu należy kliknąć Run i workflow zacznie pracować

Widok ComfyUI

Na wstępie pobierze model z Huggingface a potem dopiero zacznie dalej przetwarzać

Promptowanie HiggsTTS 3

HiggsTTS 3 w teorii daje opcję nakierowania głosu na konkretną emocję lub styl.

Żeby to zrobić, należy dać w prompcie specjalny tekst między <|…|> przed tekstem, który ma mieć daną cechę.

Aktualna lista jest na repo HiggsTTS 3 na Huggingface

Warto sprawdzać różne ustawienia seed (domyślnie się zmienia per uruchomienie workflow), gdyż HiggsTTS może wypluć dla jednego zestawu tekst + audio nieco inne, mniej lub bardziej pożądane, brzmienie za każdą generacją.

Można też próbować zmusić angielski głos, by brzmiał na polski, jednak to różnie wygląda, gdyż raz wyjdzie głos gadający ładną polszczyzną a raz po dekadzie w USA.

Tłumaczenie

Emocje

Token Opis
<|emotion:elation|> Radość / wzniosłość
<|emotion:amusement|> Rozbawienie / figlarne śmiech
<|emotion:enthusiasm|> Entuzjazm / ekscytacja
<|emotion:determination|> Determinacja / stanowczość
<|emotion:pride|> Duma / pewność siebie
<|emotion:contentment|> Spokojne zadowolenie
<|emotion:affection|> Ciepło / afekt
<|emotion:relief|> Ulga
<|emotion:contemplation|> Zamyślenie / refleksja
<|emotion:confusion|> Dezorientacja
<|emotion:surprise|> Zaskoczenie
<|emotion:awe|> Podziw / zachwyt
<|emotion:longing|> Tęsknota / pragnienie
<|emotion:arousal|> Nasilone pragnienie
<|emotion:anger|> Złość
<|emotion:fear|> Strach
<|emotion:disgust|> Wstręt
<|emotion:bitterness|> Gorycz
<|emotion:sadness|> Smutek
<|emotion:shame|> Wstyd
<|emotion:helplessness|> Bezradność

Styl

Token Opis
<|style:singing|> Śpiew
<|style:shouting|> Krzyk / mocny głos
<|style:whispering|> Szept

Onomatopeje:

Token Opis Sugerowana onomatopeja
<|sfx:cough|> Kaszel Ahem
<|sfx:laughter|> Śmiech Haha / Hehe
<|sfx:crying|> Płacz Boohoo / Sob
<|sfx:screaming|> Krzyk Ahh / Aaah
<|sfx:burping|> Odbijanie Burp
<|sfx:humming|> Nucenie Hmm / Mmm
<|sfx:sigh|> Westchnienie Uh / Ahh
<|sfx:sniff|> Powąchanie Sff
<|sfx:sneeze|> Kichnięcie Achoo

Ton i brzmienie:

Token Efekt
<|prosody:speed_very_slow|> ≈0.65× prędkości
<|prosody:speed_slow|> ≈0.85× prędkości
<|prosody:speed_fast|> ≈1.2× prędkości
<|prosody:speed_very_fast|> ≈1.4× prędkości
<|prosody:pitch_low|> ≈−3 półtony
<|prosody:pitch_high|> ≈+2.5 półtonu
<|prosody:pause|> ≈400–700 ms pauzy
<|prosody:long_pause|> ≈700–1500 ms pauzy
<|prosody:expressive_high|> Bardziej ekspresyjna interpretacja
<|prosody:expressive_low|> Bardziej monotonna interpretacja

Przykłady:

Teksty zostały wygenerowane na podstawie próbek z gry TES V: Skyrim w trakcie prac nad dubbingiem do House of Horrors - Quest Expansion - Jeszcze nie gotowy

<|emotion:determination|> Najwyższy czas oczyścić ten dom z tego tałatajstwa! <|emotion:contentment|> Na mój znak?!

Tutaj znak zapytania to bardziej hakowanie tonu, by zgadzał się z docelowymi

Do ataku, teraz! <|style:shouting|> <|emotion:anger|> Zniszcz to; szybko!

<|emotion:relief|> W ostatniej chwili! … <|sfx:sigh|> … <|emotion:relief|> Jesteśmy tutaj bezpieczni.