Test sentence: “What you have touched is a sphere, fired twice, in a small workshop. It was ordered in nineteen sixty-two by a harbor master, a careful man, who wanted brightness through fog.”
$0, offline, zero integration workonly tier with LIVE word events (what the scroll rides today) Rows read a shorter sample. Karen is the current Overexplainer voice. Enhanced/premium variants appear only if downloaded in Settings → Accessibility → Spoken Content → Voices.
$0runs in browser (~90 MB one-time model download) or on our serveriPhone-Chrome feasibility unverified — needs a device probe before we commitno live word events — scroll sync would pace from audio duration + our text map
~$0 at art-piece volumeserver-side: generated by a few lines in our existing CF Functions, no new vendorno word timestamps — estimated pacing for scroll
zero new keys — generated via your existing Google auth; prod would use the proxy's existing service account~30 voices, style-PROMPTABLE (see G7)no word timestamps — estimated pacing for scroll
the current quality bar for expressive TTSTIMESTAMPS VERIFIED: the API returned per-character timings for this exact sentence (175 chars, 10.5s) — a perfect live playhead for the scroll controllerfree tier ≈10k chars/month ≈ a dozen stories; $5/mo for ~30k morefree tier caps at 2 concurrent requests
Today's scroll sync feeds on the phone's LIVE per-word events — only built-in voices emit those. Any voice above means server- or browser-generated audio with no live events: ElevenLabs hands us word timestamps directly (best), everything else gets pacing estimated from audio duration + the text map. Both fit the new v3 controller; it was built to run from sparse or estimated playheads.