{"id":51552841,"url":"https://github.com/santhsecurity/mist","last_synced_at":"2026-07-10T01:01:44.553Z","repository":{"id":369198342,"uuid":"1287818217","full_name":"santhsecurity/mist","owner":"santhsecurity","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-04T03:07:46.000Z","size":226,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-04T05:07:34.304Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/santhsecurity.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-03T03:12:15.000Z","updated_at":"2026-07-04T03:07:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/santhsecurity/mist","commit_stats":null,"previous_names":["santhsecurity/mist"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/santhsecurity/mist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhsecurity%2Fmist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhsecurity%2Fmist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhsecurity%2Fmist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhsecurity%2Fmist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/santhsecurity","download_url":"https://codeload.github.com/santhsecurity/mist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhsecurity%2Fmist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35316840,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-10T01:01:43.970Z","updated_at":"2026-07-10T01:01:44.541Z","avatar_url":"https://github.com/santhsecurity.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mist\n\nLocal-first voice dictation daemon for Linux, macOS, and Windows.\n\nPush-to-talk → transcribe → type. No cloud. No clipboard. Just your voice at your cursor.\n\n## Screenshots\n\nThe overlay follows your cursor and shows a sleek monochrome status bar with the live / final text.\n\n| Listening | Processing | Done |\n|---|---|---|\n| ![listening](assets/screenshots/listening.png) | ![processing](assets/screenshots/processing.png) | ![done](assets/screenshots/done.png) |\n\nYou can regenerate these with `mist screenshot`.\n\n## Features\n\n- **Zero external setup** - Whisper runs locally; optional Candle LLM cleanup\n- **Direct typing** - Text appears at your cursor, no clipboard pollution\n- **Cross-platform** - Linux (X11/Wayland), macOS, Windows\n- **Hold-to-talk or toggle mode** - Hold hotkey to record, or press once to start and again to stop\n- **Cursor-following overlay** - A minimal, monochrome status bar appears near your cursor while you speak\n- **Premium rendering** - Sleek black pill, hairline border, system typography\n- **Audio feedback** - Optional start/stop clicks so you know the state without looking\n- **Modular cleanup** - `fast` (default), `candle`, `ollama`, `command`, or `none`\n- **Vocabulary correction** - Fuzzy post-STT correction dictionary for domain terms\n- **Phrase replacements** - Expand shortcuts like \"my email\" → `you@example.com`\n- **Dictionary bias** - Natural-sentence Whisper prompting for custom vocabulary\n- **Per-project dictionaries** - Auto-load terms, corrections, and replacements from `.mist-dictionary.toml`; edits are picked up on the next dictation\n- **Model management** - `mist model list/download/remove` to manage Whisper models\n- **System tray** - Tray icon with open config/data folder and quit actions\n- **Voice Activity Detection** - Trims silence before transcription for faster results\n- **Live preview** - Optional chunked transcription while you speak\n- **Graceful shutdown** - Clean Ctrl+C handling, systemd integration\n- **Health check** - `mist status` shows config, model, and typing-backend state\n- **Diagnostics** - `mist logs` prints the latest daemon log output\n\n## Install\n\n```bash\n./install.sh\n```\n\n`install.sh` will:\n\n1. Auto-detect Apple Silicon (CoreML) or OpenBLAS and enable the matching acceleration feature.\n2. Check for a typing tool on Linux (`xdotool`, `wtype`, `ydotool`) and warn if missing.\n3. Optionally download the default Whisper model.\n4. Run `mist setup` interactively.\n5. Install the systemd user service and desktop entry.\n\nOr manually:\n\n```bash\ncargo build --release\n# Binary: target/release/mist\n```\n\n### GPU / NPU Acceleration\n\nMist supports accelerated speech recognition via `whisper-rs` feature flags. CPU mode works out of the box.\n\n| Feature | Requires | Speedup |\n|---------|----------|---------|\n| `cuda` | NVIDIA GPU + CUDA Toolkit | 10-50× |\n| `metal` | Apple Silicon / macOS | 5-20× |\n| `coreml` | Apple Silicon / macOS | 2-5× on Neural Engine |\n| `vulkan` | Vulkan SDK | 5-15× |\n| `openblas` | OpenBLAS dev libs | 1.5-3× on CPU |\n\n```bash\n# NVIDIA GPU\ncargo build --release --features cuda\n\n# Apple Silicon (Metal + CoreML)\ncargo build --release --features \"metal coreml\"\n\n# Apple Silicon Neural Engine only\ncargo build --release --features coreml\n\n# Vulkan (cross-platform)\ncargo build --release --features vulkan\n\n# CPU with BLAS on Linux\nsudo apt install libopenblas-dev\ncargo build --release --features openblas\n```\n\n### Systemd (Linux)\n\n```bash\nsystemctl --user enable mist\nsystemctl --user start mist\nsystemctl --user status mist\n```\n\n## Usage\n\n```bash\nmist              # Run daemon (default)\nmist run          # Explicitly run daemon\nmist setup        # Interactive configuration\nmist status       # Show daemon status\nmist doctor       # Run environment diagnostics\nmist screenshot   # Generate overlay screenshots\nmist logs         # Show recent daemon logs\nmist model list\nmist model download small.en\nmist model remove base.en\nmist dictionary add Kubernetes\nmist dictionary list\nmist dictionary import ./my-dict.toml\nmist dictionary export ./my-dict.toml\n```\n\n**Default hotkey:** `Alt+Shift+D`\n\nHold to record, release to transcribe and type. Switch to toggle mode in `mist setup` to press once to start and again to stop.\n\n## Configuration\n\nConfig lives at `~/.config/mist/config.toml` (auto-created on first run).\n\n```toml\nhotkey = \"Alt+Shift+D\"\nmodel = \"small.en\"\nlanguage = \"en\"\ncleanup_backend = \"fast\"\ncleanup_enabled = true\nlive_stream = false\nshow_overlay = true\ntoggle_mode = false\naudio_feedback = false\nmax_recording_secs = 120\nn_threads = 0                          # 0 = auto-detect\nollama_model = \"qwen3:0.6b\"\nollama_url = \"http://localhost:11434\"\ncleanup_prompt = \"Clean up this text.\"\ndictionary = [\"Rust\", \"LLM\"]\n\n[[corrections]]\npatterns = [\"kubernetes\", \"kuber netties\", \"cooper nettys\"]\ncorrect = \"Kubernetes\"\n\n[[corrections]]\npatterns = [\"dall-e\", \"dolly\"]\ncorrect = \"DALL·E\"\n\n[[replacements]]\npattern = \"my email\"\nreplacement = \"you@example.com\"\n```\n\n### Cleanup backends\n\n| Backend | Description | Requires |\n|---------|-------------|----------|\n| `fast` | Regex filler removal, zero latency | Nothing |\n| `candle` | Native Qwen2 0.5B GGUF | ~300MB download |\n| `ollama` | HTTP to local Ollama | Ollama running |\n| `command` | Shell command stdin/stdout | Your tool |\n| `none` | Passthrough | Nothing |\n\n### Per-project dictionary\n\nCreate `.mist-dictionary.toml` in your project root:\n\n```toml\nterms = [\"Kubernetes\", \"Terraform\", \"gRPC\"]\n\n[[corrections]]\npatterns = [\"kuber netties\"]\ncorrect = \"Kubernetes\"\n\n[[replacements]]\npattern = \"my email\"\nreplacement = \"you@example.com\"\n```\n\nMist walks up 5 parent directories looking for this file and merges the entries with your global config.\n\n### Vocabulary corrections\n\nThe `[[corrections]]` table maps common Whisper misrecognitions to their correct spelling using fuzzy matching (Jaro-Winkler similarity ≥ 0.88). This runs after transcription in \u003c1ms and is 100% deterministic.\n\n### Phrase replacements\n\nThe `[[replacements]]` table expands shortcuts after cleanup. Patterns are matched case-insensitively as whole phrases.\n\n## Models\n\nWhisper models auto-download on first run to `~/.local/share/mist/models/`:\n\n| Model | Size | English-only | Notes |\n|-------|------|-------------|-------|\n| `tiny.en` | ~75MB | ✓ | Fastest, lowest accuracy |\n| `base.en` | ~142MB | ✓ | Good balance |\n| `small.en` | ~466MB | ✓ | Default, high accuracy |\n| `small.en-q5_0` | ~180MB | ✓ | Quantized; faster, nearly same accuracy |\n| `medium.en` | ~1.5GB | ✓ | Highest accuracy CPU model |\n| `medium.en-q5_0` | ~550MB | ✓ | Quantized medium |\n| `large-v3-turbo-q5_0` | ~900MB | - | Turbo large; fastest large-class model |\n\nDownloads include progress reporting and SHA-256 verification for known models.\n\n## Logs\n\nLogs write to `~/.local/share/mist/mist.log` by default (auto-rotated at 10 MB). Set `RUST_LOG=debug` for verbose output to stderr.\n\n## Test\n\n```bash\ncargo test\n```\n\n## Architecture\n\n```\ncli.rs         → command parsing and one-off utility commands\ndaemon.rs      → tao event loop, hotkey handling, STT worker, overlay updates\ntray.rs        → system tray icon and menu actions\naudio.rs       → cpal capture + VAD + bounded buffer\naudio_feedback.rs → optional start/stop clicks\nstt.rs         → whisper-rs + natural dictionary prompting\ncleanup/       → pluggable backends + corrections + replacements\npaste.rs       → direct typing (xdotool/wtype/ydotool/enigo) with caching\noverlay/       → cursor-following monochrome status bar\nconfig.rs      → TOML + interactive setup + per-project dict + CLI dict edits\nhotkey.rs      → global-hotkey parsing\nicon.rs        → runtime-generated tray icon\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanthsecurity%2Fmist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsanthsecurity%2Fmist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanthsecurity%2Fmist/lists"}