Note: when a solution requires speech synthesis and the internet is unavailable or restricted due to data residency, Piper TTS becomes a rock-solid choice. This open-source neural network from the Home Assistant team runs on CPU in real time. In projects with medical data or government systems, transmitting audio to the cloud is unacceptable—Piper solves this: all synthesis is performed locally, without external requests, with latency under 100 ms. We use it in edge projects—from voice prompts in workshop terminals to smart home notifications without the cloud. No cloud APIs, no leak risks—only local inference on your hardware.
Why is offline speech synthesis critical for edge devices?
Voice notifications in industrial HMIs, sound prompts in POS terminals, text reading in automotive systems without a SIM card—everywhere you need reliable TTS without external dependencies. Piper handles Russian and 40+ other languages; voices take 30–250 MB, and generation is faster than playback. Compare: a real logistics case—a terminal with Raspberry Pi 4 synthesizes 50 voice messages per hour without a single failure, at 60% CPU load and peak load of up to 100 simultaneous requests.
How does it work?
echo "Hello, this is offline speech synthesis." | piper --model en_US-lessac-medium.onnx --output_file speech.wav
Python API via piper-phonemize + onnxruntime. Full pipeline: text → phonemes → mel-spectrogram → waveform. Piper uses VITS architecture with HiFi-GAN decoder. Inference on ONNX Runtime—can be customized for ARM, x86, RISC-V. As noted in the Piper TTS documentation, first-word latency is under 100 ms.
Inference optimization
For edge devices, efficiency is critical. We apply INT8 quantization: models take 30–250 MB without quality loss (MOS remains 3.7+). On Raspberry Pi 4, a single model synthesizes 10 seconds of audio in 1–2 seconds (real-time factor 0.1–0.2). On Jetson Nano with GPU—up to 0.05 RTF. For high-load systems, we configure process pools and audio buffering.
Russian voices
Currently, four Russian voices are available: male ru_RU-ruslan-medium and ru_RU-denis-medium, female ru_RU-irina-medium, and experimental ru_RU-natasha-medium. All models have MOS quality 3.7–3.9. We can select the optimal voice for your scenario—for example, neutral ruslan is better for notifications, while more natural irina suits an assistant.
| Model |
Timbre |
Size |
Quality (MOS) |
| ru_RU-ruslan-medium |
Male |
60 MB |
3.8 |
| ru_RU-denis-medium |
Male |
50 MB |
3.7 |
| ru_RU-irina-medium |
Female |
65 MB |
3.9 |
Adding a custom voice is possible but requires recording a speaker (1–3 hours of clean audio) and training a model based on Coqui VITS. We provide this service separately: from data collection to custom voice deployment in Piper.
Comparison with alternatives
|
Piper |
Coqui XTTS |
ElevenLabs |
| Offline |
Yes |
Yes |
No |
| Quality |
Good |
Excellent |
Superior |
| Latency |
<100 ms |
200–500 ms |
100–300 ms (API) |
| Custom voice |
Hard |
Easy |
Easy |
Technical inference details
Piper uses VITS architecture with HiFi-GAN decoder. Inference is performed via ONNX Runtime. INT8 quantized models are supported, reducing memory requirements and speeding up synthesis on edge devices.
How we integrate Piper TTS in 2-3 days
The process includes clear steps:
- Requirements analysis—determine target voices, platform (ARM, x86, RISC-V), expected load, and latency requirements.
- Binary build—statically link Piper for your architecture to minimize dependencies.
- API integration—write Python/C++ wrapper or HTTP server on FastAPI with streaming output support.
- Load testing—measure p99 latency at 100 simultaneous requests, check stability for 24 hours.
- Documentation and monitoring—provide systemd unit, nginx config examples, logs, and metrics.
- 1-month support—incident resolution, fine-tuning for changing load.
We provide deployment and monitoring documentation—with systemd unit examples, nginx configs for HTTP wrapper. We train your team to run and maintain the service. Over 5+ years, we have implemented 10+ projects with offline speech synthesis—from logistics terminals to voice assistants in vehicles. No data leak incidents via cloud APIs. Quality assurance at all stages, certified engineers.
What is included
- Selection of optimal model for your tasks
- Building Piper for your architecture (ARM, x86, RISC-V)
- Integration with your code (Python / C++ / HTTP-API)
- Load testing up to 100 simultaneous requests
- Deployment and monitoring documentation
- 1-month support after integration
Contact us to evaluate your project—we will provide a commercial proposal within one business day. Get a consultation on offline speech synthesis integration. Savings on cloud APIs can reach up to 90% of subscription costs.
Edge AI and Optimization: How to Deploy Models Without Cloud?
Imagine: your face recognition model has 4 seconds latency on Jetson Orin, the battery runs out in an hour, and the model crashes with OOM. We are a team of Edge AI engineers with 5+ years in production — we have optimized over 150 models for edge devices. Without profiling and proper choice of quantization or distillation, the project is doomed. The gap between research code and edge deployment is a separate engineering discipline; we help you master it in 2–16 weeks turnkey. Edge AI and model optimization services are not just export, but systematic work with hardware.
Why Simply Exporting a Model Doesn't Work?
A PyTorch model with float32 and batch_size=32 is not ready for edge. Typical problems:
- ResNet-50 in fp32 occupies 98 MB, inference on Cortex-A78 — 380 ms. After INT8 quantization via
torch.ao.quantization — 24 MB, 95 ms. Export to ONNX + TensorRT on Jetson — 28 ms.
- YOLOv8m on Raspberry Pi 5 in fp32 — 2.8 fps. TFLite INT8 — 9.4 fps. With XNNPACK delegate — 14 fps (1.5× faster than pure INT8).
- Transformer encoder on mobile CPU: MobileBERT in fp16 via CoreML on iPhone 15 — 18 ms/inference.
distilbert-base-uncased in ONNX — 42 ms.
The problem is not choosing "quantize or not" — the right path is determined by the device, task, and acceptable metric degradation. We offer an assessment of your project: within 24 hours we will tell you how feasible it is to speed up the model.
How to Choose Quantization Method for Your Task?
PTQ (Post-Training Quantization) — a quick path. Take a trained model, run a calibration dataset (200–1000 samples), get INT8 or INT4 weights. Tools: torch.ao.quantization, ONNX Runtime quantization tool, bitsandbytes. Accuracy degradation: 0.5–2% on classification. Red zone — small object detection and segmentation, where PTQ gives -4–8% mAP.
QAT (Quantization-Aware Training) — training with simulated quantization noise. More expensive (retraining), but degradation 0.1–0.5%. Justified when PTQ is unacceptable. In PyTorch — torch.ao.quantization.prepare_qat().
GPTQ / AWQ — for LLMs. AWQ better preserves quality at 4-bit quantization. llm-compressor from Neural Magic or autoawq are the main libraries.
| Method |
Implementation Time |
Accuracy Degradation |
Tools |
| PTQ |
1–2 days |
0.5–2% (up to 8% on detection) |
torch.ao, ONNX RT, bitsandbytes |
| QAT |
1–3 weeks |
0.1–0.5% |
torch.ao.prepare_qat, TF Quantization |
| GPTQ/AWQ |
3–7 days |
1–3% (LLM) |
autoawq, llm-compressor |
Potential savings from choosing the right method can be substantial — for example, reducing cloud inference costs by up to 70% when deploying to edge. Project cost is calculated individually based on model complexity and target platform.
When to Use Pruning vs Distillation?
Structural pruning removes channels or layers. torch.nn.utils.prune — basic tool. For transformers — attention head pruning (LTP, movement pruning). Result: ResNet-50 after removing 40% of channels with fine-tuning — -35% size, -28% latency, -1.2% top-1 accuracy.
Knowledge distillation — train a small student to mimic a large teacher. Classic via KLDivLoss on soft labels. Feature distillation on intermediate layers is more effective. Hugging Face DistilBERT: 66M vs 110M parameters, -40% latency, -3% on GLUE. This is a model compression technique.
Combined approach: distillation → pruning → QAT. Gives maximum effect on limited hardware. We recorded a case where a client achieved 70% reduction in cloud compute spend after moving to edge with this pipeline.
Target Platforms and Tools
| Platform |
Preferred Format |
Tool |
Specifics |
| NVIDIA Jetson |
TensorRT engine |
trtexec, torch2trt |
INT8 calibration, DLA offload |
| Apple Silicon / iOS |
CoreML (.mlmodel) |
coremltools |
ANE (Neural Engine) automatically |
| Android |
TFLite (.tflite) |
tf.lite.TFLiteConverter |
GPU delegate, NNAPI |
| x86 CPU |
ONNX + ORT |
onnxruntime |
AVX-512, VNNI |
| Arm Cortex |
TFLite / ONNX |
ort-arm, tflite |
XNNPACK, NEON |
| Qualcomm NPU |
QNN (.dlc) |
Qualcomm AI Hub |
Hexagon DSP |
TensorRT — the main tool for NVIDIA edge. TRT builds a graph with operator fusion, selects optimal kernels. On Jetson AGX Orin YOLOv8m in TRT INT8 gives 78 fps vs 22 fps in fp16 PyTorch — 3.5× improvement.
Practical Case: How We Detected Defects on a Production Line (Our Client)
Task: real-time scratch detection on metal, 30 fps, camera to Jetson Xavier NX (16GB). Original model YOLOv8l mAP50 0.91, server inference 28 ms, on Jetson in fp16 — 110 ms (9 fps). Not suitable.
Optimization steps we performed for our client:
- Switch to YOLOv8m — mAP50 0.887 (-2.3%), 68 ms
- Export to TensorRT FP16 via
yolo export format=engine half=True — 31 ms (32 fps)
- INT8 calibration on 500 frames — 22 ms (45 fps), mAP50 0.879
Result: 3.5% degradation at 5× speedup. Client received engine and documentation. We guarantee metric will not drop below agreed threshold — specified in contract.
Example model profiling (layer latency)
Profile slice of YOLOv8m on Jetson Xavier NX (fp16):
- Convolution (layer 1–5): 12 ms
- Bottleneck (layer 6–10): 8 ms
- Head (detection): 11 ms
Bottleneck is the last layers of the head. After quantizing the head separately, head latency dropped to 4 ms.
What is Included in the Work?
- Report on model profiling on target device (layer latency, bottlenecks)
- Selection and justification of optimization methods (quantization / pruning / distillation)
- Optimized model (TensorRT engine / TFLite / CoreML / ONNX)
- Configs for reproducibility (scripts, Docker image, instructions)
- Testing on real device (at least 10,000 inferences)
- Training of your team (2 hours online)
- 1 month support after delivery
How to Order Model Optimization
- Submit a request on the website or contact us in any convenient way.
- We perform free profiling of your model on the target device within 24 hours.
- We prepare an optimization plan with trade-off estimates (speed vs quality).
- You approve the plan — we start work.
- After completion, we deliver the optimized model, configs, and documentation.
- We train your team and provide monthly support.
Timeline: optimization of an existing model — 2–4 weeks. Development from scratch for edge — 6–16 weeks.
Get a consultation — we will evaluate your model for free and offer a plan within 24 hours. Order free profiling now. For complex projects, contact our engineering team to discuss custom optimisation strategies.