Guida al TTS con IA locale

Leggi ad alta voce la chat dal vivo con voci IA locali. Inizia dall'opzione senza installazione, poi usa un server locale solo se necessario.

Italiano

Panoramica

Funziona con il testo della chat acquisito, indipendentemente dalla piattaforma. Il provider vocale appartiene al lettore SSN, non a YouTube, Twitch, TikTok o a un altro sito chat. Questi provider IA locali differiscono da TTS di sistema: generano audio della pagina invece di dipendere dalle voci del sistema operativo esposte da OBS. Vedi la breve guida alla configurazione OBS per la differenza tra disponibilità delle voci e acquisizione audio. Confronta i provider, ascolta esempi e guarda le impostazioni.

Social Stream Ninja può leggere ad alta voce i messaggi chat usando la sintesi vocale IA locale. “Locale” può significare due cose: la voce funziona nel browser oppure esegui un piccolo server TTS sul tuo computer.

Ci sono due approcci:

Percorso 2 — Server ospitato autonomamente Docker richiesto

Esegui un server TTS locale sul tuo computer e indirizza Social Stream Ninja verso di esso. Offre più opzioni vocali, clonazione vocale e controllo lato server.

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

Usa il supporto integrato di Social Stream per Endpoint compatibile con OpenAI .

Inizia dal percorso 1. Se vuoi semplicemente far funzionare la sintesi vocale in OBS, prova prima Kokoro o Kitten integrati. Non richiedono Docker, un server o una chiave API. Usa un server ospitato autonomamente solo quando ti servono specificamente una voce del server, la clonazione vocale o un altro modello.

Configurazione rapida

È il percorso più breve per la maggior parte degli streamer:

1
Usa prima il provider integrato. Aggiungi &speech=en-US&ttsprovider=kokoro oppure &speech=en-US&ttsprovider=kitten al tuo dock.html URL.
2
Inserisci quell'URL in OBS come sorgente browser. La sorgente browser OBS è la pagina che produrrà il suono.
3
Attiva l'acquisizione audio OBS. Nelle proprietà della sorgente browser, abilita Controlla l'audio tramite OBS.
4
Invia un breve messaggio chat di test. Usa qualcosa di semplice come Testing local TTS. Attendi il primo download dei modelli se usi Kokoro o Piper.
5
Solo dopo prova un server ospitato autonomamente. Se usi Kokoro-FastAPI, openedai-speech o un altro server Docker, leggi la regola di localhost sotto prima di copiare un URL in OBS.

La regola di localhost / 127.0.0.1

È l'errore più comune con il TTS locale.

localhost e 127.0.0.1 significano sempre “questo stesso computer”. Se OBS è su un computer e Kokoro su un altro, 127.0.0.1 nell'URL OBS punta al computer OBS, non al computer Kokoro.
Diagramma che mostra che localhost indica lo stesso computer, mentre un altro computer richiede un indirizzo IP LAN
Usa 127.0.0.1 solo quando il server TTS è sullo stesso computer della pagina che riproduce l'audio. Se il server è su un altro computer, usa l'indirizzo IP LAN di quel computer.
La tua configurazioneEndpoint da usare
OBS e Kokoro vengono eseguiti sullo stesso computerhttp://127.0.0.1:8880/v1/audio/speech
Kokoro viene eseguito su un altro computer della rete domesticahttp://192.168.x.x:8880/v1/audio/speech, usando l'IP LAN del computer Kokoro
Il pulsante di test dell'app desktop SSN funziona, ma OBS è silenziosoOBS richiede comunque un proprio endpoint funzionante. Il test nell'app non dimostra che OBS possa raggiungere il server.

Su Linux, macOS e Windows, assicurati anche che il firewall consenta la porta e che Docker abbia pubblicato la porta con -p 8880:8880.

Dove fare clic in SSN

Nel popup dell'estensione, apri il selettore del provider TTS e scegli Endpoint TTS personalizzato / locale. Mostra i campi dell'endpoint locale compatibile con OpenAI e il link a questa guida.

Mappa illustrata dei campi TTS locali in Social Stream Ninja
Il campo endpoint è quello importante. Per un server locale, la chiave API può in genere restare vuota. Scegli un nome voce effettivamente supportato dal server.
Informazioni sugli screenshot: la mappa dei campi SSN sopra mostra i campi dell'endpoint locale. Le interfacce dei server di terze parti cambiano in base alla versione del progetto, quindi gli screenshot e i dettagli attuali dell'interfaccia sono collegati dal repository di ciascun progetto vicino al relativo passaggio di configurazione.

