phyter1/ren-stt

Local speech-to-text for macOS. Parakeet on MLX + global hotkey client. Superwhisper replacement.

0

stars

25

commits

Python

primary language

Apr 21, 2026

updated

README

ren-stt

Local speech-to-text for macOS. Runs on your hardware — no cloud, no subscription.

Press Option+Space, speak, press again. Text appears wherever your cursor is.

Powered by Parakeet TDT on MLX with automatic punctuation, capitalization, and filler word removal. 30x realtime on Apple Silicon.

⬇ Download RenSTT.dmg (Apple Silicon)

Install

curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash

The installer asks you to pick a mode:

ModeWhat it doesRequires
standaloneRuns the model + hotkey client on one machineApple Silicon
serverHosts the model for other machines on your networkApple Silicon
clientHotkey client that connects to a serverAny Mac

Or pass the mode directly:

# Standalone (Apple Silicon)
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- standalone

# Server only
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- server

# Client pointing at a server
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- client --server myhost.local

What the installer does

  1. Clones the repo to ~/.local/share/ren-stt
  2. Creates a Python virtual environment (nothing installed globally)
  3. Installs dependencies for your chosen mode
  4. Writes config to ~/.config/ren-stt/config.json
  5. Starts a launchd service (runs on boot)
  6. Walks you through granting Accessibility + Microphone permissions

macOS app (Apple Silicon only)

If you prefer a drag-to-install .app:

git clone https://github.com/phyter1/ren-stt.git && cd ren-stt
./build-dmg.sh
open dist/RenSTT.dmg

Or download RenSTT.dmg from the latest release.

Usage

ActionKey
Start/stop recordingOption+Space
Cancel recordingEscape

Transcribed text is copied to clipboard and pasted into the active app.

A waveform icon appears in the menu bar — black when idle, red when recording, orange when transcribing.

Configuration

Edit ~/.config/ren-stt/config.json:

{
  "client": {
    "server_url": "http://localhost:8222",
    "hotkey": "option+space",
    "mode": "toggle",
    "sensitivity": 18
  }
}
OptionValuesDefault
hotkeyAny combo: option, cmd, ctrl, shift + space, f1-f12, or a letteroption+space
modetoggle (press to start/stop) or push-to-talk (hold to record)toggle
sensitivityAudio level bar responsiveness (higher = more sensitive)18
server_urlURL of the STT serverhttp://localhost:8222

Server config:

OptionValuesDefault
modelsmall (0.6B), large (1.1B), or any HuggingFace model IDsmall
portServer port8222
hostBind address0.0.0.0

Network setup

Run the server on one Apple Silicon machine, clients on everything else:

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  MacBook Air │     │   Mac Mini   │     │   Mac Pro    │
│   (client)   │────▶│  (server)    │◀────│   (client)   │
│  Option+Space│     │  Parakeet    │     │  Option+Space│
└──────────────┘     │  MLX :8222   │     └──────────────┘
                     └──────────────┘

Clients send audio over HTTP, server returns text. All on your local network.

API

The server has a simple HTTP API:

# Transcribe audio
curl -X POST http://localhost:8222/transcribe -F audio=@recording.wav
# {"text": "hello world", "duration_s": 2.1, "inference_ms": 380, "rtf": 5.5}

# Health check
curl http://localhost:8222/health

# Web UI (browser mic + file upload)
open http://localhost:8222

Post-processing

Transcriptions are automatically cleaned:

  1. Filler removal — strips "uh", "um", "hmm", "er" (0ms, regex)
  2. Punctuation & capitalization — commas, periods, question marks, proper caps via punct_cap_seg ONNX model (~65ms, runs on CPU alongside MLX)
  3. Sentence segmentation — splits run-on speech into sentences

Regex fallback if the punctuation model isn't available.

Performance

Tested on M1 Pro (16GB) with Parakeet 1.1B + punctuation model:

AudioTotal latencyPipeline
2s~250msSTT ~200ms + punct ~50ms
6s~300msSTT ~240ms + punct ~60ms
16s~530msSTT ~460ms + punct ~70ms
47s~1.9sSTT ~1.8s + punct ~70ms

Uninstall

# Via installer
cd ~/.local/share/ren-stt && ./install.sh uninstall

# Full removal
rm -rf ~/.local/share/ren-stt ~/.config/ren-stt

License

MIT

Contributors

phyter1

25 commits

phyter1/ren-stt

