Guides

Use your own ElevenLabs, OpenAI or other text-to-speech API key in Lullula

We make Lullula, the read-aloud extension for Chrome, Edge and Firefox, built for listening. It comes with its own voices, so you don't need a provider to use it. But if you already have an account with a text-to-speech provider — maybe you pay for ElevenLabs, or you have OpenAI credit sitting unused — you can connect it in Lullula's settings with your own key. That provider's voices then read web pages in the same player as ours: reading starts at the first sentence of the article, not the top of the page; each sentence lights up as it's spoken; and Lullula picks up where you left off, on every page. You need no Lullula account or allowance for them; your provider bills you directly.

This guide covers the whole thing: the setup for each of the six providers, what stays the same and what changes, what you pay for, where your key and your text go, and what each error message means.

Availability: This guide applies to Lullula 1.8.2 on desktop Chrome, available in the Chrome Web Store. Availability on Edge and Firefox depends on the version released in each store.

Is this for you?

It is if you already use one of these providers, you like a particular voice of theirs, or you run your own speech server. It isn't if you just want natural voices with no setup. Creating a cloud account, setting up billing and copying an API key takes a while and is easy to get wrong. Lullula's own voices need none of that. Free to install. Listening in your browser's built-in voices is unlimited, with no account. Premium AI voices: one free run of 2,000 words without an account, then 2,000 words every month once you sign in.

The six providers you can connect, and what you'll paste into Lullula for each:

ProviderWhat you enterVoices you get
ElevenLabs API key, model Every voice in your ElevenLabs account, listed as multilingual
OpenAI (and OpenAI-compatible servers) API key, Base URL, model, optional extra voice id OpenAI's 13 built-in voices, or the list a compatible server reports
Azure Speech Subscription key, region Every voice in your region, grouped by language
Google Cloud Text-to-Speech API key Every Google voice, grouped by language
Amazon Polly Access key ID, secret access key, region, engine Every Polly voice in your region, grouped by language
Alibaba Cloud Qwen-TTS API key, region (Singapore or Beijing), model, optional extra voice id Qwen-TTS's built-in voices, listed as multilingual

Connect a provider in five steps

  1. Get a key from your provider. Each one has its own console; the provider sections below say exactly where to click. Most providers need billing set up, even when you stay inside a free allowance.
  2. Open Voice providers in Lullula's settings. Click the Lullula icon in your browser's toolbar and choose Settings. Voice providers is the section right after Voices. If you don't see it, update the extension.
  3. Fill in the provider's card and press Connect. There's one card per provider. Connect stays greyed out until every required field is filled. Lullula then checks your key by asking the provider for its voice list. When that works, the card says Connected · N voices · refreshed just now. When it doesn't, the provider's own error appears in red under the fields and nothing is saved.
  4. Choose a voice. Connecting doesn't change the voice you hear. In Settings, go to Voices and set the Plan filter to Own key to see only your provider's voices; each card shows the provider's name. Or open the voice picker in the player on any page: a Mine tab appears next to Premium and Free when your provider has a voice for the page's language.
  5. Press play. The page is read with your provider's voice, each sentence highlighted as it's spoken.

A detail worth knowing before you choose. ElevenLabs, OpenAI and Alibaba voices speak many languages, so Lullula lists them under Multiple languages, at the top of the list. Pick one of those in Settings and it becomes your voice for every language you haven't chosen a voice for yourself. Lullula files Azure, Google and Polly voices under a single language, so choosing one changes only that language.

Add Lullula to Chrome — Free No Lullula account needed for your provider's voices · Available in Lullula 1.8.2 for Chrome

Setting up each provider

Provider consoles change their menus often. The paths below were right when we wrote this; if a button has moved, the provider's own documentation, linked in each section, is the authority. Field names are as they appear on Lullula's cards.

ElevenLabs: get an API key and pick a model