Flusso con hosting autonomo

SSN tratta un server TTS locale/ospitato autonomamente come un endpoint vocale compatibile con OpenAI. Il flusso principale è:

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

Struttura della richiesta

Per ttsprovider=customtts, localtts, oppure openai, SSN invia un POST JSON all'endpoint configurato:

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

CORS, pagine ospitate e bridge

CORS è un controllo dei permessi del browser. In parole semplici, il server TTS deve dire al browser: “sì, questa pagina può chiedermi dell'audio”. Se manca quel permesso, la richiesta può essere bloccata prima ancora che Kokoro o un altro server TTS la vedano.

Se il server non consente le richieste del browser, esegui il bridge TTS locale SSN e indirizza SSN a http://127.0.0.1:8124/v1/audio/speech. Per OBS, la configurazione più semplice è eseguire il bridge sullo stesso computer di OBS.

Risposte audio supportate

Risposta Supporto SSN Note
Audio binario Sì Opzione migliore. Restituisci audio/mpeg, audio/wav, audio/ogg, audio/aac, oppure un altro tipo di audio riproducibile dal browser.
JSON con URL audio Sì SSN controlla url, audio_url, output_url, campi annidati come data.url, e il primo elemento di data[] .
JSON con audio base64 Sì SSN controlla audio, audio_data, audioContent, b64_json, campi annidati come data e URL dati.
PCM grezzo Solo se incapsulato Restituisci il PCM come file WAV o WAV base64. Un elemento audio del browser non può riprodurre direttamente byte PCM grezzi in modo affidabile.
Formati consigliati: usa mp3 per file piccoli e ampio supporto dei browser, wav per i server di clonazione locali e i test del bridge, e opus solo quando sia il server sia il browser lo supportano.

Audio in streaming

SSN attualmente non esegue la riproduzione progressiva per gli endpoint TTS personalizzati/locali. Attende il blob della risposta o il payload audio JSON, poi lo riproduce. Alcuni server a monte espongono endpoint streaming, ma il percorso attuale compatibile con OpenAI di SSN carica l'audio prima della riproduzione.

Risultato pratico: mantieni brevi i frammenti TTS della chat. Il supporto streaming richiederebbe un percorso di riproduzione separato con blocchi WAV/MP3 in streaming, MediaSource, WebCodecs o un mixer lato server.

Percorso 1 — TTS integrato (nessuna configurazione)

Questi motori sono inclusi in Social Stream Ninja e non richiedono installazione. Funzionano nel browser usando WebAssembly (WASM) o ONNX Runtime.

Provider Qualità Uso della CPU GPU/WebGPU Parametro URL
Kokoro TTS ⭐⭐⭐⭐⭐ Eccellente Medio Più veloce con GPU ?ttsprovider=kokoro
Piper TTS ⭐⭐⭐⭐ Molto buono Basso Solo CPU ?ttsprovider=piper
Kitten TTS ⭐⭐⭐ Buono Molto basso Solo CPU ?ttsprovider=kitten
eSpeak-NG ⭐⭐ Robotico Minimo Solo CPU ?ttsprovider=espeak

Come attivare

Aggiungi &ttsprovider= e &speech= al tuo Social Stream dock.html URL:

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

Opzioni Kokoro TTS

SSN elenca attualmente 28 voci Kokoro in inglese, tre in spagnolo e tre in portoghese brasiliano. Specificane una con &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
Nota sulla lingua: Seleziona una voce Kokoro corrispondente alla lingua desiderata. Modificare solo il parametro della lingua non cambia la voce selezionata.

Esempio in spagnolo:

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

Esempio in portoghese:

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

Opzioni Piper TTS

Specifica un modello vocale con &pipervoice=:

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

Sono disponibili voci Piper in portoghese e spagnolo:

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

Opzioni Kitten TTS

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

Opzioni 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
Primo caricamento: Kokoro e Piper devono scaricare i file dei modelli al primo utilizzo (~50–200 MB). Avviene automaticamente in background. I caricamenti successivi possono riutilizzare i modelli nella cache, ma l'inizializzazione richiede comunque tempo. OBS ha una cache separata da Chrome/Edge.
Acquisizione OBS: Tutti i provider TTS integrati riproducono l'audio direttamente nel browser. In OBS, aggiungi dock.html come sorgente browser e abilita “Controlla l'audio tramite OBS”— non servono cavi virtuali. Vedi la sezione OBS sotto.

Note su browser e app desktop

