Releases: felixfu824/HushType
Release list
v0.5.7 — Fully local after first download
Fully local after first download
v0.5.6 (and earlier) still contacted Hugging Face on every launch to revalidate the speech-recognition model — so an HF outage could block model loading even with the full model cached on disk. That's fixed:
Cache-first model loading
- Once the model has been downloaded, HushType validates the local snapshot from disk (file metadata + hash integrity) and loads it with zero network requests. Hugging Face is only contacted on first download, or if the cache is incomplete or corrupt.
- Launches are also slightly faster — no per-file network round-trips before the model loads.
- Found and fixed during a live Hugging Face outage: with
huggingface.coreturning 503, v0.5.7 loads and transcribes normally.
Also
- The speech-swift dependency is now pinned to an exact revision, so upstream changes can't land unreviewed.
- Model-load failures now log their actual reason instead of a redacted
<private>.
No feature changes — see v0.5.6 for the Text Polish track-changes card and 繁中 proofreading improvements.
v0.5.6 — Track-changes polish card + 繁中 tuning
Text Polish, now with track changes — and better 繁中 proofreading
Track-changes result card
The polish result card now shows exactly what changed, Word track-changes style: deletions struck through in red, insertions underlined in green — one unified view instead of two stacked text blocks.
Word-level diff for English, character-level for Chinese — a single-character 錯別字 fix highlights just that character:
Better 繁中 proofreading
- The proofreading prompt now explicitly targets 錯別字 (same-sound wrong-character typos) with dedicated examples — validated against a 13-case live eval suite before shipping (catch rate 5/13 → 7/13, zero regressions).
- Fixed a model quirk where 妳 was silently rewritten to 你/您 — a register change, not a proofread. HushType now detects and reverts that swap deterministically; if it was the only edit, you correctly get "No changes needed" and your clipboard is left alone.
- Honest limits: syntax-dependent pairs (like 在/再) are still beyond the on-device model's reach. HushType rides the OS-shipped Apple Intelligence model, so this improves automatically as Apple ships stronger models.
Also
- Result card is more compact (smaller type, tighter layout, no more truncated "Original" block).
- Long selections past the diff limit fall back to plain polished text — the limit is sized so multi-paragraph 繁中 selections keep the track-changes view.
Requirements for Text Polish: macOS 26 (Tahoe) + Apple Intelligence + Apple Silicon. Dictation works on macOS 15+ as before.
HushType v0.5.5 — Text Polish
New: Text Polish (macOS 26+)
Select text in any app → double-tap Right ⌥ → the selection is proofread on-device by Apple's Foundation Models and replaced in place, with a result card showing what changed. When a correction was made, the polished text also stays on the clipboard — so it works in read-only views too. Also available via right-click → Services → Polish with HushType.
It is deliberately a mechanical proofreader, not a rewriter:
- Never translates — 中英 mixed sentences stay mixed; output guards detect a dropped language, retry once, and alert instead of pasting a mistranslation
- Never converts Simplified ↔ Traditional Chinese
- Never answers — question- or instruction-shaped selections are text to fix, not prompts to obey
- Declines code with an alert; URLs, file paths, and backtick content are left as-is
- Fails loudly, never silently — corrupted model output means an alert, and your text stays untouched
Customize it: menu → Edit Polish Instructions → polish_rules.txt (one rule per line, hot-reloads). A prewarmed session pool keeps typical latency at ~1–3 s.
Requires macOS 26 (Tahoe) + Apple Intelligence + Apple Silicon. On by default where available.
Changed
- AI Cleanup (opt-in beta) retired. Text Polish supersedes it: AI correction is now an explicit, user-triggered action instead of an automatic rewrite of every dictation. The dictation pipeline is now fully deterministic — Qwen3-ASR → OpenCC → number conversion → dictionary → punctuation — so transcripts never pass through a generative model.
- Menu polish: toggle checkmarks moved into the native leading state column (one aligned column) and all menu items now use a uniform font size.
Docs
- README (繁體中文 + English) now documents Text Polish end-to-end.
App version 0.5.5, build 21.
v0.5.4 - Chinese Punctuation Cleanup
Chinese Punctuation Cleanup
Qwen3-ASR tends to over-punctuate Chinese — peppering mid-sentence commas (, / 、) far more than natural writing. v0.5.4 adds a deterministic, Chinese-only punctuation pass that trims them while keeping sentence enders (。!?) intact.
New setting — Dictation Settings → Punctuation Cleanup:
- Soft (default) — drops inline
、,;:and Han-adjacent ASCII,;:, keeps。!? - Hard — also drops sentence enders and brackets
- Off — model output unchanged
Language-safe by design. A single script detector now gates all three Chinese-specific stages — OpenCC (簡→繁), ITN (number conversion), and the new punctuation pass — so Japanese, Korean, and English transcriptions are unaffected. (Previously OpenCC and ITN could subtly alter Japanese via shared Han characters; that path is now closed too.)
Note
This release changes Chinese transcription output. It's unit-tested (28/28), regression-checked (ITN 51/51), and smoke-tested across zh / ja / ko / en — but punctuation is partly a matter of taste and one person can't cover every phrasing. If a sentence comes out wrong, switch the mode (or set Off), and an issue with the example is very welcome.
Install
Download HushType.dmg, open it, and drag HushType to Applications. Grant Microphone + Accessibility on first launch. Updating from a prior version keeps your permissions (stable code-signing identifier).
v0.5.2 - Bounded GPU Memory (Dictation Leak Fix)
Patch release that stops unbounded GPU memory growth during dictation.
Highlights:
- Fixes a buffer-pool leak in the local dictation path: MLX's GPU buffer recycle pool was never bounded for push-to-talk transcription. clearCache() ran only on manual Unload and Live Caption stop, and the cache limit was set only when Live Caption started — so a dictation-only session ran on MLX's unbounded default and phys_footprint climbed past 5 GB over a session.
- Sets MLX.Memory.cacheLimit = 1 GB once at launch, so the pool is bounded for every code path. Footprint now plateaus around ~1.7 GB across many sessions instead of climbing.
- The cap limits only the idle reuse pool, never live inference memory — it cannot truncate or fail a transcription, and the maximum single-session capacity (448 output tokens / 30 s audio window) is unchanged.
Verified:
- The built-in Unload diagnostic reclaimed 5.2 GB instantly pre-fix (5,392 MB → 131 MB), confirming the growth was recyclable MLX GPU memory rather than other processes.
- Post-fix on-device: footprint flat at ~1.7 GB across multiple dictation sessions.
- swift build, make install, make dmg.
v0.5.1 - Accurate Memory Readout & Grouped Menu
Patch release fixing the menu-bar memory counter and reorganizing the status menu.
Highlights:
- Fixes the memory readout: the menu now reports phys_footprint — the same counter Activity Monitor uses — instead of resident_size, which missed GPU-faulted Metal pages holding the MLX model weights (the old readout showed <100 MB with a ~1.2 GB model loaded).
- Merges status and memory into one live menu line (e.g. "Ready · Memory 1.2 GB"), refreshed each time the menu opens.
- Reorganizes the status menu from a ~25-row flat list into grouped submenus (Live Caption, Live Translated Caption, Text Translation, Dictation Settings) per macOS menu-bar-extra guidelines — 13 rows total, with green ✓ indicators on parent items for active features.
- Start/stop menu items now flip titles with state (e.g. "Start with Last Source" ↔ "Stop Live Caption").
- Bumps the macOS app version to 0.5.1 (build 12).
Verified:
- swift build
- make dmg
- On-device: menu readout matches Activity Monitor (1.2 GB with model loaded → 74 MB after unload); dictation, model unload/reload, and menu interactions exercised manually.
v0.5.0 - Onboarding UI Flow
Minor release focused on permission onboarding polish.
Highlights:
- Adds a Codex-like first-run setup panel for Accessibility and Microphone permissions.
- Adds an explicit Reset Old HushType Entry path for stale or duplicate Accessibility entries.
- Adds draggable HushType helper panels for Accessibility and Screen & System Audio Recording permission lists.
- Improves System Audio permission panel sizing and window chrome so copy is readable and controls are aligned.
- Bumps the macOS app version to 0.5.0 (build 11).
Verified:
- swift build
- make dmg
v0.5.0-beta.1 — Live Caption + Live Translated Caption
What's new
Live Caption (local, free, on-device). Floating caption panel from mic or system audio. Same on-device Qwen3-ASR pipeline as dictation.
Live Translated Caption (cloud, ~$2/hr against your own OpenAI key). Real-time foreign-language subtitles via OpenAI's latest gpt-realtime-translate model. Subtitle a Japanese YouTube clip, a Korean podcast, or a Spanish meeting in English (or 13 other target languages). Mac → OpenAI direct over WSS; HushType operates no servers.
Right ⌘ + / toggles whichever caption mode you last used. First-use default is local — paid mode is never the muscle-memory default.
Built-in cost guardrails: auto-stop minutes, daily-cap warnings, per-session cost chip. Engine resets to local on every app launch.
Security
openai.jsonis created with0600permissions on first run- Loader refuses symlinks and files >64KB
- Cloud WebSocket refuses HTTP redirects (Authorization header origin-pinned to
api.openai.com) - Shipped binary scrubbed of developer-path strings
- No telemetry; no HushType server in the cloud path
Install
- Download
HushType.dmgbelow - Open the DMG, drag HushType to Applications
- Right-click HushType.app → Open (ad-hoc signed, not notarized)
- Grant Accessibility + Microphone permissions when prompted
To use Live Translated Caption: get an OpenAI API key, status-bar menu → Live Translated Caption → Translated Caption Settings… → Open file in TextEdit → paste your key.
v0.5.0-beta.1 — 新增功能
Live Caption(即時字幕) — 本機、免費、裝置端。浮動字幕面板,麥克風或系統音訊。跟聽寫共用同一個 Qwen3-ASR pipeline。
Live Translated Caption(即時翻譯字幕) — 雲端,約 $2/小時,計費於你自己的 OpenAI 帳戶。透過 OpenAI 最新的 gpt-realtime-translate 模型即時翻譯字幕:日文 YouTube、韓文 podcast、西文會議——翻成英文(或其他 13 種目標語言)。Mac → OpenAI WSS 直連,HushType 沒有自己的伺服器。
Right ⌘ + / 切換上次使用的字幕模式。首次預設本機——不會無感啟動付費模式。
內建費用上限:自動停止分鐘數、日花費警示、面板抬頭即時費用顯示。App 重啟後字幕模式一律回到本機。
安全
openai.json建立時即為0600權限- 載入器拒絕 symlink 與 >64KB 檔案
- 雲端 WSS 拒絕 HTTP 重定向(Authorization header 鎖定
api.openai.com) - 發佈二進位已清除開發者路徑字串
- 無遙測;雲端路徑沒有 HushType 中介伺服器
安裝
- 從下方下載
HushType.dmg - 開啟 DMG,把 HushType 拖到 Applications
- 右鍵點 HushType.app → 開啟(ad-hoc 簽章,未經 notarization)
- 提示時授予輔助使用與麥克風權限
要使用 Live Translated Caption:取得 OpenAI API key,選單列 → Live Translated Caption → Translated Caption Settings… → Open file in TextEdit → 把 key 貼進去。
v0.4.2 — ITN, translation polish, prompt-injection hardening, session lifecycle
v0.4.2 — ITN, translation polish, prompt-injection hardening, session lifecycle
This is a consolidated release covering work that landed internally as v0.4.0 → v0.4.2. None of those releases previously shipped publicly — the last GitHub release was v0.3.0 (AI Cleanup beta). This single tag closes that gap.
If you're on v0.3.0, this is a meaningful upgrade across speed, memory, and Chinese output quality.
Highlights
Text Translation (added in 0.4.0) — Tap Right ⌥ with text selected to translate via Apple's on-device Translation Framework (macOS 14+). Auto-detects source language, validates the language pair, shows the result in a translucent floating card with auto-copy. 10-second auto-dismiss; hover to pause. Smart direction: Chinese → English, other → Traditional Chinese.
Memory Management (added in 0.4.0) — Live RAM display in the menu bar (refreshes on open). The new Unload Speech-to-Text Model button frees ~2 GB on demand; auto-reloads on the next Right ⌥ hold (~3s cold start). Useful when you're juggling agents and want HushType to step out of the way.
Customized Dictionary (added in 0.4.1) — User-editable plain-text dictionary at ~/Library/Application Support/HushType/dictionary.txt for proper nouns and jargon. Format: source -> target, one rule per line. Case-insensitive source, literal target, longest-match-first, single-pass, no cascade. Hot-reloads on save. Menu item creates a commented template on first click.
Check for Updates (added in 0.4.1) — Manual GitHub Releases API check from the About dialog. Consent prompt every time; Cancel is the default. Three result alerts: Up to Date / Update Available (with View on GitHub button) / Network Error. Privacy-preserving by design — no automatic phone-home.
Number Conversion / ITN (added in 0.4.2, default ON) — Deterministic Chinese-numeral → Arabic-digit conversion between OpenCC and AI Cleanup. 一零一大樓 → 101 大樓; 三點一四 → 3.14. Guarded against idiom phrases (一直, 一些), self-correction markers, partial conversion, and currency drift (57-case regression at 51 PASS / 0 CORRUPT). Toggle from the Number Conversion menu item.
AI Cleanup hardening (0.4.2)
- Prompt-injection mitigation: runtime user prompt and all few-shot examples wrapped in
<transcript>…</transcript>so question-shaped dictations ("在 Obsidian 怎麼放大筆記字型?", "how do I restart my Mac") are treated as data, not answered on the clipboard. - Stateless session lifecycle: fresh
LanguageModelSessionper cleanup call; transcript history cannot leak across dictations. - Prompt-aware prewarm: deferred until after Qwen3-ASR finishes loading so the post-onboarding relaunch path stays predictable.
- Hidden
cleanup_prompt.txtoverride at~/Library/Application Support/HushType/cleanup_prompt.txtfor power users iterating on the prompt without a rebuild.
Translation card UX polish (0.4.2) — Source font 16pt / translated 22pt; window widened 560 → 660; added line spacing; 10-second auto-dismiss with hover-pause via NSTrackingArea.
Default toggles at a glance
| Toggle | Default | Requirement |
|---|---|---|
Simplified → Traditional (OpenCC s2twp) |
ON | — |
| Number Conversion (ITN) | ON (new) | — |
| AI Cleanup (Apple Foundation Models) | OFF (opt-in beta) | macOS 26 + Apple Intelligence |
| Floating Listening pill | ON | — |
| Text Translation hotkey | OFF | macOS 14+ |
Install
Download HushType.dmg below and drag it to Applications. On first launch, right-click → Open (the app is ad-hoc signed, not notarized).
See the README for full setup, including the iOS keyboard + Mac-as-server flow.
Updating from v0.3.0
The README's Updating section walks through the one-time Accessibility re-grant after replacing the bundle. HushType auto-cleans the stale TCC entry on launch; you only need to re-toggle the Accessibility switch once per update.
Privacy & footprint
- Fully local — voice never leaves your machine.
- Qwen3-ASR-0.6B 4-bit: ~675 MB on disk, ~2.2 GB peak RAM. Less than half the disk footprint of Whisper Large v3 Turbo (~1.6 GB).
- No telemetry, no analytics, no automatic network calls after the one-time model download.
v0.3.0 beta — AI Cleanup via Apple Foundation Models
⚠️ Beta release. The AI Cleanup feature in this version is new and should be considered beta quality. Known mild limitations are documented below. Please report any unexpected transcription modifications.
New feature / 新功能
AI Cleanup (opt-in, requires macOS 26+) / AI 整理(選用,需要 macOS 26+)
HushType v0.3 adds optional on-device AI post-processing via Apple's Foundation Models framework. When enabled, every transcription runs through the system LLM for three cleanup tasks:
1. Sentence-level cleanup — remove filler words and collapse immediate duplicates.
Leading fillers like um, uh, hmm, 嗯, 啊, 那個, 就是 get stripped. Consecutive duplicates collapse (I I I think → I think, 我我我覺得 → 我覺得). Emphatic repetitions like 對對對, yes yes yes are preserved intact.
2. Speaker self-correction resolution — when you correct yourself mid-sentence, only the corrected version is kept.
Triggers on explicit markers: no actually, no wait, I mean, 不對, 我是說, 應該是, 更正. Example: "I'll send it Wednesday no actually Friday" → "I'll send it Friday". 我想約禮拜三不對禮拜五 → 我想約禮拜五. Transitions like but, however, 但是, 不過 are NOT treated as corrections — both sides are preserved.
3. Chinese numeral conversion — convert Chinese numbers to Arabic digits where appropriate.
一零一大樓 → 101 大樓, 三本書 → 3 本書, 三點一四 → 3.14, 百分之三十二 → 32%. Fixed phrases like 想一下, 一直, 一些 are left alone.
HushType v0.3 新增了選用的 on-device AI 後處理,使用 Apple 的 Foundation Models 框架。啟用後,每一次轉錄都會透過系統 LLM 做三件事:
1. 句子層級清理 — 刪除贅字並收縮連續重複字。
句首贅字如 um、uh、hmm、嗯、啊、那個、就是 會被刪除。連續重複會收縮(I I I think → I think、我我我覺得 → 我覺得)。強調式重複如 對對對、yes yes yes 保留不變。
2. 自我修正解析 — 當你在句中更正自己時,只保留修正後的版本。
觸發標記:no actually、no wait、I mean、不對、我是說、應該是、更正。例:「I'll send it Wednesday no actually Friday」 → 「I'll send it Friday」、我想約禮拜三不對禮拜五 → 我想約禮拜五。but、however、但是、不過 這類轉折詞不會被當成修正訊號,兩邊都會保留。
3. 中文數字轉換 — 把中文數字轉成阿拉伯數字。
一零一大樓 → 101 大樓、三本書 → 3 本書、三點一四 → 3.14、百分之三十二 → 32%。想一下、一直、一些 這類固定詞不會被動到。
Requirements / 需求
- macOS 26 (Tahoe) or later
- Apple Intelligence enabled in System Settings
- Apple Silicon Mac
需要 macOS 26(Tahoe)或更新版本、在系統設定中啟用 Apple Intelligence、Apple Silicon Mac。
How to enable / 如何啟用
Menu bar → HushType icon → click AI Cleanup. HushType runs a quick round-trip test against Apple Foundation Models. If the framework isn't available (wrong macOS, Apple Intelligence disabled, model still downloading), you'll see a clear error message explaining why. On success, the checkmark appears and future transcriptions are cleaned up automatically. Toggle off any time.
選單列 → HushType 圖示 → 點 AI Cleanup。HushType 會對 Apple Foundation Models 做一次快速 round-trip 測試。如果框架不可用(macOS 版本不對、Apple Intelligence 未啟用、模型仍在下載),會顯示清楚的錯誤訊息說明原因。成功後會出現勾勾,之後的轉錄都會自動清理。隨時可以關掉。
Failure handling / 失敗處理
If Foundation Models errors mid-transcription (safety filter, transient issue, timeout), HushType silently falls back to the uncleaned OpenCC-only output. You never see a broken transcription; the worst case is one uncleaned result.
如果 Foundation Models 在轉錄途中出錯(safety filter、暫時性問題、timeout),HushType 會靜默回退到只經過 OpenCC 的原始輸出。你不會看到壞掉的轉錄結果,最糟情況只是這一次沒有清理。
Known limitations (beta) / 已知限制(beta)
- Occasional over-pruning of Chinese adverbs:
我一直都在may become我一直在. - Trailing particles may leak after self-correction:
禮拜三哦不對禮拜五→禮拜五哦. - English numerals inside Chinese context get converted:
我買了 five 本書→我買了 5 本書. Product-accepted. - Validated primarily on Chinese and English. Japanese coverage is minimal.
偶爾會過度修剪中文副詞:我一直都在 可能變成 我一直在。自我修正後尾部助詞可能殘留:禮拜三哦不對禮拜五 → 禮拜五哦。中文語境下的英文數字會被轉換:我買了 five 本書 → 我買了 5 本書(產品接受的行為)。主要在中文與英文驗證,日文覆蓋有限。
Install / 安裝
Download HushType.dmg below, drag to /Applications, launch from Spotlight (Cmd+Space → HushType). If upgrading from v0.2.3.1, HushType automatically clears the stale Accessibility permission entry and walks you through re-granting it (one click). After that, open the menu bar and toggle AI Cleanup on to try the new feature.
下載下方的 HushType.dmg,拖曳至 /Applications,從 Spotlight 啟動(Cmd+Space → HushType)。從 v0.2.3.1 升級時,HushType 會自動清除舊的輔助使用權限紀錄,引導你重新授權(一個動作)。之後打開選單列、toggle AI Cleanup 就能試用新功能。
🤖 Generated with Claude Code

