tts_providers/providers_config.json
Rama main · réplica de lectura del repositorio original.
{
"providers": {
"pocket": {
"name": "Pocket TTS",
"provider_id": "pocket",
"cost_per_minute": 0.0,
"quality": "high",
"latency": "very-fast",
"voices": [],
"features": [
"voice-cloning",
"local-processing",
"no-api-key-required",
"reusable-voice-state",
"free"
],
"requires_api_key": false,
"status": "inactive",
"description": "Pocket TTS (Kyutai) \u2014 $0 local voice cloning on the mac-node video/voice node. Clones a per-client brand voice from a ~10-20s reference clip into a reusable .safetensors state, then generates VO clips (~2-3s each). Client-facing via this Voice Cloning Studio canvas; jobs route to the mac agent over the Syncthing Dropzone bridge.",
"documentation_url": "https://github.com/kyutai-labs/pocket-tts",
"languages": [
"en"
],
"max_characters": 600,
"notes": "Self-hosted on the mac-node node (handle_voice_clone). status=inactive until the OVU->mesh Dropzone bridge (POST /api/voice-clone/submit + result ingest) is wired; the studio card stays hidden while inactive, then auto-reveals like qwen3-local. Guardrail: dedicated deterministic handler, source-allowlisted the host agent, NOT the permissionless claude path.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only"
},
"hume": {
"name": "Hume Octave",
"provider_id": "hume",
"cost_per_minute": 0.2,
"quality": "very-high",
"latency": "medium",
"voices": [],
"features": [
"acting-direction",
"voice-design",
"emotion-control",
"wav-output"
],
"requires_api_key": true,
"status": "active",
"description": "Hume Octave \u2014 acting-direction TTS. Per-utterance description directs the performance; custom voices are designed (describe \u2192 generate \u2192 save). Also the performance-donor stage for Resemble STS character pipelines.",
"documentation_url": "https://dev.hume.ai/docs/text-to-speech-tts/overview",
"languages": [
"en",
"es",
"fr",
"de",
"it",
"pt",
"ja",
"ko",
"zh"
],
"max_characters": 5000,
"notes": "REST /v0/tts (no websocket needed). HUME_API_KEY env + optional HUME_VOICE default. Cloudflare blocks non-browser User-Agents (403/1010) \u2014 provider sends a browser UA. save_voice(generation_id, name) keeps a take as a custom voice."
},
"supertonic": {
"name": "Supertonic TTS",
"provider_id": "supertonic",
"cost_per_minute": 0.0,
"quality": "high",
"latency": "very-fast",
"voices": [
"M1",
"M2",
"M3",
"M4",
"M5",
"F1",
"F2",
"F3",
"F4",
"F5"
],
"features": [
"multi-language",
"local-processing",
"open-source",
"no-api-key-required",
"onnx-based"
],
"requires_api_key": false,
"status": "active",
"description": "Local ONNX-based TTS engine with multiple voice styles",
"documentation_url": "https://github.com/playht/supertonic",
"languages": [
"en",
"ko",
"es",
"pt",
"fr"
],
"max_characters": 10000,
"notes": "Free, fast, local inference. Default provider.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only"
},
"qwen3": {
"name": "Qwen3-TTS (fal.ai)",
"provider_id": "qwen3",
"cost_per_minute": 0.003,
"quality": "very-high",
"latency": "fast",
"voices": [
"Vivian",
"Serena",
"Dylan",
"Eric",
"Ryan",
"Aiden",
"Uncle_Fu",
"Ono_Anna",
"Sohee"
],
"features": [
"multilingual",
"expressive",
"voice-cloning",
"emotion-control",
"cloud",
"mp3-output"
],
"requires_api_key": true,
"status": "active",
"description": "Qwen3-TTS via fal.ai \u2014 voice cloning, emotion control, multilingual, 10 languages",
"languages": [
"en",
"zh",
"es",
"fr",
"de",
"it",
"ja",
"ko",
"pt",
"ru"
],
"max_characters": 5000,
"notes": "Voice cloning: POST /api/tts/clone with audio sample. Use cloned voice_id in /api/tts/generate. FAL_KEY required.",
"clone_endpoint": "/api/tts/clone",
"clone_cost_per_minute": 0.0008,
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "mp3",
"sample_rate": 24000
},
"qwen3-local": {
"name": "Qwen3-TTS (local GPU)",
"provider_id": "qwen3-local",
"cost_per_minute": 0.0,
"quality": "very-high",
"latency": "fast",
"voices": [],
"features": [
"voice-cloning",
"multilingual",
"local-gpu",
"free",
"mp3-output",
"no-api-key"
],
"requires_api_key": false,
"status": "active",
"description": "Qwen3-TTS-1.7B on residential RTX 3070 GPU \u2014 free, no API cost. Cloned voices only. Requires laptop + tunnel to be up.",
"languages": [
"en",
"zh",
"es",
"fr",
"de",
"it",
"ja",
"ko",
"pt",
"ru"
],
"max_characters": 5000,
"notes": "Free local GPU inference via reverse SSH tunnel. Cloned voices only (.pt). Auto-disabled when laptop offline \u2014 falls back to qwen3 (fal.ai). OVUI_BRIDGE_AUTH_TOKEN required.",
"clone_endpoint": "/api/tts/clone",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "mp3",
"sample_rate": 24000
},
"qwen3-gpu": {
"name": "Qwen3-TTS (GPU lane)",
"provider_id": "qwen3-gpu",
"cost_per_minute": 0.0,
"quality": "very-high",
"latency": "medium",
"voices": [],
"features": [
"voice-cloning",
"remote-gpu",
"free",
"wav-output"
],
"requires_api_key": false,
"status": "active",
"description": "Qwen3-TTS-12Hz-1.7B-Base on the GPU lane (res-desktop-gpu) via the vcg endpoint over the tailnet. Tenant-scoped clones only.",
"languages": [
"en"
],
"max_characters": 600,
"notes": "OPT-IN PER TENANT, never a default: offered only when the tenant's voice-clones/_seam/policy.json lists qwen3-gpu AND the container holds a bearer at /app/runtime/secrets/vcg.token (read per request; missing = unavailable, no network call). Clones need a consent record and a reference transcript. Wire: mac-claude voice-clone-gpu-wire-v0 + vcg-build-v0.1.",
"clone_endpoint": "/api/tts/clone",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "wav",
"sample_rate": 24000
},
"qwen3-mlx": {
"name": "Qwen3-TTS (MLX node)",
"provider_id": "qwen3-mlx",
"cost_per_minute": 0.0,
"quality": "very-high",
"latency": "fast",
"voices": [],
"features": [
"voice-cloning",
"self-hosted",
"free",
"wav-output",
"no-api-key"
],
"requires_api_key": false,
"status": "active",
"description": "Qwen3-TTS on a self-hosted Apple-silicon (mlx-audio) node over HTTP. One request per sentence, allow-listed reference voices only.",
"languages": [
"en"
],
"max_characters": 5000,
"notes": "QWEN_MLX_TTS_URL + QWEN_MLX_TTS_VOICES (allow-list, fail closed) required; QWEN_MLX_TTS_DENY_PREFIXES optional. Unset URL = inert. Server down = falls back via config/tts-fallback.json (qwen3-mlx -> groq -> supertonic).",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "wav",
"sample_rate": 24000
},
"resemble": {
"name": "Resemble AI (Chatterbox)",
"provider_id": "resemble",
"cost_per_minute": 0.1,
"quality": "very-high",
"latency": "very-fast",
"voices": [],
"features": [
"streaming",
"voice-cloning",
"emotion-control",
"ssml",
"multilingual",
"cloud",
"wav-output",
"paralinguistic-tags"
],
"requires_api_key": true,
"status": "active",
"description": "Resemble AI Chatterbox \u2014 streaming TTS, voice cloning, emotion/exaggeration control, SSML, 90+ languages",
"documentation_url": "https://docs.resemble.ai",
"languages": [
"en",
"es",
"fr",
"de",
"it",
"pt",
"ja",
"ko",
"zh",
"ar",
"ru",
"hi",
"nl",
"pl",
"sv",
"da",
"fi",
"el",
"cs",
"hu",
"ro",
"tr",
"uk",
"vi",
"th",
"id"
],
"max_characters": 2000,
"notes": "Models: chatterbox-turbo (fastest, paralinguistic tags), chatterbox (emotion/exaggeration), chatterbox-multilingual (23 langs). Voice cloning via Resemble dashboard. RESEMBLE_API_KEY + RESEMBLE_VOICE_UUID required.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "wav",
"sample_rate": 24000
},
"elevenlabs": {
"name": "ElevenLabs",
"provider_id": "elevenlabs",
"cost_per_minute": 0.3,
"quality": "premium",
"latency": "fast",
"voices": [],
"features": [
"voice-cloning",
"multilingual",
"streaming",
"emotion-control",
"cloud",
"mp3-output"
],
"requires_api_key": true,
"status": "active",
"description": "ElevenLabs \u2014 premium TTS with instant voice cloning, multilingual, emotion control",
"languages": [
"en",
"es",
"fr",
"de",
"it",
"pt",
"ja",
"ko",
"zh",
"ar",
"ru",
"hi",
"pl",
"tr",
"nl",
"sv"
],
"max_characters": 5000,
"notes": "Premium quality. Models: eleven_multilingual_v2 (default), eleven_turbo_v2_5 (faster). ELEVENLABS_API_KEY required. Voices populated dynamically from API.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "mp3",
"sample_rate": 44100
},
"groq": {
"name": "Groq Orpheus",
"provider_id": "groq",
"cost_per_minute": 0.05,
"quality": "high",
"latency": "very-fast",
"voices": [
"autumn",
"diana",
"hannah",
"austin",
"daniel",
"troy"
],
"features": [
"streaming",
"natural",
"empathetic",
"cloud",
"mp3-output"
],
"requires_api_key": true,
"status": "active",
"description": "Orpheus TTS (canopylabs/orpheus-v1-english) via Groq LPU \u2014 ~130-200ms, very natural",
"languages": [
"en"
],
"max_characters": 5000,
"notes": "~130-200ms latency on Groq LPU. Natural human-like prosody. GROQ_API_KEY required.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only",
"audio_format": "mp3",
"sample_rate": 24000
},
"grok": {
"name": "Grok / xAI TTS",
"provider_id": "grok",
"cost_per_minute": 0.0,
"quality": "high",
"latency": "fast",
"voices": [
"eve",
"ara",
"rex",
"sal",
"leo"
],
"features": [
"streaming",
"websocket",
"multilingual",
"cloud"
],
"requires_api_key": true,
"status": "inactive",
"description": "Grok / xAI text-to-speech (api.x.ai). Unary REST plus a websocket streaming path.",
"documentation_url": "https://docs.x.ai/developers/model-capabilities/audio/text-to-speech",
"languages": [
"en"
],
"max_characters": 5000,
"notes": "XAI_API_KEY required; inactive and inert until it is set. Contributed via the Bartok9 fork. Pricing not pinned here \u2014 check xAI's current rates.",
"requires_microphone": false,
"requires_websocket": false,
"mode": "tts-only"
}
},
"default_provider": "supertonic",
"version": "1.2.0",
"last_updated": "2026-02-21"
}