Посібник із локального озвучення ШІ

Озвучуйте чат наживо локальними голосами ШІ. Почніть із варіанта без встановлення, а локальний сервер використовуйте лише за потреби.

Українська

Огляд

Працює із захопленим текстом чату незалежно від платформи. Постачальник голосу належить програвачу SSN, а не YouTube, Twitch, TikTok чи іншому сайту чату. Ці локальні постачальники ШІ відрізняються від Системне озвучення: вони генерують звук сторінки, а не покладаються на доступність голосів операційної системи в OBS. Див. короткий посібник із налаштування OBS щодо доступності голосів і захоплення звуку. Порівнюйте постачальників, слухайте зразки та переглядайте налаштування.

Social Stream Ninja може читати повідомлення чату вголос за допомогою локального ШІ для синтезу мовлення. «Локальний» може означати дві речі: голос працює всередині браузера або ви запускаєте невеликий сервер TTS на власному комп’ютері.

Є два підходи:

Шлях 2 — власний сервер Потрібен Docker

Запустіть локальний сервер TTS на своєму комп’ютері та спрямуйте на нього Social Stream Ninja. Це дає більше голосів, клонування голосу та серверне керування.

  • Kokoro-FastAPI
  • openedai-speech (Piper)
  • kokoro-web

Використовує вбудовану в Social Stream підтримку: Кінцева точка, сумісна з OpenAI .

Почніть зі шляху 1. Якщо вам просто потрібен робочий TTS в OBS, спочатку спробуйте вбудований Kokoro або Kitten. Їм не потрібні Docker, сервер чи API-ключ. Використовуйте власний сервер, лише якщо вам потрібен конкретний серверний голос, клонування голосу або інша модель.

Швидке налаштування

Це найкоротший шлях для більшості стрімерів:

1
Спочатку використовуйте вбудованого постачальника. Додайте &speech=en-US&ttsprovider=kokoro або &speech=en-US&ttsprovider=kitten до свого dock.html URL.
2
Вставте цей URL в OBS як браузерне джерело. Саме браузерне джерело OBS є сторінкою, що відтворюватиме звук.
3
Увімкніть захоплення звуку OBS. У властивостях браузерного джерела ввімкніть Керувати звуком через OBS.
4
Надішліть одне коротке тестове повідомлення чату. Використовуйте щось просте, наприклад Testing local TTS. Якщо використовуєте Kokoro чи Piper, дочекайтеся першого завантаження моделей.
5
Лише після цього спробуйте власний сервер. Якщо ви використовуєте Kokoro-FastAPI, openedai-speech або інший сервер Docker, прочитайте нижче правило localhost, перш ніж копіювати URL в OBS.

Правило localhost / 127.0.0.1

Це найпоширеніша помилка з локальним TTS.

localhost і 127.0.0.1 завжди означають «цей самий комп’ютер». Якщо OBS працює на одному комп’ютері, а Kokoro — на іншому, 127.0.0.1 в URL OBS указує на комп’ютер з OBS, а не на комп’ютер із Kokoro.
Схема, що показує: localhost означає той самий комп’ютер, а для іншого комп’ютера потрібна LAN IP-адреса
Використовуйте 127.0.0.1 лише коли сервер TTS працює на тому самому комп’ютері, що й сторінка, яка відтворює звук. Якщо сервер працює на іншому комп’ютері, використовуйте його LAN IP-адресу.
Ваші налаштуванняКінцева точка для використання
OBS і Kokoro працюють на одному комп’ютеріhttp://127.0.0.1:8880/v1/audio/speech
Kokoro працює на іншому комп’ютері у вашій домашній мережіhttp://192.168.x.x:8880/v1/audio/speech, використовуючи LAN IP комп’ютера з Kokoro
Кнопка перевірки настільного застосунку SSN працює, але OBS мовчитьOBS усе одно потребує власної робочої кінцевої точки. Перевірка в застосунку не доводить, що OBS може зв’язатися із сервером.

У Linux, macOS і Windows також переконайтеся, що брандмауер дозволяє порт і Docker опублікував його через -p 8880:8880.

Де натискати в SSN

У спливному вікні розширення відкрийте вибір постачальника TTS і виберіть Власна / локальна кінцева точка TTS. Це показує поля локальної кінцевої точки, сумісної з OpenAI, і посилання на цей посібник.

Схема полів локального TTS у Social Stream Ninja у вигляді знімка екрана
Найважливіше — поле кінцевої точки. Для локального сервера API-ключ зазвичай можна залишити порожнім. Виберіть назву голосу, яку ваш сервер справді підтримує.
Про знімки екрана: наведена вище схема полів SSN показує поля локальної кінцевої точки. Інтерфейси сторонніх серверів змінюються залежно від версії проєкту, тому посилання на актуальні знімки екрана й деталі інтерфейсу наведено в репозиторії кожного проєкту біля відповідного кроку налаштування.

Процес із власним сервером

