Voltar
#tts#kokoro#orpheus#vps#ia-local#n8n#api#open-source#fastapi

TTS Open Source na VPS: Kokoro e Orpheus com HTTP API

Como rodar Kokoro TTS e Orpheus TTS em uma VPS simples e fazer requisicoes HTTP direto do N8N

por Caio Explica
👋

Preparei isso pra você, @kimnegreiros!

Espero que esse conteúdo te ajude, Kim! Se tiver dúvidas, me chama no X.

Ver tweet original
0:00
0:00

Ouça a narração completa

Fala, Kim! 🎖️ Boa pergunta — sim, da pra rodar esses modelos em uma VPS simples e fazer requisicoes HTTP normal. Vou te mostrar o setup completo pra cada um deles.

Resposta direta: Kokoro TTS roda em qualquer VPS com 4GB de RAM, sem GPU. Orpheus precisa de GPU com pelo menos 8GB de VRAM (ou CPU lento). Os dois expoe HTTP API simples.

Kokoro TTS: O mais facil de rodar

Kokoro TTS e o modelo mais pratico pra VPS. E open source, licenca MIT, e foi feito justamente pra ser leve e rapido.

Caracteristicas:

  • Modelo de ~80MB (versao base)
  • Roda 100% em CPU — sem precisar de GPU
  • Velocidade acima do realtime (gera audio mais rapido do que toca)
  • Vozes em ingles, portugues e outros idiomas
  • API HTTP simples via FastAPI

VPS minima pra rodar sem problemas:

  • 2 vCPUs
  • 4GB RAM
  • Ubuntu 22.04

Setup do Kokoro TTS na VPS (passo a passo)

  • **Instalar dependencias:** `sudo apt update && sudo apt install -y python3-pip python3-venv git`
  • **Criar ambiente virtual:** `python3 -m venv tts-env && source tts-env/bin/activate`
  • **Instalar Kokoro:** `pip install kokoro-onnx soundfile fastapi uvicorn`
  • **Criar o arquivo de API (server.py)** — ver proximo bloco
  • **Iniciar o servidor:** `uvicorn server:app --host 0.0.0.0 --port 8000`
  • **Testar:** `curl -X POST http://SEU-IP:8000/tts -H 'Content-Type: application/json' -d '{"text":"ola mundo"}'`

Codigo da API (server.py)

Salva esse arquivo como server.py na sua VPS:

`python

from fastapi import FastAPI

from fastapi.responses import StreamingResponse

from pydantic import BaseModel

import io

from kokoro_onnx import Kokoro

import soundfile as sf

import numpy as np

app = FastAPI()

kokoro = Kokoro('kokoro-v0_19.onnx', 'voices.json')

class TTSRequest(BaseModel):

text: str

voice: str = 'af_bella'

speed: float = 1.0

@app.post('/tts')

async def generate_tts(req: TTSRequest):

samples, sample_rate = kokoro.create(

req.text,

voice=req.voice,

speed=req.speed,

lang='en-us'

)

buf = io.BytesIO()

sf.write(buf, samples, sample_rate, format='WAV')

buf.seek(0)

return StreamingResponse(buf, media_type='audio/wav')

@app.get('/health')

async def health():

return {'status': 'ok'}

`

A API aceita POST em /tts com JSON e devolve o audio WAV direto. Simples assim.

Usando no N8N via HTTP Request

Com a API rodando na VPS, no N8N e so usar o node HTTP Request:

  • Method: POST
  • URL: http://SEU-IP:8000/tts
  • Body Type: JSON
  • Body: { "text": "{{ $json.text }}", "voice": "af_bella", "speed": 1.0 }
  • Response Format: Binary (para receber o audio)

O retorno e o arquivo WAV diretamente. Voce pode usar esse audio no fluxo do N8N, salvar em storage, enviar via WhatsApp, ou o que precisar.

Para PTbr: existem vozes em portugues no Kokoro, ou voce usa o modelo base em ingles e ajusta o texto transliterado.

Docker: Jeito mais limpo de rodar

Se preferir evitar instalar dependencias direto na VPS, tem imagens Docker prontas:

`bash

# Kokoro com API (imagem da comunidade)

docker run -d \

--name kokoro-tts \

-p 8880:8880 \

ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

# Testar

curl -X POST http://localhost:8880/v1/audio/speech \

-H 'Content-Type: application/json' \

-d '{"model":"kokoro","input":"Ola mundo!","voice":"af_bella"}' \

--output audio.mp3

`

