Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions developer-guide/compat/migrate-from-elevenlabs.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Migrate from ElevenLabs"
sidebarTitle: "From ElevenLabs"
description: "Point the ElevenLabs SDK at Fish Audio: TTS, timestamps, realtime streaming input, speech-to-text, and your voice library."

Check warning on line 4 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L4

Did you really mean 'realtime'?
icon: "waveform-lines"
---

Expand Down Expand Up @@ -48,11 +48,11 @@
| Feature | Supported |
| --------------------------------------- | --------- |
| Text to speech (+ character timestamps) | ✓ |
| Realtime input streaming (WebSocket) | ✓ |

Check warning on line 51 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L51

Did you really mean 'Realtime'?
| Speech to text + word timestamps | ✓ |
| Realtime STT (manual commit) | ✓ |

Check warning on line 53 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L53

Did you really mean 'Realtime'?
| Voice library & model catalog | ✓ |
| Diarization / redaction / webhooks | – |

Check warning on line 55 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L55

Did you really mean 'Diarization'?
| μ-law / A-law output | – |

## Text to speech
Expand Down Expand Up @@ -96,23 +96,25 @@
`voice_settings` maps onto Fish's synthesis controls: `speed` sets the speech
rate, and `stability` becomes Fish `temperature = 1 − stability`. The
vendor-specific tuning knobs (`similarity_boost`, `style`,
`use_speaker_boost`, `language_code`, `seed`) are accepted and ignored, never
an error.
`use_speaker_boost`, `seed`) are accepted and ignored, never an error.
`language_code` is passed on as Fish's [`language`](/features/text-to-speech#language)
field: it picks the text-normalization rules (how numbers, dates and symbols
are spelled out) and the word-timestamp language, and does not change the voice.

### Output formats

`mp3_*`, `pcm_*`, `opus_*`, and `wav_*` (a Fish Audio extension) work at the
supported sample rates: 32000 or 44100 for `mp3_*`, 48000 for `opus_*`.
The 22.05 kHz family (`mp3_22050_32`, `pcm_22050`, …) is refused. The
sample-rate segment of the format name is honored; the `mp3_*` bitrate segment

Check warning on line 109 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L109

Did you really mean 'bitrate'?
snaps **up** to the nearest Fish tier
([details](/developer-guide/compat/capabilities#bitrate-snapping)), while Opus
bitrate is automatic. `ulaw_*` and `alaw_*` return a 400.

Check warning on line 112 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L112

Did you really mean 'bitrate'?

### Timestamps

The `with-timestamps` variants return the official shapes: REST uses snake_case

Check warning on line 116 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L116

Did you really mean 'snake_case'?
keys in **seconds**; the WebSocket uses camelCase keys in **milliseconds**

Check warning on line 117 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L117

Did you really mean 'camelCase'?
(`charStartTimesMs`). That asymmetry matches ElevenLabs' own API. Character
timings are interpolated from Fish segment timestamps at millisecond precision.

Expand All @@ -127,7 +129,7 @@
a client concatenate every frame's audio and alignment and have the captions
line up. Don't add your own per-turn offset; you would double-count it.

## Realtime input streaming (WebSocket)

Check warning on line 132 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L132

Did you really mean 'Realtime'?

`wss://api.fish.audio/compat/elevenlabs/v1/text-to-speech/{voice_id}/stream-input`

Expand Down Expand Up @@ -193,7 +195,7 @@
Both are quirks of the SDK itself.

The same SDK force-upgrades `http://` base URLs to `wss://`, so it cannot be
pointed at a plaintext endpoint, including a local test proxy.

Check warning on line 198 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L198

Did you really mean 'plaintext'?
</Note>

## Speech to text
Expand Down Expand Up @@ -238,7 +240,7 @@

- `language_probability` is always `1.0`.
- `words[].logprob` is always `0`.
- `words[].speaker_id` is always `null`; requesting diarization returns an

Check warning on line 243 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L243

Did you really mean 'diarization'?
explicit error instead.

And `language_code` in the response **echoes what you sent**, never a
Expand All @@ -249,7 +251,8 @@
Code branching on `language_probability > 0.9` will act on that empty string.

(On the *synthesis* side `language_code` is a different story: there it is
accepted and dropped, along with the other vendor tuning knobs.)
passed on as Fish's `language` field, which selects the
[normalization rules](/features/text-to-speech#supported-normalization-languages).)

Options that would change the response contract are **rejected with 400**
rather than silently ignored:
Expand All @@ -259,7 +262,7 @@
| `diarize` | speaker attribution is not available here |
| `use_multi_channel` | per-channel transcription is not available |
| `entity_detection` | entities would be missing from the response |
| `entity_redaction` | text would come back unredacted |

Check warning on line 265 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L265

Did you really mean 'unredacted'?
| `entity_redaction_mode` | same |
| `no_verbatim` | the transcript would still be verbatim |
| `tag_audio_events` | event tags are not available here |
Expand All @@ -280,12 +283,12 @@
parameter; the transcript itself is unaffected.
</Warning>

Booleans count as requested only when true: `False`, `"False"`, `0`, and `off`

Check warning on line 286 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L286

Did you really mean 'Booleans'?
are treated as unset, so default SDK serialization never trips any of these.

### Realtime STT

Check warning on line 289 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L289

Did you really mean 'Realtime'?

The realtime WebSocket (`/v1/speech-to-text/realtime`) supports

Check warning on line 291 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L291

Did you really mean 'realtime'?
`commit_strategy=manual` only: stream `input_audio_chunk` messages and set
`commit: true` to receive the committed transcript. Your application decides
the segment boundaries, so `commit_strategy=vad` is refused at the handshake
Expand All @@ -301,7 +304,7 @@
a fluent, confident, completely wrong transcript**, word timestamps and all:
the samples are read at the wrong rate, so the audio is effectively played at
the wrong speed before it ever reaches the recognizer. There is no error to
catch. Pass `?audio_format=pcm_44100` (or resample to 16 kHz before sending).

Check warning on line 307 in developer-guide/compat/migrate-from-elevenlabs.mdx

View check run for this annotation

Mintlify / Mintlify Validation (hanabiaiinc) - vale-spellcheck

developer-guide/compat/migrate-from-elevenlabs.mdx#L307

Did you really mean 'resample'?

Only `pcm_<rate>` values are accepted; `ulaw_8000` and other containerized
names are refused at the handshake rather than opening a session that would
Expand Down
Loading