speak2type is a speech-to-text input method engine for Linux desktops, built around IBus integration with a global push-to-talk workflow.
It supports both native IBus text input and non-IBus app workflows.
| ❗ This is less than version 0, use at your own risk! |
|---|
-
Push-to-talk dictation (default:
Alt+Space) -
Two output modes with the same hotkey:
- IBus/native apps: transcription is committed in place at the current cursor/focus
- Non-IBus apps (for example VS Code/Electron contexts): transcription is copied to clipboard
-
Parakeet backend (local ONNX) as the currently working backend
-
Settings app (GTK4 + libadwaita) to manage backend dependencies and models
-
Privacy safeguard (IBus-aware fields): recording is disabled for
PASSWORD/PINinput purposes -
Global hotkey support via desktop portal listener
-
Chrome (Native Ibus) https://youtu.be/QUHK7w-qBb0
-
VS Code (Electron, non-Ibus) https://youtu.be/O3MZFxC4ipE
Minimum expected environment:
- Linux desktop using IBus 1.5+
- Python 3.11+
- GStreamer 1.0
- GTK4 + libadwaita (for preferences UI)
Tested target distro in project docs/scripts:
- Ubuntu 25.10+
The repo includes a development installer that sets up system deps, Python env, IBus component files, and GSettings schema.
./scripts/dev-install.shThen ensure your shell exports IBUS_COMPONENT_PATH (if not already set):
export IBUS_COMPONENT_PATH="$HOME/.local/share/ibus/component:${IBUS_COMPONENT_PATH:-/usr/share/ibus/component}"Restart your shell and IBus:
ibus restartFinally add Speech To Text as an input source in GNOME Settings.
If you prefer a system package instead of the development installer, the repository includes Debian packaging files under debian/.
Build and install locally:
sudo apt-get update
sudo apt-get install -y debhelper dh-python pybuild-plugin-pyproject python3-all python3-build python3-pytest python3-setuptools python3-wheel
dpkg-buildpackage -us -uc -b
sudo apt-get install -y ../speak2type_0.1.0-1_all.deb
ibus restartFor the best push-to-talk experience, adjust these settings in GNOME Settings → Accessibility → Typing:
- Repeat Keys: Off — prevents the PTT key from flooding spaces while held
- Sticky Keys: On — allows modifier+key combos to be registered cleanly by the portal
- Select "Speech To Text" as your input source
- Focus any text field
- Hold Ctrl+Space and speak
- Release to transcribe and commit text After install, add Speech To Text as an input source in GNOME Settings.
For detailed packaging steps, see debian/README.build.md.
- Select Speech To Text as your active input source.
- Focus the target app/text field.
- Hold the push-to-talk hotkey (default
Alt+Space). - Speak.
- Release the hotkey to transcribe.
- Result handling:
- In IBus-native input contexts: text is inserted at cursor/focus.
- In non-IBus contexts (e.g. VS Code/Electron): text is copied to clipboard.
- Parakeet: fast local ONNX inference, model download supported in preferences.
- Whisper.cpp
- Vosk (
gst-vosk) - HTTP backend (remote/self-hosted API path)
A reference FastAPI server for the HTTP path is provided in server/main.py:
uvicorn server.main:app --port 8000Endpoints:
POST /transcribe(generic)POST /v1/audio/transcriptions(OpenAI-compatible)
OpenAPI schema: server/openapi.yaml
Install editable package with dev extras:
pip install -e ".[dev]"Useful commands:
pytest
ruff check src tests
mypy srcRun engine manually (outside IBus integration workflows):
python -m speak2typesrc/speak2type/— current engine, backends, UI, and model managementserver/— reference HTTP transcription service + OpenAPI spectests/— unit/integration testsscripts/dev-install.sh— Ubuntu-focused setup helpersrc/upstream/— upstream reference code retained for comparison/migration
- Alpha quality; crashes/hangs can still occur in edge cases
- Mic symbol may remain stuck as active in task bar (likely GStreamer pipeline stuck in
PLAYING) - Some backend dependencies are large and may require manual system packages
- Vosk path depends on
gst-vosk, which may not be packaged on all distros
GPL-3.0-or-later. See COPYING.
This project is based on ibus-speech-to-text from Fedora and continues to evolve as a refactor/new implementation track.