EchoNotes is a Python-based application that monitors a folder for new files, extracts the content (text, audio, video), summarizes it using a local instance of an LLM model (like Whisper and others), and saves the summarized output back to disk. It supports offline operation and can handle multiple file formats, including PDFs, Word documents, text files, video/audio files.
- Monitors a directory for new files (PDF, DOCX, TXT, MP4, MP3 formats).
- Text Extraction:
- PDF files (via PyPDF2 and Tesseract for OCR)
- Word documents (via python-docx)
- Plain text files
- Audio files (via Whisper for speech-to-text)
- Video files (audio extracted via FFmpeg and transcribed using Whisper)
- Summarization:
- Sends extracted text to a local LLM API for summarization.
- Supports customizable markdown prompts.
- Offline Operation:
- All processing (text extraction, transcription, summarization) can be done offline.
- Pre-downloads Whisper models and handles everything locally.
- Logging: Extensive logging to help track operations and errors.
cp config.sample.yml config.yml
Edit config.yml and make sure you enter your correct Ollama endpoint, API token, etc.
Then:
docker run -v /path/to/incoming:/app/incoming -v /path/to/config.yml:/app/config.yml -v /path/to/summarize-notes.md:/app/summarize-notes.md echonotes
For example
docker run --rm -v "$(pwd)//incoming:/app/incoming" \
-v "$(pwd)/config.yml:/app/config.yml" \
-v "$(pwd)//summarize-notes.md:/app/summarize-notes.md" \
echonotes:latest
-
Build the Docker Image:
Clone the repository and build the Docker image:
docker build -t echonotes .
-
Run the Docker Container:
Run the Docker container, mounting the appropriate volumes:
docker run -v /path/to/incoming:/app/incoming -v /path/to/config.yml:/app/config.yml -v /path/to/summarize-notes.md:/app/summarize-notes.md echonotes
-
Pre-Download Whisper Models (Optional):
The Whisper models are automatically downloaded, but you can pre-download them by running:
docker exec -it <container_id> python -c "import whisper; whisper.load_model('base')"
You can use Docker Compose to manage the container:
version: '3.8'
services:
echonotes:
image: echonotes:latest
volumes:
- ./incoming:/app/incoming
- ./config.yml:/app/config.yml
- ./summarize-notes.md:/app/summarize-notes.md
restart: unless-stopped
Run the service with:
docker-compose up -d
EchoNotes monitors the /app/incoming
directory for new files. When it detects a new file, it processes it according to the file type:
- PDF: Extracts text using PyPDF2 or OCR via Tesseract if needed.
- Word Documents (DOCX): Extracts text using
python-docx
. - Text Files (TXT): Reads the plain text.
- Audio Files (MP3): Transcribes speech to text using Whisper.
- Video Files (MP4): Extracts audio using FFmpeg, then transcribes it with Whisper.
Once the text is extracted, it is summarized by sending the text and a customizable markdown prompt to a local LLM API.
The application is configured via a config.yml
file mounted into the Docker container. An example configuration file is shown below:
api_url: "http://localhost:5000/api/summarize"
bearer_token: "your_api_token_here"
model: "base"
whisper_model: "base" # Specify the Whisper model to use ('tiny', 'base', 'small', 'medium', 'large')
The prompt file (summarize-notes.md
) is used to prepend any instructions for summarization. Update it as you see fit.
The application logs all activities and errors to help with debugging and tracking its operations. The log includes details about:
- Files processed
- Errors encountered
- Summaries generated
- incoming: Monitored folder where new files are placed for processing.
- working: Temporary folder where files are processed.
- completed: Once processed, files (and summaries) are moved to the
completed
folder.
We welcome contributions to EchoNotes! Please fork the repository and submit a pull request with your changes.
EchoNotes is licensed under the MIT License.