L'estensione Chrome, la sorgente browser OBS e l'app desktop autonoma Social Stream Ninja usano tutti gli stessi dock.html parametri URL per la sintesi vocale. La differenza importante è dove viene prodotto il suono.

Interfaccia Comportamento del TTS locale Acquisizione audio
Estensione Chrome / sorgente browser OBS Il fetch nel browser richiede CORS dal server locale, a meno che tu usi il bridge SSN. Usa la sorgente browser OBS con “Controlla l'audio tramite OBS”.
App desktop autonoma Usa le stesse impostazioni del provider. Le finestre con file locali dell'app hanno meno vincoli CORS, ma il bridge resta il percorso più sicuro per i server che rifiutano richieste in stile browser. Acquisisci l'audio desktop/app oppure instrada l'app verso un cavo audio virtuale.
Kokoro integrato nell'app desktop L'app può usare il proprio percorso locale ninjafy.tts per Kokoro invece di affidarsi solo al caricamento del modello nel browser. L'audio viene riprodotto dall'app, quindi usa l'acquisizione audio desktop/app.
Non confondere il test nell'app con OBS. Se premi Test nell'app SSN, il test viene eseguito dall'app. Se copi un dock.html in OBS, è OBS che deve raggiungere il server TTS e riprodurre l'audio.

Percorso 2 — Server TTS ospitato autonomamente

Se vuoi più opzioni vocali, clonazione vocale o un server dedicato da riutilizzare con più strumenti, puoi eseguire un server TTS locale. Social Stream Ninja vi si connette usando la funzione integrata Endpoint TTS compatibile con OpenAI senza bisogno di chiave API per i server locali.

Requisiti: Docker Desktop deve essere installato e in esecuzione. Docker è gratuito per uso personale.

Tre opzioni consigliate:

Server Modello GPU Disco Porta predefinita
Kokoro-FastAPI Consigliato Kokoro 82M Facoltativo ~2 GB 8880
openedai-speech (Piper) Leggero Piper TTS Solo CPU <1 GB 8000
kokoro-web Kokoro 82M Facoltativo ~2 GB 3000

Quale pacchetto è adatto?

Pacchetto Vantaggio principale Compromesso
Kokoro integrato Migliore prima scelta: nessun server, ottima qualità, privato, funziona nel browser e nell'app desktop. Nessuna clonazione vocale.
Kokoro-FastAPI Server compatibile con OpenAI, configurazione Docker semplice, CPU o GPU, molte voci Kokoro. Nessuna vera clonazione vocale; la fusione delle voci e le funzionalità vocali personalizzate dipendono dalla build del server.
openedai-speech Endpoint leggero compatibile con OpenAI; Piper è adatto alla CPU e XTTS aggiunge la clonazione puntando a circa 4 GB di VRAM. Il repository dichiara di essere perlopiù obsoleto, quindi consideralo utile ma senza garanzie per il futuro.
Server Chatterbox Clonazione vocale, opzioni dell'interfaccia web, API compatibili con OpenAI e strumenti per testi lunghi. Il supporto CUDA/GPU è più fluido di quello CPU per alcune build; la configurazione varia in base al fork del server.
GPT-SoVITS Buona clonazione/controllo con brevi riferimenti e supporto delle trascrizioni. Non compatibile con OpenAI per impostazione predefinita; usa la modalità bridge SSN.
F5-TTS Clonazione zero-shot naturale con WAV di riferimento + trascrizione. Il progetto ufficiale non è un semplice endpoint OpenAI; usa un wrapper o la modalità bridge.
Qwen3-TTS Funzioni moderne di clonazione e progettazione vocale, inclusi modelli più piccoli da 0.6B/1.7B. Pensato prima come libreria/demo; richiede un wrapper per SSN.
MisoTTS Generazione vocale avanzata tramite prompt. Non adatto localmente a 6 GB di VRAM; se necessario, usa hosting remoto/personalizzato.

Come funziona la clonazione vocale

La clonazione vocale non è una modalità SSN separata. È una funzionalità di alcuni server TTS locali. SSN invia il testo della chat a un endpoint locale; il server sceglie la voce clonata da un file audio di riferimento salvato, un profilo vocale o la configurazione del bridge.

Flusso tipico

  1. Registra una clip di riferimento pulita, in genere da 3 a 30 secondi di una sola persona con poco rumore di fondo.
  2. Alcuni motori richiedono anche la trascrizione esatta di quella clip di riferimento.
  3. Il server locale converte il riferimento in un prompt del parlante, un embedding o un profilo vocale.
  4. SSN invia il testo della chat dal vivo all'endpoint usando ttsprovider=customtts.
  5. Il server restituisce un file audio riproducibile, di solito WAV o MP3, e SSN lo riproduce nel dock/nella sorgente browser.
