"Text in, audio out, fast enough to feel immediate."
The Paste Box and the Room
You copy a sentence, drop it into a box, pick a voice, and press Speak. A moment later the sentence is in the room — actual sound, from actual speakers. That short distance, from text on a screen to a voice in the air, is the entire product. Everything else in Bellows exists to make that distance short, cheap, and repeatable.
Why This Is an Engine, Not a Function
The naive version is three lines: take text, call a provider, play the bytes. It works exactly once. The moment you care about not paying twice for the same sentence, about what happens when the provider times out mid-request, about which of two accounts holds the right voice, about never leaking private audio to the wrong speaker — you are no longer writing a function. You are running an engine: a coherent operational domain with credentials, a cache, receipts, an owned audio device, and a lifecycle.
That is the whole argument for a separate repo. Provider accounts, paid-request recovery, audio-device ownership, and production lineage belong together — and they belong away from the brain that decides what to say. Bellows owns the mechanism of speech; cwkPippa keeps the identity doing the speaking.
The Shape of a Request
A consumer hands Bellows some text and a logical profile — a stable name like pippa or cwk, never a raw provider voice ID. Bellows resolves that profile to the right binding on the active account, computes a full synthesis identity, and either returns cached audio for free or makes exactly one paid request. The consumer never learns a voice ID, never derives a cache path, never touches the provider.