Alle Artikel

Engineering

ElevenLabs-API-Alternative: Migration über eine kompatible Schnittstelle

Wie Sie eine bestehende ElevenLabs-API-Integration auf die ElevenLabs-kompatible Schnittstelle von KugelAudio umstellen: Änderungen im SDK-Code, Zuordnung von Voice-IDs und Ausgabeformaten, Streaming-Unterschiede und die Funktionen, die der kompatible Teil der API nicht abdeckt.

Viktor Presber11 Min. Lesezeit
Ein Strom feiner Partikel läuft durch einen transparenten Ring, der seine Form beibehält, und mündet in eine neue korallenfarbene Klangkugel, als Bild für eine kompatible Schnittstelle mit neuem Ziel
Auf dieser Seite

Wer nach einer Alternative zur ElevenLabs-API sucht, hat meist schon eine funktionierende Integration: einen ElevenLabs-Client im Code, feste Voice-IDs, ein Ausgabeformat, das zum Player oder zur Telefonanlage passt, und vielleicht einen WebSocket, der LLM-Tokens direkt in Sprache verwandelt. Diese Integration neu zu schreiben, steht in keinem Sprint gern auf der Liste. Eine ElevenLabs-kompatible API verspricht, genau diesen Schritt einzusparen, und für den Kern der Sprachausgabe gelingt das weitgehend. Dieser Artikel zeigt, was sich konkret ändert, wenn Sie eine ElevenLabs-Integration auf die kompatible Schnittstelle von KugelAudio umstellen, welche Teile der ElevenLabs-API dabei nicht abgedeckt sind und wann sich gleich die native KugelAudio-API lohnt.

Einen Anbietervergleich finden Sie hier bewusst nicht. Wenn Sie noch entscheiden, ob ein Wechsel überhaupt sinnvoll ist, lesen Sie zuerst unseren Vergleich der ElevenLabs-Alternativen für Europa, On-Premise und deutsches TTS. Hier geht es um die Umsetzung.

Das Wichtigste in Kürze

  • KugelAudio stellt unter https://api.kugelaudio.com/11labs einen ElevenLabs-kompatiblen Teil der HTTP- und WebSocket-API bereit. Die offiziellen ElevenLabs-SDKs für Python und JavaScript akzeptieren eine eigene Basis-URL, der Client kann also bleiben.
  • Drei Dinge müssen Sie ändern: Basis-URL und API-Schlüssel, die Voice-IDs und das Ausgabeformat. ElevenLabs-Voice-IDs lassen sich nicht übernehmen, und das Standardformat unterscheidet sich.
  • Abgedeckt sind Sprachsynthese, HTTP-Streaming, der stream-input-WebSocket sowie das Auflisten von Stimmen und Modellen. Stimmen anlegen oder bearbeiten, History, Nutzer- und Abo-Endpunkte werden ausdrücklich nicht unterstützt.
  • Felder, die die Kompatibilitätsseite nicht aufführt, etwa language_code, Aussprachewörterbücher oder seed, gehören nicht zum dokumentierten Umfang. Brauchen Sie diese Funktionen, planen Sie die native API ein.
  • Für deutsche Texte ist die Hauptsprache der gewählten Stimme entscheidend, weil sie bestimmt, nach welchen Regeln Zahlen, Daten und Beträge ausgesprochen werden.

Was bedeutet „ElevenLabs-API-kompatibel“ für Ihren Code?

Es bedeutet, dass sich Ziel und Kennungen der Anfragen ändern, Aufbau und Antworten aber gleich bleiben. Ihr ElevenLabs-SDK sendet weiterhin POST /v1/text-to-speech/{voice_id}, übergibt den Schlüssel im Header xi-api-key und erhält Audiodaten zurück. Neu sind nur Host, Schlüssel, Voice-ID und idealerweise ein ausdrücklich gesetztes Ausgabeformat.

Das funktioniert, weil beide offiziellen SDKs eine eigene Basis-URL erlauben: im Python-SDK über den Parameter base_url, im JavaScript-SDK über baseUrl. KugelAudio stellt die kompatiblen Routen unter dem Präfix /11labs bereit, das SDK hängt seine gewohnten /v1/...-Pfade daran an.

Bisher, mit ElevenLabs:

from elevenlabs import ElevenLabs

client = ElevenLabs(api_key="ihr-elevenlabs-schluessel")

Nach der Umstellung auf KugelAudio:

from elevenlabs import ElevenLabs

