Speak naturally. Type instantly.
Features β’ Installation β’ Usage β’ Models β’ Architecture
βββββββββββββββββββββββββββββββββββ
β π Recording... β
β ββββ
ββββββ
ββββββ
ββββββ
β
β 0:03 β
βββββββββββββββββββββββββββββββββββ
β¬οΈ Press hotkey
βββββββββββββββββββββββββββββββββββ
β π Result β
β βββββββββββββββββββββββββββββ β
β β ΠΠ°Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ β β
β β ΠΏΠΎΡΠ²ΠΈΡΡΡ Π·Π΄Π΅ΡΡ β β
β βββββββββββββββββββββββββββββ β
β [ΠΡΡΠ°Π²ΠΈΡΡ] [ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ] β
βββββββββββββββββββββββββββββββββββ
Press hotkey β Speak β Text appears in any application
Most voice input solutions are either cloud-based (privacy concerns), require complex setup, or don't integrate with the desktop. Shofar is different:
| Problem | Shofar Solution |
|---|---|
| π Privacy concerns | 100% Offline β voice never leaves your machine |
| π¦ Complex dependencies | Single Binary β no Python, Docker, or npm |
| π₯οΈ Limited integration | System-wide β works in any app, any text field |
| β‘ Speed vs accuracy trade-off | Hot-swap Models β switch engines on the fly |
|
|
|
|
curl -fsSL https://raw.githubusercontent.com/RooTooZ/shofar/master/install.sh | shOr download from Releases.
π§ Arch Linux
sudo pacman -S portaudio libayatana-appindicator gtk3 pkg-config cmake xdotoolFor Wayland:
sudo pacman -S wtypeπ§ Ubuntu / Debian
sudo apt install gcc pkg-config cmake xdotool \
libportaudio2 portaudio19-dev \
libayatana-appindicator3-dev libgtk-3-dev \
libwayland-dev libx11-dev libx11-xcb-dev \
libxkbcommon-x11-dev libgles2-mesa-dev \
libegl1-mesa-dev libffi-dev libxcursor-dev libvulkan-devFor Wayland:
sudo apt install wtypeπ macOS
brew install portaudio pkg-config cmakeπͺ Windows
Requires:
- MinGW-w64 or MSYS2
- CMake
- PortAudio
# Using MSYS2
pacman -S mingw-w64-x86_64-portaudio mingw-w64-x86_64-cmakegit clone https://github.com/RooTooZ/shofar.git
cd shofar
# Build everything (whisper.cpp + llama.cpp + binary)
make all
# Install to ~/.local/bin
make installModels download automatically via Settings UI, or:
make download-model-tiny # 75 MB β fast
make download-model-small # 466 MB β balanced
make download-model-turbo # 574 MB β best qualityshofar # or ./bin/shofar| Step | Action |
|---|---|
| 1 | Press Ctrl+Shift+Space |
| 2 | ποΈ Speak while window is visible |
| 3 | Press hotkey again to stop |
| 4 | βοΈ Edit text if needed |
| 5 | Enter = insert, Esc = cancel |
| Key | Action |
|---|---|
Ctrl+Shift+Space |
Start / Stop recording |
Enter |
Insert text into active window |
Esc |
Cancel and close |
Right-click tray icon for:
- βοΈ Settings β models, hotkey, language
- π Notifications β toggle on/off
- β Quit
| Engine | Model | Size | Speed | Accuracy | Best For |
|---|---|---|---|---|---|
| Whisper | tiny |
75 MB | β‘β‘β‘ | β β ββ | Quick commands |
| Whisper | small |
466 MB | β‘β‘ | β β β β | Daily use |
| Whisper | turbo |
574 MB | β‘ | β β β β | Documents |
| Vosk | small-ru |
45 MB | β‘β‘β‘β‘ | β β ββ | Real-time |
| Model | Size | Description |
|---|---|---|
| Qwen2.5-1.5B | 1.1 GB | Fixes punctuation & typos |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SHOFAR β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Hotkey β -> β Audio β -> β Speech β -> β Input β β
β β Handler β β Recorder β β Engine β β Emulator β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β β β
β v v β
β ββββββββββββ ββββββββββββ β
β β Tray β β LLM β β
β β Icon β β Correctorβ β
β ββββββββββββ ββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β whisper.cpp β llama.cpp β vosk-api β PortAudio β Gio β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
shofar/
βββ cmd/shofar/ # Entry point
βββ internal/
β βββ app/ # Main coordinator
β βββ audio/ # PortAudio recording
β βββ speech/ # Engine factory (Whisper/Vosk)
β βββ llm/ # LLM text correction
β βββ hotkey/ # Global hotkey
β βββ tray/ # System tray
β βββ waveform/ # Recording UI
β βββ settings/ # Settings UI
β βββ input/ # xdotool/wtype wrapper
β βββ i18n/ # Translations
βββ third_party/ # whisper.cpp, llama.cpp, vosk
| Component | Technology |
|---|---|
| Language | Go 1.21+ (CGO) |
| Speech | whisper.cpp, Vosk |
| LLM | llama.cpp |
| Audio | PortAudio |
| GUI | Gio |
| Tray | systray |
| Text Input | xdotool (X11) / wtype (Wayland) / CGEventPost (macOS) / SendInput (Windows) |
Config stored at ~/.local/bin/config.json:
{
"model_id": "whisper-small",
"language": "ru",
"hotkey": { "key": "Space", "modifiers": ["Ctrl", "Shift"] },
"llm_enabled": false,
"notifications": true
}make whisper-lib # Build whisper.cpp
make llama-lib # Build llama.cpp
make build # Build application
make run # Run for testing
make clean # Clean artifacts- Fork the repository
- Create feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push branch (
git push origin feature/amazing) - Open Pull Request
MIT License β use freely, attribution appreciated.