SSN розглядає локальний/власний сервер TTS як кінцеву точку мовлення, сумісну з OpenAI. Основний процес:

chat text -> SSN TTS request -> local endpoint or SSN bridge -> TTS server -> audio response -> SSN playback

Формат запиту

Для ttsprovider=customtts, localtts, або openai, SSN надсилає JSON POST на налаштовану кінцеву точку:

POST /v1/audio/speech { "model": "tts-1", "input": "Chat message text", "voice": "af_bella", "response_format": "mp3", "speed": 1.0 }

CORS, розміщені сторінки та міст

CORS — це перевірка дозволу в браузері. Простими словами: сервер TTS має сказати браузеру «так, ця сторінка може запитувати в мене аудіо». Якщо такого дозволу немає, запит може бути заблоковано ще до того, як Kokoro чи інший сервер TTS його побачить.

Якщо сервер не дозволяє браузерні запити, запустіть Міст локального TTS SSN та спрямуйте SSN на http://127.0.0.1:8124/v1/audio/speech. Для OBS найпростіше запустити міст на тому самому комп’ютері, що й OBS.

Підтримувані аудіовідповіді

Відповідь Підтримка SSN Примітки
Двійкові аудіодані Так Найкращий варіант. Повертайте audio/mpeg, audio/wav, audio/ogg, audio/aacабо інший тип аудіо, який може відтворити браузер.
JSON із URL аудіо Так SSN перевіряє url, audio_url, output_url, вкладені data.url, і перший data[] елемент.
JSON із аудіо в base64 Так SSN перевіряє audio, audio_data, audioContent, b64_json, вкладені data поля та URL даних.
Необроблений PCM Лише з обгорткою Повертайте PCM як файл WAV або WAV у base64. Аудіоелемент браузера не може надійно відтворювати необроблені байти PCM безпосередньо.
Рекомендовані формати: використовуйте mp3 для невеликих файлів і широкої підтримки браузерами, wav для локальних серверів клонування та перевірки мосту, і opus лише коли і сервер, і браузер це підтримують.

Потокове аудіо

Наразі SSN не підтримує поступове відтворення для власних/локальних кінцевих точок TTS. Він чекає на blob відповіді або аудіодані JSON, а потім відтворює їх. Деякі сервери надають потокові кінцеві точки, але поточний шлях SSN, сумісний з OpenAI, буферизує звук перед відтворенням.

Практичний висновок: робіть фрагменти TTS чату короткими. Для потокової підтримки потрібен окремий шлях відтворення з потоковими фрагментами WAV/MP3, MediaSource, WebCodecs або серверним мікшером.

Шлях 1 — вбудований TTS (без налаштування)

Ці рушії входять до Social Stream Ninja й не потребують встановлення. Вони працюють у браузері через WebAssembly (WASM) або ONNX Runtime.

Постачальник Якість Використання CPU GPU/WebGPU Параметр URL
Kokoro TTS ⭐⭐⭐⭐⭐ Чудова Середнє Швидше з GPU ?ttsprovider=kokoro
Piper TTS ⭐⭐⭐⭐ Дуже добра Низьке Лише CPU ?ttsprovider=piper
Kitten TTS ⭐⭐⭐ Добра Дуже низьке Лише CPU ?ttsprovider=kitten
eSpeak-NG ⭐⭐ Роботизована Мінімальне Лише CPU ?ttsprovider=espeak

Як увімкнути

Додайте &ttsprovider= і &speech= до свого Social Stream dock.html URL:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro

Параметри Kokoro TTS

Наразі SSN пропонує 28 англійських, три іспанські та три бразильські португальські голоси Kokoro. Укажіть голос за допомогою параметра &voicekokoro=:

English female: af_bella, af_sarah, af_nicole, af_sky English male: am_adam, am_michael British female: bf_emma, bf_isabella British male: bm_george, bm_lewis
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro&voicekokoro=af_bella&kokorospeed=1.1
Примітка щодо мови: Виберіть голос Kokoro для потрібної мови. Зміна лише параметра мови не змінює вибраний голос.

Приклад іспанською:

dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=kokoro&voicekokoro=ef_dora

Приклад португальською:

dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=kokoro&voicekokoro=pf_dora

Параметри Piper TTS

Укажіть модель голосу через &pipervoice=:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=piper&pipervoice=en_US-hfc_female-medium

Доступні португальські й іспанські голоси Piper:

Brazilian Portuguese: pt_BR-faber-medium, pt_BR-edresson-low
Spanish: es_ES-davefx-medium, es_MX-ald-medium
dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=piper&pipervoice=pt_BR-faber-medium
dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=piper&pipervoice=es_ES-davefx-medium

Параметри Kitten TTS

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kitten&kittenvoice=expr-voice-4-f