Get the key. Sign in and open API keys in your ElevenLabs settings, then create a key. ElevenLabs lets you limit what a key may do: Lullula needs it to read your voice list and to generate speech, so if you restrict the key, allow both. You can also give the key its own credit limit, which is a good idea. Don't add an IP allowlist: the requests come from your own connection, and home IP addresses change.

In Lullula. Paste it into API key (ElevenLabs keys start with sk_; paste yours exactly as ElevenLabs shows it). Then pick a Model: Flash v2.5 (the default and fastest), Multilingual v2 (quality) or v3. What each costs is on ElevenLabs' pricing page, linked below.

Voices. Every voice the ElevenLabs API returns for your account. ElevenLabs says free-plan accounts can't use Voice Library voices through the API, even ones that play on its website. If you pick such a voice, Lullula says This voice needs a paid ElevenLabs plan; pick one of ElevenLabs' default voices instead, or upgrade your ElevenLabs plan. ElevenLabs API pricing.

OpenAI (and OpenAI-compatible or local servers): API key and Base URL

Get the key. Create a key on OpenAI's API keys page. Keys belong to a project, so the tidy way is a project just for Lullula, with a hard spend limit set in its limits. A Restricted key works as long as it allows Model capabilities (set to Request), which is what making speech needs; it doesn't need Models: Read. Without Model capabilities, the player says Your OpenAI key is missing a permission.

In Lullula. Paste the key into API key and leave Base URL as https://api.openai.com/v1. Pick a Model: gpt-4o-mini-tts (the default), tts-1 or tts-1-hd.

Voices. OpenAI's 13 built-in voices: alloy, ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer, verse, marin and cedar. OpenAI's documentation says tts-1 and tts-1-hd don't have ballad, verse, marin or cedar, and that the voices are tuned for English. They'll read other languages, but try one first. With tts-1 or tts-1-hd, pick one of the other nine. OpenAI API pricing.

