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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Free, open-source, Native voice input and Voice Agent for macOS. Press Fn to dictate; press Fn twice to rewrite, translate, or ask. BYOK.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Promotional illustration. Actual app screenshots are below.
SayKuku is a free, native macOS voice app. Press Fn to dictate at the cursor; press Fn twice to tell Voice Agent what you need. Ask a question, draft text, or follow up without selecting anything; select text when you want it rewritten or translated. It uses Qwen cloud models, so you bring your own Alibaba Cloud Model Studio API key and pay any model charges on your account.檢視完整 README ↗简体中文 · Download · Setup guide (Chinese) · Privacy (Chinese)
Promotional illustration. Actual app screenshots are below.
SayKuku is a free, native macOS voice app. Press Fn to dictate at the cursor; press Fn twice to tell Voice Agent what you need. Ask a question, draft text, or follow up without selecting anything; select text when you want it rewritten or translated. It uses Qwen cloud models, so you bring your own Alibaba Cloud Model Studio API key and pay any model charges on your account.
| Gesture | What happens |
|---|---|
| Fn | Voice Input transcribes speech and tries to insert the result at the original cursor. Choose hold-to-talk or tap-to-start/tap-to-stop. Adjust language, number formatting, and spoken-word cleanup in Settings. |
| Fn Fn | Voice Agent uses your request and the context you allow to draft text, answer a question, or follow up without a selection, or rewrite and translate selected text. It checks the original target before writing. Running a Shortcut requires confirmation; opening a link or searching the web requires confirmation when untrusted context is involved. |
You can also use configurable global shortcuts. The defaults are ⌃⌘V for Voice Input and ⌃⌘A for Voice Agent. A single modifier can start Voice Input, and Voice Agent can use a double tap of that same key. Writing into another app depends on that app's text controls; check important text before sending it.
Home screen from a signed development build. The interface is shown in Simplified Chinese.
Privacy settings from a development build. These are real UI screenshots; the image notes describe their source and limits.
You need macOS 14 or newer, an internet connection for Qwen processing, and your own Qwen API key. Model usage may incur charges.
If Fn conflicts with a macOS keyboard setting, follow the in-app guidance or use the configurable global shortcuts. The setup guide (Chinese) covers permissions and Qwen configuration.
| Data or permission | What SayKuku does |
|---|---|
| Microphone | Captures audio only for Voice Input, Voice Agent, or a microphone level test. Voice audio goes to the selected Qwen region; the level test is neither saved nor uploaded. |
| Voice Agent context | Selected text, current app, window title, and visible text in the current window are allowed by default. Clipboard text and the Safari/Chrome page URL are off by default. Each source has a switch in Settings → Privacy. Visible text is limited to 2,000 characters and is sent only with that request, without being stored in History or logs. Voice Input does not read screen text. |
| Voice Input context | With Use text near the cursor on (the default), Voice Input sends up to 800 characters before and 200 after the cursor in the focused text field, leaving out any selection, so names, terms, and similar-sounding words match what you are writing. It goes only with that request and is not stored in History or logs. Turn it off in Settings → Voice Input. Password fields, secure input, and password managers are never read. |
| Voice Input cleanup | Automatic cleanup removes fillers, repeats, and self-corrections during recognition. Automatic paragraphs and lists is on by default; turning it off retains explicitly dictated formatting. Cleanup preference → Prefer quality sends the transcript, never the audio or nearby cursor text, to a Qwen text model in the same region for one extra check. Long text uses a compact prompt and waits up to 12 seconds; short text waits up to 2 seconds. Failures keep the first result. Prefer speed is the default for users who have not chosen a preference and skips this check. Keep spoken wording preserves fillers and repeats. Each app can override these choices in Settings → Voice Input → Per-app settings. |
| Local data | The API key is stored in this Mac’s Keychain. History, Memory, correction suggestions, and local usage totals are saved in ~/Library/Application Support/SayKuku/store.json; saved recordings are in ~/Library/Application Support/SayKuku/Audio/*.wav. |
| History defaults | New history is kept for 30 days and recording storage is on by default. Starred entries are exempt from automatic deletion. Settings → History → Don’t keep stops new history and recordings; it does not delete older entries. |
| Local usage statistics | Daily totals contain counts, speaking time, app names, and task categories, without text or audio. Collection starts with this feature; older history is not backfilled. Days follow the local time zone at collection and weeks follow regional preferences. Comparisons use equal numbers of complete days with uninterrupted collection. History deletion does not clear totals. Pause or clear them separately in . Turning off omits app names from new statistics. |
SayKuku blocks recording and content access in secure text fields and known password managers. Private browsing windows are not detected separately. It does not request Input Monitoring permission or record keystrokes. Read the full privacy and permissions explanation (Chinese) before enabling optional context sources.
The project uses Swift 6, SwiftUI, AppKit, and Swift Package Manager, with no third-party Swift package dependencies. It targets macOS 14+; packaging requires Xcode 26 or newer for the macOS 26 SDK.
swift test
Scripts/package-app.sh debug
open Build/SayKuku.app
The debug package requires a stable Apple Development signing identity. swift run SayKuku is useful for source-level work, but its process identity and resources do not represent a signed App Bundle; use the packaged app to verify permissions, Keychain access, menu bar behavior, and resources. Default tests do not need a live Qwen API, network, microphone, or Accessibility authorization.
| Area | Where to look |
|---|---|
| App and UI | Sources/SayKuku/ |
| Tests | Tests/SayKukuTests/ |
| Product and implementation notes | SayKuku.md |
| Local packaging and release | docs/LOCAL_PACKAGING.md |
| App analytics and privacy boundaries | docs/APP_ANALYTICS.md |
| Compatibility test plan | docs/COMPATIBILITY.md |
| Mixed-language evaluation | docs/MIXED_LANGUAGE_EVAL.md |
| Dictation polish evaluation | docs/DICTATION_POLISH_EVAL.md |
| Contributor and agent guidance | AGENTS.md |
Release builds are signed, notarized, and packaged locally and published to the existing R2 bucket and website through Scripts/release.sh --notes FILE; the repository does not use GitHub Actions for macOS release validation. Release builds use Sparkle 2 for background downloads and install on normal Quit without relaunching; automatic checks and downloads default to on. Follow the local release guide rather than running a Release package step on its own.
SayKuku source code is licensed under Apache License 2.0. The Lucide-derived icon assets carry their own notices.
| Usage analytics | Release builds send a random installation ID, app version, fixed event names, and the character count of completed output to a self-hosted Umami service. No speech, text content, window titles, URLs, or API key is included. This is on by default and can be turned off in Settings → Privacy. Development builds and tests do not send it. |
| Update checks | Release builds check a version file after launch and periodically; automatic checks can be turned off in Settings → About. Updates open the download page in your browser rather than installing inside the app. |