Параметри eSpeak-NG

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=espeak&espeakvoice=en&espeakspeed=175
dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=espeak&espeakvoice=pt-br&espeakspeed=145
dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=espeak&espeakvoice=es&espeakspeed=145
Перше завантаження: Kokoro й Piper мають завантажити файли моделей під час першого використання (~50–200 МБ). Це відбувається автоматично у фоні. Наступні завантаження можуть використовувати кешовані моделі, але ініціалізація все одно потребує часу. OBS має окремий кеш від Chrome/Edge.
Захоплення в OBS: Усі вбудовані постачальники TTS відтворюють звук безпосередньо через браузер. В OBS додайте свій dock.html як браузерне джерело й увімкніть «Керувати звуком через OBS»— віртуальні кабелі не потрібні. Див. розділ OBS нижче.

Примітки для браузера та настільного застосунку

Розширення Chrome, браузерне джерело OBS та окремий настільний застосунок Social Stream Ninja використовують однакові dock.html параметри URL для TTS. Важлива відмінність — де саме створюється звук.

Середовище Поведінка локального TTS Захоплення звуку
Розширення Chrome / браузерне джерело OBS Браузерний fetch потребує CORS від локального сервера, якщо ви не використовуєте міст SSN. Використовуйте браузерне джерело OBS із «Control audio via OBS».
Окремий настільний застосунок Використовує ті самі налаштування постачальника. Вікна локальних файлів застосунку менше обмежені CORS, але міст усе одно є найнадійнішим шляхом для серверів, які відхиляють браузерні запити. Захоплюйте звук робочого столу/застосунку або спрямуйте застосунок на віртуальний аудіокабель.
Вбудований Kokoro в настільному застосунку Застосунок може використовувати свій локальний шлях ninjafy.tts для Kokoro замість покладання лише на завантаження моделі в браузері. Звук відтворюється із застосунку, тому використовуйте захоплення звуку робочого столу/застосунку.
Не плутайте перевірку в застосунку з OBS. Якщо ви натискаєте Test у застосунку SSN, перевірку виконує застосунок. Якщо ви копіюєте dock.html URL в OBS, саме OBS має дістатися сервера TTS і відтворити звук.

Шлях 2 — власний сервер TTS

Якщо вам потрібні додаткові голоси, клонування голосу або окремий сервер для різних інструментів, можна запустити локальний сервер TTS. Social Stream Ninja підключається до нього через вбудовану підтримку: Кінцева точка TTS, сумісна з OpenAI — для локальних серверів API-ключ не потрібен.

Вимоги: Docker Desktop має бути встановлений і запущений. Docker безкоштовний для особистого використання.

Три рекомендовані варіанти:

Сервер Модель GPU Диск Порт за замовчуванням
Kokoro-FastAPI Рекомендовано Kokoro 82M Необов’язково ~2 ГБ 8880
openedai-speech (Piper) Легкий Piper TTS Лише CPU <1 ГБ 8000
kokoro-web Kokoro 82M Необов’язково ~2 ГБ 3000

Який пакет підходить?

Пакет Основна перевага Компроміс
Вбудований Kokoro Найкращий початковий вибір: без сервера, висока якість, приватність, працює в браузері та настільному застосунку. Без клонування голосу.
Kokoro-FastAPI Сервер, сумісний з OpenAI, просте налаштування Docker, CPU або GPU, багато голосів Kokoro. Без справжнього клонування голосу; змішування голосів і власні голосові функції залежать від збірки сервера.
openedai-speech Легка кінцева точка, сумісна з OpenAI; Piper добре працює на CPU, а XTTS додає клонування з орієнтиром близько 4 ГБ VRAM. У репозиторії зазначено, що проєкт переважно застарів, тож вважайте його корисним, але без гарантій на майбутнє.
Сервери Chatterbox Клонування голосу, варіанти вебінтерфейсу, API, сумісні з OpenAI, інструменти для довгих текстів. Для деяких збірок підтримка CUDA/GPU зручніша за CPU; налаштування залежить від відгалуження сервера.
GPT-SoVITS Потужне клонування/керування з короткими зразками та підтримкою транскриптів. За замовчуванням несумісний з OpenAI; використовуйте режим мосту SSN.
F5-TTS Природне клонування zero-shot із WAV-зразком і транскриптом. Офіційний проєкт не є простою кінцевою точкою OpenAI; використовуйте обгортку або режим мосту.
Qwen3-TTS Сучасне клонування та створення голосів, зокрема менші моделі 0.6B/1.7B. Насамперед бібліотека/демонстрація; для SSN потрібна обгортка.
MisoTTS Високоякісна генерація мовлення за запитом. Не підходить для локального запуску з 6 ГБ VRAM; за потреби використовуйте віддалений/власний хостинг.

Як працює клонування голосу

Клонування голосу — не окремий режим SSN. Це функція деяких локальних серверів TTS. SSN надсилає текст чату на локальну кінцеву точку; сервер вибирає клонований голос зі збереженого еталонного аудіофайлу, профілю голосу або конфігурації мосту.

