VoiceKit — Python SDK
Official Python wrapper for VoiceKit: neural speech synthesis, transcription, sentiment analysis, and batch operations.
Install
pip install voicekit-client
Quick start
from voicekit import VoiceKitClient, b64
client = VoiceKitClient(api_key="YOUR_KEY")
# Synthesis → raw audio bytes
audio = client.synthesize("Привет! Это синтез русской речи.", voice="preset_anna", format="mp3")
with open("speech.mp3", "wb") as f:
f.write(audio)
# Streaming (Pro/Business)
for chunk in client.synthesize_stream("Первое предложение. Второе."):
pass # write chunks to a file or socket
# Transcription (async → poll)
job = client.transcribe("audio.wav", keyterms=["диагноз"])
result = client.get_transcription_job(job["job_id"])
while result["status"] not in ("completed", "failed"):
result = client.get_transcription_job(job["job_id"])
# Short-file sync transcription
transcript = client.transcribe_sync("audio.wav")
# Analysis (sentiment + keywords + entities)
analysis = client.analyze_sync("audio.wav")
# Text intelligence
lang = client.detect_language("Как дела?")
topics = client.topics("Нейросети и алгоритмы")
summary = client.summarize("Длинный текст для резюме.", max_sentences=3)
moderation = client.moderate("Это оскорбительное сообщение.")
# Batches
batch = client.batch_synthesize([
{"text": "Первый текст", "voice": "preset_anna"},
{"text": "Второй текст", "voice": "dmitri"},
])
status = client.get_batch(batch["batch_id"])
analysis_batch = client.batch_analyze([
{"audio": b64("a.wav"), "language": "ru"},
{"audio": b64("b.wav"), "language": "ru"},
])
# Voice cloning (Pro/Business)
clone = client.create_clone_voice(
name="My voice",
prompt_text="Точный текст образца.",
samples="reference.wav",
)
print(client.list_clone_voices())
client.delete_clone_voice(clone["id"])
# VAD (speech segments)
segments = client.vad("audio.wav")
# Account
usage = client.usage()
balance = client.billing_balance()
Audio effects (Pro/Business)
# Inline during synthesis — the chain is applied to the synthesized audio
audio = client.synthesize(
"Привет!",
effects='[{"type":"reverb","room_size":0.5},{"type":"pitch","semitones":2}]',
)
# Async processing of an existing file
import time
job = client.apply_audio_effects("voice.mp3", [{"type": "compressor", "ratio": 3}])
while client.get_audio_effects_job(job["job_id"])["status"] not in ("completed", "failed"):
time.sleep(1)
result = client.download_audio_effects(job["job_id"])
open("voice_fx.mp3", "wb").write(result)
Audio cleaning (Pro/Business)
# Denoise + normalize an existing file as a background job
import time
job = client.clean_audio("noisy.wav") # one-click preset
# or with options:
# job = client.clean_audio("noisy.wav", options={"denoise": {"strength": 0.8}})
while client.get_audio_cleaning_job(job["job_id"])["status"] not in ("completed", "failed"):
time.sleep(1)
clean = client.download_audio_cleaning(job["job_id"])
open("voice_clean.wav", "wb").write(clean)
WebSocket streaming (Pro/Business)
Требует опциональной зависимости:
pip install "voicekit-client[streaming]"
import asyncio
async def main():
client = VoiceKitClient(api_key="YOUR_KEY")
stream = await client.transcribe_stream(language="ru", keyterms=["диагноз"])
await stream.send_audio(pcm16_chunk_1) # raw PCM16, 16 kHz mono
await stream.send_audio(pcm16_chunk_2)
await stream.stop() # finalize the utterance
async for event in stream: # session / vad / partial / final / error
print(event["type"], event)
await stream.close()
vad = await client.vad_stream() # VAD events only (speech_started/ended)
await vad.send_audio(pcm16_chunk)
await vad.stop()
async for event in vad:
print(event["type"], event)
await vad.close()
asyncio.run(main())
Voice ID (Pro/Business)
# Voice passport: language, gender, age, emotion, speaker embedding, AI-vs-human
passport = client.voice_id("recording.wav")
# Voice biometrics on your own profiles
profile = client.enroll_voice("speaker.wav", name="Alice") # → {"profile_id": "voice_…"}
check = client.verify_voice("check.wav", profile["profile_id"])
# → {"profile_id": "voice_…", "similarity": 0.81, "verified": true, "threshold": 0.7}
match = client.identify_voice("check.wav") # 1:N across your profiles
# → {"best_match": {…}, "matches": […], "threshold": 0.7}
profiles = client.list_voice_profiles()
client.delete_voice_profile(profile["profile_id"])
Configuration
| Option | Default | Description |
|---|---|---|
api_key |
— | API key (required) |
base_url |
https://ttsapi.ru |
API base URL (e.g. http://localhost:5080 for local dev) |
timeout |
120.0 |
Per-request timeout in seconds |
Errors raise VoiceKitError with .status (HTTP status), .code (machine-readable
code) and .message.
Metadata
Release files for voicekit-client 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| voicekit_client-0.2.0.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voicekit_client-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.2 kB
Release files / voicekit_client-0.2.0.tar.gz
| Download URL | voicekit_client-0.2.0.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d601bf5e6ebf976ebe01a437fc2ed6cc5632b60c1683c382c97b27a2f383ef28
|
|
BLAKE2b-256 checksum How to use checksums |
f9e8d5956ff7b7defa5f48680a3ae833476c1400c8d441f08352209575702471
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|
Release files / voicekit_client-0.2.0-py3-none-any.whl
| Download URL | voicekit_client-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
068ca951ab71cafdb0bf2ad72a22533fe3be8791749cd3cbbce1f55d6f554b43
|
|
BLAKE2b-256 checksum How to use checksums |
990831980339ad8ee45ccf7ab01194625810fa5730506b952664bd267255fb35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|