LOCAL ENGLISH AND GREEK DICTATION — IMPLEMENTATION BRIEF Prepared 26 October 2026 Please help me build this setup. First inspect my operating system and hardware, then adapt the implementation. Treat this as a reference design, not an already complete installer. The custom worker and shortcut code will need to be implemented or obtained separately. 1. OVERVIEW Base application: Handy, an open-source desktop speech-to-text application. https://github.com/cjpais/Handy The reference machine runs Linux Mint/Cinnamon with X11, a Ryzen 5 5600H, 32 GB RAM, and an NVIDIA RTX 3050 Ti with 4 GB VRAM. Windows and macOS need different shortcut, input injection and interprocess communication implementations. Hold a keyboard shortcut and speak. Release it to stop recording, transcribe the captured audio, and paste the result into the currently focused application. Certain shortcuts also press Enter after pasting. A separate toggle shortcut starts recording on the first press and stops it on the second. Handy handles the microphone, recording popup, transcription history and output. A customized Rust backend sends mono 16 kHz audio to separate Python recognition workers through private local Unix sockets. The workers return text. English and Greek use separate models. This is direct speech recognition. No LLM, ChatGPT subscription, translation step or external speech API is needed for these two dictation routes. 2. ENGLISH: LOCAL NVIDIA GPU Model: NVIDIA Parakeet TDT 0.6B v3, using this FP16 ONNX export: https://huggingface.co/visuall/parakeet-tdt-0.6b-v3-onnx-fp16 Pinned revision: 125d44237abd9a53d291a3104a563fc0ba104ecb Execution: local NVIDIA GPU, FP16, ONNX Runtime CUDA provider. Reference runtime: ONNX Runtime GPU 1.20.2 and onnx-asr 0.11.0. The reference worker needs cudnn_conv1d_pad_to_nc1d=1. Measured worker GPU memory: approximately 1.4 GB VRAM. Allow additional space for the desktop and other applications; total GPU usage matters. Keep the model resident between recordings. The reference worker unloads it after five idle minutes; the next recording then incurs model loading time. Long recordings need special handling. The reference implementation uses overlapping acoustic encoder windows, with a 16-second owned core, up to 10 seconds of left context and 2 seconds of right context. Each encoded frame belongs to the output exactly once, and one continuous decoder state spans the windows. This is custom implementation work, not a default onnx-asr setting. Do not independently transcribe arbitrary chunks and simply concatenate the text: that can omit or duplicate words. Validate encoder lengths, including export rounding edge cases, and verify actual CUDA execution. 3. GREEK: LOCAL LAPTOP CPU Greek runs on the CPU, not on the GPU, in this reference setup. Specialist model: myned-ai/parakeet-tdt-0.6b-v3-greek https://huggingface.co/myned-ai/parakeet-tdt-0.6b-v3-greek Pinned revision: c314e68a3935a5bb8e398681790ff13efb99432f This is a Greek/Cypriot Greek fine-tune of Parakeet TDT 0.6B v3. It improves Greek spelling, especially the final sigma character, ς. Execution: local CPU, FP32, onnx-asr with ONNX Runtime's CPUExecutionProvider. The reference worker uses two CPU threads and stays resident, using approximately 2.7–3 GB RAM. Its configuration disables the CPU memory arena and graph optimization. Benchmark these choices on the target machine. The local Greek route works without a server connection. Keep English on its separate model: the Greek specialist was unsuitable for English in our tests. Convert the model's Latin question mark (?) to the Greek question mark (;). The Greek model is distributed under CC BY 4.0; preserve the publisher's attribution and applicable notices. 4. IMPORTANT: GREEK RECOGNITION IS NOT FULLY RELIABLE YET The specialist worked well on several recordings, but later returned only fragments of two recordings lasting approximately 36 and 54 seconds. The full captured audio was present. Independent replays through both ONNX and the original NeMo implementation produced exactly the same omissions. This particular recognition failure was therefore independent of Handy's clipboard and paste code. Splitting audio, adding silence, adjusting blank-token preference, and using an alternate decoder did not provide a consistently reliable correction. Do not deploy these experiments as a proven fix. Cached Whisper large-v3 and Whisper medium, tested with faster-whisper on the server CPU in INT8 mode, recovered speech throughout both failed recordings, although word errors remained. They were considerably slower. These were diagnostic comparisons, not deployed replacements, and their server timings are not laptop benchmarks. Evaluate Whisper or another validated model as a possible alternative or explicit fallback. Do not silently drop portions of speech or claim reliability from only a few successful examples. Compare the beginning, middle and end of failed recordings when validating a correction. 5. KEYBOARD SHORTCUTS Super means the Windows key on the Linux reference machine. - Ctrl+Space: toggle English recording on/off; paste without automatic Enter. - Ctrl+Super: hold for English; release to paste and press Enter. - Alt+Super: hold for English; release to paste without Enter. - Ctrl+Super+G: hold for local Greek CPU recognition; release to paste and press Enter. - Alt+Super+G: hold for local Greek CPU recognition; release to paste without Enter. Optional server comparison route: - Ctrl+Super+S: Greek recognition on a separate server CPU; paste and press Enter. This route requires a server connection and is not needed for a fully local installation. The reference setup also supports the spoken suffix "submit now" or "submitnow": remove it from the end of a fresh transcript and request Enter after pasting. Do not send Enter for a command-only empty transcript. This feature is optional. Check shortcut conflicts on the target desktop before registering these combinations. Adding G after pressing the modifiers must select Greek without restarting the recording or losing its beginning. Each hold must stop exactly once when released, without accidentally starting another recording. 6. CLIPBOARD, PASTE AND DESKTOP RESPONSIVENESS Keep clipboard reads, waits and paste orchestration off the GUI thread. Serialize paste transactions so concurrent operations do not overwrite one another's clipboard state. Keep the recording popup from stealing focus. The reference custom build backported Handy's upstream paste-thread fix: https://github.com/cjpais/Handy/pull/2302 The reference Linux installation uses xdotool and Ctrl+Shift+V for terminal pasting. Adapt the paste method to the actual target application; not every application uses that combination. A successful simulated keystroke does not prove that the receiving application has read the clipboard. We reproduced a race where restoring the previous clipboard after a fixed 60 ms delay lets a busy application paste old, unrelated contents. A prepared code change makes the CopyToClipboard mode retain the transcript continuously instead of briefly restoring the old clipboard first. This change passed isolated tests but was not deployed when this brief was written; the user's clipboard preference was still pending. Reliably preserving the previous clipboard requires more than an arbitrary short timer. The reference machine also experienced intermittent desktop freezes. Both paste implementations sometimes froze and sometimes worked smoothly. The cause was not conclusively identified. Do not claim that the upstream paste-thread fix resolves every desktop stall, or that another application is responsible without evidence. 7. BUILD, SERVICES AND VALIDATION Use Git and preserve the original Handy installation. Keep known-working binaries separately so versions can be switched by restarting Handy rather than rebuilding each time. Switch only between recordings. Build the production frontend and native application correctly. In the reference custom build, the Rust release build required Tauri's custom-protocol feature and an existing production frontend. A Rust-only build without the production configuration can leave the GUI trying to connect to a development server. Run recognition workers as supervised user services. Use private socket directories, validate protocol sizes and audio formats, reject malformed input, and prevent duplicate workers. Keep English and Greek workers separate. Report errors explicitly rather than silently switching language routes. Test: - Short and long English and Greek recordings. - Pauses and continuous speech. - Late presses of G and different key release orders. - Both hold shortcuts and the toggle shortcut. - Paste-only and paste-plus-Enter behavior. - A slow receiving application and an existing unrelated clipboard value. - Popup focus and desktop responsiveness. - Idle model unloading and worker restart behavior. Use fake input handlers or isolated test windows. Never inject test commands into the user's active terminal. Start with English GPU dictation. Add Greek as a separately validated route, with its current limitations clearly reported. Measure latency, RAM and VRAM use on my hardware. Preserve recordings that reproduce bugs before history retention removes them.