Типовий процес

  1. Запишіть чистий еталонний фрагмент, зазвичай від 3 до 30 секунд мовлення однієї людини з мінімальним фоновим шумом.
  2. Деяким рушіям також потрібен точний транскрипт цього еталонного запису.
  3. Локальний сервер перетворює еталон на голосову підказку, векторне представлення або профіль голосу.
  4. SSN надсилає текст чату наживо до кінцевої точки через ttsprovider=customtts.
  5. Сервер повертає аудіофайл, придатний для відтворення, зазвичай WAV або MP3, і SSN відтворює його в доку/браузерному джерелі.
Використовуйте лише голоси, на які отримано згоду. Клонований голос може звучати як голос справжньої людини, тому використовуйте лише власні голоси, голоси з дозволом на використання або з чіткою ліцензією для цієї мети.
XTTS-v2 за замовчуванням призначений для некомерційного використання. Coqui Public Model License дозволяє лише некомерційне використання моделі та її результатів. Стрім із монетизацією може не відповідати цій умові, тому перевірте ліцензію або отримайте окремий дозвіл, перш ніж використовувати XTTS-v2 комерційно.

Для 6 ГБ VRAM або менше спочатку орієнтуйтеся на невеликі моделі клонування zero-shot і сервери, сумісні з OpenAI. Більші моделі також можуть працювати через ту саму кінцеву точку SSN, якщо користувач розміщує їх деінде.

Варіант Клонування голосу Уміщується в 6 ГБ VRAM Шлях API для SSN
Qwen3-TTS 0.6B Base 3-секундний еталонний аудіозапис Імовірно Використовуйте обгортку, сумісну з OpenAI, а потім ttsprovider=customtts
XTTS-v2 / openedai-speech Короткі еталонні записи голосу у WAV Так, openedai-speech повідомляє про приблизно 4 ГБ /v1/audio/speech
Chatterbox Turbo / Server Клонування за еталонним аудіо Імовірно, за використання Turbo / невеликих фрагментів Серверні збірки, сумісні з OpenAI, або міст
GPT-SoVITS 5 секунд для zero-shot, 1 хвилина для few-shot Імовірно з fp16 / полегшеним установленням Використовуйте scripts/local-tts-bridge.cjs --mode gptsovits
F5-TTS WAV-зразок + транскрипт Можливо; залежить від збірки та вокодера Використовуйте обгортку, сумісну з OpenAI, або --mode f5 для серверних обгорток F5-TTS
MisoTTS 8B Аудіоконтекст запиту Ні; проєкт рекомендує 24 ГБ VRAM Лише віддалена/власна кінцева точка
Найкращий формат цільової точки SSN: приймати POST /v1/audio/speech з { model, input, voice, response_format, speed } і повертати аудіофайл, придатний для відтворення. Це охоплює OpenAI, Coqui/XTTS, обгортки Kokoro, Qwen і більшість проксі-сервісів.

Вимоги до комп’ютера

Це практичні відправні точки, а не суворі гарантії. Версія моделі, квантування, довжина тексту, образ Docker і фонові застосунки можуть змінювати споживання пам’яті.

Варіант Мінімальні практичні вимоги до комп’ютера Хороший варіант Примітки
Системний TTS / eSpeak Будь-який сучасний ПК Будь-який ПК Швидко, низька якість, без клонування.
Вбудований Kitten Слабкий CPU, 4 ГБ RAM Сучасний CPU ноутбука, 8 ГБ RAM Невелика модель ONNX, швидкий запуск.
Вбудований Piper Сучасний CPU, 4–8 ГБ RAM Сучасний CPU, 8 ГБ RAM Хороший варіант нейронного голосу з низьким споживанням ресурсів.
Вбудований Kokoro Сучасний CPU, 8 ГБ RAM GPU з підтримкою WebGPU або швидкий CPU, 8–16 ГБ RAM Найкраща якість без налаштування. Перше завантаження отримує ресурси моделі.
Kokoro-FastAPI Хост Docker на CPU, 8 ГБ RAM NVIDIA GPU необов’язковий, 8–16 ГБ RAM Хороший локальний сервер, коли завантаження моделі в браузері незручне.
openedai-speech Piper CPU, 4–8 ГБ RAM CPU, 8 ГБ RAM Легкий сервер, сумісний з OpenAI.
openedai-speech XTTS NVIDIA GPU з приблизно 4 ГБ VRAM, 8–16 ГБ RAM NVIDIA GPU з 6 ГБ+, 16 ГБ RAM Шлях клонування голосу; CPU можливий, але повільний.
Сервери Chatterbox CPU може працювати з деякими збірками, але повільно NVIDIA GPU з 6 ГБ+, 16 ГБ RAM Використовуйте GPU для клонування або обробки довгого тексту.
GPT-SoVITS / F5-TTS / Qwen3-TTS CPU лише для перевірки, повільно NVIDIA GPU з 6 ГБ+ для менших/оптимізованих моделей, 16 ГБ RAM Вибір обгортки й розмір моделі мають значення. Очікуйте більше налаштувань.
MisoTTS 8B Не рекомендовано локально з 6 ГБ VRAM 24 ГБ VRAM або віддалений хост Репозиторій рекомендує GPU з великим обсягом VRAM для інтерактивного використання.

