Transition all TTS-related logic, types, and UI to use the new providerRef/providerType model in place of legacy ttsProvider fields. Introduce a centralized tts-provider-policy module to encapsulate provider/model capability checks, default value resolution, and compatibility logic. Update all API routes, contexts, hooks, components, and tests to use providerRef and providerType, ensuring consistent handling of built-in and shared TTS providers. Remove legacy defaultTtsModel config in favor of per-provider defaults and shared provider admin control. Add the showAllProviderModels runtime flag to restrict users to provider default models when desired. BREAKING CHANGE: ttsProvider fields are replaced by providerRef/providerType throughout the codebase; defaultTtsModel config is removed in favor of per-provider defaults.
1.6 KiB
1.6 KiB
| title |
|---|
| Replicate |
Use Replicate's hosted TTS models as your provider.
Setup
Recommended (auth + admin): Settings → Admin → Shared providers
- Add a shared provider with type
replicate. - Enter your API key.
- Set default model to:
alphanumericuser/kokoro-82m:89b6fa84e4fa2dd6bd3a96be3e1f12827a3516c9fda8fddbac7a0be131c9a6f5(or your preferred model).
Legacy bootstrap seed (optional, first boot only):
API_KEY=r8_...
Then update the shared provider's Default model in Settings → Admin → Shared providers.
Per-user Settings → TTS Provider (only when restrictUserApiKeys=false):
- Set provider to
Replicate. - Enter your
API_KEY. - Choose a model and voice.
See TTS Providers for admin-shared vs per-user behavior.
Notes
- Built-in Replicate models:
alphanumericuser/kokoro-82m:89b6fa84e4fa2dd6bd3a96be3e1f12827a3516c9fda8fddbac7a0be131c9a6f5google/gemini-3.1-flash-ttsminimax/speech-2.8-turboqwen/qwen3-ttsinworld/tts-1.5-mini
- You can also choose
Otherand enter any Replicate model ID (for exampleowner/model-nameorowner/model-name:version). - Native model speed is not available on all Replicate models; OpenReader hides/disables native speed controls where unsupported.
- TTS requests are sent from the server, not the browser. The API key is never exposed to clients.