# Parley Parley is local, push-to-dictate text input for GNOME on Wayland. Put the caret in a text field, press a shortcut, speak, and press it again. Parley records through PipeWire, transcribes locally with Parakeet, and inserts the result through IBus. Audio and transcription stay on your machine. Every successful transcript is also saved and copied to the clipboard before insertion is attempted. ## Platform Parley deliberately targets one current desktop stack: - fully updated Arch Linux - GNOME Shell 50 on Wayland - IBus 1.5.34 - PipeWire and WirePlumber - Python 3.14 with PyGObject - FFmpeg - the Parakeet `transcribe-cli` runtime and Unified EN model Other distributions, desktop environments, X11 sessions, older GNOME releases, and older Python versions are currently unsupported. ## Usage With Parley installed and the shortcut configured: 1. Put the caret in an editable field. 2. Press `Super+Shift+D` to start recording. 3. Speak. 4. Press `Super+Shift+D` again. 5. Wait for local transcription and insertion. GNOME displays its microphone privacy indicator while recording. The Parley top-bar indicator shows idle, recording, transcribing, and error states and provides start/stop, cancel, copy-last, and open-folder actions. Useful fallback commands: ```bash parleyctl status parleyctl toggle parleyctl cancel parleyctl copy parleyctl insert ``` Transcripts are stored in: ```text ~/.local/share/parley/transcripts/ ``` If insertion is unavailable, the transcript remains saved and on the clipboard, ready for `Ctrl+V`. ## Runtime assets Parley expects: ```text ~/.local/bin/transcribe-cli ~/.local/share/parley/models/parakeet-unified-en-0.6b-Q8_0.gguf ``` The current runtime binary requires host CUDA 13 and Intel MKL libraries. The approximately 700 MiB model is not stored in this repository. ## Status The working development build currently provides: - asynchronous recording and local transcription through the `parleyd` user service - collision-safe transcript persistence and clipboard fallback - D-Bus control through `parleyctl` - a GNOME Shell 50 top-bar extension - a persistent passthrough IBus engine hosted by `parleyd` for automatic semantic text insertion - local systemd user units and an Arch PKGBUILD End-to-end IBus insertion is confirmed in Firefox and Ghostty. Broader application, keyboard-layout, compose-key, shortcut, and sensitive-field testing is ongoing; results live in [docs/IBUS_BAKEOFF.md](docs/IBUS_BAKEOFF.md). This is not yet a polished end-user release. See [SPEC.md](SPEC.md) for architecture, security constraints, remaining work, and acceptance criteria. ## Development Parley has no third-party Python package dependencies. It runs directly with Arch's system Python and system PyGObject bindings: ```bash ./scripts/install-dev ``` Run tests and inspect the daemon: ```bash PYTHONPATH=src /usr/bin/python -m unittest discover -s tests systemctl --user restart parley.service journalctl --user -u parley.service -f ``` Development helpers for the Shell extension and IBus experiment are in [`scripts/`](scripts/). The local Arch package recipe is in [`packaging/arch/`](packaging/arch/). ## Principles - local-only audio and transcription - visible recording state - save and copy before attempting insertion - never destabilize GNOME Shell with model or audio work - refuse known password and PIN fields - preserve a clipboard fallback when an application rejects IBus insertion