️ AI Dictation App - Open Source and Local-first ⚡ Type 3x faster, no keyboard needed. Powered by open source models, works offline, fast and accurate.
️ AI Dictation App - Open Source and Local-first ⚡ Type 3x faster, no keyboard needed. Powered by open source models, works offline, fast and accurate.
Website - Docs - Community - Bug reports
## Table of Contents - [⬇️ Download](#️-download) - [ Overview](#-overview) - [✨ Features](#-features) - [ Tech Stack](#-tech-stack) - [Local Development](#local-development) - [ Contributing](#-contributing) - [ License](#-license) ## ⬇️ Download ### Homebrew (macOS) ```bash brew install --cask amical ``` ## Overview Local-first AI Dictation app. Amical is an open source AI-powered dictation and note-taking app that runs entirely on your machine. Powered by [Whisper](https://github.com/openai/whisper) for speech-to-text and open source LLMs for intelligent processing, Amical gives you the power of AI dictation with complete privacy. Context-aware dictation that adapts to what you're doing: drafting an email, chatting on Discord, writing prompts in your IDE, or messaging friends. Amical detects the active app and formats your speech accordingly.## ✨ Features > ✔︎ - Done, ◑ - In Progress, ◯ - Planned Super-fast dictation with AI-enhanced accuracy ✔︎ Context-aware speech-to-text based on the active app ✔︎ Smart voice notes → summaries, tasks, structured notes ◑ MCP integration → voice commands that control your apps ◯ ️ Real-time meeting transcription (mic + system audio) ◯ Extensible via hotkeys, voice macros, custom workflows ✔︎ Privacy-first: works offline, one click setup of local models in-app ✔︎ Floating widget for frictionless start/stop with custom hotkeys ✔︎ ## Tech Stack - [Whisper](https://github.com/openai/whisper) - [Ollama](https://ollama.ai) - [Typescript](https://www.typescriptlang.org/) - ️ [Electron](https://electronjs.org/) - [TailwindCSS](https://tailwindcss.com/) - [Shadcn](https://ui.shadcn.com/) - [Better-Auth](https://better-auth.com/) - ♂️ [Zod](https://zod.dev/) - [Vitest](https://vitest.dev/) - [Turborepo](https://turbo.build/) ## Local Development These steps run the desktop app, which currently supports macOS and Windows. Linux is not supported because the app does not yet have a Linux native helper. ### Prerequisites - [Node.js](https://nodejs.org/) 24.x - pnpm 10.15.0 (the version pinned in `package.json`) - CMake 3.20 or later - **macOS:** Xcode or the Xcode Command Line Tools with Swift 5.9 or later (`xcode-select --install`). Local Whisper transcription requires macOS 15 or later. - **Windows:** Visual Studio 2022 Build Tools with the **Desktop development with C++** workload, plus the .NET 8 SDK. Git Bash is recommended because some development scripts use POSIX utilities. ### Set up the repository Clone with submodules so the Whisper sources are available: ```bash git clone --recurse-submodules https://github.com/amicalhq/amical.git cd amical ``` If you already cloned without `--recurse-submodules`, initialize them now: ```bash git submodule update --init --recursive ``` Enable Corepack so it uses the pinned pnpm version, install dependencies, and download the Node.js binary used by the local Whisper worker: ```bash corepack enable pnpm install --frozen-lockfile pnpm --filter @amical/desktop download-node ``` `pnpm install` compiles the native Whisper addon, so it can take a few minutes. It also applies the repository's patches inside the `whisper.cpp` submodule. Seeing that submodule marked as modified in `git status` afterward is expected. ### Start the desktop app Quit any installed copy of Amical first; Electron allows only one Amical instance at a time. Then run: ```bash pnpm turbo run dev --filter=@amical/desktop ``` When finished, quit the development app from its tray menu and then press Ctrl+C. Stopping the terminal command alone may leave the Electron app running. No `.env` file is required for local transcription. The first-run onboarding downloads a local model and requests the required microphone and OS permissions. Only configure `apps/desktop/.env` from `apps/desktop/.env.example` when working on optional cloud, authentication, or telemetry integrations, and replace its placeholder values before use. ### Run checks Workspace builds and typechecks use TypeScript 7.0.2. The `@typescript/native` dependency is an alias for the native compiler and provides `tsc`. The `typescript` dependency is an alias for Microsoft's TypeScript 6 compatibility package, which provides the compiler API used by ESLint and other tools. This follows [Microsoft's side-by-side setup](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6-0). Run `pnpm exec tsc --version` to check the build compiler version. For VS Code, install the recommended [TypeScript 7 extension](https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.native-preview). The workspace settings point it at the same native compiler. Before opening a pull request, run: ```bash pnpm type:check pnpm test ``` ## Contributing Contributions are welcome! Reach out to the team in our [Discord server](https://amical.ai/community) to learn more. - ** [Report an Issue][issues]**: Found a bug? Let us know! - ** [Start a Discussion][discussions]**: Have ideas or suggestions? We'd love to hear from you. ## License Released under [MIT][license]. [license]: https://github.com/amicalhq/amical/blob/main/LICENSE [discussions]: https://amical.ai/community [issues]: https://github.com/amicalhq/amical/issues [pulls]: https://github.com/amicalhq/amical/pulls "submit a pull request"
Recording captures only channel 1 of multichannel audio interfaces → silence when the mic is on input 2+
Filler-word removal is English-only: the formatting prompt lists no Japanese fillers
Settings page crashes after 1.9.x → 1.11.3 upgrade: `dictation.selectedLanguage` is never migrated to `dictation.languages`
Option to insert dictated text via simulated typing instead of clipboard paste
Recording drops first word after start chime
Windows: minimizeToTray preference is not applied to the main window
Constant crashes on Xiaomi 15 Ultra
Feature request to support installing/updating using winget
Suggestion: sendkeys
Feature request: adaptively skip LLM formatting for short dictations