Privacy-focused, command-line note-taking app that uses Locaal's on-device AI SDK for transcription and summarization. Transcribe meetings and generate concise summaries, all locally. Free, open-source, and built for developers.
- Private: Data stays on your device. No servers or third-party access, ensuring complete privacy.
- Real-Time: Transcribe in 99+ languages.
- Smart: AI-generated summaries with customizable templates.
- Portable: No data lock-in. Your notes are saved as markdown files either locally or on your favorite cloud storage provider.
- Works Offline: No internet connection required.
- Non-Intrusive: Runs in the background. No bots joining your calls.
- Customizable: Choose AI models and summary templates.
- Cross-Platform: Supports Windows, macOS, Linux.
- Cost-Effective: No server or usage fees.
- Built leveraging Locaal's on-device AI SDK:
- Transcription: Uses Locaal's simpler-whisper, a multi-threaded local implementation of OpenAI's Whisper model.
- Summarization: Integrates llama-cpp-python for local language model capabilities.
- Audio Capture: Uses sounddevice for microphone and desktop audio capture.
- Python 3.11 or higher
- Git
-
Install a pre-built version from the Releases page, including an installer for windows or a simple standalone app for Mac.
-
Clone the repository:
git clone https://github.com/locaal-ai/note-taker.git cd note-taker
-
Install the dependencies:
pip install -r requirements.txt
-
Navigate to the
src
directory:cd src
-
Run the main script:
python main.py
-
Follow the on-screen prompts to:
- Transcribe audio from your microphone or desktop
- Create, read, update, and delete notes
- Use AI-powered features for text analysis and summarization
- All AI processing occurs on your local device, ensuring your data never leaves your control.
- No internet connection is required for core functionalities.
- Your notes and transcriptions are stored locally in an encrypted format.
This project uses PyInstaller to create standalone executables for Windows, macOS, and Linux. The build process is automated using GitHub Actions, but you can also build the app locally.
- Python 3.11
- PyInstaller 6.10.0
- Platform-specific dependencies (see below)
-
Install
simpler-whisper
(https://github.com/locaal-ai/simpler-whisper) prebuilt wheel andllama-cpp-python
Invoke-WebRequest -Uri https://github.com/locaal-ai/simpler-whisper/releases/download/0.1.0/simpler_whisper-0.1.0-cp311-cp311-cuda-win64-win_amd64.whl -OutFile simpler_whisper-0.1.0-cp311-cp311-win_amd64.whl pip install simpler_whisper-0.1.0-cp311-cp311-win_amd64.whl rm simpler_whisper-0.1.0-cp311-cp311-win_amd64.whl pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu125
-
Install other dependencies:
pip install -r requirements.txt
-
Download the whisper model:
mkdir data Invoke-WebRequest -Uri https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-q5_1.bin?download=true -OutFile data/ggml-small.en-q5_1.bin
-
For CPU version:
pyinstaller --clean --noconfirm note-taker.spec -- --win
For CUDA version:
pyinstaller --clean --noconfirm note-taker.spec -- --win --cuda
-
The executable will be in the
dist
folder. -
To create an installer:
- Ensure Inno Setup is installed
- Run:
iscc note-taker.iss
-
Install dependencies:
pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/metal pip install -r requirements.txt
-
Download the models:
mkdir -p data/ wget -P data/ "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-q5_1.bin?download=true" -O data/ggml-small.en-q5_1.bin curl -L https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-encoder.mlmodelc.zip?download=true -o data/ggml-small.en-encoder.mlmodelc.zip unzip data/ggml-small.en-encoder.mlmodelc.zip -d data rm data/ggml-small.en-encoder.mlmodelc.zip
-
Build the app:
pyinstaller --clean --noconfirm note-taker.spec -- --mac_osx
-
The app bundle will be in the
dist
folder. -
To create a DMG:
hdiutil create -volname "note-taker" -srcfolder dist/note-taker.app -ov -format UDRO note-taker-macos.dmg
-
Install dependencies:
pip install -r requirements.txt
-
Download the model:
wget -P data/ "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-q5_1.bin?download=true" -O data/ggml-small.en-q5_1.bin
-
Build the app:
pyinstaller --clean --noconfirm note-taker.spec
-
The executable will be in the
dist
folder. -
To create a tarball:
tar -cvf note-taker.tar -C dist note-taker
Our GitHub Actions workflow (build.yaml
) automates builds for multiple platforms:
- Windows: CPU and CUDA versions
- macOS: x86 and ARM64 versions
- Linux: x86_64 version
The workflow handles dependency installation, building, and packaging for each platform. For macOS, it also includes code signing and notarization steps.
Run the note-taker.exe
file in the dist
folder, or use the installer created by Inno Setup.
Open the note-taker.app
bundle in the dist
folder, or mount the created DMG and drag the app to your Applications folder.
Run the note-taker
executable in the dist
folder.
Our GitHub Actions workflow (build.yaml
) automates builds for multiple platforms, ensuring the app is always ready for distribution with the latest local AI capabilities.
src/
├── app.py
├── audio
│ ├── AudioCapture.py
│ ├── Transcriber.py
│ └── textual_transcription_textarea.py
├── llm
│ └── model.py
├── main.py
├── main.tcss
├── notes
│ └── manager.py
├── notes_editor_components.py
├── settings_screen.py
├── template_select_modal.py
└── utils
├── defaults.py
├── helpers.py
├── resource_path.py
└── storage.py
simpler-whisper
: Local implementation of Whisper for speech recognitionllama-cpp-python
: Python bindings for the llama.cpp librarysounddevice
: For audio capturetextual
: TUI (Text User Interface) framework
For a complete list, see requirements.txt
.
We welcome contributions that enhance the app's local AI capabilities, improve privacy features, or optimize performance. Please feel free to submit a Pull Request.
This project is licensed under the MIT License. See the LICENSE file for details.
While this app processes all data locally, users are responsible for ensuring compliance with local laws and regulations regarding data privacy and AI usage.