Zyphra Python Client
A Python client library for interacting with Zyphra's text-to-speech API.
Installation
pip install zyphra
Quick Start
from zyphra import ZyphraClient
# Initialize the client
client = ZyphraClient(api_key="your-api-key")
# Generate speech and save to file
output_path = client.audio.speech.create(
text="Hello, world!",
speaking_rate=15,
model="zonos-v0.1-transformer", # Default model
output_path="output.webm"
)
# Or get audio data as bytes
audio_data = client.audio.speech.create(
text="Hello, world!",
speaking_rate=15
)
Features
- Text-to-speech generation with customizable parameters
- Support for multiple languages and audio formats
- Voice cloning capabilities
- Multiple TTS models with specialized capabilities
- Both synchronous and asynchronous operations
- Streaming support for audio responses
- Built-in type hints and validation
- Support for default and custom voice selection
Requirements
- Python 3.8+
aiohttpfor async operationspydanticfor data validationrequestsfor synchronous operations
Detailed Usage
Synchronous Client
from zyphra import ZyphraClient
with ZyphraClient(api_key="your-api-key") as client:
# Save directly to file
output_path = client.audio.speech.create(
text="Hello, world!",
speaking_rate=15,
model="zonos-v0.1-transformer",
output_path="output.webm"
)
# Get audio data as bytes
audio_data = client.audio.speech.create(
text="Hello, world!",
speaking_rate=15
)
Asynchronous Client
from zyphra import AsyncZyphraClient
async with AsyncZyphraClient(api_key="your-api-key") as client:
audio_data = await client.audio.speech.create(
text="Hello, world!",
speaking_rate=15,
model="zonos-v0.1-transformer"
)
Supported TTS Models
The API supports the following TTS models:
zonos-v0.1-transformer(Default): A standard transformer-based TTS model suitable for most applications.- Emotion and pitch_std parameters available
zonos-v0.1-hybrid: An advanced model with:- Better support for certain languages (especially Japanese)
- Supports
speaker_noiseddenoising parameter - Improved voice quality in some scenarios
Advanced Options
The text-to-speech API supports various parameters to control the output:
from typing import Optional, Literal
from pydantic import BaseModel, Field
# Define supported models
SupportedModel = Literal['zonos-v0.1-transformer', 'zonos-v0.1-hybrid']
class TTSParams:
text: str # The text to convert to speech (required)
speaker_audio: Optional[str] # Base64 audio for voice cloning
speaking_rate: Optional[float] # Speaking rate (5-35, default: 15.0)
fmax: Optional[int] # Frequency max (0-24000, default: 22050)
pitch_std: Optional[float] # Pitch standard deviation (0-500, default: 45.0) (transformer model only)
emotion: Optional[EmotionWeights] # Emotional weights (transformer model only)
language_iso_code: Optional[str] # Language code (e.g., "en-us", "fr-fr")
mime_type: Optional[str] # Output audio format (e.g., "audio/webm")
model: Optional[SupportedModel] # TTS model (default: 'zonos-v0.1-transformer')
speaker_noised: Optional[bool] # Denoises to improve stability (hybrid model only, default: True)
default_voice_name: Optional[str] # Name of a default voice to use
voice_name: Optional[str] # Name of one of the user's voices to use
class EmotionWeights:
happiness: float = 0.6 # default: 0.6
sadness: float = 0.05 # default: 0.05
disgust: float = 0.05 # default: 0.05
fear: float = 0.05 # default: 0.05
surprise: float = 0.05 # default: 0.05
anger: float = 0.05 # default: 0.05
other: float = 0.5 # default: 0.5
neutral: float = 0.6 # default: 0.6
Supported Languages
The text-to-speech API supports the following languages:
- English (US) -
en-us - French -
fr-fr - German -
de - Japanese -
ja(recommended to use withzonos-v0.1-hybridmodel) - Korean -
ko - Mandarin Chinese -
cmn
Supported Audio Formats
The API supports multiple output formats through the mime_type parameter:
- WebM (default) -
audio/webm - Ogg -
audio/ogg - WAV -
audio/wav - MP3 -
audio/mp3oraudio/mpeg - MP4/AAC -
audio/mp4oraudio/aac
Language and Format Examples
# Generate French speech in MP3 format
audio_data = client.audio.speech.create(
text="Bonjour le monde!",
language_iso_code="fr-fr",
mime_type="audio/mp3",
speaking_rate=15
)
# Generate Japanese speech in WAV format with hybrid model (recommended)
audio_data = client.audio.speech.create(
text="こんにちは世界!",
language_iso_code="ja",
mime_type="audio/wav",
speaking_rate=15,
model="zonos-v0.1-hybrid" # Better for Japanese
)
Using Default and Custom Voices
You can use pre-defined default voices or your own custom voices:
# Using a default voice
audio_data = client.audio.speech.create(
text="This uses a default voice.",
default_voice_name="american_female",
speaking_rate=15
)
Available Default Voices
The following default voices are available:
american_female- Standard American English female voiceamerican_male- Standard American English male voiceanime_girl- Stylized anime girl character voicebritish_female- British English female voicebritish_male- British English male voiceenergetic_boy- Energetic young male voiceenergetic_girl- Energetic young female voicejapanese_female- Japanese female voicejapanese_male- Japanese male voice
Using Custom Voices
You can use your own custom voices that have been created and stored in your account:
# Using a custom voice you've created and stored
audio_data = client.audio.speech.create(
text="This uses your custom voice.",
voice_name="my_custom_voice",
speaking_rate=15
)
Note: When using custom voices, the voice_name parameter should exactly match the name as it appears in your voices list on playground.zyphra.com/audio. The name is case-sensitive.
Model-Specific Parameters
For the hybrid model (zonos-v0.1-hybrid), you can utilize additional parameters:
# Using the hybrid model with its specific parameters
audio_data = client.audio.speech.create(
text="This uses the hybrid model with special parameters.",
model="zonos-v0.1-hybrid",
speaker_noised=True, # Denoises to improve stability
speaking_rate=15
)
Emotion Control
You can adjust the emotional tone of the speech:
from zyphra.models.audio import EmotionWeights
# Create custom emotion weights
emotions = EmotionWeights(
happiness=0.8, # Increase happiness
neutral=0.3, # Decrease neutrality
# Other emotions use default values
)
# Generate speech with emotional tone
audio_data = client.audio.speech.create(
text="This is a happy message!",
emotion=emotions,
speaking_rate=15,
model="zonos-v0.1-transformer"
)
Voice Cloning
You can clone voices by providing a reference audio file:
import base64
# Read and encode audio file
with open("reference_voice.wav", "rb") as f:
audio_base64 = base64.b64encode(f.read()).decode('utf-8')
# Generate speech with cloned voice
audio_data = client.audio.speech.create(
text="This will use the cloned voice",
speaker_audio=audio_base64,
speaking_rate=15,
model="zonos-v0.1-transformer"
)
Error Handling
from zyphra import ZyphraError
try:
client.audio.speech.create(
text="Hello, world!",
speaking_rate=15,
model="zonos-v0.1-transformer"
)
except ZyphraError as e:
print(f"Error: {e.status_code} - {e.response_text}")
Available Models
Speech Models
zonos-v0.1-transformer: Default transformer-based TTS modelzonos-v0.1-hybrid: Advanced hybrid TTS model with enhanced language support
License
MIT License
Metadata
Release files for zyphra 0.1.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| zyphra-0.1.6.tar.gz | 9.5 kB | Without provenance | Details for zyphra-0.1.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| zyphra-0.1.6-py3-none-any.whl | Python 3 | none | any | Details for zyphra-0.1.6-py3-none-any.whl |
Total release size: 17.6 kB
Release files / zyphra-0.1.6.tar.gz
| Download URL | zyphra-0.1.6.tar.gz |
|---|---|
| Size | 9.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71c5aa9593ff7fcc39da94504f4ad152b1320b1f9be94343621e37de1052f632
|
|
BLAKE2b-256 checksum How to use checksums |
0747a3e21d1b2f73cfcd18aa8e8a61ddbd1619237255ab7ec824f92b677ac85f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.11
|
Release files / zyphra-0.1.6-py3-none-any.whl
| Download URL | zyphra-0.1.6-py3-none-any.whl |
|---|---|
| Size | 8.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb43807f5c7feed0300d5bc1fc82d37c183b9cfa8307537c531404cbc54487dd
|
|
BLAKE2b-256 checksum How to use checksums |
747013fedc47266eafef0db4b512744d8228118cfa012b5bf6e00bb78d447192
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.11
|
Security for zyphra 0.1.6
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.