client = ElevenLabs(
    api_key="ihr-kugelaudio-api-schluessel",
    base_url="https://api.kugelaudio.com/11labs",
)

audio = client.text_to_speech.convert(
    voice_id="ihre-deutsche-voice-id",
    text="Guten Tag, wie kann ich Ihnen helfen?",
    model_id="kugel-3",
    output_format="pcm_24000",
)

In Node.js sieht die Änderung genauso aus:

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient({
  apiKey: "ihr-kugelaudio-api-schluessel",
  baseUrl: "https://api.kugelaudio.com/11labs",
});

const stream = await client.textToSpeech.stream("ihre-deutsche-voice-id", {
  text: "Guten Tag, wie kann ich Ihnen helfen?",
  modelId: "kugel-3",
  outputFormat: "pcm_24000",
});

Als Modell übergeben Sie am besten direkt kugel-3. Die älteren ElevenLabs-Kennungen eleven_turbo_v2, eleven_turbo_v2_5, eleven_multilingual_v1, eleven_multilingual_v2 und eleven_monolingual_v1 werden ebenfalls auf Kugel 3 abgebildet. Neuere Modell-IDs wie Flash v2.5 oder v3 stehen nicht in der dokumentierten Zuordnung. Lassen Sie sie deshalb nicht einfach in der Konfiguration stehen. Kugel 3 ist ein einziges mehrsprachiges Modell für 39 Sprachen und verarbeitet bis zu 10.000 Zeichen pro Anfrage.

Soll der Datenverkehr in Europa bleiben, dokumentiert KugelAudio einen direkten EU-Endpunkt, api.eu.kugelaudio.com, der für REST und WebSocket gilt. Verwenden Sie dort denselben Pfad /11labs und prüfen Sie ihn mit einer Testanfrage aus Ihrer Umgebung.

Wie ordnen Sie ElevenLabs-Voice-IDs den neuen Stimmen zu?

Gar nicht automatisch. Eine ElevenLabs-Voice-ID ist eine Kennung innerhalb von ElevenLabs, eine Anfrage an KugelAudio braucht eine KugelAudio-Voice-ID. Legen Sie die Zuordnung als Tabelle in der Konfiguration ab, statt IDs im Code zu ersetzen. Dann ist ein Rückweg später eine einzige Konfigurationsänderung.

Der kompatible Endpunkt GET /v1/voices liefert die KugelAudio-Stimmen im Katalogformat von ElevenLabs. Derselbe SDK-Aufruf listet sie also auf:

voices = client.voices.get_all()
for v in voices.voices:
    print(f"{v.voice_id}: {v.name}")

Wählen Sie Ersatzstimmen, indem Sie Ihre eigenen Texte anhören, nicht anhand von Namen oder Beschreibungen. Für deutsche Anwendungen ist ein Detail wichtiger, als es aussieht: KugelAudio normalisiert Zahlen, Datumsangaben und Währungen in der Sprache der Anfrage. Enthält die Anfrage keine Sprache, gilt die Hauptsprache der Stimme, also der erste Eintrag in ihren supported_languages. Die Kompatibilitätsseite dokumentiert kein Sprachfeld. Nutzen Sie auf diesem Weg daher Stimmen mit Deutsch als Hauptsprache, sonst werden „49,90 €“ oder ein Datum womöglich nach englischen Regeln ausgesprochen.

Auch eine eigene oder geklonte ElevenLabs-Stimme lässt sich nicht per ID mitnehmen. Für einen Nachbau brauchen Sie die ursprünglichen Referenzaufnahmen, die Einwilligung der sprechenden Person und die Nutzungsrechte sowie einen neuen Klon bei KugelAudio. Der kompatible Endpunkt POST /v1/voices/add wird nicht unterstützt. Legen Sie den Klon im KugelAudio-Dashboard oder über das native SDK an und setzen Sie dort supported_languages=["de"], denn neue Stimmen starten standardmäßig mit ["en"].

Welches Ausgabeformat sollten Sie anfordern?

Setzen Sie das Format bei jeder Anfrage ausdrücklich. ElevenLabs dokumentiert mp3_44100_128 als Standardwert für output_format. Die kompatible KugelAudio-Schnittstelle liefert dagegen 24-kHz-PCM, wenn weder output_format noch ein Header Accept: audio/mpeg gesendet wird, und wechselt auf mp3_44100_128, sobald Accept: audio/mpeg ohne output_format ankommt. Code, der sich stillschweigend auf den ElevenLabs-Standard verlassen hat und die Antwort als .mp3 speichert, erhält sonst rohes PCM.

