An offline-first web application for automatically transcribing, summarizing, and analyzing meetings using local open-source deep-learning models.
The application accepts either meeting audio or an existing text transcript and automatically generates a structured meeting report containing the main discussion points, decisions, action items, responsible persons, and deadlines.
The system supports both English and Farsi (Persian), with automatic language detection and local processing.
No external AI API, API key, or cloud-based AI service is required.
AI Meeting Summarizer & Action Tracker is designed to convert unstructured meeting conversations into structured and actionable information.
The application can process meeting audio using Whisper-based speech recognition or directly process an existing transcript.
The processing pipeline includes:
- Audio transcription
- Language detection
- Speaker detection from transcript text
- Meeting summarization
- Entity extraction
- Action-item extraction
- Responsible-person identification
- Deadline detection
- Meeting storage
- PDF report generation
All AI models run locally. After the required models have been downloaded for the first time, the application can operate without an internet connection.
The application supports meeting recordings in the following formats:
- MP3
- WAV
- M4A
Audio is transcribed locally using faster-whisper.
The transcription system supports multiple languages, including English and Farsi.
Users can also bypass audio transcription and provide an existing meeting transcript directly.
This is useful when:
- The meeting has already been transcribed.
- A transcript was generated by another system.
- The user wants to analyze an existing text document.
- Audio processing is not required.
The system automatically determines whether the transcript is primarily English or Farsi.
Language detection can also be controlled manually from the user interface when required.
The detected language determines which summarization, NER, and extraction models are used.
The application generates a concise summary of the main topics and discussions.
English meetings are summarized using:
facebook/bart-large-cnn
Farsi meetings are summarized using:
csebuetnlp/mT5_multilingual_XLSum
For long transcripts, the application uses a map-reduce summarization strategy.
The transcript is divided into manageable sections, each section is summarized separately, and the resulting summaries are combined into a final meeting summary.
This prevents long transcripts from exceeding the context limitations of the underlying models.
The application automatically identifies tasks and action items discussed during meetings.
For each detected action item, the system attempts to extract:
- Task description
- Responsible person
- Deadline
- Relevant information from the transcript
For example:
Sara will prepare the project report by next Monday.
The system attempts to produce:
{
"task": "Prepare the project report",
"owner": "Sara",
"deadline": "Next Monday"
}Action extraction combines named-entity recognition with rule-based linguistic patterns.
The system attempts to associate an action item with the person responsible for completing it.
For example:
Ali should update the API documentation by Thursday.
The extracted action item can be represented as:
Task: Update the API documentation
Owner: Ali
Deadline: Thursday
Because this functionality relies on NLP models and rules, the extracted owner should be reviewed by the user when the transcript contains ambiguous references.
The application detects common date and time expressions from meeting transcripts.
Examples include:
Tomorrow
Next Monday
By Friday
Next week
August 25
2026/08/25
For Farsi meetings, the system also supports Persian date expressions and Jalali/Shamsi date conversion.
The following libraries are used:
dateparserjdatetime
The application provides transcript-based speaker detection.
It identifies common speaker-label patterns such as:
Ali: We need to complete the project this week.
Sara: I will prepare the documentation.
Ali: Let's review it tomorrow.
The system extracts speaker names and associates them with the corresponding dialogue.
This implementation is based on text patterns and speaker labels.
It is important to note that this is not full acoustic speaker diarization. The system does not currently identify speakers from their voices using audio embeddings.
Important decisions discussed during the meeting can be identified and included in the generated meeting report.
Examples include:
The team decided to use PostgreSQL.
The deployment will be moved to Friday.
The project deadline was extended by one week.
Decision extraction is based on language patterns and contextual analysis.
The application generates a structured meeting report containing:
- Meeting title
- Meeting date
- Participants
- Meeting duration
- Detected language
- Summary
- Key decisions
- Action items
- Responsible persons
- Deadlines
- Speaker dialogue
- Original transcript
The report can be exported as a PDF document.
PDF reports are generated using ReportLab.
The application is designed to support both English and Farsi content.
Tahoma or another appropriate Unicode-compatible font can be configured for Persian and English rendering.
The generated report provides a structured representation of the processed meeting and can be used for documentation or internal records.
- Python
- FastAPI
- Uvicorn
- SQLAlchemy
- SQLite
- HTML5
- CSS3
- JavaScript
- Google Fonts
The main interface is implemented as a single-page HTML application and does not require a frontend build system.
faster-whisper
- Hugging Face Transformers
- spaCy
- dateparser
- jdatetime
facebook/bart-large-cnn
csebuetnlp/mT5_multilingual_XLSum
en_core_web_sm
HooshvareLab/bert-fa-zwnj-base-ner
SQLite
SQLAlchemy
ReportLab
Web Browser
|
v
HTML / CSS / JavaScript
|
v
FastAPI
|
+----------------+----------------+
| | |
v v v
Audio Input Transcript Input Meeting Data
| | |
v +-------+--------+
faster-whisper |
| |
+-----------+------------+
|
v
Language Detection
|
+----------+----------+
| |
v v
English Pipeline Farsi Pipeline
| |
v v
BART Summarizer mT5 XLSum
| |
+----------+----------+
|
v
Entity Extraction
|
v
Action Item Extraction
|
v
Deadline Detection
|
v
Speaker Detection
|
v
Meeting Database
|
+----------+----------+
| |
v v
Web Application PDF Report
The complete processing workflow is:
Audio / Transcript
|
v
Transcription
|
v
Language Detection
|
v
Transcript Preprocessing
|
v
Speaker Detection
|
v
Named Entity Recognition
|
v
Action Item Extraction
|
v
Deadline Detection
|
v
Meeting Summarization
|
v
Result Generation
|
+-------------------+
| |
v v
Web Interface PDF Report
|
v
SQLite
Before installing the application, make sure the following software is available:
- Python 3.10 or newer
- pip
- Git
For GPU acceleration, a compatible NVIDIA CUDA environment is recommended.
CPU execution is supported but can be significantly slower for large meetings.
git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.git
cd YOUR_REPOSITORYReplace YOUR_USERNAME/YOUR_REPOSITORY with the actual GitHub repository path.
python -m venv venvActivate the environment:
venv\Scripts\activatepython3 -m venv venvActivate the environment:
source venv/bin/activatepython -m pip install --upgrade pippip install -r requirements.txtpip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whlA sample English audio file can be generated for testing:
python make_sample_audio.pypython run.pyThe application will start on:
http://localhost:8000
Open this address in a web browser.
Open:
http://localhost:8000
The frontend automatically connects to the FastAPI backend.
The application provides two input modes.
Upload an audio file in one of the supported formats:
.mp3
.wav
.m4a
The audio will automatically be transcribed using faster-whisper.
Alternatively, paste an existing transcript into the application.
The following fields can optionally be provided:
- Meeting title
- Participants
- Language
If the language is not manually selected, the application attempts to detect it automatically.
Click the processing button to start the pipeline.
For audio input, the workflow is:
Audio
|
v
Whisper Transcription
|
v
Language Detection
|
v
Speaker Detection
|
v
Summarization
|
v
NER
|
v
Action Extraction
|
v
Deadline Detection
The resulting data is then displayed in the web interface.
The application provides three main result sections.
Displays the generated meeting summary and key discussions.
Displays structured action items including:
- Task
- Responsible person
- Deadline
Displays the detected speaker dialogue and transcript.
Processed meetings can be saved to the local SQLite database.
Saved meetings can later be retrieved through the meetings API.
A structured PDF report can be generated from a saved meeting.
The report includes the main meeting information, summary, decisions, action items, deadlines, speakers, and transcript.
The application provides a REST API through FastAPI.
GET /api/healthResponse:
{
"ok": true
}POST /api/transcribeAccepts an audio file using multipart form data.
Response:
{
"transcript": "...",
"speakers": [],
"segments": []
}POST /api/summarizeRequest:
{
"transcript": "Meeting transcript..."
}Response:
{
"summary": "Meeting summary..."
}POST /api/extract-actionsRequest:
{
"transcript": "Meeting transcript..."
}Response:
{
"items": [
{
"task": "Prepare the project report",
"owner": "Sara",
"deadline": "2026-08-24"
}
]
}POST /api/meetingsRequest:
{
"title": "Weekly Project Meeting",
"transcript": "Meeting transcript...",
"summary": "Meeting summary...",
"items": [],
"speakers": [],
"duration": 3600
}Response:
{
"id": 1
}GET /api/meetingsResponse:
{
"meetings": [
{
"id": 1,
"title": "Weekly Project Meeting",
"date": "2026-08-18",
"duration": 3600,
"status": "completed"
}
]
}GET /api/meetings/:idReturns the complete meeting object.
GET /api/meetings/:id/reportReturns the generated PDF meeting report.
DELETE /api/meetings/:idResponse:
{
"ok": true
}The application currently supports English and Farsi.
English Transcript
|
v
English NER
|
v
BART Summarization
|
v
English Action Rules
|
v
Date Parsing
English NER is provided by:
en_core_web_sm
The summarization model is:
facebook/bart-large-cnn
Farsi Transcript
|
v
Persian NER
|
v
mT5 XLSum
|
v
Farsi Action Rules
|
v
Jalali Date Processing
The Persian NER model is:
HooshvareLab/bert-fa-zwnj-base-ner
The summarization model is:
csebuetnlp/mT5_multilingual_XLSum
Jalali/Shamsi date processing uses:
jdatetime
The application loads AI models locally.
The first execution may require several gigabytes of model downloads, depending on which language and functionality are used.
The main models include:
Whisper
BART-large-CNN
mT5 XLSum
English spaCy NER
Persian NER
Farsi-specific models are loaded lazily.
This means the Farsi models are downloaded only when a Farsi transcript is processed.
After the models have been downloaded and cached, they can be reused without downloading them again.
The application is designed to operate locally.
After the initial installation and model downloads:
- Audio processing runs locally.
- Transcription runs locally.
- Summarization runs locally.
- NER runs locally.
- Action extraction runs locally.
- SQLite storage runs locally.
- PDF generation runs locally.
No OpenAI API, Google API, Azure API, or other external AI API is required.
An internet connection is only required initially for installing Python dependencies and downloading model weights.
Performance depends on the hardware and meeting length.
CPU inference is supported.
It is suitable for:
- Short meetings
- Testing
- Development
- Systems without dedicated GPUs
However, processing long meetings can take significantly longer.
A compatible NVIDIA GPU is recommended for:
- Long meeting recordings
- Faster Whisper transcription
- Faster Transformer inference
- Processing multiple meetings
The application uses SQLite through SQLAlchemy.
The local database can store:
- Meeting title
- Date
- Duration
- Participants
- Transcript
- Summary
- Decisions
- Action items
- Owners
- Deadlines
- Speakers
Typical local storage structure:
data/
meetings.db
Uploaded audio files are stored separately:
uploads/
.
├── index.html
├── run.py
├── make_sample_audio.py
├── requirements.txt
├── README.md
│
├── app/
│ ├── api/
│ │ ├── meetings.py
│ │ ├── reports.py
│ │ └── pipeline.py
│ │
│ ├── core/
│ │ ├── config.py
│ │ ├── models.py
│ │ └── language.py
│ │
│ ├── services/
│ │ ├── transcriber.py
│ │ ├── summarizer.py
│ │ ├── extractor.py
│ │ └── preprocessor.py
│ │
│ ├── db/
│ │ └── database.py
│ │
│ └── templates/
│ ├── meetings.html
│ └── report.html
│
├── static/
│ ├── css/
│ └── js/
│
├── tests/
│ ├── test_pipeline.py
│ └── ...
│
├── uploads/
│
└── data/
The project includes pipeline tests.
Run the test suite with:
python tests/test_pipeline.pyBefore running the tests, make sure that the required dependencies and models have been installed.
Application configuration can be centralized in the project's configuration module.
Depending on the implementation, configurable values may include:
- Whisper model size
- Device selection
- Compute type
- Database location
- Upload directory
- Model cache directory
- Maximum audio size
- Summarization parameters
For production deployments, configuration values should be provided through environment variables rather than hard-coded values.
This project is designed around local processing and privacy.
Meeting recordings and transcripts are not required to leave the local machine for AI processing.
However, users should still protect the application environment appropriately.
Recommended practices include:
- Do not expose the FastAPI server directly to the public internet without authentication and security controls.
- Do not commit meeting recordings to Git.
- Do not commit the SQLite database to Git.
- Do not commit environment files containing secrets.
- Restrict access to uploaded meeting files.
- Use HTTPS when deploying the application remotely.
- Implement authentication and authorization before using the application in a multi-user production environment.
The following files and directories should generally not be committed:
venv/
__pycache__/
*.pyc
.env
.DS_Store
uploads/*
data/*
*.db
*.sqlite
*.sqlite3
.pytest_cache/Model caches should also be excluded if they are stored inside the project directory.
The current implementation has several limitations.
Speaker identification is based on transcript text and speaker labels.
It is not equivalent to acoustic speaker diarization.
If a transcript does not contain speaker information, the system cannot reliably determine who said each sentence based only on text.
Action-item extraction combines NER and rule-based patterns.
Natural language can be ambiguous, so extracted tasks, owners, and deadlines should be reviewed by the user.
Relative expressions such as:
next Friday
tomorrow
by the end of the week
next month
can be ambiguous depending on the meeting date and context.
Summarization quality depends on:
- Transcript quality
- Language
- Meeting length
- Model quality
- Hardware
- Content complexity
Large Transformer models can be slow on CPU, especially when processing long meetings.
Future development may include:
- Acoustic speaker diarization
- Speaker identification using voice embeddings
- Improved Persian NER
- Improved Persian action-item extraction
- More accurate deadline normalization
- Calendar integration
- Google Calendar integration
- Microsoft Outlook integration
- Email notifications
- Action-item status tracking
- Meeting search
- Meeting filtering
- Meeting analytics
- User authentication
- Multi-user support
- Role-based access control
- Docker support
- GPU optimization
- Real-time transcription
- Real-time meeting summarization
- Additional language support
- Topic and agenda detection
- Automatic decision extraction improvements
- Meeting comparison and historical analysis
For a production deployment, the following architecture can be considered:
Reverse Proxy
|
v
FastAPI API
|
+--------------+--------------+
| | |
v v v
Database Task Queue File Storage
| | |
| v |
| AI Processing |
| | |
+--------------+--------------+
|
v
Meeting Reports
For larger deployments, asynchronous task processing should be introduced so that long audio and Transformer workloads do not block HTTP requests.
Contributions are welcome.
To contribute:
- Fork the repository.
- Create a new feature branch.
- Implement and test your changes.
- Commit your changes.
- Push the branch.
- Open a Pull Request.
Example:
git checkout -b feature/improved-action-extractionAfter making changes:
git add .
git commit -m "Improve action item extraction"
git push origin feature/improved-action-extractionThen create a Pull Request on GitHub.
This project should include an explicit open-source license.
For example, if the project is intended to use the MIT License, add a LICENSE file containing the MIT License text and update this section accordingly.
MIT License
The licenses and usage requirements of all third-party models and libraries should also be reviewed before distributing or deploying the project.
This project relies on several open-source libraries and machine-learning models, including:
- faster-whisper
- Hugging Face Transformers
- Facebook BART
- mT5 XLSum
- spaCy
- English spaCy models
- HooshvareLab Persian NER
- dateparser
- jdatetime
- FastAPI
- SQLAlchemy
- SQLite
- ReportLab
Each dependency and model remains subject to its respective license and terms of use.
The primary goal of AI Meeting Summarizer & Action Tracker is to provide a privacy-oriented, locally hosted meeting intelligence system.
Instead of manually reviewing an entire meeting, users can process the conversation and obtain a structured representation:
Meeting Audio or Transcript
|
v
Transcription
|
v
Language Detection
|
v
Speaker Detection
|
v
Summarization
|
v
Entity Extraction
|
v
Action Item Extraction
|
v
Owner Identification
|
v
Deadline Detection
|
v
Meeting Storage
|
v
PDF Reporting
The resulting system transforms unstructured meeting conversations into structured information that can be reviewed, stored, and shared.
AI Meeting Summarizer & Action Tracker provides a complete local pipeline for meeting analysis:
Audio / Transcript
↓
Whisper Transcription
↓
Language Detection
↓
Speaker Detection
↓
NLP Processing
↓
Summarization
↓
Action Extraction
↓
Owner + Deadline Detection
↓
SQLite Storage
↓
PDF Report
The application supports English and Farsi, operates locally, and does not require external AI APIs or API keys.