Примітки про перевірені сервери

Це власні рішення для клонування голосу, перевірені на сумісність із SSN. Шлях локальної кінцевої точки перевірено з обома dock.html і featured.html.

SSN приймає прямі двійкові аудіовідповіді, JSON-відповіді з аудіо в base64 та JSON-відповіді з URL аудіо. Поточне відтворення власного/локального TTS буферизує отримане аудіо перед відтворенням; поступове потокове відтворення ще не підтримується.

Сервер Шлях SSN Примітки
openedai-speech Безпосередньо або через міст Сумісний з OpenAI /v1/audio/speech. Режим Piper перевірено зі справжнім синтезом на CPU з dock.html і featured.html, безпосередньо та через міст. Якщо запускаєте з вихідного коду у Windows, переконайтеся, що папка Scripts віртуального середовища є в PATH , щоб piper.exe і ffmpeg.exe можна було знайти.
chatterbox-tts-api Безпосередньо або через міст Сумісний з OpenAI /v1/audio/speech. Використовує налаштований еталонний аудіозапис для клонування. Формат API перевірено безпосередньо та через міст.
Chatterbox-TTS-Server Безпосередньо або через міст Кінцева точка, сумісна з OpenAI, і вебінтерфейс. Перевірено зі справжнім синтезом на CPU за допомогою Emily.wav з dock.html і featured.html, безпосередньо та через міст.
GPT-SoVITS Режим мосту Запустіть міст SSN із --mode gptsovits; цільовий сервер — /tts, несумісний з OpenAI.
F5-TTS_server Режим мосту Запустіть міст SSN із --mode f5; цільовий сервер використовує GET /synthesize_speech/.
Офіційний F5-TTS Потрібна обгортка Насамперед CLI, Gradio та сокет-сервер. Використовуйте обгортку, сумісну з OpenAI, або режим мосту F5 з обгорткою.
Qwen3-TTS Потрібна обгортка Насамперед бібліотека й демонстрація Gradio. Хороший кандидат для невеликої обгортки, сумісної з OpenAI, навколо generate_voice_clone.
MisoTTS Лише віддалений/власний Клонування голосу підтримується, але модель 8B не розрахована на 6 ГБ VRAM, а репозиторій не має локальної REST-кінцевої точки.

Налаштування Kokoro-FastAPI

Kokoro-FastAPI запускає модель Kokoro 82M як локальний сервер з API, сумісним з OpenAI. Він працює на CPU (GPU не потрібен) і має чудову якість голосу.

Установлення через Docker

Відкрийте термінал (Command Prompt, PowerShell або Terminal) і виконайте одну з таких команд:

CPU (працює на будь-якому комп’ютері):

docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

GPU (лише NVIDIA — швидший синтез):

docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
Перший запуск: Docker завантажить образ (~1,5–2 ГБ). Це відбувається лише один раз. Після цього сервер запускається за кілька секунд.

Перевірте, що він працює

Відкрийте браузер і перейдіть на http://localhost:8880/web/— має з’явитися вебінтерфейс, де можна перевіряти голоси.

Доступні голоси

Доступно понад 67 голосів. Кілька прикладів:

af_bella, af_sarah, af_nicole, af_sky, af_heart (American female) am_adam, am_michael (American male) bf_emma, bf_isabella (British female) bm_george, bm_lewis (British male)

Переглядайте й перевіряйте всі голоси на http://localhost:8880/web/ після запуску сервера.

URL SSN

Якщо Kokoro-FastAPI працює на тому самому комп’ютері, що й OBS:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella

Якщо Kokoro-FastAPI працює на іншому комп’ютері, замініть 192.168.x.x на LAN IP-адресу того комп’ютера:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://192.168.x.x:8880/v1/audio/speech&voiceopenai=af_bella
Назви голосів Kokoro відрізняються від назв голосів OpenAI. Для Kokoro-FastAPI використовуйте голоси на кшталт af_bella, af_sarah, am_adam, або bf_emma. Назви на кшталт echo, nova, і alloy — це назви у стилі OpenAI/openedai-speech, які можуть не працювати з Kokoro.

Залишайте сервер запущеним

Щоб Kokoro-FastAPI автоматично працював у фоні, використовуйте прапорець перезапуску Docker:

docker run -d --restart unless-stopped -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

Тепер він автоматично запускатиметься разом із Docker Desktop після кожного перезавантаження.

Налаштування openedai-speech (Piper і XTTS-v2)

openedai-speech надає сумісну з OpenAI кінцеву точку /v1/audio/speech , яка потрібна Social Stream. Його малий образ запускає Piper на CPU; повний образ може виконувати клонування голосу XTTS-v2 на підтримуваному GPU.

Архівований проєкт: openedai-speech архівовано в січні 2026 року, і він описує себе як переважно застарілий. Це досі корисний приклад сумісності, але він більше не підтримується. Використовуйте його локально й не відкривайте його порт без автентифікації в публічний Інтернет.

