Alternativa ao OpenAI TTS: mantenha o SDK, troque a URL base
O Fish Audio atende a mesma chamada /v1/audio/speech. Aponte seu cliente OpenAI para o Fish, escolha o modelo gratuito e seu código de síntese de voz continua funcionando depois que os modelos TTS da OpenAI saírem do ar.
Não é necessário cartão de crédito: fish-audio/s2.1-pro-free custa $0 até 30 de novembro de 2026.
Duas linhas redirecionam o cliente
base_url e api_key apontam o SDK oficial da OpenAI para o Fish. Na chamada, defina um modelo e uma voz do Fish. O novo código roda como está em uma conta nova com saldo de $0.
import os from openai import OpenAI client = OpenAI(Linha adicionada: base_url="https://api.fish.audio/compat/v1",Linha removida: api_key=os.environ["OPENAI_API_KEY"],Linha adicionada: api_key=os.environ["FISH_API_KEY"],) with client.audio.speech.with_streaming_response.create(Linha removida: model="tts-1",Linha removida: voice="alloy",Linha adicionada: model="fish-audio/s2.1-pro-free",Linha adicionada: 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({Linha adicionada: baseURL: "https://api.fish.audio/compat/v1",Linha removida: apiKey: process.env.OPENAI_API_KEY,Linha adicionada: apiKey: process.env.FISH_API_KEY,}); const response = await client.audio.speech.create({Linha removida: model: "tts-1",Linha removida: voice: "alloy",Linha adicionada: model: "fish-audio/s2.1-pro-free",Linha adicionada: voice: "", input: "Hello, world!", response_format: "mp3",});fs.writeFileSync("speech.mp3", Buffer.from(await response.arrayBuffer()));Linha removida: curl https://api.openai.com/v1/audio/speech \Linha removida: -H "Authorization: Bearer $OPENAI_API_KEY" \Linha adicionada: curl https://api.fish.audio/compat/v1/audio/speech \Linha adicionada: -H "Authorization: Bearer $FISH_API_KEY" \ -H "Content-Type: application/json" \ -d '{Linha removida: "model": "tts-1",Linha removida: "voice": "alloy",Linha adicionada: "model": "fish-audio/s2.1-pro-free",Linha adicionada: "voice": "", "input": "Hello, world!", "response_format": "mp3" }' \ --output speech.mp3Requer o SDK oficial da OpenAI (pip install openai ou npm install openai) e sua chave de API do Fish em FISH_API_KEY.
O que mais muda
voicerecebe um ID de voz do Fish. Nomes predefinidos da OpenAI, comonova, retornam 400; uma string vazia usa a voz padrão do modelo.- No Fish, o padrão de
response_formatépcm, nãomp3. Defina o formato explicitamente. instructionsnão é suportado e retorna 400. Em vez disso, escreva as indicações de interpretação no texto, como[whispering].tts-1,tts-1-hdegpt-4o-mini-ttscontinuam funcionando como nomes de modelo. Eles são mapeados para o modelo pagofish-audio/s2.1-pro.
Escolha uma voz
As vozes predefinidas da OpenAI não existem no Fish. Passe o ID de qualquer voz da Biblioteca de vozes do Fish ou de uma voz que você clonar. Uma string vazia usa a voz padrão do modelo.
Preços
O S2.1-Pro cobra por bytes UTF-8 do texto de entrada. Em inglês, um caractere equivale a um byte, então o custo é o mesmo do tts-1 e metade do tts-1-hd. A maioria dos caracteres chineses, japoneses e coreanos ocupa 3 bytes.
Preços das páginas oficiais de preços, verificados em 29 de outubro de 2026:Fish AudioOpenAI
Perguntas frequentes
Mude antes de 6 de janeiro de 2027
Crie uma chave grátis, troque duas linhas e continue entregando voz.