Skip to main content

ptts for Python

Python bindings for the Phonon Rust runtime.

To try it with uv, run:

uvx ptts --lang en "Hello world" -o out.wav

uvx handles the isolated Python environment and package dependencies. The first run downloads the default model, Phonon 31m, and caches it. --model accepts a local checkpoint directory or a Hugging Face repo as hf://owner/name, such as hf://gradium/phonon-40m-fr with --lang fr.

To use the Python API in your own environment, install the package:

pip install ptts

The wheel contains no model weights. Without a model argument, TTS downloads the default model on first use and caches it:

import ptts

tts = ptts.TTS(lang="en")
print(tts.voices)
tts.save("out.wav", "Hello world")

For a source install, use uv add /path/to/xn-ptts/ptts-pyo3 or pip install /path/to/xn-ptts/ptts-pyo3. Source builds need Rust installed; supported CPython wheels do not. See the development guide for repository build commands.

model, the first argument, names a local directory, a config.json, or a Hugging Face repo as "hf://owner/name" or "hf://owner/name@revision". Left out, it is ptts.DEFAULT_MODEL. Local paths download nothing. Gated repos, such as the Phonon 40m models, need their terms accepted on the model's Hugging Face page, then HF_TOKEN set or hf auth login. Rust examples, Python, and both servers use the shared checkpoint resolver. Every checkpoint supplies its own config.json and tokenizer.json. q8 prefers model.q8.gguf and q4k model.q4k.gguf; other formats prefer model.safetensors. Voices come from voices/ or embeddings/, plus default-voice.safetensors as default. Hub downloads use the revision after @ for all files. config= and revision= still work but are deprecated.

lang is required: en, fr, de, es or pt picks how numbers, symbols and abbreviations are spelled out; none uses the text as written. ptts.normalize("It costs $5.", lang="en") shows that reading, "It costs 5 dollars.", without loading a model, and takes the same rewrites.

Speech and voices

Reuse tts across requests. Use synth for an array, save for a WAV, or stream for chunks as they are decoded:

voice = tts.voices[0]
pcm = tts.synth("Hello", voice=voice)  # 1-D float32 NumPy array
seconds = tts.save("out.wav", "Hello", voice=voice)
with tts.stream("A longer sentence.", voice=voice) as audio:
    for chunk in audio:
        print(chunk.shape)  # process each PCM chunk as it arrives

tts.sample_rate is the PCM sample rate; save writes a mono 16-bit WAV and returns its duration. Leaving the with block stops a stream early and waits for its workers to finish. Streaming keeps bounded audio and latent buffers: leaving a stream unread pauses generation once they fill, and consuming chunks lets it resume.

tts.voices lists the voices that were found, and tts.languages the languages the checkpoint's config says it was trained for. When no voice is given, the checkpoint's configured default is used, then default if present, then the first by name. Pass voice="name" to any speech method to select one. A name the checkpoint does not have is looked up in the voice catalog, by name in any case and with or without accents, or by its voice ID. Only that voice is downloaded, on first use, and then joins tts.voices. The catalog is ptts.DEFAULT_VOICE_CATALOG, gradium/phonon-voices, unless voice_catalog= names another: an hf://owner/name[@revision] repo, or a local voices.jsonl or a folder holding one. tts.add_voice("NAME", "voice.safetensors") adds a voice file, such as one from the Gradium Studio scripts. ptts.catalog_voices() lists it without loading a model, and ptts.catalog_voices(catalog) another one. To change the speaking rate, pass conditions={"duration_delta": -0.3} to speak faster, or a positive value to speak slower.

Command line

The package also provides the ptts command:

python -m ptts --lang en "Hello world" -o out.wav

--model loads another model, as TTS's first argument does. --voice selects a voice of the checkpoint or of --voice-catalog, and --list-voices prints the catalog's voices. Run with --help for the remaining options. The package ships type stubs and py.typed.

Wheels

Linux and Windows x86_64 wheels target x86-64-v3 (AVX2, FMA and F16C); older x86 CPUs need a source build. The macOS x86_64 wheel does not need AVX.

Released wheels are cp39-abi3, so one per platform covers every CPython from 3.9 on, and a new CPython release needs no new wheel. Free-threaded CPython and PyPy cannot load an abi3 extension, so those two install from the sdist and compile the Rust runtime, which needs a Rust toolchain and takes a few minutes.

License