KugelAudio erzeugt Audio nativ mit 24 kHz PCM16. pcm_24000 kostet deshalb keine Umrechnung. Niedrigere PCM-Raten werden auf dem Server umgerechnet, MP3 wird serverseitig kodiert, und die Telefonieformate nach G.711 stehen direkt zur Verfügung.

Bisherige ElevenLabs-EinstellungKompatible KugelAudio-EinstellungHinweis
Standard (MP3, 44,1 kHz, 128 kbit/s)mp3_44100_128 oder Header Accept: audio/mpegAusdrücklich setzen
pcm_24000pcm_24000Empfohlen, native Rate
pcm_16000, pcm_22050, pcm_8000, pcm_44100Gleiches TokenServerseitig umgerechnet
ulaw_8000, alaw_8000Gleiches TokenG.711 für Telefonie
mp3_22050_32, mp3_44100_32 bis mp3_44100_192Gleiches TokenUnterstützte Bitraten bei 22,05 und 44,1 kHz
opus_48000_*, wav_*, pcm_32000, pcm_48000, mp3_24000_48Nicht in der dokumentierten ListeUnterstütztes Token wählen oder selbst umwandeln

Was ändert sich beim Streaming und beim WebSocket?

HTTP-Streaming funktioniert unverändert, POST /v1/text-to-speech/{voice_id}/stream wird unterstützt. Auch der WebSocket für Texteingabe im Stream, /v1/text-to-speech/{voice_id}/stream-input, ist abgedeckt. Sie senden den Text so, wie er vom LLM kommt, beenden den Stream mit einer leeren Textnachricht und erhalten Frames mit base64-kodiertem audio und isFinal. Danach schließt der Server die Verbindung regulär mit Code 1000. Das ist wichtig, weil das offizielle Python-SDK so lange liest, bis der Server schließt.

Hinter dem gleichen Protokoll steckt ein Unterschied, der die Latenz betrifft. ElevenLabs-Clients senden oft flush oder try_trigger_generation, um die Erzeugung anzustoßen. Der Textpuffer von KugelAudio startet die Synthese ohnehin an Satzgrenzen, try_trigger_generation entspricht dem Standardverhalten. Ein ausdrückliches Flush nach jedem Textstück schadet eher: Im Streaming von KugelAudio beendet jedes Flush einen Turn, und der nächste Text zahlt erneut die Anlaufzeit des Modells. Senden Sie Tokens ohne Flush und schließen Sie jede Antwort einmal ab.

Zwei WebSocket-Funktionen sollten Sie gezielt prüfen. ElevenLabs kann in den Audio-Frames Zeichen-Zeitstempel (alignment) mitliefern, die dokumentierten KugelAudio-Frames enthalten nur Audio und die Endmarkierung. Untertitel oder Lippensynchronisation auf dieser Basis brauchen daher die Wort-Zeitstempel der nativen API. Außerdem bietet ElevenLabs einen Multi-Context-WebSocket (multi-stream-input), der nicht zu den kompatiblen Endpunkten gehört. Der native Multi-Context-Endpunkt von KugelAudio verwaltet bis zu 20 unabhängige Streams über eine Verbindung.

Was deckt die kompatible Schnittstelle nicht ab?

Die Kompatibilitätsschicht ist bewusst eine Teilmenge. Sie deckt die Sprachausgabe und die Katalogaufrufe ab, die eine Integration zum Laufen braucht, nicht die ElevenLabs-Plattform drumherum. Die Kompatibilitätsseite nennt ihre Endpunkte ausdrücklich. Alles, was dort nicht steht, sollten Sie als nicht verfügbar behandeln, bis Sie es getestet haben.

ElevenLabs-FunktionKompatible SchnittstelleWas Sie stattdessen tun
Sprachsynthese per HTTP und StreamingUnterstütztBasis-URL, Schlüssel, Voice-ID, Format ändern
WebSocket stream-inputUnterstütztNicht mehr nach jedem Stück flushen
Stimmen auflisten, Stimme abrufen, Modelle auflistenUnterstütztFür die Zuordnung der Stimmen nutzen
Stimme anlegen oder bearbeitenNicht unterstütztKlon im Dashboard oder im nativen SDK anlegen
History, Nutzer, AbonnementNicht unterstütztAus der Integration entfernen oder eigenes Logging nutzen
stability, style, use_speaker_boostAngenommen, nicht verwendetStimme durch Anhören abstimmen
similarity_boostAuf cfg_scale abgebildetWerte über null ergeben 1,2 bis 2,5; Einstellung testen
language_code, seed, previous_text, next_text, Aussprachewörterbücher, apply_text_normalizationNicht im dokumentierten UmfangNative Felder für Sprache, Normalisierung und Wörterbücher nutzen
Endpunkt mit Zeitstempeln und Alignment im WebSocketNicht im dokumentierten UmfangNative Wort-Zeitstempel nutzen
WebSocket multi-stream-inputNicht im dokumentierten UmfangNatives Multi-Context-Streaming nutzen