Usa solo voci per le quali hai il consenso. La clonazione vocale può sembrare una persona reale, quindi usa solo voci che possiedi, che hai il permesso di usare o per le quali hai una licenza esplicita per questo scopo.
XTTS-v2 è non commerciale per impostazione predefinita. Coqui Public Model License consente solo l'uso non commerciale del modello e dei suoi output. Una diretta monetizzata potrebbe non rientrare in questa condizione, quindi verifica la licenza o ottieni un'autorizzazione separata prima di usare XTTS-v2 commercialmente.

Con 6 GB di VRAM o meno, punta prima su piccoli modelli di clonazione zero-shot e server compatibili con OpenAI. I modelli più grandi possono comunque funzionare tramite lo stesso endpoint SSN se l'utente li ospita altrove.

Opzione Clonazione vocale Compatibile con 6 GB di VRAM Percorso API per SSN
Qwen3-TTS 0.6B Base Audio di riferimento di 3 secondi Probabile Usa un wrapper compatibile con OpenAI, poi ttsprovider=customtts
XTTS-v2 / openedai-speech Voci da brevi riferimenti WAV Sì, circa 4 GB secondo openedai-speech /v1/audio/speech
Chatterbox Turbo / Server Clonazione da audio di riferimento Probabile con Turbo / piccoli blocchi Build server compatibili con OpenAI, oppure il bridge
GPT-SoVITS Zero-shot con 5 secondi, few-shot con 1 minuto Probabile con fp16 / installazione leggera Usa scripts/local-tts-bridge.cjs --mode gptsovits
F5-TTS WAV di riferimento + trascrizione Forse; dipende dalla build e dal vocoder Usa un wrapper compatibile con OpenAI, oppure --mode f5 per i wrapper server F5-TTS
MisoTTS 8B Contesto audio fornito come prompt No; il progetto consiglia 24 GB di VRAM Solo endpoint remoto/personalizzato
Struttura di destinazione migliore per SSN: accettare POST /v1/audio/speech con { model, input, voice, response_format, speed } e restituire un file audio riproducibile. Questo copre OpenAI, Coqui/XTTS, wrapper Kokoro, wrapper Qwen e la maggior parte dei servizi proxy.

Requisiti del computer

Sono punti di partenza pratici, non garanzie assolute. Versione del modello, quantizzazione, lunghezza del testo, immagine Docker e app in background possono cambiare l'uso della memoria.

Opzione Computer minimo pratico Buona destinazione Note
Sintesi vocale di sistema / eSpeak Qualsiasi PC moderno Qualsiasi PC Veloce, qualità bassa, senza clonazione.
Kitten integrato CPU di fascia bassa, 4 GB di RAM CPU moderna per portatili, 8 GB di RAM Piccolo modello ONNX, avvio rapido.
Piper integrato CPU moderna, 4-8 GB di RAM CPU moderna, 8 GB di RAM Buona opzione di voce neurale con poche risorse.
Kokoro integrato CPU moderna, 8 GB di RAM GPU compatibile con WebGPU o CPU veloce, 8-16 GB di RAM Migliore qualità senza configurazione. Il primo caricamento scarica le risorse del modello.
Kokoro-FastAPI Host Docker su CPU, 8 GB di RAM GPU NVIDIA facoltativa, 8-16 GB di RAM Buon server locale quando il caricamento del modello nel browser non è ideale.
openedai-speech Piper CPU, 4-8 GB di RAM CPU, 8 GB di RAM Server leggero compatibile con OpenAI.
openedai-speech XTTS GPU NVIDIA con circa 4 GB di VRAM, 8-16 GB di RAM GPU NVIDIA da almeno 6 GB, 16 GB di RAM Percorso di clonazione vocale; la CPU è possibile ma lenta.
Server Chatterbox La CPU può funzionare per alcune build ma è lenta GPU NVIDIA da almeno 6 GB, 16 GB di RAM Usa una GPU per la clonazione o l'elaborazione di testi lunghi.
GPT-SoVITS / F5-TTS / Qwen3-TTS Solo test su CPU, lento GPU NVIDIA da almeno 6 GB per modelli piccoli/ottimizzati, 16 GB di RAM La scelta del wrapper e la dimensione del modello contano. Prevedi più configurazione.
MisoTTS 8B Non consigliato localmente con 6 GB di VRAM 24 GB di VRAM o host remoto Il repository consiglia GPU con molta VRAM per l'uso interattivo.

