1
0
Fork
You've already forked murmur
0
A local first, private Speech-To-Text transcription app for Wayland Linux (using Whisper.cpp)
  • C 87.9%
  • Makefile 12.1%
Andie Keller 756c979f3f
better audio thread management
explicitly hand off array buf to thread for processing.
2026年02月08日 11:44:32 +08:00
src better audio thread management 2026年02月08日 11:44:32 +08:00
.gitignore init commit - empty C project 2026年02月02日 09:05:42 +08:00
architecture.svg diagram of system architecture 2026年02月06日 16:48:01 +08:00
config support multiple keyboard manipulation tools 2026年02月06日 15:21:29 +08:00
LICENSE daemon & toggle setup for Wayland 2026年02月02日 17:27:27 +08:00
Makefile fix Makefile (lib linking for ggml) 2026年02月06日 10:01:20 +08:00
murmur.desktop daemon & toggle setup for Wayland 2026年02月02日 17:27:27 +08:00
murmur.service Improve systemd service Readme 2026年02月03日 08:21:28 +08:00
README.md diagram of system architecture 2026年02月06日 16:48:01 +08:00

Murmur - A private, local AI app for speech-to-text with Wayland integrations

Lightweight, privacy-focused, speech-to-text application for Linux using OpenAI's Whisper model. All processing happens locally on your machine, so no internet connection is required.

Features

  • 100% Local Processing - Your voice never leaves your computer
  • Wayland Native - Built for modern Linux desktop environments
  • Simple Toggle Interface - One hotkey to start/stop recording
  • Desktop Notifications - Visual feedback of recording status
  • Automatic Clipboard - Transcribed text copied automatically

How to Use Murmur

  1. Press your configured Murmur toggle hotkey.
  2. A notification will confirm recording has started.
  3. Yap away.
  4. Press the toggle hotkey again to stop recording.
  5. Wait a moment while the audio is being transcribed.
  6. When finished, text is automatically copied to your clipboard.
  7. Paste anywhere with Ctrl+V.

System Architecture

Murmur Architecture

Requirements

System Dependencies

TODO: Improve dependencies section

make, wl-clipboard, libnotify

Note: The libnotify package (or libnotify-bin on Debian/Ubuntu) provides the notify-send command. If you're using a different notification daemon like mako, dunst, or tiramisu, make sure it's installed and running.

Whisper.cpp

You need to install whisper.cpp separately. Follow the official whisper.cpp installation instructions.

Set the environment variable Important: Make sure to set the WHISPER_CPP_DIR environment variable to point to your whisper.cpp installation.

export WHISPER_CPP_DIR=~/whisper.cpp

Add the export to your shell profile file to make permanently available.

# For bash
echo 'export WHISPER_CPP_DIR=~/whisper.cpp' >> ~/.bashrc
# For zsh
echo 'export WHISPER_CPP_DIR=~/whisper.cpp' >> ~/.zshrc

Whisper Model

You need to download a GGML Whisper model file. We recommend the base.en model for a good balance of speed and accuracy.

Download and install model:

# Create model directory (if it doesn't exist already)
mkdir -p ~/.local/share/murmur
# Download base.en model (142 MB)
cd ~/.local/share/murmur
wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
# Alternative models (optional):
# Tiny (fastest, less accurate): ggml-tiny.en.bin (75 MB)
# Small (balanced): ggml-small.en.bin (466 MB)
# Medium (slower, more accurate): ggml-medium.en.bin (1.5 GB)

Installing Murmur

  1. Clone this repository
git clone https://github.com/yourusername/murmur
cd murmur
  1. Make sure WHISPER_CPP_DIR is set
export WHISPER_CPP_DIR=~/whisper.cpp # Adjust path as needed
  1. Build and Install Murmur
make
make install # Installs to ~/.local paths

Note: ~/.local/bin must be in your PATH. Most distros include it by default; if not, add export PATH="$HOME/.local/bin:$PATH" to your shell profile.

Usage

Starting/Running the Murmur Daemon

Sway

Add the following to your ~/.config/sway/config:

# Starts the daemon server
exec murmur-daemon
# Set the Murmur recording toggle shortcut
# Replace the shortcut with whatever you like
bindsym $mod+Shift+y exec murmur-toggle

Save and then reload: swaymsg reload

systemd (as a user service)

If your session supports graphical-session.target (e.g. GNOME, KDE):

cp ./murmur.service ~/.config/systemd/user/ # destination folder should exist, but if not create it with mkdir
systemctl --user daemon-reload
systemctl --user enable --now murmur

Setup Configuration

A default config file is installed to ~/.config/murmur/config (respects XDG_CONFIG_HOME). Edit it to change the Whisper model, language, etc:

[general]
notification_timeout = 3000
[whisper]
model = ggml-base.en.bin
language = en
cpu_cores_use = 2

Using a Different Model

Download the desired GGML model to ~/.local/share/murmur/ and update the config:

[whisper]
model = ggml-small.en.bin

Set CPU Cores Use Limit

Changing the value of cpu_cores_use in config will set how many CPUs the Murmur Daemon Whisper model use in transcribing your audio inputs:

[whisper]
cpu_cores_use = 4

Changing Language

Set the language code in the config file:

[whisper]
language = es

Use auto for automatic language detection, or any language code supported by Whisper (e.g. en, es, fr, de, ja, zh).

Troubleshooting

"WHISPER_CPP_DIR not set" error

Set the environment variable to point to your whisper.cpp installation:

export WHISPER_CPP_DIR=~/whisper.cpp # Or wherever you installed it

"Model not found" error

Make sure the model file in ~/.local/share/murmur/ matches the model value in your config (ggml-base.en.bin by default).

"Failed to connect to D-Bus" when running toggle

The daemon isn't running. Start it with murmur-daemon

"Failed to copy to clipboard"

Install wl-clipboard: sudo apt install wl-clipboard

No audio being recorded

Check your PulseAudio/PipeWire default input device:

pactl list sources short

Poor transcription quality

Try a larger model (small or medium) for better accuracy, or ensure you're speaking clearly and close to the microphone.

High CPU usage during transcription

This is normal - Whisper is computationally intensive. Use a smaller model (tiny) if performance is an issue.

Acknowledgments

Contributing

Contributions are welcome! Please send in any patches with fixes and improvements.