Piper

Fast, local neural text-to-speech for voice assistants

Home Automation ★ 5.7k stars Medium setup MIT

Piper is a fast, local neural text-to-speech system optimized to run well on devices like the Raspberry Pi. It powers spoken responses in self-hosted voice assistants without any cloud service.

Key features

  • Local neural text-to-speech
  • Runs on Raspberry Pi
  • Many voices and languages
  • Fast synthesis

Pros & cons

Strengths

  • Natural-sounding offline TTS
  • Very efficient

Trade-offs

  • Setup needs voice models
  • No GUI of its own

Piper replaces

Last reviewed Sep 13, 2026 · 800 words

On a Raspberry Pi 4, a medium-quality Piper voice speaks a sentence in well under the time it takes to say it, from a model that fits in about 60 MB. That single fact is why every self-hosted voice assistant built since 2023 uses it for the talking half. Piper (5,400 stars, C++ with a Python wrapper, first released 2023) is a neural text-to-speech engine that runs on CPU, needs no cloud, and sounds like a person rather than a 1990s screen reader. It has no interface of its own; you run it as a service that Home Assistant or your own scripts call.

The stack it belongs to

Piper is one of three pieces in the open voice pipeline that Home Assistant calls Assist. openWakeWord listens for the wake phrase, faster-whisper turns your speech into text, Home Assistant works out the intent, and Piper turns the reply into audio. All three speak the Wyoming protocol, a small line-based TCP protocol Home Assistant discovers automatically. Piper's Wyoming service listens on port 10200.

The maintained code now lives in the OHF-Voice organisation under the Open Home Foundation, which took over the project from the original Rhasspy author. Older tutorials point at the rhasspy/piper repository; the Docker images and voice files still work, but new releases come from the new home.

Run it as a Wyoming container

services:
  piper:
    image: rhasspy/wyoming-piper
    command: --voice en_US-lessac-medium
    volumes:
      - ./piper-data:/data
    ports:
      - "10200:10200"
    restart: unless-stopped

On first start it downloads the named voice into /data, about 60 MB for a medium English voice, then serves it. In Home Assistant, add the Wyoming Protocol integration, give it the host and port 10200, and Piper appears as a text-to-speech engine you can assign to an Assist pipeline. Total RAM at rest is around 256 MB; synthesis spikes briefly higher.

If you are on the Home Assistant OS appliance, the Piper add-on does the same thing with a form instead of YAML. The container route is for people running Home Assistant in Docker on a box that also does other things, which is most readers here.

Voice choice matters more than any setting

Voices come in four quality tiers: x_low, low, medium, and high. The tier sets the model size and the sample rate (16 kHz for low, 22.05 kHz for medium and high) and the speed. On a Pi 4, medium is the sweet spot: clearly better than low, still faster than real time. high voices sound best but can fall behind real time on a Pi and are only worth it on an x86 box or a Pi 5. There are voices for more than 30 languages and dozens of English speakers; listen to the samples on the project's voice page before committing, because the difference between two medium voices is larger than between medium and high of the same speaker.

Each voice is an .onnx model plus an .onnx.json config, and you can drop your own into /data if you have trained one. The --length-scale flag slows or speeds delivery (1.2 is a noticeably calmer announcer), and --sentence-silence adds a pause between sentences, which helps long automations read naturally.

Where the ceiling is

Piper does not do emotion, emphasis, or SSML beyond the basics. It reads a sentence one way, every time. Numbers and abbreviations are usually right in English and hit-and-miss in other languages. Latency on a Pi is fine for "the front door is open" and noticeable for a paragraph. If you want expressive narration or voice cloning, that is a different class of model with GPU requirements; for an assistant that answers in a second and never sends audio to Amazon Polly or Google, Piper is the standard for a reason.

Uses beyond the smart speaker

Because the engine also has a command-line form (echo "text" | piper --model en_US-lessac-medium.onnx --output_file out.wav), people use it for reading articles into podcast feeds, generating audio for accessibility on static sites, and voicing notifications from monitoring scripts. It is a library as much as a service; the Wyoming container is just its most common outfit.

What I'd do

Run the Wyoming container with one medium voice on whichever machine already runs Home Assistant, wire it into an Assist pipeline alongside faster-whisper, and spend the saved time on the first month of Home Assistant rather than on TTS tuning. Upgrade to a high voice only if the box is x86 and you actually hear the difference in a blind test. Most people do not, and the Pi is happier.

Similar home automation apps