This repository is intentionally lightweight.
It does not reimplement Wispr/whisper.cpp server logic. It is a convenience shell to make setup on Mac one-click and keep a local transcription stack running for an Android client.
whisper.cpp(upstream): https://github.com/ggerganov/whisper.cpp- Android client for this server: https://github.com/nihal111/WhisperClientAndroid
There are two different services and both are important.
| Port | Service | Protocol | Purpose |
|---|---|---|---|
8080 |
whisper-server |
HTTP | Raw transcription API (POST /inference) |
3000 |
serve-web.sh (web/server.py) |
HTTPS | Web/proxy layer that forwards POST /inference to http://127.0.0.1:8080 |
http://<host>:8080/-> Whisper server landing pagehttp://<host>:8080/inference-> POST only for transcriptionhttps://<host>:3000/-> Web UI landing pagehttps://<host>:3000/inference-> Proxy endpoint, POST only
Important:
- Port
3000is TLS (https://) only. - Port
8080is plain HTTP (http://) only. - A
GETto/inferencereturns404; this is expected.
brew install whisper-cpp ffmpeg./download-model.shOptional:
./download-model.sh base.en
./download-model.sh small
./download-model.sh large-v3-q5_0./install-all-bg.shThis installs and starts both launch daemons:
com.nihal.whisperserver(API on8080)com.nihal.whisperserver.web(HTTPS web/proxy on3000)
Because they run as system daemons, they keep running after you log out.
./status.sh./uninstall-all-bg.shConnect your Mac and phone to the same Tailscale network.
You can use either integration style:
- Android app calls raw API directly:
- Base URL:
http://<mac-tailscale-ip>:8080 - Transcribe:
POST /inferencemultipart form
- Android app calls HTTPS proxy:
- Base URL:
https://<mac-tailscale-ip>:3000 - Transcribe:
POST /inferencemultipart form - Good when the client expects TLS on device networks
serve-web.sh automatically generates a self-signed cert and includes LAN + Tailscale IPs in SAN.
Use this only for direct debugging.
./start.sh
./serve-web.shModel binaries are intentionally not tracked by git.
- Ignored path:
models/
Verify:
git ls-files modelsExpected output: empty.
This project is deliberately minimal and convenience-focused.
If you need deeper server behavior changes, those belong in upstream Wispr/whisper.cpp server code.