Note sui server testati

Queste sono le soluzioni di clonazione vocale ospitate autonomamente controllate per la compatibilità SSN. Il percorso dell'endpoint locale è stato testato con entrambi dock.html e featured.html.

SSN accetta risposte audio binarie dirette, risposte JSON con audio base64 e risposte JSON con URL audio. L'attuale riproduzione personalizzata/locale carica in memoria l'audio restituito prima di riprodurlo; la riproduzione progressiva in streaming non è ancora supportata.

Server Percorso SSN Note
openedai-speech Diretto o tramite bridge Compatibile con OpenAI /v1/audio/speech. La modalità Piper è stata testata con sintesi reale su CPU da dock.html e featured.html, direttamente e tramite il bridge. Se esegui dai sorgenti su Windows, assicurati che la cartella Scripts dell'ambiente virtuale sia in PATH affinché piper.exe e ffmpeg.exe possano essere trovati.
chatterbox-tts-api Diretto o tramite bridge Compatibile con OpenAI /v1/audio/speech. Usa l'audio di riferimento configurato per la clonazione. La struttura API è stata testata direttamente e tramite il bridge.
Chatterbox-TTS-Server Diretto o tramite bridge Endpoint compatibile con OpenAI e interfaccia web. Testato con sintesi reale su CPU usando Emily.wav da dock.html e featured.html, direttamente e tramite il bridge.
GPT-SoVITS Modalità bridge Esegui il bridge SSN con --mode gptsovits; il server di destinazione è /tts, non compatibile con OpenAI.
F5-TTS_server Modalità bridge Esegui il bridge SSN con --mode f5; il server di destinazione usa GET /synthesize_speech/.
F5-TTS ufficiale Richiede wrapper Pensato prima per CLI, Gradio e server socket. Usa un wrapper compatibile con OpenAI oppure la modalità bridge F5 con un wrapper.
Qwen3-TTS Richiede wrapper Pensato prima come libreria e demo Gradio. Buon candidato per un piccolo wrapper compatibile con OpenAI intorno a generate_voice_clone.
MisoTTS Solo remoto/personalizzato La clonazione vocale è supportata, ma il modello 8B non è adatto a 6 GB di VRAM e il repository non ha un endpoint REST locale.

Configurazione Kokoro-FastAPI

Kokoro-FastAPI esegue il modello Kokoro 82M come server locale con API compatibile con OpenAI. Funziona sulla CPU (nessuna GPU richiesta) e offre un'eccellente qualità vocale.

Installa con Docker

Apri un terminale (Prompt dei comandi, PowerShell o Terminale) ed esegui uno dei seguenti comandi:

CPU (funziona su qualsiasi computer):

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

GPU (solo NVIDIA — sintesi più veloce):

docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
Prima esecuzione: Docker scaricherà l'immagine (~1,5–2 GB). Avviene una sola volta. Dopodiché il server si avvia in pochi secondi.

Verifica che sia in esecuzione

Apri il browser e vai a http://localhost:8880/web/— dovresti vedere un'interfaccia web in cui provare le voci.

Voci disponibili

Oltre 67 voci disponibili. Alcune in evidenza:

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)

Esplora e prova tutte le voci su http://localhost:8880/web/ una volta avviato il server.

URL SSN

Se Kokoro-FastAPI è sullo stesso computer di OBS:

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

Se Kokoro-FastAPI è su un altro computer, sostituisci 192.168.x.x con l'indirizzo IP LAN di quel computer:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://192.168.x.x:8880/v1/audio/speech&voiceopenai=af_bella
I nomi delle voci Kokoro sono diversi da quelli delle voci OpenAI. Per Kokoro-FastAPI, usa voci come af_bella, af_sarah, am_adam, oppure bf_emma. Nomi come echo, nova, e alloy sono nomi in stile OpenAI/openedai-speech e potrebbero non funzionare con Kokoro.

Mantieni il server in esecuzione

Per mantenere Kokoro-FastAPI in esecuzione automatica in background, usa il parametro di riavvio di Docker:

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

Ora partirà automaticamente con Docker Desktop a ogni riavvio.

Configurazione openedai-speech (Piper e XTTS-v2)

openedai-speech espone l'endpoint compatibile con OpenAI /v1/audio/speech richiesto da Social Stream. L'immagine piccola esegue Piper sulla CPU; l'immagine completa può eseguire la clonazione vocale XTTS-v2 su una GPU supportata.

