TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
Free, open-source voice dictation for Mac that runs 100% on your Mac. Hold fn, speak, release.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Open-source voice dictation for macOS that runs entirely on your Mac.
Hold fn, speak, release — clean text appears at your cursor in any app.
Apple Silicon Mac (M1 or newer), macOS 14+. After downloading: unzip, drag Evoo to Applications, open it.
The first time, macOS says it "could not verify" Evoo (it isn't signed with a paid Apple certificate) — open
System Settings › Privacy & Security and click Open Anyway, once. Or skip that step entirely with the
one-line install below. Evoo updates itself after that.README 전문 보기 ↗Open-source voice dictation for macOS that runs entirely on your Mac.
Hold fn, speak, release — clean text appears at your cursor in any app.
New — Evoo AI v1, our own fine-tuned model. Evoo now polishes dictation with a model trained for exactly this job: Qwen3-0.6B fine-tuned on 43,000 dictations, run after Evoo's rules. On 300 dictations it never saw, almost twice as many come out exactly right as with the stock model (78 vs 43), in about 0.3 s each on an 8 GB M1. Model, examples and results on Hugging Face · how it was trained
Windows (preview): download Evoo-windows.zip — hold Ctrl + Win to dictate, with voice commands and optional on-device AI polish. See windows/ for what works and what doesn't yet.
Apple Silicon Mac (M1 or newer), macOS 14+. After downloading: unzip, drag Evoo to Applications, open it. The first time, macOS says it "could not verify" Evoo (it isn't signed with a paid Apple certificate) — open System Settings › Privacy & Security and click Open Anyway, once. Or skip that step entirely with the one-line install below. Evoo updates itself after that.
fn + ⌃ control and say what to do — "close the tab and switch to Claude", "copy that, new tab, then paste". Evoo runs each step in order (up to six) and never types a command by mistake. Plain fn still dictates.fn press.One line (Apple Silicon Mac, macOS 14+). Paste into Terminal:
curl -fsSL https://raw.githubusercontent.com/chndr-prksh/evoo/main/install.sh | bash
It downloads the latest release, verifies its checksum, installs /Applications/Evoo.app, and opens it.
Or download Evoo.zip from Releases, unzip, and drag
Evoo to Applications. Evoo isn't signed with a paid Apple Developer ID, so the first time macOS will say it
"could not verify" Evoo: open System Settings › Privacy & Security and click Open Anyway (once).
Updates: every change pushed to main is built and published automatically. Evoo checks every few hours;
when a new build is out, a dot appears by its menu bar icon — choose Install Update and it relaunches on the
new version, keeping your settings and permissions.
fn down ─▶ AudioRecorder (16 kHz mono)
fn up ─▶ SpeechEngine ─▶ number formatting ─▶ DictationRules ─▶ [LLM, only if needed] ─▶ ⌘V at cursor
Parakeet/Whisper NeMo ITN corrections, Qwen3 via llama.cpp
~110 ms "four hundred"→400 fillers, stutters Hinglish / unresolved
| Stage | Model / library | License | Where it runs |
|---|---|---|---|
| Speech → text (English) | Parakeet TDT 0.6B v3 via FluidAudio | CC-BY-4.0 / Apache-2.0 | Neural Engine |
| Speech → text (Hindi, Hinglish) | Whisper large-v3 turbo via WhisperKit | MIT / MIT | Neural Engine + GPU |
| Numbers ("four hundred ms" → "400 ms") | NeMo inverse text normalization (text-processing-rs) | Apache-2.0 | CPU, < 1 ms |
| Self-corrections, fillers, stutters | DictationRules (built-in, deterministic) | Apache-2.0 | CPU, < 5 ms |
| Lists, line breaks, emails | DictationFormatter: bullets, numbered steps, to-do checklists, "new line", "chandra at gmail.com" — styled per app | Apache-2.0 | CPU, < 1 ms |
| Voice commands | DictationCommands: "capitalize each word …", "all caps …", "lowercase …", "quote … end quote", "… press enter", "undo that" | Apache-2.0 | CPU, < 1 ms |
| Learning from edits | EditWatcher + EditLearner: names you correct join the dictionary; per-app habits (no final full stop, lowercase start) after 2 edits — counts only, never text | Apache-2.0 | Accessibility API |
| Names on screen (context awareness) | ScreenText + ContextVocabulary: names in the focused window (chat header, recipients, text near the cursor) join the dictionary for that dictation — local, never stored | Apache-2.0 | Accessibility API, read while you speak |
| Names & terms ("DeVeo" → "Divya") | PersonalDictionary: sound-alike match, never replaces real English words | Apache-2.0 | CPU, < 1 ms |
| Hinglish romanization, tricky corrections | Qwen3 1.7B (Q4_K_M GGUF) via llama.cpp | Apache-2.0 / MIT | GPU (Metal), ~1 s |
English dictation never waits for an LLM: the rules handle "tomorrow, no, day after tomorrow", "to Rahul, sorry, to Priya", "3:30, actually make it 4", "um", "we could we could" and "scratch that". The LLM only runs when a correction cue can't be resolved by rules, or for Hinglish/Hindi.
| Gesture (default "Hold or double-tap" mode) | Result |
|---|---|
Hold fn, speak, release | Dictate |
Double-tap fn | Hands-free; tap fn again to finish |
Esc while recording | Cancel |
fn + any other key | Ignored (so Fn+arrows / F-keys keep working) |
Hold fn + Control, speak, release | Command mode: nothing is typed. “Close the tab and switch to Claude” |
Smart commands (preview). An optional 290 MB on-device model (FunctionGemma 270M, fine-tuned on Evoo's 34 tools) understands commands said your own way in command mode: “it's too bright in here”, “I'm done with Safari”. On 344 phrasings it never saw it gets 79% fully right and the right tool 93% of the time, in about 0.4 s. Fixed phrases are always tried first. Download it in Settings; how it is built and scored is in Tools/. The model is built on Google's FunctionGemma and is subject to the Gemma Terms of Use.
The floating pill at the bottom of the screen shows state; hover it to start hands-free or open Class Notes. Drag it left or right to move it along the bottom of the screen (or Settings › Pill position).
One-time setup: System Settings › Keyboard › "Press 🌐 key to" → Do Nothing. Then grant Evoo
Microphone, Input Monitoring (to see fn) and Accessibility (to paste). Don't run Evoo and
another Fn-based dictation app (e.g. Wispr Flow) at the same time — both will react.
Requires macOS 14+, Apple Silicon, and the Xcode Command Line Tools (full Xcode not required).
swift test # unit tests (gestures, correction rules, prompt, cleaner)
scripts/bundle.sh # builds build/Evoo.app
open build/Evoo.app
First launch downloads the speech model (~0.5 GB). Download the refinement model from Settings (1.1 GB).
Models live in ~/Library/Application Support/Evoo/Models and are pinned + SHA-256 verified.
Permissions across rebuilds: dev builds are ad-hoc signed with a designated requirement pinned to the
bundle ID, so macOS keeps Microphone / Input Monitoring / Accessibility across rebuilds. If permissions ever
look granted but Fn or pasting doesn't work (stale entries from older builds), quit Evoo and run
tccutil reset All app.evoo.Evoo, then relaunch and grant again.
swift build -c release --product evoo-cli
say -o /tmp/a.wav --data-format=LEI16@16000 "let's meet tomorrow, no, day after tomorrow"
.build/release/evoo-cli bench /tmp/a.wav # audio → text with per-stage timings
.build/release/evoo-cli post "send it to rahul, sorry, to priya" # rules + numbers only
.build/release/evoo-cli refine --lang hinglish "कल मिलते हैं no sorry परसों" # LLM only
Debug builds can render every pill state to PNGs: .build/debug/Evoo --snapshot-pill /tmp/pill.
Set EVOO_LLAMA_LOG=1 to see llama.cpp's logs.
Sources/EvooCore Pure logic, fully unit-tested: Fn gesture state machine, languages & engine routing,
refinement prompt + output guards, transcript cleanup, model catalog.
Sources/EvooRefine llama.cpp refiner (KV-cached prompt prefix) and verified model downloads.
Sources/EvooSpeech SpeechEngine protocol, Parakeet + Whisper engines, DictationPipeline (ASR → ITN → rules → LLM).
Sources/Evoo The menu-bar app: FnKeyMonitor, AudioRecorder, TextInjector, DictationController,
pill + settings UI, permissions.
Sources/evoo-cli Terminal tool: bench (audio → text timings), post (rules only), refine (LLM only).
Adding a speech engine = one type conforming to SpeechEngine (load / transcribe / unload) plus a case in
ASREngineID. Only open-weight models with OSI-approved or CC-BY licenses are accepted — no API keys, no
non-commercial licenses.
Measured on an 8 GB M1 (under memory pressure):
| Case | Result |
|---|---|
| English, fn up → text ready, with a natural pause (≥ 0.35 s) before release | ✅ 1–15 ms — transcribed speculatively while fn is held |
| English, fn up → text ready, releasing immediately after speaking | ✅ 121–139 ms (Parakeet 0.6B); ~40–70 ms with the optional 110M model |
Self-corrections (Benchmarks/corrections.tsv, 83 cases) | ✅ 83/83 · holdout of 30 unseen phrasings: 28/30, no false corrections |
| Local LLM for corrections (Qwen3 0.6B / 1.7B, deletion-only) | ❌ evaluated and rejected: 48–65/83 and 100–900 ms slower than rules (evoo-cli corpus --llm) |
| LLM path (unresolved corrections, Hinglish) | ~1–4 s on 8 GB M1 — opt-in, only when needed |
| Qwen3 4B | No better on the English set and 3–5× slower on 8 GB; meant for 16 GB+ Macs |
| Hinglish | ⚠️ Mixed. Whisper outputs Devanagari and the 1.7B model sometimes translates or misses corrections when romanizing. Needs a better model — top roadmap item |
Also not handled yet: Secure Input fields (password boxes, Terminal "Secure Keyboard Entry") block fn detection;
non-QWERTY layouts may need a different paste key code; keyboards without fn need a fallback hotkey; no
signed/notarized release yet.
Apache-2.0. See NOTICE for model and library attributions..