Meeting transcriber with speaker diarization using Sarvam AI and OpenRouter.
- Multi-speaker transcription with speaker diarization
- Multi-lingual support for 22+ Indian languages
- Meeting analysis with AI-generated summaries
- Template support - customizable analysis templates
- Local storage - recordings, transcripts, and summaries saved locally
- CLI interface for easy workflow
- Python 3.10+
- SARVAM_API_KEY from dashboard.sarvam.ai
- OPENROUTER_API_KEY from openrouter.ai
# Clone repository
git clone https://github.com/yourusername/localscribe.git
cd localscribe
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/Mac
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt# Copy environment template
cp .env.example .env
# Edit .env with your API keys
nano .env# List audio devices
localscribe devices
# Record a meeting
localscribe record -n "team-standup"
# List recordings
localscribe list-recordings
# Transcribe
localscribe transcribe team-standup
# Analyze
localscribe analyze team-standup
# View summary
localscribe show team-standupDuring recording, use keyboard controls:
| Key | Action |
|---|---|
P |
Pause both mic and speaker |
M |
Mute mic (speaker continues recording) |
R |
Resume from pause or unmute mic |
S |
Stop and save recording |
? |
Show help |
The display shows:
- Event time: Total time including pauses
- Recorded time: Actual recorded audio (excludes pauses)
LocalScribe supports customizable analysis templates:
# Use a specific template
localscribe analyze team-standup --template weekly-team
# Use custom prompt
localscribe analyze meeting --prompt "Focus on action items and deadlines"
# Provide context (model decides format)
localscribe analyze meeting --context "What decisions were made?"
# Combine template with context
localscribe analyze standup --template standup --context "Sprint planning"Available templates:
| Template | Description |
|---|---|
default |
Standard summary with key points and action items |
detailed |
Comprehensive analysis with all sections |
brief |
Quick 2-3 paragraph summary |
lecture |
Lecture notes with concepts and definitions |
standup |
Daily standup format |
weekly-team |
Weekly team meeting format |
# Build
docker build -t localscribe .
# Run
docker-compose up| Command | Description |
|---|---|
record |
Start recording |
list-recordings |
List recordings |
transcribe |
Transcribe recording |
analyze |
Generate summary |
show |
View results |
devices |
List audio devices |
delete |
Delete recording |
Edit config.yaml:
audio:
sample_rate: 16000
transcription:
model: "saaras:v3"
mode: "translate"
with_diarization: true
summarization:
model: "openai/gpt-4o-mini"
template: "default" # template name (default, detailed, brief, lecture, standup, weekly-team)
storage:
templates_dir: "templates" # directory containing template filesTemplates support variable substitution using {{variable}} syntax:
| Variable | Description |
|---|---|
{{date}} |
Current date (YYYY-MM-DD) |
{{time}} |
Current time (HH:MM:SS) |
{{datetime}} |
Full datetime |
{{filename}} |
Meeting ID |
{{transcript}} |
Full transcript text |
{{speaker_count}} |
Number of speakers |
{{speakers}} |
Comma-separated speaker names |
{{speaker_1}} |
Name of speaker 1 |
{{speaker_N}} |
Name of speaker N |
{{prompt}} |
Custom prompt (from --prompt) |
{{context}} |
Meeting context (from --context or metadata) |
Create a .md file in the templates directory with YAML frontmatter:
---
system_prompt: |
Your custom prompt for the LLM...
output_header: |
# My Custom Header
Date: {{date}}
context: "" # default context
---
## Analysis
{{transcript}}# Install dev dependencies
pip install -r requirements-dev.txt
# Run tests
pytest
# Lint
ruff check src/
# Type check
mypy src/MIT