Progetto archiviato: openedai-speech è stato archiviato nel gennaio 2026 e si descrive come perlopiù obsoleto. Rimane un utile esempio di compatibilità, ma non è più mantenuto. Mantienilo locale e non esporre la sua porta non autenticata su Internet.

Opzione A: Piper leggero

Usa questa opzione per un server TTS solo CPU sotto 1 GB. Non include XTTS-v2 o clonazione vocale.

Installa con Docker Compose

1
Clona il repository oppure crea una cartella con il seguente docker-compose.min.yml. In alternativa, esegui direttamente i comandi sotto.
2
Esegui l'immagine minima con il solo Piper:
docker run -d --restart unless-stopped \ -p 8000:8000 \ ghcr.io/matatonic/openedai-speech-min

Nota sull'installazione dai sorgenti in Windows

Se esegui openedai-speech da un checkout locale anziché da Docker, aggiungi la cartella degli script del suo ambiente virtuale a PATH prima di avviare il server. In sua assenza, le richieste possono restituire HTTP 500 perché il server non trova piper.exe oppure 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

Voci disponibili

openedai-speech usa nomi vocali in stile OpenAI associati alle voci 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

Opzione B: clonazione vocale XTTS-v2

XTTS-v2 è un modello, non un'API web. Usa il server openedai-speech completo per caricare il modello, selezionare una voce di riferimento salvata, accettare il testo chat da SSN e restituire audio riproducibile. Il server indica un obiettivo pratico di circa 4 GB di VRAM GPU; l'inferenza su CPU è possibile ma lenta.

Non usare openedai-speech-min per XTTS-v2. L'immagine minima include solo Piper. XTTS-v2 richiede l'installazione completa e model=tts-1-hd in ogni richiesta vocale.
1
Clona il server archiviato, crea il file di ambiente e avvia la configurazione Docker Compose completa con GPU abilitata:
git clone https://github.com/matatonic/openedai-speech.git cd openedai-speech Copy-Item sample.env speech.env docker compose up -d

Su macOS o Linux, usa cp sample.env speech.env invece di Copy-Item. Docker deve avere accesso a una GPU supportata. Il modello viene scaricato al primo utilizzo.

2
Prepara una clip di riferimento pulita, per la quale hai il consenso. Un WAV mono a 22050 Hz, tra 6 e 30 secondi, è un buon punto di partenza:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
3
Aggiungi la voce clonata sotto la sezione esistente tts-1-hd in config/voice_to_speaker.yaml:
tts-1-hd: me: model: xtts speaker: voices/me.wav language: en

Mantieni le eventuali voci già elencate sotto tts-1-hd. Modifica me nel nome voce che vuoi far inviare a SSN, e usa il codice lingua XTTS corretto quando necessario.

4
Riavvia il server, poi indirizza a esso il dock SSN o l'overlay in primo piano:
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 è richiesto per XTTS-v2. Se viene omesso, Social Stream invia il suo valore predefinito tts-1, e openedai-speech seleziona invece Piper. Il valore di voiceopenai deve corrispondere al nome della voce clonata in voice_to_speaker.yaml.

Se il browser o OBS blocca la richiesta diretta, esegui il Bridge TTS locale sul computer OBS e mantieni gli stessi parametri di modello e voce mentre cambi openaiendpoint a http://127.0.0.1:8124/v1/audio/speech.

Bridge TTS locale

Il bridge è un piccolo strumento locale di supporto. Accetta la richiesta del browser da SSN, comunica con il server TTS e restituisce l'audio a SSN con intestazioni adatte al browser.

Regola più semplice: esegui il bridge sullo stesso computer di OBS. OBS potrà quindi usare http://127.0.0.1:8124/v1/audio/speech, anche se il vero server TTS è su un altro computer.
Diagramma che mostra OBS mentre chiama il bridge locale e il bridge mentre chiama il server TTS
La sorgente browser OBS comunica con il bridge sul computer OBS. Il bridge può poi chiamare Kokoro-FastAPI, openedai-speech o un altro server.

La cartella iniziale autonoma è local-tts-bridge/; vedi il README del bridge per tutte le opzioni di avvio.

Proxy compatibile con OpenAI

Windows PowerShell, quando il server TTS è su questo stesso computer:

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

Windows PowerShell, quando il server TTS è su un altro computer:

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

Terminale macOS/Linux:

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

Poi indirizza l'URL OBS dock.html verso il bridge:

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

Modalità proxy GPT-SoVITS

