Local Whisper Server at Home: Three Ways to Keep Your Audio in the Flat

A local Whisper server is a program on your own computer that accepts audio and returns text over the same protocol OpenAI uses, which means a phone can talk to it exactly as it would talk to a cloud service. Three projects do this well enough to trust with a keyboard: Speaches, LocalAI and whisper.cpp. This page goes through what each one needs, and then does the part most guides skip, which is dictating from the phone rather than running curl on the machine that already has the server.

A blue tin can on a wooden floor is joined by a taut white string to a violet tin can on a small stool across a bright room.
VoiceBoard editorial teamVoiceBoard editorial teamVoice input tools editorial team
Which one to take

Speaches if you want the shortest path. Its whole purpose is an OpenAI-compatible speech endpoint, it ships docker compose files for processor and for CUDA, and it listens on port 8000.

LocalAI if you would rather run one server for several kinds of model, or if you have no graphics card and want the project with the busiest release history. Port 8080.

whisper.cpp if you want the lightest thing that will run, and you accept that out of the box it does not serve the OpenAI path at all and has to be told to.

The three servers side by side

Project liveness was read from GitHub on 10 September 2026. It is in the table because an abandoned server is a bad thing to build a daily habit on, and because two of these projects look similar until you notice how far apart their last releases are.

ProjectOpenAI protocol out of the boxPortRuns onLiveness, 10 September 2026
Speaches, formerly faster-whisper-serverYes, native /v1/audio/transcriptions8000Processor or CUDA, separate images3,657 stars, last push 8 September 2026, last tagged release v0.9.0-rc.3 from 27 December 2025
LocalAIYes, native, with a curl example in the documentation8080Processor, no graphics card required49,024 stars, last push 10 September 2026, release v4.9.0 from 20 August 2026
whisper.cpp in server modeNo: the default path is /inference8080Processor, and it is the lightest of the three53,578 stars, last push 10 September 2026, release b4938 from 20 August 2026

Speaches: the shortest path

Speaches exists to be an OpenAI-compatible speech endpoint, so nothing has to be adapted. The documentation offers docker compose files for three cases, processor, CUDA and CUDA with CDI, and the run is the usual one:

docker compose up --detach

If you would rather not keep compose files around, the same thing fits in one command. With a graphics card:

docker run --rm --detach --publish 8000:8000 --name speaches \
  --volume hf-hub-cache:/home/ubuntu/.cache/huggingface/hub \
  --gpus=all ghcr.io/speaches-ai/speaches:latest-cuda

Without one, swap the image for ghcr.io/speaches-ai/speaches:latest-cpu. Models are pulled separately, and pulling one in advance saves you a puzzled first request:

uvx speaches-cli model download Systran/faster-distil-whisper-small.en

Two things to keep in mind. The Speaches documentation does not state hardware requirements at all, so the memory table further down is the only guide you get. And the last tagged release is from December 2025 while the code was pushed this week, which is a project that lives in its main branch rather than in its releases.

LocalAI: one server for everything

LocalAI is a larger project that answers on the OpenAI protocol for several kinds of model, transcription among them, and it runs on a processor without a graphics card. Its documentation gives the request in full, which is also the quickest way to check that your server is alive before the phone gets involved:

curl http://localhost:8080/v1/audio/transcriptions \
  -H "Content-Type: multipart/form-data" \
  -F file="@<FILE_PATH>" -F model="<MODEL_NAME>"

Of the three it has the steadiest release rhythm: version 4.9.0 on 20 August 2026 and a push on the day we checked. The trade is size. You are installing a general model server to get one endpoint, and if transcription is all you want, Speaches is a smaller thing to keep running.

whisper.cpp: lightest, and the one that needs a flag

whisper.cpp has a server mode, and it is the least demanding of the three, but its default route is /inference, which is not the path an OpenAI client asks for. The flags that matter, read from the server's own help:

  • --inference-path PATH, default /inference. This is the one to change, because the keyboard will ask for /v1/audio/transcriptions.
  • --host HOST, default 127.0.0.1. Left alone, the server is reachable only from the machine it runs on, and the phone will never see it.
  • --port PORT, default 8080.
  • --convert, described as "Convert audio to WAV, requires ffmpeg on the server". Worth knowing, because the keyboard sends OGG Opus rather than WAV.

