OpenRouter
Use speech models from many companies through one OpenRouter API key.
- Open Settings → Admin → Providers → Add provider.
- Choose OpenRouter and enter your API key.
- Choose a model. The list is OpenRouter's current speech catalog, including
free variants. New setups use Fish Audio: S2.1 Pro Free (
fish-audio/s2.1-pro-free:free). Choose Other to enter a model ID that is not listed. - Save, then use Check to verify the key and generate a short worker sample.
- In Model & Voice, choose the provider and a voice.
Model IDs are used exactly as OpenRouter lists them, including suffixes such as
:free. When a model leaves the catalog, saved choices and cached audio stay
as they are.
Voices
Each model's voices come from OpenRouter's catalog. Fish Audio models, which the catalog lists without voices, offer the same voices as the native Fish Audio provider. Some models also offer default, which lets the model choose. Custom voice ID accepts any other voice the model supports.
On models whose endpoints support voice cloning, users can create their own voice. The transcript is optional. The sample is sent inline with each narration request.
Instructions, speed and model options
Instructions appears only for models known to accept it: OpenAI
gpt-4o-mini-tts, Google Gemini TTS and Fish Audio models. It is sent in
OpenRouter's instructions field. Native speed is offered for OpenAI, Fish
Audio and ByteDance Seed Audio models. Audio player speed works with every model.
Model options sets JSON sent with every request for the selected model. It
accepts provider.options keyed by provider, the zdr and data_collection
data policy, and public HTTPS input_references, up to 16 KB. It never accepts
credentials. The admin value is the default; users can override it under
Advanced model options in Model & Voice, or choose Use provider default.
Changing the model restores that model's default rather than carrying options
across. See OpenRouter's
speech guide
for each provider's options.
The key stays encrypted in OpenReader and reaches only OpenRouter's fixed endpoint through the credential broker. No additional environment variable is needed.