GPT-SoVITS usa la propria struttura JSON per /tts , quindi il bridge può tradurre la richiesta compatibile con OpenAI di SSN nel corpo di richiesta 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

Modalità proxy server F5-TTS

Alcuni wrapper server F5-TTS espongono /synthesize_speech/?text=...&voice=... invece di un endpoint compatibile con OpenAI. Il bridge può tradurre la richiesta SSN in quel formato di query.

$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
Endpoint del bridge: http://127.0.0.1:8124/v1/audio/speech. Cambia la porta con SSN_TTS_BRIDGE_PORT=8125 se necessario.

Connessione a Social Stream Ninja

Tutti i server ospitati autonomamente sopra usano lo stesso metodo di connessione: la funzione integrata di Social Stream Endpoint TTS OpenAI con un URL locale personalizzato.

Parametri URL

Parametro Valore Descrizione
ttsprovider customtts oppure openai Usa il percorso TTS compatibile con OpenAI. Usa customtts per endpoint locali/ospitati autonomamente.
openaiendpoint http://localhost:8880/v1/audio/speech URL del tuo server locale (cambia la porta se necessario)
speech en-US Abilita la sintesi vocale in inglese
voiceopenai af_bella Nome della voce (dipende dal server)
openaiformat mp3 Formato audio: mp3, wav, opus, flac
openaispeed 1.0 Velocità di lettura (0.5–2.0)
Alias degli endpoint: customttsendpoint e localttsendpoint funzionano anche. customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, e localttsformat sono alias accettati dei campi in stile OpenAI.
Controlla endpoint e voce prima di cercare problemi audio. openaiendpoint deve essere raggiungibile dalla pagina che riproduce il TTS, e voiceopenai deve essere una voce supportata dal server. Kokoro-FastAPI usa nomi come af_bella; openedai-speech usa spesso nomi come nova oppure echo.

Esempi di URL completi

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

Altre opzioni TTS

Funzionano con qualsiasi provider TTS, inclusi i server locali:

Parametro Esempio Descrizione
simpletts &simpletts Salta “dice” — legge solo il messaggio
simpletts2 &simpletts2 Salta completamente i nomi utente
volume &volume=0.8 Livello del volume (0.0–1.0)
skipmessages &skipmessages=3 Leggi solo un messaggio ogni 3
ttscommand &ttscommand=!say Leggi solo i messaggi che iniziano con !say
readevents &readevents Leggi anche abbonamenti, donazioni, ecc.
ttsquick &ttsquick=100 Interrompe intenzionalmente la lettura dopo questo numero di caratteri. Rimuovilo se i messaggi vengono troncati.
Non serve una chiave API. Quando usi un server locale (URL diverso da openai.com), Social Stream Ninja invia la richiesta senza intestazione Authorization. Non devi configurare una chiave.

Opzioni integrate nel browser da supportare

SSN supporta già la funzionalità del sistema operativo/browser speechSynthesis, Kokoro integrato, Piper, Kitten ed eSpeak. Le aggiunte future più utili lato browser sarebbero un selettore del dispositivo di uscita audio dove setSinkId è disponibile, più scelte di voci Piper e un percorso dedicato di riproduzione progressiva in streaming per i server che possono trasmettere blocchi audio.

Portare l'audio in OBS

Il modo di acquisire l'audio TTS in OBS dipende da come esegui Social Stream Ninja.

Metodo 1 — Sorgente browser OBS Consigliato

È il metodo più semplice e funziona per tutti i provider TTS (integrato e server ospitato autonomamente).

1
In OBS, aggiungi una nuova Sorgente browser
2
Imposta l'URL sul tuo dock.html URL con parametri TTS
3
Controlla “Controlla l'audio tramite OBS” nelle impostazioni della sorgente browser
4
Fai clic su OK— l'audio TTS ora comparirà come sorgente audio OBS che puoi regolare o instradare
5
Fai clic una volta sulla sorgente browser nell'anteprima per consentire la riproduzione automatica dell'audio del browser
Perché funziona: La sintesi vocale integrata e quella su server ospitati autonomamente riproducono entrambe l'audio tramite il contesto audio del browser (non la sintesi vocale del sistema operativo). OBS può acquisire direttamente l'audio del browser quando è selezionato “Controlla l'audio tramite OBS”.

Metodo 2 — App desktop SSN + audio desktop

Se usi l'app desktop autonoma Social Stream Ninja (non una sorgente browser OBS):

