Skip to content

Gandr TTS in Pipecat.

A documented community integration: install the package, construct the service, and your Pipecat pipeline speaks.

Ask Claude CodeAsk ChatGPT

The whole integration

Install the package, construct the service, add it as the voice leg.

Integration
uv add pipecat-gandr

import os
from pipecat_gandr import GandrTTSService

tts = GandrTTSService(
    api_key=os.environ["GANDR_API_KEY"],
    params=GandrTTSService.InputParams(voice_id="gandr-mia"),
)

GandrTTSService implements the Pipecat TTS interface and holds one WebSocket connection open across turns. The full parameter reference lives in the Pipecat docs at docs.pipecat.ai/api-reference/server/services/tts/gandr.

What it needs

What it takes

One packageuv add pipecat-gandr
A keyGANDR_API_KEY in the environment
PipecatAny recent version with WebSocket TTS services
Python3.9 or newer

Speech that fits Pipecat's pipeline

Pipecat agents are pipelines of services. GandrTTSService implements the Pipecat TTS interface, so the pipeline keeps its existing structure and the service drops in as the voice leg.

The service holds one WebSocket connection open and reuses it across turns. Utterances are serialized in order, an interruption drops queued speech and reopens the connection so the next turn starts clean, and every failure path closes the turn with TTSStoppedFrame so a pipeline never waits on audio that will not come.

What the flat stream changes

A Pipecat agent in production speaks every turn of every call. On a per-character meter that is a running bill; on a flat stream the agent talks as much as the calls need and nothing is counted.

  • Documented as a community integration in Pipecat's own docs
  • Implements the Pipecat TTS interface, pipeline shape unchanged
  • Word timestamps: pass InputParams(word_timestamps=True) for per-word offsets
  • One stream carries a whole fleet of agents

Notes

Do I have to change my pipeline to use Gandr?

No. The service implements the Pipecat TTS interface, so your pipeline keeps its existing structure.

What happens when a caller interrupts?

Queued speech is dropped and the connection reopens, so the next turn does not wait behind audio nobody is listening to.

A key and one stream, and your Pipecat agent speaks.

Get a key

Full API reference , gandr.ai/docs