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.

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. ptts.catalog_voices() lists it without loading a model, and ptts.catalog_voices(catalog) another one.

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

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

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.0
File Size Uploaded Provenance Actions
ptts-0.4.0.tar.gz 289.8 kB Without provenance Details for ptts-0.4.0.tar.gz

Built distributions (wheels)

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

Total release size: 56.1 MB

Release files / ptts-0.4.0.tar.gz

Download URL ptts-0.4.0.tar.gz
Size 289.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6e0855a213990d93b439e32216b592ce73fd11f1b5c071cdd73528fe5a5406c6
BLAKE2b-256 checksum
How to use checksums
d95d3bb8b5005809774991d465882fe54737badd9ee43931bdf3a056bf4eb336
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-cp39-abi3-win_arm64.whl
Size 6.6 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
c811898dce9beab77eb12ebecebab94a08414dbf292734b9e19b96a02eb4ac7d
BLAKE2b-256 checksum
How to use checksums
6028dc5a6fc9a355e006af21681d11ef39e4251df7f95d850806b4a76bd88b8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-cp39-abi3-win_amd64.whl
Size 6.8 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
bc51cc4d7adecc73e555dfcd040f0ad6f1c9796452979e068794e07a28ea988f
BLAKE2b-256 checksum
How to use checksums
61b5c81337ad791720744540ab685319cd23aa08a6d0a056db81a75f68d9e4d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
8860fa8bf2a87ce7524ac8057fc611139f5ac5d7c7cc4d3e7d2c97153c6fbe89
BLAKE2b-256 checksum
How to use checksums
9c2410dc18c0df29284dfd5c96349461f12f7e26bf2a88896f882d1fa7ac8ed6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
8da3ef0a2574f74859fac46abac32a2752cc9ed42351e4af871b2502b47fcdfd
BLAKE2b-256 checksum
How to use checksums
99ae584baf3fda138c2cd7de320b3b78f75fb5d93f94f77a6940c59f6cf8fe7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
ad696a58469a8c48a47a09f119e60cb054c03835a52a7856da04b00bd9858bd1
BLAKE2b-256 checksum
How to use checksums
5a143fac4a711bb258e88fb43254995f7d07c591dde904eea7421ea48229f32c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
3da1e610b606f20bc0dbfaed8ec30a996b2acd586b83ccc0c2061432ed105726
BLAKE2b-256 checksum
How to use checksums
14e6a7dfeb8fda4c36166749aae8cdff40f3bae068fb3095d137b667ee0fac89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
6a666c676663599805fe70beea7682b0d857d9dea4366cdaa3ae682d273a5492
BLAKE2b-256 checksum
How to use checksums
04aacc13941ecfbe8f747f000f88b45529aca6622ba8dcafecad4ae6bb398ab2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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

Download URL ptts-0.4.0-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
8fb949edcf908792eb8f181329cfac2b217424ae901a4133d0373483706a2240
BLAKE2b-256 checksum
How to use checksums
91b4852f02ee9514817770e7710bc34f303462ecaaeec2ddb26c3ac791a7c18f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Security for ptts 0.4.0

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