Ebenfalls nicht abgedeckt sind ElevenLabs-Produkte außerhalb der Sprachsynthese, etwa Speech-to-Speech, Dubbing, Soundeffekte oder die Agenten-Plattform. Ruft Ihre Integration diese Dienste auf, ersetzt die kompatible Schnittstelle nur einen Teil davon.

Kompatible Schnittstelle oder native API: was passt zu Ihrem Projekt?

Die kompatible Schnittstelle passt, wenn Sie schnell und mit wenig Codeänderung den Anbieter wechseln wollen und Ihre Integration nur die abgedeckten Aufrufe nutzt. Die native API passt, wenn Sie die ausgelassenen Funktionen brauchen oder die Sprachschicht ohnehin neu aufbauen.

MigrationswegWas sich ändertWas bleibtGeeignet für
Kompatible Schnittstelle mit ElevenLabs-SDKBasis-URL, API-Schlüssel, Voice-IDs, AusgabeformatSDK, Anfragecode, Verarbeitung der AntwortenSchneller Wechsel einer reinen TTS-Integration oder Werkzeuge, die nur einen ElevenLabs-Connector anbieten
Natives KugelAudio-SDK oder native APIClient-Bibliothek und AnfragecodeIhre AnwendungslogikAusdrückliche Sprache pro Anfrage, Wörterbücher, Wort-Zeitstempel, Barge-in, Multi-Context-Streaming
Eigener Adapter mit beiden Anbietern dahinterEine Schnittstelle für beide AnbieterRückweg zu ElevenLabs per KonfigurationSchrittweise Einführung mit Schattenbetrieb und Canary
Bei ElevenLabs bleibenNichtsAllesIntegrationen, die an ElevenLabs-exklusiven Produkten oder Stimmen hängen

Die native API bietet genau die Stellschrauben, die deutsche Produktivanwendungen meist brauchen: eine Sprache pro Anfrage, eine abschaltbare Textnormalisierung, Aussprachewörterbücher pro Projekt und für Barge-in den Abbruch des laufenden Turns, ohne den WebSocket zu schließen. Ein bewährtes Vorgehen ist, den Datenverkehr zunächst über die kompatible Schnittstelle umzustellen und den kritischen Pfad später auf das native SDK zu verlagern, sobald klar ist, welche dieser Funktionen Sie brauchen.

Werkzeuge, die nur ElevenLabs sprechen, sind ein Sonderfall. Der ElevenLabs-Pfad von Open WebUI etwa sendet Accept: audio/mpeg und speichert die Antwort als MP3, was die kompatible Schnittstelle berücksichtigt. Bietet ein Werkzeug einen ElevenLabs-Connector mit einstellbarer Basis-URL, ist die kompatible Schnittstelle der einzige Weg. Fehlt dieses Feld, wie beim eingebauten ElevenLabs-Anbieter in Cognigy, brauchen Sie stattdessen den Mechanismus der Plattform für eigene Sprachanbieter.

Wie prüfen Sie den Wechsel vor der Umstellung?

Sehen Sie Kompatibilität als schnelleren Weg zur Evaluierung, nicht als Grund, sie auszulassen. Beginnen Sie mit einem Rauchtest, der Schlüssel, Host und Stimme außerhalb Ihrer Anwendung prüft:

curl -X POST "https://api.kugelaudio.com/11labs/v1/text-to-speech/ihre-deutsche-voice-id?output_format=mp3_44100_128" \
  -H "xi-api-key: ihr-kugelaudio-api-schluessel" \
  -H "Content-Type: application/json" \
  -d '{"text": "Ihre Rechnung über 49,90 Euro ist am 15. Oktober fällig.", "model_id": "kugel-3"}' \
  --output test.mp3

