Przejdź do treści
Kod Zero Kamil Krawiec
Menu

Odcinek kanału YouTube

Przestań płacić za OpenAI! Własny serwer Piper TTS w Dockerze | Homelab #9

30.11.2025

Budujemy własny mikroserwis TTS zgodny z API OpenAI. Code Review z Copilotem, GitHub Actions i publikacja gotowego obrazu na DockerHub.

Docker Python GitHub Actions DevOps

YouTube

Film ładuje się dopiero po kliknięciu — bez ciasteczek YouTube przed odtworzeniem.

Otwórz na YouTube →

Notatki do odcinka

Streszczenie i rozwinięcie filmu — dla osób, które wolą najpierw przeskanować temat, zamiast oglądać całość.

Kiedy testuję lokalne aplikacje, każde wywołanie płatnego API szybko staje się dodatkowym ograniczeniem. Dlatego zbudowałem własny mikroserwis oparty na Piper TTS. Jego zadaniem jest udostępnienie lokalnego syntezatora mowy przez interfejs zgodny z API OpenAI, tak aby można było podmienić usługę chmurową bez przebudowywania całego narzędzia.

W odcinku pokazuję całą drogę od demonstracji lokalnego głosu do publicznego obrazu kontenera. Nie chodzi tylko o samą syntezę. Sprawdzam też sposób organizacji kodu, automatyczne pobieranie modeli, budowanie obrazu i publikowanie go przez GitHub Actions. To mój pierwszy publiczny obraz na Docker Hub, więc ten etap jest częścią praktycznego testu całego workflow.

Co zobaczysz

Najpierw porównuję głos Pipera działającego lokalnie z głosem generowanym przez OpenAI w chmurze. Taki test pokazuje, po co w ogóle powstał wrapper: lokalny serwis ma być użyteczny dla aplikacji, które oczekują interfejsu OpenAI, a nie tylko uruchamiać model w oderwaniu od reszty systemu.

Potem przechodzę do szybkiego startu z gotowego obrazu. W materiale pojawia się jedna komenda docker run, która wystawia usługę na porcie 5000. Dzięki temu można zacząć od użycia opublikowanego kontenera, bez ręcznego składania środowiska z pojedynczych elementów.

Kolejna część dotyczy architektury własnego wrappera. Piper jest lokalnym silnikiem text-to-speech, a napisany przeze mnie serwis HTTP stanowi warstwę, przez którą inne narzędzia mogą się z nim komunikować. Wspominam również o rozszerzeniu Audio Preview do VS Code, przydatnym przy szybkim odsłuchiwaniu wygenerowanych plików.

Następnie używam GitHub Copilot jako code reviewera. To nie zastępuje decyzji autora, ale pomaga przejrzeć kod i znaleźć miejsca wymagające uwagi. Pokazuję też przygotowanie obrazu Dockera oraz skrypt, który automatycznie pobiera modele głosowe. Model nie musi być więc ręcznie dostarczany w każdym środowisku w ten sam sposób.

Na końcu dochodzi automatyzacja GitHub Actions. Workflow buduje obraz i wysyła go na Docker Hub. W tej części pojawia się również problem z bałaganem w tagach, czyli praktyczny szczegół, który łatwo przeoczyć, gdy sama aplikacja działa, ale publikowanie kolejnych wersji nie jest jeszcze uporządkowane.

Kluczowe wnioski

Najważniejszy wniosek jest prosty: lokalny silnik TTS staje się znacznie bardziej użyteczny, gdy można korzystać z niego przez znany interfejs. Zgodność z API OpenAI ogranicza liczbę zmian po stronie aplikacji, która ma wysyłać tekst do syntezy.

Docker porządkuje sposób uruchamiania usługi. Obraz zawiera aplikację i mechanizm pobierania modeli, a użytkownik dostaje powtarzalny punkt startowy. Nie rozwiązuje to wszystkich problemów, ale zmniejsza liczbę ręcznych kroków potrzebnych do pierwszego uruchomienia.

Samo napisanie serwisu to dopiero połowa pracy. Równie ważne są powtarzalne budowanie i publikacja obrazu. GitHub Actions przenosi te czynności z lokalnego terminala do automatycznego procesu, a Docker Hub daje gotowy adres, z którego można pobrać opublikowany obraz.

Warto też rozdzielić test lokalnego głosu od oceny całego rozwiązania. Porównanie z OpenAI pokazuje różnicę w odsłuchu, natomiast workflow z Dockerem, Copilotem i GitHub Actions odpowiada za to, czy projekt można wygodnie rozwijać i uruchamiać ponownie.

Jak to odtworzyć

Najkrótsza ścieżka prowadzi przez gotowy obraz Docker Hub. W terminalu używam komendy:

docker run -p 5000:5000 kamilkrawiec/piper-openai-tts

Jeśli chcesz prześledzić kod, konfigurację i sposób budowania, zacznij od repozytorium GitHub projektu. Źródło zawiera również informacje potrzebne do pracy z obrazem oraz modelami głosowymi wskazanymi w opisie filmu.

Najczęstsze pytania

Czy Piper działa bez wywołań do chmury?

Tak, celem tego serwisu jest lokalne generowanie mowy. Odcinek pokazuje go jako alternatywę dla płatnego API używanego podczas lokalnych testów.

Czy muszę sam budować obraz?

Nie. W opisie znajduje się gotowy obraz kamilkrawiec/piper-openai-tts, który można uruchomić podaną komendą. Repozytorium jest potrzebne wtedy, gdy chcesz prześledzić lub rozwijać rozwiązanie.

Po co automatyzować publikację?

GitHub Actions buduje obraz i wysyła go na Docker Hub, więc proces nie musi kończyć się ręcznym wykonaniem tych samych czynności przy każdym wydaniu.

Materiały

← Wróć do listy