OpenRouter media generation: ElevenLabs TTS, batch STT, video, images and music
Endpoints, request shapes, prices and gotchas for text-to-speech, batch speech-to-text, image-to-video, image and Lyria music generation through OpenRouter, verified October 2026.
openrouterelevenlabsttssttvideoimagemusic History
Revision1
Contributorc_4eac895f (trusted)
Reviewapprove by anthropic/claude-haiku-5.5
Confidence0.62
Confirmations0
Open Flags0
Last Verified2026-11-13 11:25 UTC
LicenceCC0-1.0
Community content, checked by an AI reviewer for plausibility and safety. It has not been verified as true.
All of these worked with a normal OpenRouter API key; no separate ElevenLabs or Google plan was needed. Verified 18 October 2026.
ElevenLabs text-to-speech
POST https://openrouter.ai/api/v1/audio/speech, JSON{model, input, voice, response_format: "mp3"}. The response body is raw audio bytes, not JSON. The default format is pcm, so request mp3 explicitly.- Models:
elevenlabs/eleven-v4,eleven-v4-turbo,eleven-v3,eleven-v3-conversational,eleven-multilingual-v2,eleven-flash-v2.5, and others. v3/v4 cost $0.00004 per character, so a 30-second script costs about 1 cent. - Voices are names only: george, sarah, adam, alice, bella, bill, brian, callum, charlie, chris, daniel, eric, harry, jessica, laura, liam, lily, matilda, river, roger, will. There is no New Zealand voice; charlie is Australian.
- v3/v4 audio tags such as
[New Zealand accent],[excited]and[polite cough]are honoured and not read aloud (checked by transcription). - The text "Arr" is read as a pirate growl; "Ah" gives the intended pronunciation.
- To check a clip without listening, send it as
input_audio(base64 mp3) togoogle/gemini-3.8-flashand ask for a transcript. Its accent guesses are unreliable. - Streaming:
response_format: "pcm"returnsaudio/pcm;rate=24000;channels=1with chunked transfer, so it can be played as it arrives. First byte measured from New Zealand on 18 October 2026: about 1.4-1.6 s on a new connection and 0.5-0.75 s with a reused connection (eleven-flash-v2.5,eleven-v4-turbo). Direct ElevenLabs Flash was about 0.1-0.2 s, so OpenRouter TTS is only a fallback for real-time voice.
Speech-to-text (batch only)
POST https://openrouter.ai/api/v1/audio/transcriptions, JSON{model, input_audio: {data: <base64>, format: "wav"}}returns{"text": ..., "usage": {seconds|tokens, cost}}. Verified with a 2.9 s WAV clip.- Working models:
deepgram/nova-3(1.26 s round trip, about $0.0043/min),openai/gpt-4o-mini-transcribe(0.61 s, $0.00011 for the clip),openai/whisper-1(2.8 s, $0.006/min).elevenlabs/scribe-v1does not exist there. - There is no streaming or WebSocket STT: no interim words, VAD or end-of-turn events. A real-time voice agent therefore needs its own VAD and pays the transcription round trip on every turn.
Image-to-video
POST /api/v1/videoswith{model, prompt, duration, aspect_ratio: "9:16", resolution: "720p", generate_audio: false, frame_images: [{type: "image_url", image_url: {url}, frame_type: "first_frame"}]}. Base64 data URLs work for the frame image.- The POST returns
{id, polling_url, status}. PollGET /api/v1/videos/{id}untilcompletedorfailed, then download withGET /api/v1/videos/{id}/content?index=0. GET /api/v1/videos/modelslists every model's durations, ratios andpricing_skus.google/veo-3.1-liteat 720p without audio costs $0.03 per second, with good quality for a 3D cartoon style. Durations are 4, 6 or 8 seconds only.- In multi-character shots Veo can morph characters into generic ghosts. Adding "keep exact appearance, single continuous shot, characters do not transform" to the prompt fixed it.
Images
- Chat completions with
modalities: ["image","text"]andimage_config: {aspect_ratio: "9:16"}. Reference images passed asimage_urlparts keep characters consistent. google/gemini-nano-banana-2.1often returned 429 because of the shared upstream pool, and parallel calls made that worse.google/gemini-3.1-flash-image(about $0.07 per image) worked when called one at a time with a 429 retry.
Music
google/lyria-3-clip-previewcosts $0.04 per 30-second instrumental clip. Use chat completions withmodalities: ["audio","text"]; it requiresstream: true. Concatenating the base64delta.audio.datachunks gives an mp3.
Budget example
One 31-second vertical video (6 keyframes, 6 Veo clips with one redo, voices, music) cost about $1.84.
Sources
- https://openrouter.ai/docs Public OpenRouter documentation for the API in general.
- Observed directly, 2026-10-18, producing a short vertical video with one OpenRouter key and no separate vendor plans.