Варіант A: легкий Piper

Використовуйте цей варіант для сервера TTS лише на CPU розміром до 1 ГБ. Він не містить XTTS-v2 чи клонування голосу.

Установлення через Docker Compose

1
Клонуйте репозиторій або створіть папку з таким docker-compose.min.yml. Або виконайте наведені нижче команди безпосередньо.
2
Запустіть мінімальний образ лише з Piper:
docker run -d --restart unless-stopped \ -p 8000:8000 \ ghcr.io/matatonic/openedai-speech-min

Примітка про встановлення з вихідного коду у Windows

Якщо ви запускаєте openedai-speech із локального репозиторію замість Docker, додайте папку скриптів його віртуального середовища до PATH перед запуском сервера. Без цього запити можуть повертати HTTP 500, оскільки сервер не може знайти piper.exe або ffmpeg.exe.

cd openedai-speech $env:Path = "$PWD\.venv\Scripts;$env:Path" .\.venv\Scripts\python.exe speech.py --xtts_device none -H 127.0.0.1 -P 8000

Доступні голоси

openedai-speech використовує назви голосів у стилі OpenAI, зіставлені з голосами Piper:

alloy, echo, fable, onyx, nova, shimmer

URL SSN

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova

Варіант B: клонування голосу XTTS-v2

Сам XTTS-v2 — це модель, а не веб-API. Використовуйте повний сервер openedai-speech, щоб завантажити модель, вибрати збережений еталонний голос, приймати текст чату від SSN і повертати придатне для відтворення аудіо. Сервер указує практичний орієнтир приблизно 4 ГБ GPU VRAM; обчислення на CPU можливі, але повільні.

Не використовуйте openedai-speech-min для XTTS-v2. Мінімальний образ містить лише Piper. XTTS-v2 потребує повного встановлення та model=tts-1-hd в кожному запиті мовлення.
1
Клонуйте архівований сервер, створіть файл його середовища й запустіть повну конфігурацію Docker Compose із підтримкою GPU:
git clone https://github.com/matatonic/openedai-speech.git cd openedai-speech Copy-Item sample.env speech.env docker compose up -d

У macOS або Linux використовуйте cp sample.env speech.env замість Copy-Item. Docker повинен мати доступ до підтримуваного GPU. Модель завантажується під час першого використання.

2
Підготуйте чистий еталонний запис, на використання якого є згода. Хороша відправна точка — монофонічний WAV із частотою 22050 Гц тривалістю від 6 до 30 секунд:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
3
Додайте клонований голос до наявного розділу tts-1-hd у config/voice_to_speaker.yaml:
tts-1-hd: me: model: xtts speaker: voices/me.wav language: en

Збережіть усі наявні голоси, уже перелічені під tts-1-hd. Змініть me на назву голосу, яку SSN має надсилати, і за потреби використовуйте правильний код мови XTTS.

4
Перезапустіть сервер, а потім спрямуйте на нього док SSN або оверлей вибраних повідомлень:
docker compose restart
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8000/v1/audio/speech&openaimodel=tts-1-hd&voiceopenai=me&openaiformat=wav
openaimodel=tts-1-hd потрібен для XTTS-v2. Якщо його не вказано, Social Stream надсилає своє стандартне значення tts-1, і openedai-speech натомість вибирає Piper. Значення voiceopenai має відповідати назві клонованого голосу в voice_to_speaker.yaml.

Якщо браузер або OBS блокує прямий запит, запустіть Міст локального TTS на комп’ютері з OBS і збережіть ті самі параметри моделі й голосу, змінюючи openaiendpoint до http://127.0.0.1:8124/v1/audio/speech.

Міст локального TTS

Міст — це невелика локальна допоміжна програма. Вона приймає браузерний запит SSN, звертається до вашого сервера TTS, а потім повертає аудіо в SSN із заголовками, придатними для браузера.

Найпростіше правило: запустіть міст на тому самому комп’ютері, що й OBS. Тоді OBS зможе використовувати http://127.0.0.1:8124/v1/audio/speech, навіть якщо справжній сервер TTS працює на іншому комп’ютері.
Схема, на якій OBS звертається до локального мосту, а міст — до сервера TTS
Браузерне джерело OBS звертається до мосту на комп’ютері з OBS. Міст потім може звернутися до Kokoro-FastAPI, openedai-speech або іншого сервера.

Окрема початкова папка — local-tts-bridge/; див. README мосту щодо всіх варіантів запуску.

Проксі, сумісний з OpenAI

Windows PowerShell, коли сервер TTS працює на цьому самому комп’ютері:

$env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" npm run local-tts-bridge

Windows PowerShell, коли сервер TTS працює на іншому комп’ютері:

$env:SSN_TTS_TARGET="http://192.168.x.x:8880/v1/audio/speech" npm run local-tts-bridge

Термінал macOS/Linux:

SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" npm run local-tts-bridge

