Alternativa a OpenAI TTS: mantén el SDK, cambia la URL base
Fish Audio admite la misma llamada a /v1/audio/speech. Apunta tu cliente de OpenAI a Fish, elige el modelo gratuito y tu código de síntesis de voz seguirá funcionando cuando desaparezcan los modelos TTS de OpenAI.
No se requiere tarjeta de crédito: fish-audio/s2.1-pro-free cuesta $0 hasta el 30 de noviembre de 2026.
Dos líneas redirigen el cliente
base_url y api_key apuntan el SDK oficial de OpenAI a Fish. En la llamada, indica un modelo y una voz de Fish. El código nuevo funciona tal cual en una cuenta nueva con saldo de $0.
import os from openai import OpenAI client = OpenAI(Línea añadida: base_url="https://api.fish.audio/compat/v1",Línea eliminada: api_key=os.environ["OPENAI_API_KEY"],Línea añadida: api_key=os.environ["FISH_API_KEY"],) with client.audio.speech.with_streaming_response.create(Línea eliminada: model="tts-1",Línea eliminada: voice="alloy",Línea añadida: model="fish-audio/s2.1-pro-free",Línea añadida: voice="", input="Hello, world!", response_format="mp3",) as response: response.stream_to_file("speech.mp3")import fs from "node:fs";import OpenAI from "openai"; const client = new OpenAI({Línea añadida: baseURL: "https://api.fish.audio/compat/v1",Línea eliminada: apiKey: process.env.OPENAI_API_KEY,Línea añadida: apiKey: process.env.FISH_API_KEY,}); const response = await client.audio.speech.create({Línea eliminada: model: "tts-1",Línea eliminada: voice: "alloy",Línea añadida: model: "fish-audio/s2.1-pro-free",Línea añadida: voice: "", input: "Hello, world!", response_format: "mp3",});fs.writeFileSync("speech.mp3", Buffer.from(await response.arrayBuffer()));Línea eliminada: curl https://api.openai.com/v1/audio/speech \Línea eliminada: -H "Authorization: Bearer $OPENAI_API_KEY" \Línea añadida: curl https://api.fish.audio/compat/v1/audio/speech \Línea añadida: -H "Authorization: Bearer $FISH_API_KEY" \ -H "Content-Type: application/json" \ -d '{Línea eliminada: "model": "tts-1",Línea eliminada: "voice": "alloy",Línea añadida: "model": "fish-audio/s2.1-pro-free",Línea añadida: "voice": "", "input": "Hello, world!", "response_format": "mp3" }' \ --output speech.mp3Requiere el SDK oficial de OpenAI (pip install openai o npm install openai) y tu clave de API de Fish en FISH_API_KEY.
Qué más cambia
voicerecibe un ID de voz de Fish. Los nombres predefinidos de OpenAI, comonova, devuelven un 400; una cadena vacía usa la voz predeterminada del modelo.- En Fish, el valor predeterminado de
response_formatespcm, nomp3. Indícalo explícitamente. instructionsno está soportado y devuelve un 400. En su lugar, escribe las indicaciones de interpretación en el texto, como[whispering].tts-1,tts-1-hdygpt-4o-mini-ttssiguen funcionando como nombres de modelo. Se asignan al modelo de pagofish-audio/s2.1-pro.
Elige una voz
Las voces predefinidas de OpenAI no existen en Fish. Pasa el ID de cualquier voz de la Biblioteca de voces de Fish o de una voz que clones. Una cadena vacía usa la voz predeterminada del modelo.
Precios
S2.1-Pro factura por bytes UTF-8 del texto de entrada. En inglés, un carácter es un byte, así que cuesta lo mismo que tts-1 y la mitad que tts-1-hd. La mayoría de los caracteres chinos, japoneses y coreanos ocupan 3 bytes.
Precios de las páginas oficiales de precios, consultados el 29 de octubre de 2026:Fish AudioOpenAI
Preguntas frecuentes
Cambia antes del 6 de enero de 2027
Crea una clave gratis, cambia dos líneas y sigue generando voz.