Danach folgt der gestufte Plan aus dem Vergleich der ElevenLabs-Alternativen: ein eingefrorener Testsatz aus echtem Datenverkehr, Blindbewertung je Kategorie, Latenz und Fehlerraten auf Ihren eigenen Verbindungen gemessen, Schattenbetrieb und ein Canary mit schriftlich festgelegten Abbruchschwellen. Lassen Sie den Anbieterwechsel so lange in der Konfiguration, bis der Canary bestanden ist.

Vergleichen Sie die Kosten anhand tatsächlich ausgelieferter Audiominuten, nicht anhand angefragter Zeichen. KugelAudio weist Preise pro erzeugter Minute aus und rechnet sekundengenau ab, ElevenLabs berechnet die API nach Zeichen. Einen Überblick über Preiseinheiten und Schnittstellen verschiedener Anbieter gibt unser Artikel zu Text-to-Speech-APIs für Entwickler.

Welche Einschränkungen hat dieser Leitfaden?

Der Autor arbeitet für KugelAudio. Der Leitfaden beschreibt das dokumentierte API-Verhalten beider Seiten mit Stand 29. September 2026. Er ist kein unabhängiger Benchmark und trifft keine Aussage über Klangqualität oder Latenz im Vergleich. Die ElevenLabs-API ändert sich häufig. Gleichen Sie deshalb Ihre SDK-Version und die tatsächlich gesendeten Felder vor der Umstellung mit den aktuellen Referenzen ab. Verhalten außerhalb des dokumentierten kompatiblen Umfangs kann sich ohne Ankündigung ändern und sollte nicht eingeplant werden.

FAQ

Ist KugelAudio ein direkter Ersatz für die ElevenLabs-API?

Für die abgedeckten Aufrufe der Sprachsynthese weitgehend ja: Das ElevenLabs-SDK funktioniert weiter, nachdem Sie Basis-URL, API-Schlüssel, Voice-IDs und Ausgabeformat geändert haben. Die gesamte ElevenLabs-Plattform ersetzt es nicht. Stimmen anlegen, History und Konto-Endpunkte werden nicht unterstützt.

Kann ich das offizielle ElevenLabs-SDK weiter verwenden?

Ja. Das Python-SDK akzeptiert base_url, das JavaScript-SDK baseUrl. Tragen Sie https://api.kugelaudio.com/11labs ein und verwenden Sie einen KugelAudio-API-Schlüssel.

Funktionieren meine ElevenLabs-Voice-IDs bei KugelAudio?

Nein. Listen Sie die KugelAudio-Stimmen über den kompatiblen Endpunkt /v1/voices auf und ordnen Sie jeder ElevenLabs-Stimme in der Konfiguration eine KugelAudio-Stimme zu. Eine geklonte Stimme muss aus den Referenzaufnahmen neu erstellt werden, mit den nötigen Rechten und Einwilligungen.

Warum erhalte ich PCM statt MP3?

Die kompatible Schnittstelle liefert 24-kHz-PCM, wenn weder output_format noch ein Header Accept: audio/mpeg gesendet wird, ElevenLabs dagegen standardmäßig MP3. Setzen Sie output_format=mp3_44100_128 oder senden Sie den Header Accept: audio/mpeg.

Wie klingen Zahlen und Beträge auf Deutsch richtig?

Wählen Sie eine Stimme mit Deutsch als Hauptsprache, denn ohne Sprachfeld in der Anfrage normalisiert KugelAudio nach der Hauptsprache der Stimme. Für Fachbegriffe, Markennamen und eine ausdrückliche Sprache pro Anfrage nutzen Sie die Wörterbücher und das Feld language der nativen API.

Funktioniert der stream-input-WebSocket mit LLM-Token-Streaming?

Ja. Senden Sie die Tokens, sobald sie eintreffen, ohne nach jedem einzelnen zu flushen, und beenden Sie den Stream mit einer leeren Textnachricht. Der Server beginnt an Satzgrenzen mit der Synthese und schließt die Verbindung nach dem letzten Frame regulär.

Bleiben die Daten in der EU?

KugelAudio dokumentiert mit api.eu.kugelaudio.com einen direkten EU-Endpunkt für REST und WebSocket. Nutzen Sie dort den Pfad /11labs, prüfen Sie ihn mit einer Testanfrage und bewerten Sie die übrigen Verarbeitungsschritte Ihrer Anwendung gesondert.

Quellen

Mit KugelAudio entwickeln

Europäische Voice-Infrastruktur produktiv einsetzen.

Nutzen Sie den EU-Endpunkt oder besprechen Sie ein selbst betriebenes Kubernetes-Deployment.