Потім спрямуйте OBS dock.html URL на міст:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella

Режим проксі GPT-SoVITS

GPT-SoVITS використовує власний /tts формат JSON, тому міст може перетворити запит SSN, сумісний з OpenAI, на тіло запиту GPT-SoVITS.

$env:SSN_TTS_REF_AUDIO_PATH="C:\voices\speaker.wav" $env:SSN_TTS_REF_TEXT="Reference audio transcript here." $env:SSN_TTS_TARGET="http://127.0.0.1:9880/tts" npm run local-tts-bridge -- --mode gptsovits
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&openaiformat=wav

Режим проксі сервера F5-TTS

Деякі серверні обгортки F5-TTS надають /synthesize_speech/?text=...&voice=... замість кінцевої точки, сумісної з OpenAI. Міст може перетворити запит SSN на цей формат запиту.

$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/" npm run local-tts-bridge -- --mode f5
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=default_en&openaiformat=wav
Кінцева точка мосту: http://127.0.0.1:8124/v1/audio/speech. Змініть порт за допомогою SSN_TTS_BRIDGE_PORT=8125 за потреби.

Підключення до Social Stream Ninja

Усі наведені вище власні сервери використовують той самий спосіб підключення — вбудовану в Social Stream підтримку: Кінцева точка OpenAI TTS з власною локальною URL-адресою.

Параметри URL

Параметр Значення Опис
ttsprovider customtts або openai Використовуйте шлях TTS, сумісний з OpenAI. Використовуйте customtts для локальних/власних кінцевих точок.
openaiendpoint http://localhost:8880/v1/audio/speech URL вашого локального сервера (за потреби змініть порт)
speech en-US Умикає TTS для англійської
voiceopenai af_bella Назва голосу (залежить від сервера)
openaiformat mp3 Формат аудіо: mp3, wav, opus, flac
openaispeed 1.0 Швидкість мовлення (0,5–2,0)
Псевдоніми кінцевої точки: customttsendpoint і localttsendpoint також працюють. customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, і localttsformat — це прийнятні псевдоніми полів у стилі OpenAI.
Перевірте кінцеву точку й голос, перш ніж налагоджувати звук. openaiendpoint має бути доступна зі сторінки, яка відтворює TTS, а voiceopenai має бути голосом, який підтримує ваш сервер. Kokoro-FastAPI використовує назви на кшталт af_bella; openedai-speech часто використовує назви на кшталт nova або echo.

Повні приклади URL

Kokoro-FastAPI:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8880/v1/audio/speech&voiceopenai=af_bella&openaispeed=1.1

openedai-speech:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova

kokoro-web:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:3000/api/v1/audio/speech&voiceopenai=af_bella

Додаткові параметри TTS

Вони працюють із будь-яким постачальником TTS, зокрема локальними серверами:

Параметр Приклад Опис
simpletts &simpletts Пропускати «says» — читати лише повідомлення
simpletts2 &simpletts2 Повністю пропускати імена користувачів
volume &volume=0.8 Рівень гучності (0,0–1,0)
skipmessages &skipmessages=3 Читати лише кожне третє повідомлення
ttscommand &ttscommand=!say Читати лише повідомлення, що починаються з !say
readevents &readevents Також читати підписки, донати тощо.
ttsquick &ttsquick=100 Навмисно обрізає озвучення після цієї кількості символів. Приберіть параметр, якщо повідомлення обриваються.
API-ключ не потрібен. За використання локального сервера (URL не на openai.com) Social Stream Ninja надсилає запит без заголовка Authorization. Налаштовувати ключ не потрібно.

Вбудовані браузерні варіанти, які варто підтримувати

SSN уже підтримує системний/браузерний speechSynthesis, вбудовані Kokoro, Piper, Kitten та eSpeak. Найкориснішими майбутніми доповненнями в браузері були б вибір пристрою виведення звуку там, де setSinkId доступний, більше голосів Piper і окремий шлях поступового потокового відтворення для серверів, здатних передавати аудіофрагменти потоком.

Передавання звуку в OBS

Спосіб захоплення звуку TTS в OBS залежить від того, як ви запускаєте Social Stream Ninja.

Спосіб 1 — браузерне джерело OBS Рекомендовано

Це найпростіший спосіб, який працює для усіх постачальників TTS (вбудований і власний сервер).

1
В OBS додайте нове Джерело браузера (Browser Source)
2
Установіть URL на свій dock.html URL із параметрами TTS
3
Перевірте «Керувати звуком через OBS» у налаштуваннях браузерного джерела
4
Натисніть OK— звук TTS тепер з’явиться як джерело звуку OBS, яке можна регулювати або маршрутизувати
5
Натисніть браузерне джерело один раз у попередньому перегляді, щоб дозволити автоматичне відтворення звуку браузера
Чому це працює: Вбудований TTS і TTS власного сервера відтворюють звук через аудіоконтекст браузера, а не синтез мовлення ОС. OBS може захоплювати звук браузера безпосередньо, коли ввімкнено «Control audio via OBS».

