Turn recorded conversations into structured insights. Local transcription + AI extraction.
Project description
Foresight
Turn recorded conversations into structured insights. Automatically.
Drop an audio file in a folder. Get back a searchable transcript and an AI-extracted summary with key themes, quotes, and follow-up questions.
100% local. No API costs. No data leaves your machine.
The Problem
You record important conversations—interviews, user research calls, sales demos, meetings. Then the audio sits there because:
- Transcription services cost money and take time
- Reading a full transcript is tedious
- The insights you need are buried in 45 minutes of audio
- Organizing files manually is a chore
The Solution
Audio file drops in folder
↓
[3-5 minutes]
↓
Transcript.md + Insights.md
↓
Original archived automatically
What you get:
| Output | Contents |
|---|---|
| Transcript | Full searchable text, YAML metadata, word count |
| Insights | Pain points, objections, decision criteria, key quotes, follow-up questions, executive summary |
Use Cases
- User Research — Extract patterns from customer interviews
- Sales Calls — Capture objections and buying signals
- Podcasters — Generate show notes and quotable moments
- Journalists — Transcribe interviews with structured highlights
- Founders — Process investor/customer conversations at scale
- Consultants — Document client discovery sessions
- Academics — Transcribe and analyze qualitative research
Install
pip install foresight-transcribe
That's it. Or install from source:
git clone https://github.com/dnoma/foresight.git
cd foresight
pip install -e .
Setup Ollama (required for insights)
# Install Ollama
brew install ollama # macOS
# or: curl -fsSL https://ollama.ai/install.sh | sh # Linux
# Start and pull model (~4GB)
ollama serve &
ollama pull mistral
Verify installation
foresight --test
Usage
Watch Mode (recommended)
Leave it running. Drop files in the folder, they process automatically.
foresight --watch
Single File
Process one recording right now.
foresight --file meeting.m4a
Batch Mode
Have a backlog? Process everything at once.
foresight --batch
What the Output Looks Like
Transcript
---
filename: customer-call-jan-11.m4a
duration: 34:22
word_count: 4521
model: whisper-medium
---
# Transcript: customer-call-jan-11
The full conversation, searchable and quotable...
Insights
## PAIN POINTS
- Manual invoice processing takes 3 days each month
- No visibility into supplier risk until problems occur
## DECISION CRITERIA
- Must integrate with existing SAP system
- Needs to show ROI within 90 days
## KEY QUOTES
- "We've been burned twice by suppliers going bankrupt with no warning"
## FOLLOW-UP QUESTIONS
- What's the current approval workflow for new suppliers?
- Who else is involved in the vendor selection process?
## EXECUTIVE SUMMARY
[2-3 sentence summary of the entire conversation]
Directory Structure
Auto-created on first run:
~/klavis-interviews/
├── raw/ ← Drop recordings here
├── transcripts/ ← Whisper output
├── insights/ ← LLM-extracted analysis
├── archive/ ← Processed originals
└── processing.log
Configuration
Edit the config in interview_processor.py (or after install: ~/.local/lib/python*/site-packages/interview_processor.py):
WHISPER_MODEL = "medium" # tiny|base|small|medium|large
OLLAMA_MODEL = "mistral" # or phi3, llama3, etc.
MIN_FILE_SIZE = 100000 # Skip files under 100KB
Customize the extraction prompt
The EXTRACTION_PROMPT variable controls what the LLM extracts. Modify it for your use case:
# For sales calls
EXTRACTION_PROMPT = """Extract: objections raised, competitor mentions,
next steps agreed, budget signals..."""
# For user research
EXTRACTION_PROMPT = """Extract: user goals, frustrations,
current workflow, feature requests..."""
Options
| Flag | Description |
|---|---|
-m, --model |
Whisper model size (default: medium) |
--skip-insights |
Transcribe only, skip LLM extraction |
--keep-original |
Don't move to archive after processing |
--dry-run |
Preview what would be processed |
--status |
Show pending files and system health |
--retry-failed |
Retry previously failed files |
--test |
Verify installation works |
System Requirements
- macOS (tested) or Linux
- ~6-7GB RAM during processing (models load/unload automatically)
- Python 3.9+
- ~5GB disk for models (one-time download)
Processing Time
| Audio Length | Time (M1 Mac) |
|---|---|
| 5 min | ~45 sec |
| 30 min | ~3 min |
| 60 min | ~6 min |
Why Local?
| Local (this tool) | Cloud APIs | |
|---|---|---|
| Cost | Free | $0.006/min+ |
| Privacy | Data stays on device | Uploaded to servers |
| Speed | No upload/download | Network dependent |
| Availability | Works offline | Requires internet |
A 1-hour recording costs ~$0.36 on cloud transcription. Process 100 interviews and you've saved $36—plus your data never left your laptop.
Supported Formats
.m4a .mp3 .wav .mp4
Files under 100KB are skipped (filters out accidental recordings).
Troubleshooting
Ollama not running?
ollama serve # Start the server
ollama ps # Check if model is loaded
Transcription too slow?
foresight --file audio.m4a --model small
Check system status:
foresight --status
License
MIT
Contributing
PRs welcome. Ideas:
- Speaker diarization (who said what)
- Custom prompt templates via config file
- Web UI for reviewing insights
- Export to Notion/Obsidian
- Slack/Discord notifications when processing completes
Support
If this saved you time or money, consider giving it a star. It helps others discover the project.
Built by @dnoma — indie dev building tools that save time.
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 foresight_transcribe-0.1.0.tar.gz.
File metadata
- Download URL: foresight_transcribe-0.1.0.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5422b273818651e39016680ae57d435c154354c74a8e340edd1019847f8283d4
|
|
| MD5 |
12886db142486db01b5611cf72d6ee6d
|
|
| BLAKE2b-256 |
f0c0b82ae5efd3d2ae7d8286e0a045d930b37918f90fa081b3955f73105603e9
|
File details
Details for the file foresight_transcribe-0.1.0-py3-none-any.whl.
File metadata
- Download URL: foresight_transcribe-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32408fe66115b65ec7e64447458a82c6f2ea02c8ada3a924dcefb5bc117a76f2
|
|
| MD5 |
1b53f50f89825940de80416761683526
|
|
| BLAKE2b-256 |
0122ab659e0fa3b2271ad3dddec7c3254d8f584cc67a5a0151a8ef63835e103a
|