Voice input for developers: speak and paste text at the cursor.
Linux Transcription Refinement License
What is WhisperType
Speak instead of typing.
WhisperType records speech, transcribes it, and pastes the result at the active cursor. Choose a profile from its CLI picker. Use your Codex ChatGPT sign-in or OpenRouter for cloud transcription; whisper.cpp and Parakeet provide local NVIDIA GPU transcription. The CLI alias remains vc.
It runs on Linux. The repository also includes optional Gemini refinement for its MCP tool and a separate legacy GPU script. The menu's dictation profiles paste the transcript without refinement.
Proof available now: the working Linux implementation, a reproducible source installer and a setup-check script.
The installer creates an isolated Python environment from requirements.lock. It builds a pinned whisper.cpp revision with CUDA. It downloads the expected model. It checks the model checksum. It tests the resulting runtime.
The installer also installs the whispertype and vc commands. It adds a launcher to the Applications menu. There is no prebuilt bundle today.
Quick start — Linux + NVIDIA GPU
Clone the repository:
Enter the repository directory:
Run the installer:
Check the local setup:
Start it from the Applications menu, or run either command:
Run whispertype models (or whispertype /model) for a numbered selection. Short commands also work: whispertype model codex, whispertype model farsi, whispertype model whisper, whispertype model medium, and whispertype model parakeet. Selection starts that dictation profile. vc always opens the control menu. vc 1 starts OpenRouter Parakeet, vc 2 starts English Codex, vc 3 starts OpenRouter Whisper Large v3 Turbo, vc 4 starts Farsi Codex, vc 5 selects local GPU Whisper Medium, and vc 6 selects local GPU Parakeet. The menu uses the same order and queries the NVIDIA driver on each opening (two-second limit). GPU labels indicate detection only; each engine still checks its setup at startup. vc stop stops dictation and vc status reports its state. vc1 opens the picker unless a backend or cloud model is explicitly configured. No Large model is selected automatically. vc2 retains OpenRouter Parakeet.
The Medium profile uses the installed local English model, ggml-medium.en.bin. It needs an enabled NVIDIA GPU. The menu checks GPU detection at runtime. OpenRouter's live transcription catalog does not list Whisper Medium. An explicit model ID can be supplied through WHISPERTYPECLOUDMODEL.
For an OpenRouter profile, save your own API key:
The key is stored in your system keyring. Saving it does not verify it; OpenRouter may charge for transcription. Sign-out removes WhisperType's saved key and blocks fallback to an inherited key. A request already in progress may still finish. The local model needs no account. On an existing setup with no saved selection, OPENROUTERAPIKEYCOMPANY remains available as an inherited company key; whispertype login --company selects it again after sign-out. Keyring sign-in requires the desktop Secret Service and Python's gi and Secret bindings. If the keyring is unavailable, run whispertype model whisper --session for a foreground session. Stop the engine to discard the session key.
For a Codex profile, install the Codex CLI and sign in with your ChatGPT account:
Sign-in opens Codex's own login and uses its shared account. Disconnecting removes WhisperType's access without signing Codex out. The app asks Codex for its current credential over a private local pipe; it does not copy the credential store.
Codex dictation sends audio to ChatGPT's transcription backend. OpenAI's documented app sign-in currently excludes transcription, so that backend can change.
For Farsi dictation, run vc farsi (or vc 4, whispertype codex-fa, or whispertype model farsi). This requests language fa using the same saved sign-in. Press Right Ctrl, F8, or F9 to start and stop recording; the Persian transcript is pasted at the cursor. If dictation is already running, run vc stop before switching profiles. vc status labels this profile Farsi. A native Persian pronunciation sample returned سلام. on 20 October 2026; the synthetic Persian test was misrecognized, so this does not establish accuracy on longer speech.
For a file test without microphone capture, run WHISPERTYPEBACKEND=codex whispertype transcribe AUDIO.wav. For OpenRouter, explicitly supply WHISPERTYPECLOUDMODEL. The Codex CLI path transcribed the public 11-second JFK fixture in 1.97 s (15 Oct 2026, one request). This is a connection check, not an accuracy benchmark on your speech.
For a Farsi file, use WHISPERTYPEBACKEND=codex WHISPERTYPELANGUAGE=fa whispertype transcribe AUDIO.wav.
whispertype status and whispertype stop control one shared engine; a second engine is refused, so speech is never pasted twice. To start detached, supply a profile, such as whispertype model codex --background. The Elpis desktop app's WhisperType section uses the same CLI.
If your shell path excludes /.local/bin, open a new terminal. You can also start ./run-whisper.sh directly.
Press F8, F9, or Right Ctrl to start or stop recording.
Expected result: WhisperType copies the transcription. It pastes the transcription into the active application.
On Wayland, automatic paste uses a local virtual keyboard so it does not open GNOME's screen-sharing indicator. Run whispertype setup-paste to grant your user access to /dev/uinput through an administrator prompt. This grant lasts until the device is recreated or the system reboots. Without it, transcription is copied and the app asks you to paste manually. Undo the grant with pkexec setfacl -x u:$(id -u) /dev/uinput.
Local Parakeet
WhisperType supports parakeet.cpp with the NVIDIA Parakeet TDT 0.6B model on an NVIDIA GPU. To set it up from source:
vc 6 also starts the local model. The separate vc2 alias selects OpenRouter Parakeet and sends audio to that service.
The problem
For long prompts, notes, and terminal instructions, typing can become the slowest part of getting an idea into an agent or editor. General dictation tools also tend to preserve filler words and transcription artifacts that are inconvenient in technical prompts.
WhisperType removes that friction by combining speech-to-text with direct cursor insertion.
How it works
The current Linux implementation:
It records microphone audio with sounddevice.
Cloud profiles upload audio as FLAC over a pre-warmed connection.
The local engines invoke the locally built whisper-cli or parakeet.cpp. They require an NVIDIA GPU and do not silently use the CPU as a fallback.
The separate MCP tool and legacy GPU script can send transcribed text to Gemini for optional refinement.
It pastes with Ctrl+V or Ctrl+Shift+V. The focused application and VCPASTEMODE determine the paste keys. On Wayland it reads hotkeys through evdev and pastes through a reusable local virtual keyboard.
Configuration
Set optional configuration in the environment before launching WhisperType. The launcher does not load .env automatically.
For optional Gemini refinement in the MCP tool or legacy GPU script (not the menu's dictation profiles):
Supported output-format values in the current Linux script:
Variable Values Purpose VCENABLELLM true / false Enable or disable Gemini post-processing in the legacy GPU script VCLLMFORMAT plain / xml / json Shape of refined text GEMINIAPIKEY API key Required only when you enable refinement VCPASTEMODE auto / ctrlv / ctrlshiftv Paste-key behavior
Without GEMINIAPIKEY, those optional refinement paths leave the transcript unchanged. The selected transcription backend stays the same.
Current state
Implemented
Linux microphone recording and hotkey control, on X11 and GNOME Wayland.
OpenRouter transcription with an explicit model, including the Parakeet TDT 0.6B v3 profile.
English and Farsi transcription using a Codex ChatGPT sign-in.
CUDA-backed local whisper.cpp transcription using ggml-medium.en.bin, and local Parakeet.
The whispertype command: a menu, status, stop, start --background, and one shared engine at a time.
Clipboard insertion into the active application.
Terminal-aware paste-key selection on X11.
Optional Gemini text refinement in the MCP tool and legacy GPU script.
Local setup diagnostics in Linux/testsetup.sh.
Implemented but not continuously verified
The repository has local diagnostic/test scripts, but no CI currently proves end-to-end microphone → Whisper → refinement → paste behavior on a clean machine.
Desktop/window behavior depends on the local Linux environment. The terminal-detection helper is specifically X11-aware.
Planned / unresolved
A prebuilt binary/package. The source installer is reproducible, but still compiles whisper.cpp locally and downloads the model.
Broader platform acceptance testing.
Broader language support beyond the English and Farsi Codex profiles.
Additional refinement-provider options only when there is a maintained implementation path.
Not claimed as supported today
A small standalone binary/package.
Verified macOS support.
Verified Windows end-to-end support.
CPU fallback in the primary Linux GPU script.
There are Windows-specific files in the repository, but this README does not present them as a verified release path without current acceptance evidence.
What sets the design apart
These are implementation choices, not novelty claims:
Cloud or local transcription: choose Codex sign-in or OpenRouter, or use whisper.cpp/Parakeet on the local GPU.
Optional refinement: the MCP tool and legacy GPU script send only transcription text to Gemini when enabled.
Cursor-first workflow: the design aims to place output where the developer is already typing. It aims to avoid a separate transcription UI.
Fail-closed GPU path: the local GPU engines explicitly check for NVIDIA availability rather than silently changing execution mode.
Evals and test series
Run the setup diagnostic:
It checks Python, required Python imports, NVIDIA/CUDA availability, the compiled Whisper executable, and the expected model file.
What that proves: the required local pieces are present and the expected GPU executable/model paths exist.
What it does not prove: microphone quality, transcription accuracy, Gemini availability, paste behavior in every desktop environment, or cross-platform support.
Linux/testllmintegration.py targets an older Ollama/Qwen refinement path and should not be treated as verification of the current Gemini path.
The smallest useful missing test is an automated smoke test with a fixed WAV fixture. It should check Whisper output and the current refinement adapter. It should require no live microphone input.
Example
This is an example of the refinement transformation, not a guaranteed output for every model response.
Future development
The next useful distribution step is a prebuilt package with clean-machine CI verification before expanding the product surface.
License
MIT — see LICENSE.