Essa imagem expoe API compativel com OpenAI (/v1/audio/speech), o que facilita integracao com ferramentas que ja suportam o padrao OpenAI TTS.

Dica: use a flag --restart unless-stopped no Docker para que o container suba automaticamente quando a VPS reiniciar. `docker run -d --restart unless-stopped --name kokoro-tts ...`

Orpheus TTS: Qualidade profissional, mais exigente

Orpheus TTS e baseado em LLM (Llama 3B) e gera vozes com qualidade muito superior, incluindo emocoes e entonacoes naturais. A contrapartida e o hardware necessario.

Requisitos reais:

  • GPU recomendada: 8GB de VRAM (ex: RTX 3070, RTX 4060)
  • CPU-only: possivel, mas lento (10-30x mais devagar que realtime)
  • RAM: minimo 16GB

Setup com Ollama (forma mais simples):

`bash

# Instalar Ollama

curl -fsSL https://ollama.com/install.sh | sh

# Baixar o modelo Orpheus

ollama pull hugging-quants/orpheus-3b-0.1-ft-q4_k_m

# Subir servidor

ollama serve

`

Para servir via HTTP API, voce cria um wrapper FastAPI que chama o Ollama internamente e converte o output em audio.

Orpheus TTS: API com wrapper FastAPI

Com Ollama rodando, cria esse wrapper para expor HTTP limpo:

`python

from fastapi import FastAPI

from fastapi.responses import StreamingResponse

from pydantic import BaseModel

import requests

import io

import soundfile as sf

app = FastAPI()

class TTSRequest(BaseModel):

text: str

voice: str = 'tara'

speed: float = 1.0

ORPHEUS_VOICES = ['tara', 'leah', 'jess', 'leo', 'dan', 'mia', 'zac', 'zoe']

@app.post('/tts')

async def tts(req: TTSRequest):

voice = req.voice if req.voice in ORPHEUS_VOICES else 'tara'

prompt = f'<|audio|>{voice}: {req.text}<|eot_id|>'

resp = requests.post('http://localhost:11434/api/generate', json={

'model': 'hugging-quants/orpheus-3b-0.1-ft-q4_k_m',

'prompt': prompt,

'stream': False

})

# Converter tokens de audio em WAV (simplificado)

audio_tokens = resp.json()['response']

# Processamento de tokens -> audio via snac decoder

# (implementacao completa no repo oficial)

return {'status': 'audio gerado', 'tokens': len(audio_tokens)}

@app.get('/health')

async def health():

return {'status': 'ok', 'model': 'orpheus'}

`

A implementacao completa do decoder SNAC esta nos repos da comunidade no GitHub.

Comparativo: Kokoro vs Orpheus na VPS

  • **Kokoro TTS** — VPS simples (4GB RAM, sem GPU), setup em 5 min, qualidade boa, PT-BR com vozes da comunidade
  • **Orpheus TTS** — GPU recomendada (8GB VRAM), qualidade excepcional com emocoes naturais, mais complexo de configurar
  • **Para N8N sem GPU:** Use Kokoro — e a escolha certa, rapida e economica
  • **Para producao com qualidade maxima:** Orpheus numa VPS com GPU dedicada (ex: Lambda Labs, RunPod, Vast.ai)
  • **Custo Kokoro:** VPS de $5-10/mes ja resolve. Custo Orpheus: precisa de GPU, $30-100/mes dependendo do servico

VPS recomendadas e custo estimado

Para Kokoro TTS (sem GPU):

  • Hostinger VPS 4 ($4.99/mes) — 4 vCPUs, 4GB RAM, 50GB SSD
  • DigitalOcean Droplet Basic — $12/mes com 2GB RAM (suficiente)
  • Hetzner CX22 — 3.29 EUR/mes, excelente custo-beneficio

Para Orpheus TTS (com GPU):

  • RunPod.io — GPU spot price, ~$0.20/h pra RTX 3070
  • Vast.ai — ainda mais barato em alguns momentos
  • Lambda Labs — GPU A10 por $0.75/h, estavel

Para automacoes de N8N rodando 24/7, Kokoro numa VPS de $5-10/mes e a combinacao ideal. Fica ativo o tempo todo, sem custo variavel por chamada.

Compartilhar
🎖️Criado pelo Major • Powered by AI