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.1

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.1
File Size Uploaded Provenance Actions
ptts-0.4.1.tar.gz 291.1 kB Without provenance Details for ptts-0.4.1.tar.gz

Built distributions (wheels)

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

Total release size: 56.1 MB

Release files / ptts-0.4.1.tar.gz

Download URL ptts-0.4.1.tar.gz
Size 291.1 kB
Tags Source
SHA-256 checksum
How to use checksums
dfc4efc28d620c3fa043e0842e54b0a00a2d93e833b1663ac93b32424e6492fd
BLAKE2b-256 checksum
How to use checksums
d8dcc630b80049d4a63e17c183b4344ec01f6164e4b6c1f7deb9dec1df594037
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.1-cp39-abi3-win_arm64.whl

Download URL ptts-0.4.1-cp39-abi3-win_arm64.whl
Size 6.6 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
4df18ba96ae6e3f3936d4c914a5a668350f9b704d223e2494f9aa70e8be4520b
BLAKE2b-256 checksum
How to use checksums
4a36714ec6c5faa7ccb3c8c61394da0a17169f88b8be6bfb94f1f3f98ba60f25
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.1-cp39-abi3-win_amd64.whl

Download URL ptts-0.4.1-cp39-abi3-win_amd64.whl
Size 6.8 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
fa60a8d6baa29f3241c485831c927418e6e0d71d09423371b646728d9b6426e2
BLAKE2b-256 checksum
How to use checksums
33fb24c58dc7c0957dbbc9fb57987781ea82abdfe1f708a960d133998a2bab0b
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.1-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL ptts-0.4.1-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
9384afbab9c722d6b8c7ecde05472a72c506d3ea53a1ed9c6d866592c9383fb5
BLAKE2b-256 checksum
How to use checksums
b768a58ebad204b9fed868e6299a660314f6c40107fec546f5e63422c69e9aa6
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.1-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL ptts-0.4.1-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
b9fc891199c8c1adf04bd48f5db0306a56b27204ddfaa1b08410ac2566e90094
BLAKE2b-256 checksum
How to use checksums
6f1bb9867f69b6b58648c0d6af5c778c8cc0caadec6660c594bcc882e490d14e
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.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ptts-0.4.1-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
d0d4fec6679fc518497af81fb1c462411f61be8bb8e45046b4f620eaa55c7134
BLAKE2b-256 checksum
How to use checksums
6fae264eed6f026d051ad2bab6e2a41e49c05a8d0b90346db1d0209895fefe61
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.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ptts-0.4.1-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
8af68003dfbe61d03133931341d74917de0cd38b46c604f7c74b74f4ef676876
BLAKE2b-256 checksum
How to use checksums
bbdc87a0061431767b8f33941e11e17178520b5883b3a3ee4d029bc610d783c3
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.1-cp39-abi3-macosx_11_0_arm64.whl

Download URL ptts-0.4.1-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
95da7d0311c0c19f7ddbc7f90140bbde9d909a4d5cf2cf80497056ec7f0ba968
BLAKE2b-256 checksum
How to use checksums
bee76d2194426e74a8f1193930d67ec9234b77688bcbbab92141c176636f9e4c
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.1-cp39-abi3-macosx_10_12_x86_64.whl

Download URL ptts-0.4.1-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
a8269a908355a713ee8f36d71cdc3fd2dd0ae9edfdd359b1f7d3fb07e8f8779a
BLAKE2b-256 checksum
How to use checksums
e8c69d14f87dc376308755444c821cc0803140718ab5e5d4dd25d036b107c176
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.1

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