1
L'audio TTS viene riprodotto dall'app tramite gli altoparlanti/le cuffie del sistema
2
In OBS, aggiungi una sorgente di tipo Acquisizione ingresso audio oppure Acquisizione audio desktop .
3
Se vuoi isolare la sintesi vocale dagli altri suoni del desktop, usa un cavo audio virtuale:
  • Windows: VB-Audio Virtual Cable (gratuito)
  • Imposta CABLE Input come uscita per l'app SSN nelle impostazioni audio di Windows
  • Acquisizione CABLE Output in OBS con Acquisizione ingresso audio

Link sull'instradamento audio Windows

Instradamento per app in Windows 10

1
Apri Impostazioni audio > Volume app e preferenze dispositivo.
2
Trova il browser o l'app SSN nell'elenco delle app.
3
Imposta Output su CABLE Input (VB-Audio Virtual Cable).
4
In OBS, aggiungi Acquisizione ingresso audio e scegli CABLE Output.

Instradamento per app in Windows 11

1
Apri Impostazioni > Sistema > Audio > Mixer volume.
2
Trova il browser o l'app SSN.
3
Imposta il dispositivo di uscita su CABLE Input (VB-Audio Virtual Cable).
4
In OBS, aggiungi Acquisizione ingresso audio e scegli CABLE Output.

Software Audio Router

Audio Router può instradare un'app verso un cavo virtuale, ma è un software datato. Preferisci l'instradamento per app di Windows quando funziona.

1
Installa Audio Router.
2
Instrada il browser o l'app SSN verso CABLE Input.
3
In OBS, acquisisci CABLE Output.

Instradamento avanzato con Voicemeeter

Voicemeeter è la scelta migliore quando devi sentire il TTS localmente, instradarlo verso OBS e mantenerlo separato dall'audio di musica/giochi.

1
Installa Voicemeeter e impostalo come uscita predefinita di Windows.
2
Imposta Hardware Out sui tuoi altoparlanti/cuffie.
3
Instrada l'uscita virtuale in OBS come sorgente Acquisizione ingresso audio.
Sintesi vocale di sistema (?speech=en-US senza un provider) dipende dalle voci esposte dal browser. OBS potrebbe non esporre voci, oppure elencarle senza produrre audio acquisibile. Prova separatamente la voce e la registrazione OBS. Usa uno dei provider sopra (kokoro, piper, ecc.).

Tabella di confronto

Opzione Configurazione Qualità Privato OBS (sorgente browser) GPU richiesta Costo
Kokoro integrato Nessuno ⭐⭐⭐⭐⭐ Sì Sì No (più veloce con) Gratuito
Piper integrato Nessuno ⭐⭐⭐⭐ Sì Sì No Gratuito
Kitten integrato Nessuno ⭐⭐⭐ Sì Sì No Gratuito
eSpeak integrato Nessuno ⭐⭐ Sì Sì No Gratuito
Kokoro-FastAPI Docker ⭐⭐⭐⭐⭐ Sì Sì No (facoltativa) Gratuito
openedai-speech Docker ⭐⭐⭐⭐ Sì Sì No Gratuito
ElevenLabs Chiave API ⭐⭐⭐⭐⭐ No Sì No Piani a pagamento
TTS di sistema Nessuno ⭐⭐ Sì No* No Gratuito

* La sintesi vocale di sistema richiede l'instradamento tramite cavo audio virtuale per l'acquisizione in OBS.

Risoluzione dei problemi

Lista illustrata dei controlli per risolvere i problemi del TTS locale
Quando la sintesi vocale funziona in un posto ma non in un altro, controlla computer, endpoint, voce, autorizzazioni del browser e acquisizione audio OBS, in quest'ordine.

Il test nell'app SSN funziona, ma OBS non ha audio

Il test nell'app dimostra solo che l'app può raggiungere il server. La sorgente browser OBS deve comunque raggiungere l'endpoint e riprodurre l'audio.

Vengono lette solo la prima lettera o le prime parole

Il server locale non risponde

CORS o rete locale bloccati

Se il browser dice che la richiesta è stata bloccata da CORS, accesso alla rete locale, accesso alla rete privata o failed fetch, il server TTS potrebbe non ricevere mai la richiesta.

Voce errata o non trovata

L'audio viene riprodotto ma OBS non lo acquisisce

Immagine Docker non trovata

I tag delle immagini Docker possono cambiare. Se un comando di questa guida smette di funzionare, controlla il tag attuale nella pagina del progetto:

Altre opzioni TTS: Per la sintesi vocale cloud premium (ElevenLabs, Google Cloud, Speechify) e il riferimento completo dei parametri URL, vedi la Guida alle voci TTS.