OpenAI-TTS-Alternative: SDK behalten, Base URL ändern
Fish Audio bietet denselben Aufruf /v1/audio/speech. Richte deinen OpenAI-Client auf Fish, wähle das kostenlose Modell, und dein Code für die Sprachausgabe läuft weiter, auch wenn die TTS-Modelle von OpenAI abgeschaltet sind.
Keine Kreditkarte erforderlich: fish-audio/s2.1-pro-free kostet $0 bis einschließlich 30. November 2026.
Zwei Zeilen stellen den Client um
base_url und api_key richten das offizielle OpenAI SDK auf Fish. Im Aufruf setzt du ein Fish-Modell und eine Fish-Stimme. Der neue Code läuft unverändert auf einem neuen Konto mit $0 Guthaben.
import os from openai import OpenAI client = OpenAI(Hinzugefügte Zeile: base_url="https://api.fish.audio/compat/v1",Entfernte Zeile: api_key=os.environ["OPENAI_API_KEY"],Hinzugefügte Zeile: api_key=os.environ["FISH_API_KEY"],) with client.audio.speech.with_streaming_response.create(Entfernte Zeile: model="tts-1",Entfernte Zeile: voice="alloy",Hinzugefügte Zeile: model="fish-audio/s2.1-pro-free",Hinzugefügte Zeile: 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({Hinzugefügte Zeile: baseURL: "https://api.fish.audio/compat/v1",Entfernte Zeile: apiKey: process.env.OPENAI_API_KEY,Hinzugefügte Zeile: apiKey: process.env.FISH_API_KEY,}); const response = await client.audio.speech.create({Entfernte Zeile: model: "tts-1",Entfernte Zeile: voice: "alloy",Hinzugefügte Zeile: model: "fish-audio/s2.1-pro-free",Hinzugefügte Zeile: voice: "", input: "Hello, world!", response_format: "mp3",});fs.writeFileSync("speech.mp3", Buffer.from(await response.arrayBuffer()));Entfernte Zeile: curl https://api.openai.com/v1/audio/speech \Entfernte Zeile: -H "Authorization: Bearer $OPENAI_API_KEY" \Hinzugefügte Zeile: curl https://api.fish.audio/compat/v1/audio/speech \Hinzugefügte Zeile: -H "Authorization: Bearer $FISH_API_KEY" \ -H "Content-Type: application/json" \ -d '{Entfernte Zeile: "model": "tts-1",Entfernte Zeile: "voice": "alloy",Hinzugefügte Zeile: "model": "fish-audio/s2.1-pro-free",Hinzugefügte Zeile: "voice": "", "input": "Hello, world!", "response_format": "mp3" }' \ --output speech.mp3Benötigt das offizielle OpenAI SDK (pip install openai oder npm install openai) und deinen Fish-API-Key in FISH_API_KEY.
Was sich sonst ändert
voiceerwartet eine Stimm-ID von Fish. OpenAI-Preset-Namen wienovageben einen Fehler 400 zurück; ein leerer String verwendet die Standardstimme des Modells.response_formatist bei Fish standardmäßigpcm, nichtmp3. Setze es explizit.instructionswird nicht unterstützt und gibt einen Fehler 400 zurück. Schreib Vortragshinweise stattdessen direkt in den Text, etwa[whispering].tts-1,tts-1-hdundgpt-4o-mini-ttsfunktionieren weiterhin als Modellnamen. Sie verweisen auf das kostenpflichtigefish-audio/s2.1-pro.
Stimme wählen
Die Preset-Stimmen von OpenAI gibt es bei Fish nicht. Übergib die ID einer beliebigen Stimme aus der Stimmbibliothek von Fish oder einer Stimme, die du klonst. Ein leerer String verwendet die Standardstimme des Modells.
Preise
S2.1-Pro rechnet nach UTF-8-Bytes des Eingabetexts ab. Im Englischen entspricht ein Zeichen einem Byte, es kostet also so viel wie tts-1 und halb so viel wie tts-1-hd. Die meisten chinesischen, japanischen und koreanischen Zeichen belegen 3 Bytes.
Preise laut den offiziellen Preisseiten, Stand 29. Oktober 2026:Fish AudioOpenAI
Häufig gestellte Fragen
Vor dem 6. Januar 2027 umsteigen
Kostenlosen Key erstellen, zwei Zeilen ändern und weiter Sprachausgabe ausliefern.