Skip to content

TTS: Polly go-live (operators)

Amazon Polly ships dormant. The adapter is registered on every boot but stays configured off until its AWS credentials are set, so a box with no keys behaves exactly as it did before Polly existed. Bringing it live is three moves: wire the keys, confirm the AWS account is opted out of AI training, then curate authentic Brian into the platform catalog from the admin panel.

Polly authenticates with AWS SigV4 (an access key, a secret, and a region), not a bearer token. Set all three on the service environment:

Terminal window
TTS_POLLY_ACCESS_KEY=AKIA... # the IAM access key id
TTS_POLLY_SECRET_KEY=... # the IAM secret access key
TTS_POLLY_REGION=eu-central-1 # Frankfurt

Use an IAM principal scoped to polly:SynthesizeSpeech only. The region is eu-central-1. Once all three are present, the provider reports configured and the admin Providers panel shows Polly keyed.

2. Confirm the AWS Organizations AI opt-out

Section titled “2. Confirm the AWS Organizations AI opt-out”

Amazon may otherwise use Polly request content to improve its services. An AWS Organizations opt-out policy blocks that org wide.

3. Whitelist authentic Brian, chain, and default

Section titled “3. Whitelist authentic Brian, chain, and default”

Everything below happens in the TTS admin panel. No auto-seed keys Polly for you: the operator curates each voice by hand, which is the whole point of the curated catalog.

  1. Open the voice catalog card and run discovery for Polly. The discovery pool lists Polly’s stock voices, each tagged with whether it is already whitelisted. Brian (en-GB) is the authentic AWS Brian.

  2. Whitelist Brian with the public name Brian. He appears in the streamer catalog immediately, provider hidden: nothing viewer facing renders the word “polly”.

  3. Set his backing chain to Polly, then tts.monster. The ordered chain is the authentic AWS Brian first, with the tts.monster “Brian Robot” (0993f688-6719-4cf6-9769-fee7b77b1df5) behind him. The canonical voice id stays polly:Brian regardless of which backing actually speaks.

  4. Point the platform default at polly:Brian. Every channel that has not chosen its own default now speaks as authentic Brian. A streamer’s own voice setting is untouched.

The backing chain is a graceful degrade, not a silent swap.

  • Polly healthy: authentic AWS Brian speaks.
  • Polly down or over its cap: the utterance falls through to the tts.monster Brian Robot and still speaks. A covered failure is not a refund, because the viewer got their audio.
  • Both backings down: the utterance is refused as voice_unavailable on the refund and explain road. The viewer is told to try another voice, a redemption’s points go back, and a points charge is refunded. Pyre never substitutes a different voice behind the viewer’s back.
  • It does not re-point any streamer who has explicitly chosen a voice. The platform default is rung two of the resolver, below a channel’s own setting.
  • It does not enable other Polly voices. Only Brian is whitelisted here; the rest of the discovery pool stays uncurated until an operator adds them.
  • It does not change billing wiring. Polly meters by character alongside the existing per provider caps in the Usage and caps card.