# Deployment ## Verified release environment The final package was validated on Windows x86-64 with Python 3.11, PyTorch 2.10, CPU inference, and CUDA inference. The runtime is ordinary PyTorch and is expected to work on modern Linux x86-64, but that combination is not yet part of the signed release matrix. Treat Python 3.11 as the reference environment rather than interpreting flexible requirements as proof of every possible version. Install the CPU or CUDA PyTorch wheel for the target first, then install either: ```bash python -m pip install -r requirements.txt ``` or the exact validation set: ```bash python -m pip install -r requirements-tested.txt ``` The PyTorch build suffix remains platform-specific and is intentionally not forced by the tested requirements file. ## Revision-pinned download ```python from huggingface_hub import snapshot_download model_dir = snapshot_download( "owensong/Inflect-Micro-v2", revision="v2.0.0", ) ``` The `v2.0.0` tag points to the frozen initial release. Use `main` only when you intentionally want later documentation or runtime fixes. ## Reproducibility Keep the checkpoint, `config.json`, frontend files, and `runtime/` directory together. Record `Inflect-Micro-v2`, the release revision, `speed`, `variation`, and `seed` with generated artifacts. Verify files against `release_manifest.json` when moving the package between machines. ## Long text The runtime splits long text at sentence punctuation and then at safe intra-sentence boundaries. Chunks are synthesized independently and joined with punctuation-dependent silence. This prevents unbounded inference but means a long paragraph is not one globally planned prosody pass. ## Production boundaries - Instantiate `InflectTTS` once and reuse it; loading per request wastes time. - Serialize calls to one model instance unless the surrounding application explicitly manages device memory and random seeds. - Validate empty or untrusted input before synthesis. - Set a fixed seed for deterministic caching and tests. - Measure on the actual target device before claiming real-time operation. - Apply an explicit CPU thread policy in production rather than inheriting all visible host cores. ## Capacity planning - The FP32 checkpoint is 37.53 MB for Micro and 15.97 MB for Nano. - Peak RAM and VRAM depend on PyTorch, allocator state, input length, and device. Measure the deployed process rather than estimating memory from weight size. - The reference runtime is non-streaming: the full chunk is returned after synthesis. - One model instance should process one request at a time unless the application owns synchronization and random seed isolation. ## Troubleshooting - Missing phonemizer errors: reinstall `phonemizer` and `espeakng-loader` from `requirements.txt`. - Unexpected pronunciation: spell out ambiguous abbreviations or add context; the release frontend is English-only. - Flat or unstable delivery: keep `variation` near the default before changing speed. - Long pauses: inspect source punctuation because chunk boundaries intentionally follow punctuation. - Slow first request: model loading is measured separately from warm synthesis and should not happen per utterance.