title: Experiments — twelve labs against one API description: "A dozen browser labs that exercise the ElevenLabs API feature by feature: voices, models, settings, timestamps, lexicons, concurrency, alignment, dialogue, sound, key scope and cost. Your key, your browser, nothing sent anywhere else." lead: "This site is a report, and a report is worth more when the reader can re-run it. These are the labs the evaluation should have had — one per feature, each with the method written down, each printing a result you can paste back as evidence." order: 5 toc: true provenance: commit: 7d1916aca5f3 date: 7 September 2026 note: "The bench came from the source vault; the other eleven labs were written for this site."
{{lab-header}}
<div class="warnbox"><p><b>Every lab here is unrun by its authors.</b> {{claim:labs-unrun}} They were written against the vendor's published request and response shapes by a session with no network access to the API and no key {{claim:egress-blocked}}. The one exception is <a href="/bench/">the bench</a>, which a human ran from their own browser on 5 September 2026 — and which is the source of every {{badge:verified}} claim on this site. If a lab is broken, the log at the bottom of it will tell you how, and <a href="https://github.com/SGit-AI/SGit-AI__Website__Provider__ElevenLabs">the repository</a> is where that becomes a fix.</p></div>
{{experiments}}
How these are built
Every lab shares one runtime, lab.js ↗ — about 350 lines, no dependencies, no build step, readable in one sitting. That is deliberate: a site whose argument is watch where your credential goes should let you watch. It does three things and nothing else.
- Keeps your keys in
localStorage, several of them, named, switchable — so a scoped key and a full key can be compared without retyping either. Nothing is sent to this site; there is no server here to send it to. - Calls exactly one host,
api.elevenlabs.io, with your key in thexi-api-keyheader {{claim:api-key-shape}}, and logs every request it makes at the bottom of the page. A CI check on this repository fails the build if any other network origin appears in the built site {{claim:keys-local-only}}. - Does the shared arithmetic — characters to cost, alignment to words to cues, results to markdown you can paste back into whatever keeps your evidence.
What to run first
If you have a key and ten minutes, in this order — it closes the four oldest open items on the ledger↗ for about fifteen cents:
- The bench↗, section 5 — the names test. Nobody has pressed this button since 5 September {{claim:names-test}}. Two minutes, and the site can finally say which names the model gets wrong.
- The pronunciation lab↗ — attach the lexicon and hear whether the aliases fix them {{claim:lexicon-hypothesis}}.
- The concurrency probe↗ — find the wall, so the semaphore holds a measurement instead of a guess {{claim:concurrency-unknown}}.
- The captions studio↗ — tune the cue rule against a real script and tell us what numbers you landed on {{claim:cue-rule}}.
The cost model↗ needs no key at all and answers the question people usually ask first.
What a lab is not
It is not a product, it is not a proxy, and it is not a pattern to copy into an application you ship. Each of these asks you to put a full account credential into a web page, which is pattern 0 with a ceiling↗ — defensible for the key's owner testing their own key, indefensible for anything with users. The publishable version of these pages has no key box at all, and it is specified rather than built↗ {{claim:sg-tts-spec}}.
This document is released under the Creative Commons Attribution 4.0 International licence (CC BY 4.0).