Being honest about the status of this one: the flags above come from reading the server's help, not from a run of our own with a phone at the other end. Speaches and LocalAI advertise the OpenAI path as a feature, whereas here you are assembling it. If you want the assembly to be somebody else's problem, take one of the first two.

How much memory a model needs

Whisper comes in sizes, and the size decides both the accuracy and whether your machine can hold the model at all. The figures below are from the openai/whisper README, read on 10 September 2026, and they are video memory requirements.

ModelParametersMemory
tiny39Mabout 1 GB
base74Mabout 1 GB
small244Mabout 2 GB
medium769Mabout 5 GB
large1550Mabout 10 GB
turbo809Mabout 6 GB

For dictation from a phone, small or turbo is the sensible starting point: messages are short, and a model that answers in two seconds beats a model that is slightly more accurate four seconds later.

Point your phone at it

This is where most instructions stop and the interesting part begins. Five conditions have to hold at once, and if one of them does not, the connection test fails without telling you which.

  1. The phone and the computer are on the same network. The same Wi-Fi, not the phone on mobile data.
  2. The server listens beyond 127.0.0.1. A server bound to the loopback address answers itself and nobody else. In whisper.cpp that is --host; in the docker examples above the published port already covers it.
  3. You know the computer's address on the network, which usually looks like 192.168.1.42. In VoiceBoard, under Recognition service, pick the preset My own server and type the address in the form http://192.168.1.42:8000/v1, with the port your server uses.
  4. The /v1 tail is there. The keyboard appends /audio/transcriptions to whatever you typed, so the address has to end where that path begins.
  5. The key stays empty. That is allowed for home addresses, and so is plain http: VoiceBoard accepts unencrypted connections for localhost, ::1, names ending in .local, 127.*, 10.*, 172.16-31.* and 192.168.*, and for nothing else.
The Recognition service screen of the VoiceBoard open build: three preset buttons, OpenAI, Groq and My own server; a Service address field, a Key field, a Model field, an empty Language field and a Save button.
The screen you type the address into, photographed with the Groq preset on 12 September 2026. For a home server the fields are the same: the preset is My own server, the address is your own, and the Key field stays empty.

Then press Save and Test connection. "The connection works" means the chain is complete and you can dictate. If you already installed the discontinued VoiceBoard open build, its current status and privacy notes are on the open-build status page.

What breaks, in the order it usually breaks

  • The computer went to sleep. The commonest cause by a distance, and the symptom is dictation that worked all morning and stopped at lunch. Keep the machine awake, or accept that dictation works when the computer does.
  • The firewall. A fresh docker container publishes its port; the operating system in front of it may still refuse connections from other devices until the port is allowed.
  • The address changed. Home routers hand out addresses by DHCP and take them back, so the 192.168.x.x you typed last month may now belong to a television. Reserve the address in the router, or expect to retype it.
  • A VPN on the phone. With a tunnel up, the phone is no longer on your home network as far as routing is concerned, and the local address becomes unreachable.

Where a home server loses to the cloud

Three losses, and none of them is a detail. Speed: Groq answers a short dictation in a fraction of the time a home machine takes, and its own documentation puts the fast model at 216 times real time. Comfort: a laptop transcribing is a laptop with the fan on and the battery draining, and the computer has to stay awake for the phone to reach it. Accuracy: the model that fits in your memory is usually smaller than the one a service runs, and smaller models get names and terms wrong more often.

What you get in exchange is the whole point: the recording never leaves the flat, there is no key, no account and no per-hour price. If that trade sounds wrong for daily use but right for sensitive material, keep both configured and switch between them; the presets in Recognition service exist for that. If the audio may leave the building after all, the Whisper API pricing page has the two cloud routes with their real costs. And if you want dictation on the computer itself rather than on the phone, our review of open source dictation covers twelve projects licence by licence.

Using the old open build?

Existing installations can choose My own server, enter the address with its /v1 tail and test the connection. The public APK is no longer distributed.

Read the open-build status

Comments

No comments yet. Ask a question or share what worked for you.

Leave a comment

Comments are checked before they appear, usually within a day.