summaryrefslogtreecommitdiff
path: root/README.md
blob: 9c2ecdbbf460ec7788ca725cd73877e9e56f0c0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 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