Local speech-to-text for macOS. Parakeet on MLX + global hotkey client. Superwhisper replacement.

0

stars

25

commits

Python

primary language

Apr 21, 2026

updated

README

ren-stt

Local speech-to-text for macOS. Runs on your hardware — no cloud, no subscription.

Press Option+Space, speak, press again. Text appears wherever your cursor is.

Powered by Parakeet TDT on MLX with automatic punctuation, capitalization, and filler word removal. 30x realtime on Apple Silicon.

⬇ Download RenSTT.dmg (Apple Silicon)

Install

curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash

The installer asks you to pick a mode:

ModeWhat it doesRequires
standaloneRuns the model + hotkey client on one machineApple Silicon
serverHosts the model for other machines on your networkApple Silicon
clientHotkey client that connects to a serverAny Mac

Or pass the mode directly:

# Standalone (Apple Silicon)
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- standalone

# Server only
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- server

# Client pointing at a server
curl -fsSL https://raw.githubusercontent.com/phyter1/ren-stt/main/get.sh | bash -s -- client --server myhost.local

What the installer does

  1. Clones the repo to ~/.local/share/ren-stt
  2. Creates a Python virtual environment (nothing installed globally)
  3. Installs dependencies for your chosen mode
  4. Writes config to ~/.config/ren-stt/config.json
  5. Starts a launchd service (runs on boot)
  6. Walks you through granting Accessibility + Microphone permissions

macOS app (Apple Silicon only)

If you prefer a drag-to-install .app:

git clone https://github.com/phyter1/ren-stt.git && cd ren-stt
./build-dmg.sh
open dist/RenSTT.dmg

Or download RenSTT.dmg from the latest release.

Usage

ActionKey
Start/stop recordingOption+Space
Cancel recordingEscape

Transcribed text is copied to clipboard and pasted into the active app.

A waveform icon appears in the menu bar — black when idle, red when recording, orange when transcribing.

Configuration

Edit ~/.config/ren-stt/config.json:

{
  "client": {
    "server_url": "http://localhost:8222",
    "hotkey": "option+space",
    "mode": "toggle",
    "sensitivity": 18
  }
}
OptionValuesDefault
hotkeyAny combo: option, cmd, ctrl, shift + space, f1-f12, or a letteroption+space
modetoggle (press to start/stop) or push-to-talk (hold to record)toggle
sensitivityAudio level bar responsiveness (higher = more sensitive)18
server_urlURL of the STT serverhttp://localhost:8222

Server config:

OptionValuesDefault
modelsmall (0.6B), large (1.1B), or any HuggingFace model IDsmall
portServer port8222
hostBind address0.0.0.0

Network setup

Run the server on one Apple Silicon machine, clients on everything else:

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  MacBook Air │     │   Mac Mini   │     │   Mac Pro    │
│   (client)   │────▶│  (server)    │◀────│   (client)   │
│  Option+Space│     │  Parakeet    │     │  Option+Space│
└──────────────┘     │  MLX :8222   │     └──────────────┘
                     └──────────────┘

Clients send audio over HTTP, server returns text. All on your local network.

API

The server has a simple HTTP API:

# Transcribe audio
curl -X POST http://localhost:8222/transcribe -F audio=@recording.wav
# {"text": "hello world", "duration_s": 2.1, "inference_ms": 380, "rtf": 5.5}

# Health check
curl http://localhost:8222/health

# Web UI (browser mic + file upload)
open http://localhost:8222

Post-processing

Transcriptions are automatically cleaned:

  1. Filler removal — strips "uh", "um", "hmm", "er" (0ms, regex)
  2. Punctuation & capitalization — commas, periods, question marks, proper caps via punct_cap_seg ONNX model (~65ms, runs on CPU alongside MLX)
  3. Sentence segmentation — splits run-on speech into sentences

Regex fallback if the punctuation model isn't available.

Performance

Tested on M1 Pro (16GB) with Parakeet 1.1B + punctuation model:

AudioTotal latencyPipeline
2s~250msSTT ~200ms + punct ~50ms
6s~300msSTT ~240ms + punct ~60ms
16s~530msSTT ~460ms + punct ~70ms
47s~1.9sSTT ~1.8s + punct ~70ms

Uninstall

# Via installer
cd ~/.local/share/ren-stt && ./install.sh uninstall

# Full removal
rm -rf ~/.local/share/ren-stt ~/.config/ren-stt

License

MIT

Contributors

phyter1

25 commits

Languages

Python

73.6%

Shell

26.4%