A different server. Base URL is where Lullula sends requests, so you can point it at any service that speaks OpenAI's speech API, including one running on your own computer; plain http:// addresses are accepted. Include the version path (usually ending in /v1): Lullula adds /audio/speech, /audio/voices and /models to it. If the server lists its voices at /audio/voices, those are what you'll see. If not, you get OpenAI's 13 names, and you can type one of the server's own voices into Extra voice id (the hint's example is af_sky on a Kokoro server). Two limits: the server has to accept one of the three model names above, because there is no custom model field, and the API key can't be empty, so type anything if your server doesn't check one. We haven't tested particular servers.

Azure Speech: subscription key and region

Get the key. In the Azure portal, create a Speech resource (Create a resource, then Speech). It offers a Free (F0) tier and a Standard (S0) tier. Once it's created, open the resource's Keys and Endpoint page: it shows KEY 1, KEY 2 and the Location/Region. Either key works.

In Lullula. Paste a key into Subscription key and type the Region. You can write it the way the portal shows it (East US 2) or as its id (eastus2); Lullula accepts both.

Voices. Every voice Azure offers in your region, grouped by language. That's hundreds, so use the language list in Settings to find the ones you want.

Watch for. The key and the region must belong to the same resource. A mismatch gives Azure rejected the subscription key for region …; check the key and that the region matches the resource. Microsoft's Azure Speech quotas and limits page shows the Free tier allows only a small number of requests a minute. Lullula prepares a few sentences ahead of the one you're hearing, so on F0 you may see the quota or rate-limit error while reading quickly. Azure Speech pricing.

Google Cloud Text-to-Speech: get an API key

Get the key. Google's Text-to-Speech setup page walks through it. Pick or create a project at the top of the Cloud console, link a billing account (Google requires one even for the free allowance), and enable the Cloud Text-to-Speech API (not Speech-to-Text). Then go to APIs & Services → Credentials, choose Create credentials → API key, and restrict the key to the Cloud Text-to-Speech API. Leave application restrictions at None: a website (HTTP referrer) restriction can make Google refuse the key when Lullula uses it. You want a plain API key, not a service account.

In Lullula. Just API key.

Voices. Every Google voice, grouped by language. Lullula shows the part of the name after the language, so en-US-Neural2-F appears as Neural2 F. That first word is the voice's tier (Standard, Wavenet, Neural2, Chirp3 HD, Studio and so on), and it matters. The tiers are priced very differently, and the most expensive ones cost many times what Standard voices do. Check Google's pricing before you settle on one.

Amazon Polly: access key ID, secret and region

Get the keys. Don't use your AWS root user's keys. In the IAM console, create a user just for Lullula and attach the AWS managed policy AmazonPollyReadOnlyAccess, which covers listing voices and generating speech. (If you write your own policy, Lullula needs polly:DescribeVoices and polly:SynthesizeSpeech.) Then open that user's Security credentials tab and choose Create access key. AWS first suggests alternatives; choosing Other lets you continue. Copy the secret access key before closing the page, because AWS shows it only once.

In Lullula. Fill in Access key ID (this field isn't masked; the secret is), Secret access key and Region, typed as an id such as us-east-1 or eu-west-2. Then pick an Engine: Neural (the default), Standard (cheapest) or Generative (most natural). Not every voice has every engine. When a voice lacks the one you chose, Lullula uses Neural, then Standard, then Generative, and each engine is billed at its own rate. Generative voices exist only in the regions with Polly generative voices.

Voices. Every Polly voice in your region that one of those three engines can speak, grouped by language. Amazon Polly pricing.

Alibaba Cloud Qwen-TTS (qwen3-tts-flash): API key and region

Get the key. Open Model Studio's API key page, check the region at the top right, and create a key. Alibaba's API key guide has the details. Keys belong to one region, and Lullula connects to two: International (Singapore) and China (Beijing). A key made in any other Model Studio region won't work.

In Lullula. Paste the key into API key, choose the Region it was made in, and pick a Model: qwen3-tts-flash (the default, in both regions) or qwen-tts, which Alibaba offers only in Beijing. Extra voice id adds a voice that isn't in Lullula's built-in list.

Voices. Alibaba's API doesn't list voices, so Lullula carries the list itself: four for qwen-tts, and about fifty for qwen3-tts-flash, including several dialect voices. Because Connect can only check that the key is accepted, a problem with a particular model or voice shows up when you press play, not when you connect.

Watch for. Alibaba takes a few seconds per sentence. Lullula fetches the next sentences while one plays, but expect a pause at the start. Prices are on Alibaba's Qwen-TTS model page.

What stays the same, and what changes

Provider voices play through the same player as Lullula's premium voices. These work the same way:

And these are different:

One honest limit on testing. Each provider's code has automated tests against simulated responses, and our end-to-end test plays one web page in Chromium through a simulated OpenAI-compatible server. We haven't yet tested provider voices on PDFs, EPUBs, Google Docs, discussion threads, Edge or Firefox. They go through the same player, so they should behave the same. On Reddit and Hacker News threads, other commenters should get other voices from the same provider as the narrator, but that isn't tested yet either. If something doesn't work, email support@lullula.io.

What you'll pay

Your provider charges you, at its own prices, for the text Lullula sends it. Lullula adds nothing on top and takes no cut. Most providers charge by the character; OpenAI's gpt-4o-mini-tts and Alibaba's qwen-tts charge by the token. Several have a free monthly allowance or trial credit for new accounts. Their prices change, so here are their own pages rather than numbers that would go stale: ElevenLabs, OpenAI, Azure, Google, Amazon Polly, Alibaba.

What counts as usage, so the bill isn't a surprise:

Whether this works out cheaper or dearer than a Lullula plan depends on how much you listen and which voices you pick, so compare your provider's page with our pricing for the amount you actually listen to.

Privacy and keeping your key safe

Where your text goes. When you play a page with a provider's voice, the requests that make the audio go straight from your browser to that provider, with your key; they don't pass through Lullula. The provider's own terms and privacy policy apply to that text. Lullula never sees your key. The page's text still reaches Lullula for AI summaries, which run automatically unless you turn them off.

What still goes to Lullula. Connecting a provider changes only who makes the audio. AI summaries, which run automatically when the player appears unless you turn off Show Summary in General settings, language detection and the page outline still go to Lullula. If you're signed in, your reading history (the page's address, title, how far you got and a short excerpt at your place) is recorded whichever voice reads. We don't monitor pages you don't ask Lullula to read, and we don't sell your data. Our privacy policy has the details.

Where your key is kept. Stored only in your browser, never sent to Lullula. It sits in the extension's local storage for this browser profile, isn't synced to your other devices, and isn't encrypted there. Anyone who can use your browser profile could read it. So don't connect a key on a shared computer.

ElevenLabs and OpenAI both tell developers not to put API keys in browser code. That advice is about shipping a key inside an app other people use. Here you own the key and you're its only user, but the underlying point still holds: treat the key like a password with a spending limit attached. What each provider gives you for that:

To disconnect, press Remove on the provider's card. It deletes the key from this browser straight away, without asking first, and any voice choices that pointed at that provider go back to Lullula's defaults. If you think a key has leaked, delete it in the provider's console as well.

Troubleshooting: the error messages

When you press Connect, any error appears in red on the card and nothing is saved:

While reading, the player can show these messages, with your provider's name in place of Provider:

And a few things that aren't errors:

Frequently asked questions

Do I need a Lullula account to use my provider's voices?

No. Voices from a provider you connect need no Lullula account and use none of your Lullula allowance; your provider bills you directly. AI summaries still come from Lullula and draw on your Lullula allowance; they run automatically unless you turn them off in settings.

Is it cheaper than a Lullula plan?

It depends on how much you listen and which voices you pick. Most providers charge by the character (OpenAI's gpt-4o-mini-tts and Alibaba's qwen-tts by the token), several have a free monthly allowance or trial credit, and prices differ a lot between voice tiers. Compare your provider's price page with our pricing for the amount you actually listen to.

Do these voices work in the Lullula web app or in Listen later?

No. They play only in the browser extension where you connected the provider. The web app and the audio Listen later prepares in advance use Lullula's own voices.

Will my provider's voices follow me to another computer?

The key doesn't: it stays in the browser where you entered it and is never synced. Your voice choice can travel with your browser's own sync, but without the key there, Lullula reads with that language's default voice until you connect the provider on that computer too.

Does it work on PDFs, EPUBs and Google Docs?

Provider voices go through the same player as Lullula's premium voices, which is the one that reads PDFs, EPUBs and Google Docs, so they should. We haven't yet tested provider voices on PDFs, EPUBs, Google Docs, discussion threads, Edge or Firefox. If something doesn't work, tell us at support@lullula.io.

Can I use a self-hosted or local text-to-speech server?

If it speaks OpenAI's speech API, in principle yes: put its address in the OpenAI card's Base URL, including the version path such as /v1. Plain http:// addresses are accepted, so a server on your own computer can be reached. The server has to accept one of the three model names Lullula sends (gpt-4o-mini-tts, tts-1 or tts-1-hd), and the API key field can't be left empty. We haven't tested specific servers.

Can I connect two accounts from the same provider?

No, one per provider. To switch accounts, enter the other key on the same card and press Save & reconnect.

Is my API key encrypted?

No. It is stored as plain text in the extension's local storage in this browser profile: stored only in your browser, never sent to Lullula. Anyone who can use that browser profile could read it, so give the key a spending limit and don't connect one on a shared computer.

Your provider's voices or ours, one player

Connecting a provider doesn't replace anything. Lullula's own voices stay in the list, and you can switch between them and your provider's voices from the player at any time. If you already have a provider account, connecting it takes a few minutes. If you don't, start with our voices, which need no setup at all.

Add Lullula to Chrome — Free Free to install · Your provider bills you for its voices · Or use our voices with no setup