Metadata-Version: 2.4
Name: meeting-noter
Version: 3.3.0
Summary: Offline meeting transcription for macOS with automatic meeting detection
Author: Victor
License: MIT
Project-URL: Homepage, https://github.com/tech4vision/meeting-noter
Project-URL: Repository, https://github.com/tech4vision/meeting-noter
Project-URL: Issues, https://github.com/tech4vision/meeting-noter/issues
Keywords: meeting,transcription,whisper,offline,speech-to-text,audio
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: click>=8.0
Requires-Dist: sounddevice>=0.4.6
Requires-Dist: numpy>=1.24
Requires-Dist: faster-whisper>=1.0.0
Requires-Dist: imageio-ffmpeg>=0.4.9
Requires-Dist: textual>=0.47.0
Requires-Dist: PySide6>=6.5.0
Requires-Dist: huggingface_hub>=0.20
Requires-Dist: pyobjc-framework-Cocoa>=9.0; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-Quartz>=9.0; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-ScreenCaptureKit>=9.0; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-AVFoundation>=9.0; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-CoreMedia>=9.0; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-libdispatch>=9.0; sys_platform == "darwin"
Provides-Extra: ai
Requires-Dist: mlx>=0.10; sys_platform == "darwin" and extra == "ai"
Requires-Dist: mlx-lm>=0.10; sys_platform == "darwin" and extra == "ai"
Provides-Extra: offline
Requires-Dist: meeting-noter-models>=0.1.0; extra == "offline"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-mock; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: mypy; extra == "dev"

# Meeting Noter

Offline meeting transcription tool for macOS. Captures both your voice and meeting participants' audio, saves to MP3, and transcribes locally using Whisper.

## Features

- **No setup required** - Just install and run
- **Captures both sides** - Your mic + system audio (meeting participants)
- **Offline transcription** - Uses Whisper locally, no API calls
- **Auto-detection** - Detects active meetings (Zoom, Teams, Meet, Slack)
- **Multiple interfaces** - Menu bar app, desktop GUI, or CLI
- **Auto-segmentation** - One file per meeting (detects silence)

## Installation

```bash
pipx install meeting-noter
```

**For corporate/offline environments** (bundles Whisper model, no download needed):
```bash
pipx install "meeting-noter[offline]"
```

### Upgrading

```bash
# Standard
pipx upgrade meeting-noter

# With offline model
pipx reinstall "meeting-noter[offline]"
```

No system dependencies required - ffmpeg is bundled automatically.

## Quick Start

**Menu Bar App** (recommended):
```bash
meeting-noter menubar
```

**Desktop GUI**:
```bash
meeting-noter gui
```

**CLI Recording**:
```bash
meeting-noter start "Weekly Standup"
```

The app will request microphone and Screen Recording permissions on first use.

## Usage

### Recording
- The menu bar app auto-detects meetings and prompts to record
- Or manually start recording via the GUI/CLI
- Press Ctrl+C (CLI) or click Stop to end recording

### Transcription
Recordings are auto-transcribed by default. Or manually:

```bash
# Transcribe the most recent recording
meeting-noter transcribe

# Transcribe a specific file
meeting-noter transcribe recording.mp3

# List all recordings
meeting-noter list
```

## Commands

| Command | Description |
|---------|-------------|
| `meeting-noter` | Launch desktop GUI |
| `meeting-noter menubar` | Launch menu bar app |
| `meeting-noter gui` | Launch desktop GUI |
| `meeting-noter start [name]` | Interactive CLI recording |
| `meeting-noter list` | List recent recordings |
| `meeting-noter transcribe` | Transcribe a recording |
| `meeting-noter devices` | List audio devices |
| `meeting-noter status` | Check daemon status |

## Options

### `start`
- First argument: Meeting name (optional, auto-generates timestamp if omitted)

### `transcribe`
- `-m, --model`: Whisper model size (tiny.en, base.en, small.en, medium.en, large-v3)
- `-o, --output-dir`: Directory with recordings

### `list`
- `-n, --limit`: Number of recordings to show
- `-o, --output-dir`: Directory with recordings

## How It Works

```
┌─────────────────────────────────────┐
│         Your Meeting App            │
│      (Zoom/Teams/Meet/Slack)        │
└──────────────────┬──────────────────┘
                   │
     ┌─────────────┴─────────────┐
     ▼                           ▼
┌─────────┐               ┌─────────────┐
│   Mic   │               │ System Audio│
│(default)│               │(ScreenCaptureKit)
└────┬────┘               └──────┬──────┘
     │                           │
     └───────────┬───────────────┘
                 ▼
         ┌─────────────┐
         │Meeting Noter│
         │  (capture)  │
         └──────┬──────┘
                │
                ▼
    ~/meetings/2024-01-15_Weekly_Standup.mp3
                │
                ▼ (auto or on-demand)
         ┌─────────────┐
         │   Whisper   │ (local)
         └──────┬──────┘
                │
                ▼
    ~/meetings/2024-01-15_Weekly_Standup.txt
```

## Permissions

On first use, macOS will ask for:

1. **Microphone** - For capturing your voice
2. **Screen Recording** - For capturing system audio (meeting participants)

Grant these in System Settings > Privacy & Security.

## Configuration

Config file: `~/.config/meeting-noter/config.json`

```json
{
    "recordings_dir": "~/meetings",
    "transcripts_dir": "~/meetings",
    "whisper_model": "tiny.en",
    "auto_transcribe": true,
    "silence_timeout": 5,
    "capture_system_audio": true
}
```

## Whisper Models

| Model | Size | Speed | Accuracy |
|-------|------|-------|----------|
| `tiny.en` | ~75MB | Fastest | Good |
| `base.en` | ~150MB | Fast | Better |
| `small.en` | ~500MB | Medium | High |
| `medium.en` | ~1.5GB | Slow | Very High |
| `large-v3` | ~3GB | Slowest | Best |

## Requirements

- macOS 12.3+ (for ScreenCaptureKit)
- Python 3.9+

## License

MIT