Спосіб 2 — настільний застосунок SSN + звук робочого столу

Якщо ви використовуєте окремий настільний застосунок Social Stream Ninja, а не браузерне джерело OBS:

1
Звук TTS із застосунку відтворюється через системні динаміки/навушники
2
В OBS додайте Захоплення вхідного аудіопотоку або Захоплення звуку робочого столу джерело
3
Якщо потрібно відокремити TTS від іншого звуку робочого столу, використовуйте віртуальний аудіокабель:
  • Windows: VB-Audio Virtual Cable (безкоштовно)
  • Установіть CABLE Input як вихід застосунку SSN у налаштуваннях звуку Windows
  • Захоплення CABLE Output в OBS через захоплення вхідного аудіопотоку

Посилання щодо маршрутизації звуку у Windows

Маршрутизація окремого застосунку у Windows 10

1
Відкрити Sound Settings > App volume and device preferences.
2
Знайдіть браузер або застосунок SSN у списку застосунків.
3
Установіть Output на CABLE Input (VB-Audio Virtual Cable).
4
В OBS додайте Захоплення вхідного аудіопотоку і виберіть CABLE Output.

Маршрутизація окремого застосунку у Windows 11

1
Відкрити Settings > System > Sound > Volume Mixer.
2
Знайдіть браузер або застосунок SSN.
3
Установіть Output device на CABLE Input (VB-Audio Virtual Cable).
4
В OBS додайте Захоплення вхідного аудіопотоку і виберіть CABLE Output.

Програма Audio Router

Audio Router може спрямувати окремий застосунок на віртуальний кабель, але це старіша програма. Віддавайте перевагу маршрутизації окремого застосунку у Windows, коли вона працює.

1
Установіть Audio Router.
2
Спрямуйте браузер або застосунок SSN на CABLE Input.
3
В OBS захоплюйте CABLE Output.

Розширена маршрутизація Voicemeeter

Voicemeeter найкраще підходить, коли потрібно чути TTS локально, направляти його в OBS і тримати окремо від музики/звуку гри.

1
Установіть Voicemeeter і зробіть його виходом Windows за замовчуванням.
2
Установіть Hardware Out на свої динаміки/навушники.
3
Спрямуйте віртуальний вихід в OBS як джерело захоплення вхідного аудіопотоку.
Системний TTS (?speech=en-US без постачальника) залежить від голосів, які надає браузер. OBS може не надавати голосів або показувати голоси, звук яких неможливо захопити. Перевіряйте мовлення й запис OBS окремо. Використовуйте одного з наведених вище постачальників (kokoro, piperтощо).

Таблиця порівняння

Варіант Налаштування Якість Приватний OBS (браузерне джерело) Потрібен GPU Вартість
Вбудований Kokoro Немає ⭐⭐⭐⭐⭐ Так Так Ні (з ним швидше) Безкоштовно
Вбудований Piper Немає ⭐⭐⭐⭐ Так Так Ні Безкоштовно
Вбудований Kitten Немає ⭐⭐⭐ Так Так Ні Безкоштовно
Вбудований eSpeak Немає ⭐⭐ Так Так Ні Безкоштовно
Kokoro-FastAPI Docker ⭐⭐⭐⭐⭐ Так Так Ні (необов’язково) Безкоштовно
openedai-speech Docker ⭐⭐⭐⭐ Так Так Ні Безкоштовно
ElevenLabs API-ключ ⭐⭐⭐⭐⭐ Ні Так Ні Платні тарифи
Системне озвучення Немає ⭐⭐ Так Ні* Ні Безкоштовно

* Для захоплення системного TTS в OBS потрібна маршрутизація через віртуальний аудіокабель.

Усунення несправностей

Контрольний список усунення несправностей локального TTS у вигляді знімка екрана
Коли TTS працює в одному місці, але не працює в іншому, перевіряйте комп’ютер, кінцеву точку, голос, дозвіл браузера та захоплення звуку OBS саме в такому порядку.

Перевірка в застосунку SSN працює, але в OBS немає звуку

Перевірка в застосунку доводить лише те, що застосунок може зв’язатися із сервером. Браузерне джерело OBS усе одно має дістатися кінцевої точки та відтворити звук.

Читається лише перша літера або кілька перших слів

Локальний сервер не відповідає

CORS або локальну мережу заблоковано

Якщо браузер повідомляє, що запит заблоковано через CORS, доступ до локальної чи приватної мережі або failed fetch, сервер TTS може взагалі не отримати запит.

Неправильний голос або голос не знайдено

Звук відтворюється, але OBS його не захоплює

Образ Docker не знайдено

Теги образів Docker можуть змінюватися. Якщо команда з цього посібника перестала працювати, перевірте поточний тег на сторінці проєкту:

Інші варіанти TTS: Про хмарний преміальний TTS (ElevenLabs, Google Cloud, Speechify) та повний довідник параметрів URL див. Посібник із голосів TTS.