Note: I built this app for my personal machine setup. It may not work on other configurations, distrobutions, etc. Feel free to report issues, but I may not fix them. If you want to update anything to build on other systems, PRs are welcome 😄
A Flutter desktop app for Linux that records audio from your microphone and speaker, transcribes it, and generates AI-powered summaries using Anthropic Claude.
- 🎤 Record audio from your microphone and speaker
- 📝 Audio transcription using Anthropic Claude API
- 🤖 AI-generated meeting summaries using Claude
- 💾 Automatically saves transcript and summary to text files
-
Flutter SDK (3.0.0 or higher)
flutter --version
-
Linux desktop support enabled
flutter config --enable-linux-desktop flutter doctor
-
PulseAudio (Required for audio recording on Linux)
The app uses PulseAudio's
parecordcommand for recording, which is typically pre-installed on most Linux distributions.Verify PulseAudio is installed:
parecord --version pactl --version
If not installed (rare), install it:
sudo apt-get install pulseaudio-utils
Audio Capture: The app automatically captures both microphone input and system audio (speakers) by creating a combined audio source. This allows transcription of both sides of conversations during meetings, including audio from video calls, system sounds, and microphone input.
-
Local Transcription Tool (Required for audio transcription)
The app needs a local transcription tool since Claude API doesn't support direct audio transcription. Install one of the following:
Option 1: faster-whisper (Recommended - Fast streaming transcription)
pip install faster-whisper
This is the preferred option for near-real-time transcription. The app records audio in 5-second chunks and transcribes them progressively, updating the UI every 10 seconds (2 chunks).
Option 2: OpenAI Whisper (Fallback)
pip install openai-whisper
This will be used if faster-whisper is not available, but transcription happens only after recording stops.
Option 3: Python speech_recognition (Fallback)
pip3 install SpeechRecognition
The app will automatically detect and use the best available option, preferring faster-whisper for streaming transcription.
-
Anthropic API Key (configure via
.envfile when developing locally):- Anthropic API key for transcription and summaries:
ANTHROPIC_API_KEY
Create a
.envfile in the project root:cp .env.example .env
Then edit
.envand add your API key:ANTHROPIC_API_KEY=your_anthropic_api_key_hereNote: The
.envfile is already in.gitignoreand will not be committed to version control. As a fallback, you can also use environment variables:export ANTHROPIC_API_KEY=your_anthropic_api_key - Anthropic API key for transcription and summaries:
-
Clone this repository:
cd meeting-notes -
Install dependencies:
flutter pub get
-
Run the app:
flutter run -d linux
- Start the app
- Click "Start Recording" to begin recording audio
- Speak into your microphone (the app will capture audio in 5-second chunks)
- Watch the transcript update in real-time (updates every 10 seconds when using faster-whisper)
- Click "Stop Recording" when done
- The app will:
- Finalize the transcript from all chunks
- Generate a summary using Claude
- Save both files in organized folders:
MeetingNotesApp/[timestamp]/meeting_transcript_[timestamp].txtMeetingNotesApp/[timestamp]/meeting_summary_[timestamp].txt
Transcripts and summaries are saved in organized folders:
~/Documents/MeetingNotesApp/
└── [timestamp]/
├── meeting_transcript_[timestamp].txt
└── meeting_summary_[timestamp].txt
Each meeting gets its own timestamped folder for easy organization.
The app currently records:
- Format: WAV
- Sample Rate: 16kHz
- Bit Rate: 128kbps
These settings are optimized for transcription and can be modified in lib/main.dart.
The app uses:
- faster-whisper (preferred) for streaming chunked transcription - provides near-real-time updates
- OpenAI Whisper (fallback) for batch transcription after recording stops
- Python speech_recognition (fallback) as alternative transcription method
- Anthropic Claude API for summarization (requires API key)
Note: Claude API does not support direct audio transcription. The app uses local tools for transcription, then sends the text to Claude for summarization.
When using faster-whisper, the app records audio in 5-second chunks and transcribes them progressively:
- Chunks are transcribed as they're recorded
- UI updates every 2 chunks (approximately every 10 seconds)
- Provides near-real-time transcription feedback
- Final transcript combines all chunks seamlessly
The app supports theme customization to match your preferences:
- Default: Follows your system theme (light or dark mode)
- Light Mode: Forces light theme regardless of system setting
- Dark Mode: Forces dark theme regardless of system setting
How to Change Theme:
- Open the Settings dialog (gear icon in the app bar)
- Use the Theme selector to choose System, Light, or Dark
- Changes apply immediately - no app restart required
Theme Storage:
- Theme preference is stored in
~/.config/meeting-notes/config.json - The preference persists across app restarts
- Defaults to "system" if not explicitly set
On Linux, the app uses PulseAudio for recording. You may need to grant microphone permissions through your system settings. The app will check permissions automatically, but if issues persist:
# Check PulseAudio sources
pactl list sources short
# Check default source
pactl get-default-source
# Set default source if needed
pactl set-default-source <source_name>The app uses PulseAudio's parecord command for recording. If you encounter recording issues:
-
Verify parecord is installed:
which parecord parecord --version
-
If parecord is not found, install PulseAudio:
sudo apt-get install pulseaudio-utils
-
Check if PulseAudio is running:
pactl info
-
List available audio sources:
pactl list sources short
-
Set default source if needed:
pactl set-default-source <source_name>
Make sure your Anthropic API key is set in your .env file or as an environment variable:
Check .env file:
cat .envOr check environment variable:
echo $ANTHROPIC_API_KEYIf the .env file doesn't exist, create it from the template:
cp .env.example .env
# Then edit .env with your Anthropic API keyIf you encounter build issues, try:
flutter clean
flutter pub get
flutter run -d linux- Multiple meeting templates
- Export to different formats (Markdown, PDF)
- Integration with calendar apps
MIT License