Extract audio from media files, transcribe speech, and produce documented meeting notes
Project description
mnemofy
mnemofy extracts audio from media files, transcribes speech using faster-whisper, and produces structured meeting notes with topics, decisions, action items, and mentions with timestamps.
Features
- 🎵 Audio Extraction: Automatically extracts audio from video files using ffmpeg
- 🎤 Speech Transcription: Fast local transcription using faster-whisper (no API keys needed)
- 📝 Structured Notes: Generates Markdown notes with:
- Topics discussed with timestamps
- Decisions made with timestamps
- Action items with timestamps and @mentions
- Full transcript with timestamps
- 🎯 Supported Formats: aac, mp3, wav, mkv, mp4
- 🚀 Production Ready: Clean modular architecture, type hints, error handling
Installation
Prerequisites
- Python 3.9+ is required
- ffmpeg must be installed:
# Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg # Windows # Download from https://ffmpeg.org/download.html
Install mnemofy
# Clone the repository
git clone https://github.com/tiroq/mnemofy.git
cd mnemofy
# Install the package
pip install -e .
# Or install with development dependencies
pip install -e ".[dev]"
Usage
Basic Usage
Transcribe an audio or video file:
mnemofy transcribe meeting.mp4
This will create meeting_notes.md in the same directory.
Advanced Options
# Specify output file
mnemofy transcribe meeting.mp4 -o notes/meeting_summary.md
# Use a different Whisper model (tiny, base, small, medium, large)
# Larger models are more accurate but slower
mnemofy transcribe meeting.mp4 -m small
# Set a custom title for the notes
mnemofy transcribe meeting.mp4 -t "Team Sprint Planning"
# Keep the extracted audio file
mnemofy transcribe video.mkv --keep-audio
Get Help
# Show all options
mnemofy transcribe --help
# Show version
mnemofy version
Example Output
Given an audio file with meeting content, mnemofy generates structured Markdown like:
# Meeting Notes
## Topics Discussed
- **[00:32]** Let's talk about the new feature requirements
- **[05:12]** Now let's discuss the timeline
## Decisions Made
- **[03:45]** We've decided to use Python for the backend
- **[08:20]** The consensus is to launch in Q2
## Action Items
- **[10:15]** John needs to create the API documentation (@john)
- **[12:30]** Sarah will follow up with the design team (@sarah)
## Mentions
- @john: 10:15
- @sarah: 12:30
## Full Transcript
**[00:00]** Welcome everyone to today's meeting...
Architecture
mnemofy follows a clean, modular architecture:
mnemofy/
├── src/mnemofy/
│ ├── __init__.py # Package initialization
│ ├── audio.py # Audio extraction using ffmpeg
│ ├── transcriber.py # Speech transcription using Whisper
│ ├── notes.py # Structured note generation
│ └── cli.py # Command-line interface with Typer
├── tests/ # Test suite
├── pyproject.toml # Modern Python packaging (PEP 621)
└── README.md
Development
Running Tests
pytest
Linting and Type Checking
# Run ruff for linting
ruff check src/
# Run mypy for type checking
mypy src/
Whisper Models
mnemofy supports all Whisper model sizes:
| Model | Parameters | Speed | Accuracy |
|---|---|---|---|
| tiny | 39M | Fastest | Good |
| base | 74M | Fast | Better |
| small | 244M | Medium | Great |
| medium | 769M | Slow | Excellent |
| large | 1550M | Slowest | Best |
The default base model offers a good balance of speed and accuracy. Use tiny for quick tests or medium/large for maximum accuracy.
Requirements
- Python 3.9-3.13 (Python 3.14+ not yet supported by dependencies)
- ffmpeg
- Dependencies (automatically installed):
- typer
- faster-whisper
- rich
- pydantic
Troubleshooting
OpenMP Library Conflict (macOS)
If you encounter an error about libiomp5.dylib already initialized, set this environment variable:
export KMP_DUPLICATE_LIB_OK=TRUE
mnemofy transcribe your_file.mp4
Or run it inline:
KMP_DUPLICATE_LIB_OK=TRUE mnemofy transcribe your_file.mp4
This is a known issue with multiple OpenMP runtimes being linked (common with ctranslate2/faster-whisper).
License
MIT License - see LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mnemofy-0.6.2.tar.gz.
File metadata
- Download URL: mnemofy-0.6.2.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28d7b208ca54389a4f1cf2d6dc2bbe04be7bc582130af8d673a3b0ff499c29c1
|
|
| MD5 |
82447e1b5116adc0b61d84b7a8e0ed81
|
|
| BLAKE2b-256 |
e375ed0be9b70942afcbfcd94451c07ee7832deeddb4b56c17547d9692d68d3b
|
File details
Details for the file mnemofy-0.6.2-py3-none-any.whl.
File metadata
- Download URL: mnemofy-0.6.2-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c2e9636cf548d420426054039ba4a32611b68155f9662b3bfa47aed13c80752
|
|
| MD5 |
73ab69b79c8cd71e9f3d08f6359452d6
|
|
| BLAKE2b-256 |
5efa79f4615b0bb0805bb5f8ff561c947df259313d8836eb2573bd44db1889ce
|