Resemble plugin for LiveKit Agents
Support for voice synthesis with the Resemble AI API, using both their REST API and WebSocket streaming interface.
See https://docs.livekit.io/agents/integrations/tts/resemble/ for more information.
Installation
pip install livekit-plugins-resemble
Pre-requisites
You'll need an API key from Resemble AI. It can be set as an environment variable: RESEMBLE_API_KEY
Additionally, you'll need the voice UUID from your Resemble AI account.
Examples
Recommended
import asyncio
from livekit.plugins.resemble import TTS
async def run_tts_example():
# Use TTS with async context manager for automatic resource cleanup
async with TTS(
api_key="your_api_key", # or set RESEMBLE_API_KEY environment variable
voice_uuid="your_voice_uuid",
# Optional parameters
sample_rate=44100, # Sample rate in Hz (default: 44100)
precision="PCM_16", # Audio precision (PCM_32, PCM_24, PCM_16, MULAW)
output_format="wav", # Output format (wav or mp3)
) as tts:
# One-off synthesis (uses REST API)
audio_stream = tts.synthesize("Hello, world!")
# Process chunks as they arrive
async for chunk in audio_stream:
# Audio data is in the 'frame.data' attribute of SynthesizedAudio objects
audio_data = chunk.frame.data
print(f"Received chunk: {len(audio_data)} bytes")
# Alternative: collect all audio at once into a single AudioFrame
audio_stream = tts.synthesize("Another example sentence.")
audio_frame = await audio_stream.collect()
print(f"Collected complete audio: {len(audio_frame.data)} bytes")
# Real-time streaming synthesis (uses WebSocket API)
# Only available for Business plan users in Resemble AI
stream = tts.stream()
await stream.synthesize_text("Hello, world!")
# Run the example
asyncio.run(run_tts_example())
Alternative: Manual Resource Management
If you prefer to manage resources manually, make sure to properly clean up:
import asyncio
from livekit.plugins.resemble import TTS
async def run_tts_example():
# Initialize TTS with your credentials
tts = TTS(
api_key="your_api_key",
voice_uuid="your_voice_uuid",
)
try:
# TTS operations
audio_stream = tts.synthesize("Hello, world!")
async for chunk in audio_stream:
# Access audio data correctly
process_audio(chunk.frame.data)
finally:
# Always clean up resources when done
await tts.aclose()
# Run the example
asyncio.run(run_tts_example())
Resource Management
When using this plugin outside of the LiveKit agent framework, it's important to properly manage the TTS instance lifecycle:
- Preferred method: Use the async context manager pattern (
async with TTS(...) as tts:) - If managing manually, always call
await tts.aclose()in a finally block - If you prefer to provide your own HTTP session, you can pass it using the
http_sessionparameter:
import aiohttp
async def with_custom_session():
async with aiohttp.ClientSession() as session:
async with TTS(
api_key="your_api_key",
voice_uuid="your_voice_uuid",
http_session=session
) as tts:
# Use TTS...
# No need to manually close anything - context managers handle it all
Implementation Details
This plugin uses two different approaches to generate speech:
- One-off Synthesis - Uses Resemble's REST API for simple text-to-speech conversion
- Streaming Synthesis - Uses Resemble's WebSocket API for real-time streaming synthesis
The WebSocket streaming API is only available for Resemble AI Business plan users.
Release files for livekit-plugins-resemble 1.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| livekit_plugins_resemble-1.8.1.tar.gz | 8.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| livekit_plugins_resemble-1.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.9 kB
Release files / livekit_plugins_resemble-1.8.1.tar.gz
| Download URL | livekit_plugins_resemble-1.8.1.tar.gz |
|---|---|
| Size | 8.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b5531ee5e7ffa487363770beb5ed12a3c4034e8339d7cc2087d19037d03302b9
|
|
BLAKE2b-256 checksum How to use checksums |
edd136549b9edafd09e4396f40238e59187c73f11d554bd92c452106cf4b5a72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / livekit_plugins_resemble-1.8.1-py3-none-any.whl
| Download URL | livekit_plugins_resemble-1.8.1-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2829c6c47ef8c343dac457bfaa335dd74b150a3ebb92934730af3d0b99e30e82
|
|
BLAKE2b-256 checksum How to use checksums |
fbb73828b14e3cb1a226d2626e37fa25ea4dc1d2fd966308a909317ad04eff0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log