Mi serve?
“Locale” indica una di queste due cose: una voce integrata in SSN che funziona nel browser, oppure un server vocale che esegui tu stesso.
| Voglio… | Fai così |
|---|---|
| Voci gratuite senza installare nulla | Usa: voci integrate. La maggior parte delle persone si ferma qui. |
| Usare un server vocale che ho già in esecuzione | Collega un server. |
| Una voce clonata | Consulta clonazione vocale. |
| Fish Audio in OBS | Consulta Configurazione Fish Audio. |
| Voci a pagamento nel cloud | Consulta Riferimento TTS. |
Voci integrate (nulla da installare)
Funzionano all'interno di SSN nel browser. Non servono server, Docker o chiavi API.
| Voce | Suono | Carico del computer | Valore del link |
|---|---|---|---|
| Kokoro | Eccellente | Medio. Più veloce con una GPU. | ttsprovider=kokoro |
| Piper | Molto buona | Basso. Solo CPU. | ttsprovider=piper |
| Kitten | Buona | Molto basso. Solo CPU. | ttsprovider=kitten |
| eSpeak-NG | Robotica | Minimo. Solo CPU. | ttsprovider=espeak |
Configuralo in 4 passaggi
- Aggiungi
&speech=en-US&ttsprovider=kokoroal tuodock.html(link). (Oppurepiper,kitten,espeak.) - Aggiungi quel link a OBS come Sorgente browser. È quella pagina che produce l'audio.
- Nelle proprietà, attiva Controlla l'audio tramite OBS.
- Invia un breve messaggio di prova in chat, ad esempio
Testing local TTS.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro
Voci, velocità e altre lingue: impostazioni del fornitore. Preferisci fare clic? Usa la guida alla configurazione.
Collega il tuo server TTS
Un server offre più voci, clonazione o una voce riutilizzabile fra strumenti. SSN comunica con esso come con un server vocale Compatibile con OpenAI . Non serve una chiave API.
- Avvia il tuo server. Kokoro-FastAPI è la soluzione più semplice.
- In SSN, apri l'elenco dei fornitori TTS e scegli Endpoint TTS personalizzato / locale.
- In Endpoint API personalizzato/locale, inserisci l'indirizzo del server, come
http://127.0.0.1:8880/v1/audio/speech. - Lascia vuota la chiave API.
- Scegli una voce riconosciuta dal tuo server:
af_bellaper Kokoro,novaper openedai-speech. - Copia il link in OBS e invia un messaggio di prova.
| Server | Modello | GPU | Disco | Porta |
|---|---|---|---|---|
| Kokoro-FastAPI (consigliato) | Kokoro 82M | Facoltativo | ~2 GB | 8880 |
| openedai-speech (Piper) | Piper | Solo CPU | <1 GB | 8000 |
| kokoro-web | Kokoro 82M | Facoltativo | ~2 GB | 3000 |
Richiedono Docker Desktop installato e in esecuzione. È gratuito per uso personale.
La regola di localhost
Questo è l'errore più comune.
localhost e 127.0.0.1 indicano sempre “questo stesso computer”. Se OBS è su un PC e il server vocale su un altro, 127.0.0.1 in OBS indica il PC su cui si trova OBS.
| La tua configurazione | Usa questo indirizzo |
|---|---|
| OBS e il server sullo stesso PC | http://127.0.0.1:8880/v1/audio/speech |
| Server su un altro PC di casa | http://192.168.x.x:8880/v1/audio/speech, con l'IP locale di quel PC |
| Il test nell'app SSN funziona, ma OBS è muto | OBS ha bisogno di un indirizzo raggiungibile dal proprio computer. Il test nell'app non dimostra che OBS possa raggiungere il server. |
Controlla anche che il firewall consenta la porta e che Docker l'abbia pubblicata (-p 8880:8880).
Kokoro-FastAPI
Kokoro-FastAPI esegue Kokoro come server locale. Funziona su CPU; non serve una GPU.
- Apri un terminale (Prompt dei comandi, PowerShell o Terminale) ed esegui una di queste opzioni:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
GPU NVIDIA (più veloce):
docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
La prima esecuzione scarica circa 1,5–2 GB, una sola volta. - Apri
http://localhost:8880/web/. Dovrebbe apparire una pagina per provare le voci (oltre 67 disponibili). - Usa questo link (cambia l'indirizzo se il server è su un altro PC):
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella
af_bella, af_sarah, am_adam oppure bf_emma. I nomi OpenAI come nova oppure alloy potrebbero non funzionare.Avvialo automaticamente con Docker:
docker run -d --restart unless-stopped -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2
openedai-speech (Piper e XTTS-v2)
Opzione A: server Piper leggero (CPU)
Meno di 1 GB. Nessuna clonazione vocale.
docker run -d --restart unless-stopped -p 8000:8000 ghcr.io/matatonic/openedai-speech-min
Voci: alloy, echo, fable, onyx, nova, shimmer.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova
Esecuzione dal codice sorgente su Windows (errori HTTP 500)
Aggiungi la cartella Scripts del suo ambiente virtuale a PATH prima. Altrimenti non riesce a trovare 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
Opzione B: clonazione vocale con XTTS-v2 (GPU)
Richiede il server completo, non openedai-speech-min. Prevedi circa 4 GB di memoria GPU. La CPU funziona, ma è lenta.
Configura XTTS-v2 in 4 passaggi
- Scarica il server e avvialo:
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, usacp sample.env speech.env. Docker richiede accesso alla GPU. Il modello si scarica al primo utilizzo. - Crea una registrazione di riferimento pulita di una voce che hai il permesso di usare. Mono, 22050 Hz, 6–30 secondi:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
- In
config/voice_to_speaker.yaml, aggiungilo nella sezione esistentetts-1-hd(mantieni le voci già presenti):tts-1-hd: me: model: xtts speaker: voices/me.wav language: enModificamecon il nome che SSN invierà. - Esegui
docker compose restart, poi usa: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 è obbligatorio. Senza questo parametro SSN invia tts-1, e il server usa Piper al suo posto. voiceopenai deve corrispondere al nome della tua voce nel file YAML.Bloccato dal browser? Esegui il bridge e cambia solo openaiendpoint a http://127.0.0.1:8124/v1/audio/speech.
Il bridge TTS locale
Un piccolo helper SSN. Riceve la richiesta SSN, la passa al server vocale e restituisce l'audio in una forma accettata dai browser. Richiede Node.js.
http://127.0.0.1:8124/v1/audio/speech, anche se il server vocale è su un altro PC.
- Indica al bridge dove si trova il tuo server. PowerShell:
$env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech"
Il server è su un altro PC? Usa il suo IP locale, ad esempiohttp://192.168.x.x:8880/v1/audio/speech. - Nella cartella SSN, esegui
node scripts/local-tts-bridge.cjs. Lascialo in esecuzione. - Collega SSN al bridge:
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella
macOS/Linux, in una sola riga: SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" node scripts/local-tts-bridge.cjs. Nella cartella local-tts-bridge , node server.cjs fa la stessa cosa. Cambia la porta con SSN_TTS_BRIDGE_PORT=8125. Tutte le opzioni: README del bridge.
Modalità GPT-SoVITS
GPT-SoVITS usa la propria struttura JSON per /tts . Il bridge adatta le richieste a questo formato.
$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" node scripts/local-tts-bridge.cjs --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à server F5-TTS
Alcuni adattatori F5-TTS usano /synthesize_speech/?text=...&voice=.... Il bridge adatta le richieste.
$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/" node scripts/local-tts-bridge.cjs --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
Clonazione vocale
La clonazione non è un'impostazione SSN, ma una funzione di alcuni server vocali. SSN invia il testo della chat; il server sceglie la voce clonata.
- Registra un campione pulito di una sola persona che parla, di solito di 3–30 secondi, con poco rumore di fondo.
- Alcuni server richiedono anche le parole esatte pronunciate nella registrazione.
- Il server trasforma la registrazione in un profilo vocale.
- SSN invia il testo della chat con
ttsprovider=customtts. - Il server restituisce l'audio (di solito WAV o MP3) e SSN lo riproduce.
Con 6 GB di memoria GPU o meno, inizia con modelli piccoli su server compatibili con OpenAI. Anche i modelli più grandi funzionano se ospitati altrove.
| Opzione | Clona da | Bastano 6 GB di memoria GPU? | Come connettersi |
|---|---|---|---|
| XTTS-v2 / openedai-speech | Breve registrazione WAV | Sì, circa 4 GB | Diretto, /v1/audio/speech. Il progetto è archiviato. |
| chatterbox-tts-api / Chatterbox-TTS-Server | Registrazione di riferimento | Probabilmente con Turbo o segmenti brevi | Diretto o tramite bridge. La GPU è più fluida della CPU. La configurazione varia per fork. |
| Qwen3-TTS (0.6B / 1.7B) | Clip di 3 secondi | Probabilmente (0.6B Base) | Richiede un adattatore compatibile con OpenAI. |
| GPT-SoVITS | 5 secondi; meglio con 1 minuto | Probabilmente con fp16 o un'installazione leggera | Bridge --mode gptsovits. |
| F5-TTS | Clip e trascrizione | Forse | Un adattatore o il bridge --mode f5 con F5-TTS_server. |
| MisoTTS 8B | Audio di riferimento | No; consigliati 24 GB | Solo hosting remoto. Il repository non include un endpoint REST locale. |
Kokoro integrato e Kokoro-FastAPI non clonano voci.
Cosa è stato provato con SSN
Verificato con dock.html e featured.html:
- openedai-speech (Piper): voce reale su CPU, diretta e tramite bridge.
- Chatterbox-TTS-Server: voce reale su CPU con
Emily.wav, direttamente e tramite il bridge. - chatterbox-tts-api: formato richiesta testato, diretto e tramite bridge.
- GPT-SoVITS e F5-TTS_server: solo tramite le modalità del bridge.
- F5-TTS ufficiale e Qwen3-TTS: richiedono prima un adattatore (solo CLI, Gradio o libreria).
Quale computer mi serve?
Sono indicazioni di partenza, non garanzie. Le dimensioni del modello, la lunghezza del testo e le altre app influiscono sull'uso della memoria.
| Opzione | Minimo | Comodo |
|---|---|---|
| Sintesi vocale di sistema / eSpeak | Qualsiasi PC | Qualsiasi PC |
| Kitten integrato | CPU di fascia bassa, 4 GB di RAM | CPU da portatile, 8 GB di RAM |
| Piper integrato | CPU moderna, 4–8 GB di RAM | CPU moderna, 8 GB di RAM |
| Kokoro integrato | CPU moderna, 8 GB di RAM | GPU con WebGPU o CPU veloce, 8–16 GB di RAM |
| Kokoro-FastAPI | CPU, 8 GB di RAM | GPU NVIDIA facoltativa, 8–16 GB di RAM |
| openedai-speech Piper | CPU, 4–8 GB di RAM | CPU, 8 GB di RAM |
| openedai-speech XTTS | GPU NVIDIA da circa 4 GB, 8–16 GB di RAM | GPU NVIDIA da almeno 6 GB, 16 GB di RAM |
| Chatterbox | CPU in alcune versioni, lenta | GPU NVIDIA da almeno 6 GB, 16 GB di RAM |
| GPT-SoVITS / F5-TTS / Qwen3-TTS | CPU per test, lenta | GPU NVIDIA da almeno 6 GB, 16 GB di RAM |
| MisoTTS 8B | Non con 6 GB | GPU da 24 GB o host remoto |
Porta l'audio in OBS
Sorgente browser di OBS (consigliata)
Funziona con le voci integrate e con il tuo server.
- Aggiungi un Sorgente browser con il tuo link
dock.htmlTTS. - Attiva Controlla l'audio tramite OBS.
- Fai clic su OK. Il TTS ora appare nel mixer OBS.
App desktop SSN
L'app desktop usa gli stessi parametri del link. L'audio però viene riprodotto dall'app, non da OBS. Acquisiscilo con Audio desktop oppure Acquisizione ingresso audio. Per separare il TTS dagli altri suoni, invia l'app a un cavo virtuale: passaggi per instradare l'audio.
Altri dettagli sull'app desktop
Le finestre dell'app sono meno rigide di Chrome sui permessi del browser (CORS). Il bridge resta la scelta più sicura per server che rifiutano richieste dal browser. Per Kokoro integrato, l'app può usare il proprio percorso ninjafy.tts invece di caricare il modello nel browser.
&speech=en-US senza fornitore) dipende dalle voci disponibili in OBS. Spesso non ce ne sono, oppure non producono audio acquisibile. Usa uno dei fornitori indicati sopra.Confronto
| Opzione | Configurazione | Qualità | Privato | Funziona in OBS | Costo |
|---|---|---|---|---|---|
| Kokoro integrato | Nessuno | 5/5 | Sì | Sì | Gratuito |
| Piper integrato | Nessuno | 4/5 | Sì | Sì | Gratuito |
| Kitten integrato | Nessuno | 3/5 | Sì | Sì | Gratuito |
| eSpeak integrato | Nessuno | 2/5 | Sì | Sì | Gratuito |
| Kokoro-FastAPI | Docker | 5/5 | Sì | Sì | Gratuito |
| openedai-speech | Docker | 4/5 | Sì | Sì | Gratuito |
| ElevenLabs | Chiave API | 5/5 | No | Sì | Piani a pagamento |
| TTS di sistema | Nessuno | 2/5 | Sì | Richiede l'instradamento dell'audio | Gratuito |
Risolvere i problemi
| Problema | Prova così |
|---|---|
| Il test dell'app funziona, ma OBS è silenzioso | OBS deve poter raggiungere il server direttamente. Il server è su un altro PC? Sostituisci 127.0.0.1 con il suo IP locale. Seleziona Controlla l'audio tramite OBS. Ancora bloccato? Esegui il bridge sul PC OBS. |
| Vengono lette solo la prima lettera o le prime parole | Rimuovi ttsquick dal link di OBS (ad esempio &ttsquick=14) e aggiorna. Durante i test, rimuovi anche typewriter= per escludere problemi di temporizzazione. |
| Il server non risponde | Verifica che Docker e il container siano attivi. Sul PC server, apri http://127.0.0.1:8880/web/ (Kokoro-FastAPI, o la porta del server). Dal PC OBS, apri http://SERVER_LAN_IP:8880/web/. Se fallisce, anche OBS non può raggiungerlo. Controlla il firewall del server. |
| “Blocked by CORS”, “private network” o “failed fetch” | Il browser ha bloccato la richiesta prima che arrivasse al server. Esegui node scripts/local-tts-bridge.cjs sul PC di OBS e usa http://127.0.0.1:8124/v1/audio/speech. La pagina ospitata del dock beta rischia maggiormente il blocco; il bridge o una finestra locale dell'app è più semplice. |
| Voce errata o non trovata | Kokoro-FastAPI: af_bella, af_sarah, am_adam, o una dalla sua pagina web. openedai-speech: nova, echo, alloy. Alcuni server distinguono maiuscole e minuscole. |
| L'audio viene riprodotto, ma OBS non lo acquisisce | Attiva Controlla l'audio tramite OBS. Osserva il misuratore del mixer OBS durante il test. Assicurati di impostare &ttsprovider=; il TTS di sistema può richiedere audio desktop o un cavo virtuale. |
| Immagine Docker non trovata | I tag delle immagini cambiano. Controlla il tag attuale su Kokoro-FastAPI oppure openedai-speech. |
Per chi sviluppa server
Come SSN comunica con un server personalizzato. Ti serve solo se ne stai sviluppando uno o risolvendo i problemi.
chat text -> SSN -> your endpoint (or the bridge) -> TTS server -> audio -> SSN plays it
Cosa invia SSN
Con ttsprovider=customtts, localtts oppure openai, SSN invia un POST JSON:
POST /v1/audio/speech
{
"model": "tts-1",
"input": "Chat message text",
"voice": "af_bella",
"response_format": "mp3",
"speed": 1.0
}
Senza una chiave API configurata, SSN non invia l'header Authorization.
Cosa può riprodurre SSN
| Risposta | Funziona? | Note |
|---|---|---|
| File audio | Sì | La migliore. audio/mpeg, audio/wav, audio/ogg, audio/aac, o qualsiasi tipo riproducibile dal browser. |
| JSON con un URL audio | Sì | Controlli url, audio_url, output_url, data.url, e il primo elemento di data[] . |
| JSON con audio base64 | Sì | Controlli audio, audio_data, audioContent, b64_json, campi annidati come data e URL dati. |
| PCM grezzo | Solo se incapsulato | Invialo come file WAV o WAV in base64. |
Formati: mp3 occupa poco spazio ed è ampiamente supportato. wav è adatto ai server di clonazione e ai test del bridge. Usa opus solo se sia il server sia il browser lo supportano.
La riproduzione in streaming non è ancora disponibile. SSN attende la risposta completa, poi la riproduce. Mantieni brevi i messaggi della chat.
Parametri del link per il tuo server
| Impostazione | Esempio | Cosa fa |
|---|---|---|
ttsprovider | customtts | Usa il tuo server. (openai funziona anche.) |
openaiendpoint | http://localhost:8880/v1/audio/speech | L'indirizzo del tuo server. Imposta la porta corrispondente. |
speech | en-US | Attiva il TTS in inglese. |
voiceopenai | af_bella | Nome della voce. Dipende dal server. |
openaimodel | tts-1-hd | Nome del modello. Predefinito: tts-1. |
openaiformat | mp3 | mp3, wav, opus o flac. |
openaispeed | 1.0 | Velocità del parlato (0.5–2.0). |
Accettato anche: customttsendpoint, localttsendpoint, customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, localttsformat. Le opzioni di lettura come simpletts, skipmessages e ttsquick funzionano con qualsiasi fornitore: tutti i parametri del link.
Link di esempio:
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