MIT or Apache-2.0, at your option. The model weights are not part of the package and come with their own licenses: Phonon 31m is under Apache 2.0, and Phonon 40m and Phonon 40m multilingual are under CC BY-NC 4.0. See each model's page on Hugging Face.

Metadata

Release files for ptts 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ptts 0.4.2
File Size Uploaded Provenance Actions
ptts-0.4.2.tar.gz 291.3 kB Without provenance Details for ptts-0.4.2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for ptts 0.4.2
File Actions
ptts-0.4.2-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for ptts-0.4.2-cp39-abi3-win_arm64.whl
ptts-0.4.2-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for ptts-0.4.2-cp39-abi3-win_amd64.whl
ptts-0.4.2-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for ptts-0.4.2-cp39-abi3-musllinux_1_2_x86_64.whl
ptts-0.4.2-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for ptts-0.4.2-cp39-abi3-musllinux_1_2_aarch64.whl
ptts-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for ptts-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ptts-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for ptts-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ptts-0.4.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for ptts-0.4.2-cp39-abi3-macosx_11_0_arm64.whl
ptts-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for ptts-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 56.1 MB

Release files / ptts-0.4.2.tar.gz

Download URL ptts-0.4.2.tar.gz
Size 291.3 kB
Tags Source
SHA-256 checksum
How to use checksums
3e8094a733db45917a70ec781c08e818b660cd19c554e3ee6597cd31df87787d
BLAKE2b-256 checksum
How to use checksums
95d995e638cb5dbdf06154466ec99f5a7c07ef4034af0443706fdce0feeb0db8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-win_arm64.whl

Download URL ptts-0.4.2-cp39-abi3-win_arm64.whl
Size 6.6 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
120d87acdfe082cb5571a89df34c2a852a30305e3887b30eefc12a5d4b9628b4
BLAKE2b-256 checksum
How to use checksums
2942893086d77e917436f50b1aa2a092695b7119f23d6cc832c40dd609bcede9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-win_amd64.whl

Download URL ptts-0.4.2-cp39-abi3-win_amd64.whl
Size 6.8 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
441b16ab9c2907973dc97d05965d984b74bf66cea9c412b9fdab0972727db6fb
BLAKE2b-256 checksum
How to use checksums
3e7d3f9aab9f385d991b147e6de7ee16661c77c2542dc64af1d194bb10bc2d3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL ptts-0.4.2-cp39-abi3-musllinux_1_2_x86_64.whl
Size 7.5 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
4859b9bfdbf9e936fd02c590b24ee6eb141d325c9e972741b7daddd644393524
BLAKE2b-256 checksum
How to use checksums
052da905fb29bb170c536c758ad872c0ac313e11d541f429919f08e3fb404121
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL ptts-0.4.2-cp39-abi3-musllinux_1_2_aarch64.whl
Size 7.0 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
f042b8a7c2aac12767c55087cd744d1c39e60eb4d46bac286fd54c49286e3b83
BLAKE2b-256 checksum
How to use checksums
a0eba9ab1966fb4a7a00d66e38dfb851592c0ffbcf46b763155e3579cfc1faa8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ptts-0.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 7.5 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
bd991d58d19dbd864119df72023e279b7ec2676b852f53006a63578b3f208870
BLAKE2b-256 checksum
How to use checksums
3fb8cd23a8535e0802951548ff2992672c835914d01829b18f34c88b3e6b0ec0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ptts-0.4.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.8 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
fb223e3e8c514b77c62cb5cc1ce43e1d062c1d0d3dcd88001efde37e4231f185
BLAKE2b-256 checksum
How to use checksums
b6538ea2d07be040cf4779f7d3e9d1a4526690eabef8e01fff7fe76d440fb1f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL ptts-0.4.2-cp39-abi3-macosx_11_0_arm64.whl
Size 6.8 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7a7ecdf1d86b39b0694e6d1acb60065aa3bbfde3dc8361a7b00d3543c305b1bd
BLAKE2b-256 checksum
How to use checksums
9902ea27b55f962f773a52700b699a3e423bc593425227b815634d9369e03ccd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / ptts-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl

Download URL ptts-0.4.2-cp39-abi3-macosx_10_12_x86_64.whl
Size 6.9 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c1147dfc547a7357ea557ff5ee269bd7a9227ee449cd61efa8429af9ada66eea
BLAKE2b-256 checksum
How to use checksums
9f3397319a6c4bbef83a6fff8bc1437f90269d0db939531a6b0290224b4925d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Security for ptts 0.4.2

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page