TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Voice dictation for Windows, 100% local and free.
Hold a key, speak, let go: the text appears wherever the cursor is, in any application
(Outlook, Teams, Slack, VS Code, your browser…). No audio ever leaves your machine.
Project page with an interactive demo: https://fmrgcarvalho.github.io/speechdesk/
Status: early version (v0.1). The core has automated tests and CI builds the full Windows app;
real-world testing on different machines is ongoing. Bugs and ideas: Issues.檢視完整 README ↗English · Português
Voice dictation for Windows, 100% local and free. Hold a key, speak, let go: the text appears wherever the cursor is, in any application (Outlook, Teams, Slack, VS Code, your browser…). No audio ever leaves your machine.
Project page with an interactive demo: https://fmrgcarvalho.github.io/speechdesk/
Status: early version (v0.1). The core has automated tests and CI builds the full Windows app; real-world testing on different machines is ongoing. Bugs and ideas: Issues.
| Installer (.exe) | Start menu entry, optional start with Windows. No administrator rights needed. |
| Portable (.zip) | Unzip anywhere and run SpeechDesk.exe. Settings and models stay in a data folder next to the app. |
Windows 10/11, 64-bit. On first start SpeechDesk offers to download the speech model (~0.7 GB, once). It is not code-signed yet, so SmartScreen may warn the first time: More info → Run anyway. All versions: Releases.
The app is in English by default; switch to Portuguese from the tray menu → Language.
| Shortcut | What it does |
|---|---|
| Hold Right Ctrl | Records while the key is held; types the text when you let go |
| Double-tap Right Ctrl | Hands-free mode: records without holding the key |
| Tap Right Ctrl (in hands-free mode) | Stops and types the text |
| Esc | Cancels the recording |
| Right Ctrl + another key (e.g. Ctrl+C) | Cancels — it is a normal shortcut |
AI clean-up and translation to English are switched on and off from the tray icon menu next to
the clock (right-click). Change the key with Hotkey.VirtualKey in the settings: 163 = Right Ctrl
(default), 145 = Scroll Lock, 165 = Right Alt (avoid on keyboards where it is AltGr).
"Transcription": { "Languages": "pt" } (or "pt,en"). Parakeet detects the
language by itself and short phrases sometimes come out in Spanish or English; with this set, a sentence
that comes out in another language is transcribed again with Whisper forced to the first language
(needs the Whisper model; ~1 s per second of audio, only for those sentences).MicrophoneWarmSeconds), so the next one
starts instantly and includes the 250 ms before you pressed the key. Set it to 0 to close it right away.Hotkey.ReleaseTailMs), so the last syllable is not cut off. Global key ──► Microphone 16 kHz ──► Parakeet TDT 0.6B v3 ──► [AI clean-up] ──► Rules ──► Ctrl+V into the active app
(keyboard hook) (NAudio) (sherpa-onnx, local) optional, local dictionary, (clipboard restored)
Qwen 2.5 1.5B snippets
By default SpeechDesk uses NVIDIA Parakeet TDT 0.6B v3 (CC-BY-4.0), running locally with sherpa-onnx:
OpenAI Whisper large-v3-turbo (whisper.cpp) is available as an alternative — useful for languages outside those 25 — and there is an adapter for OpenAI-compatible cloud APIs, off by default. Whisper is much heavier on CPU: on a 4-core laptop (Intel i5-1135G7) it needs ~1 s per second of audio versus ~0.1 s for Parakeet, so SpeechDesk uses it mainly as a fallback to force the language.
Tray menu → Translate to English. You speak Portuguese and the text is typed in English into the app you are using. It appears about 1–2 s after you let go of the key, one utterance at a time (the overlay shows → EN).
| Active engine | Who translates | What you need |
|---|---|---|
| Whisper | Whisper itself (built-in translate task) | Only the Whisper model |
| Parakeet (default) | The local AI model (Qwen 2.5), after transcribing | download-model.ps1 -Engine ai |
With the AI model the target language can be something else (Translation.TargetLanguage, e.g.
"French"); Whisper only translates into English. If translation fails or takes longer than
Translation.TimeoutSeconds, the original text is typed and a warning is shown — Portuguese never slips
through unnoticed. Snippets are matched against the final text: with translation on, add English triggers
(e.g. "my email").
Two modes, from the tray menu → Clean up text with AI:
| Mode | What it does | Speed |
|---|---|---|
| No AI (default) | Rules: removes "um"/"uh", spoken punctuation, dictionary, snippets | Instant |
| With AI | Before the rules, a local language model fixes the text: resolves self-corrections ("at 3, no, at 4" → "at 4"), fixes grammar, formats lists and adapts the tone to the app (formal in Outlook, casual in Slack) | +0.5–2 s per dictation on CPU |
The model is Qwen 2.5 1.5B Instruct (GGUF Q4_K_M, ~1 GB, Apache 2.0), running inside the app with
llama.cpp — no server, nothing else to install. Safeguards: if the model is slower than TimeoutSeconds,
missing, or returns something that does not look like a clean-up (e.g. it answers a question you
dictated), SpeechDesk types the text without AI. Dictation never gets stuck.
./scripts/download-model.ps1 -Engine ai # once
For better quality on machines with more RAM, any ChatML-format GGUF model works
(e.g. qwen2.5-3b-instruct-q4_k_m.gguf) — just change Formatting.Ai.ModelPath.
| Feature | Status | Notes |
|---|---|---|
| Dictation into any app with a global key | ✅ | Hold-to-talk + hands-free |
| Fast local speech recognition, EN and PT | ✅ | Parakeet v3; Whisper as an alternative |
| Removes "um", "uh" and filler words | ✅ | Local rules |
| Automatic punctuation and capitalisation | ✅ | Model + rules; spoken "comma", "full stop", "new line" |
| Local AI clean-up (self-corrections, grammar, tone) | ✅ | Optional, tray menu switch |
| Speak Portuguese, type English | ✅ | Optional, tray menu switch; native Whisper or local AI |
| Personal dictionary (names, technical terms) | ✅ | Replacements applied to the final text |
| Snippets ("my email" → full address) | ✅ | Snippets in settings.json |
| Per-app style (formal, casual, code) | ✅ | Basic rules; full tone with AI on |
| Dictation history | ✅ | Local history.jsonl |
| Voice commands on selected text | ⏳ | Roadmap |
| Microphone choice | ✅ | Tray menu → Microphone |
| Quiet microphones (auto gain) | ✅ | Voice activity detection (VAD) on the roadmap |
Details in docs/ROADMAP.md (in Portuguese).
| Setup | RAM used by SpeechDesk (estimate) | Recommended PC RAM |
|---|---|---|
| Speech recognition only (Parakeet or Whisper) | ~1–1.2 GB | 8 GB (works with 4 GB) |
| Speech recognition + AI clean-up or translation | ~2.3–2.6 GB | 8 GB (minimum ~6 GB) |
The AI model is only loaded when you turn on AI clean-up or translation.
git clone https://github.com/fmrgcarvalho/speechdesk.git
cd speechdesk
dotnet run --project src/SpeechDesk.App # offers to download the model on first start
An icon appears next to the clock. Open Notepad, hold Right Ctrl and speak.
scripts/download-model.ps1 downloads the models from the command line instead (-Engine whisper or
-Engine ai for the others). To publish a release with the installer and the portable zip, push a tag:
git tag v0.1.1 && git push origin v0.1.1 (release workflow).
%AppData%\SpeechDesk\settings.json — or data\settings.json next to the app in the portable version
(created on first run; tray menu → Open settings / Reload settings):
{
"UiLanguage": "en", // "en" | "pt"
"Hotkey": { "VirtualKey": 163, "DoubleTapMs": 350, "MinRecordingMs": 300, "ReleaseTailMs": 250 }, // 163 = Right Ctrl
"Transcription": {
"Engine": "parakeet", // "parakeet" | "whisper" | "cloud"
"ParakeetModelDir": "sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8",
"WhisperModelPath": "ggml-large-v3-turbo-q5_0.bin",
"Language": "auto", // Whisper/cloud only; Parakeet detects it
"Languages": "" // languages you speak, e.g. "pt" or "pt,en"; "" = any
},
"Formatting": {
"RuleBasedCleanup": true,
"Ai": { "Enabled": false, "ModelPath": "qwen2.5-1.5b-instruct-q4_k_m.gguf", "TimeoutSeconds": 6, "GpuLayers": 0 }
},
"Translation": { "Enabled": false, "TargetLanguage": "English", "TimeoutSeconds": 12 },
"Dictionary": { "speech desk": "SpeechDesk", "dot net": ".NET" },
"Snippets": { "my email": "[email protected]" },
"AppStyles": { "OUTLOOK": "Formal", "slack": "Casual", "Code": "Code" },
"Microphone": "", // name (or part of it); "" = Windows default
"MicrophoneWarmSeconds": 30, // keep the mic open after a dictation; 0 = close at once
"Injection": "Paste" // "Type" for apps that block pasting
}
To use Whisper: ./scripts/download-model.ps1 -Engine whisper and "Engine": "whisper".
speechdesk/
├── src/
│ ├── SpeechDesk.Core/ # Pure domain (net8.0): abstractions, pipeline, text rules, settings
│ ├── SpeechDesk.Transcription/ # Engines: Parakeet (default), Whisper, cloud API
│ ├── SpeechDesk.AiCleanup/ # Optional clean-up/translation with a local language model (LLamaSharp)
│ ├── SpeechDesk.Platform.Windows/ # Win32: keyboard hook, microphone, text insertion, active app
│ └── SpeechDesk.App/ # WPF: composition root, tray icon, overlay, hotkey controller
├── tests/SpeechDesk.Core.Tests/ # Domain unit tests (xUnit)
├── installer/SpeechDesk.iss # Installer (Inno Setup)
├── scripts/download-model.ps1
├── docs/ # Project page (EN at /, PT at /pt), architecture, roadmap and ADRs
└── .github/workflows/ # build.yml (CI) and release.yml (installer + portable on tag)
Architecture in docs/ARCHITECTURE.md (in Portuguese).
Transcription.Languages very short phrases are
sometimes transcribed in English or Spanish.SpeechDesk is free software under the GNU GPL v3.0: anyone can use it for free — at home or at work — study it, change it and share it. Modified versions that are distributed must also be released under the GPL with their source code. For a commercial licence (e.g. to embed SpeechDesk in a closed-source product), contact the author. Contributions: see CONTRIBUTING.md.