TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.