tooling/meeting-notes
- Python 100%
STT and diarization were a single "transcribe" stage — a diarization segfault (uncatchable SIGSEGV on ROCm gfx1151) lost completed STT results. Now STT saves to stt-raw.json independently, and diarization gracefully degrades to single-speaker output on failure. Also fixes pyannote 4.x DiarizeOutput.itertracks → getattr for speaker_diarization Annotation, and pre-loads audio as waveform dict via torchaudio.load() to bypass broken torchcodec. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| src | ||
| tests | ||
| .gitignore | ||
| frame-0001.png | ||
| frame-0002.png | ||
| frame-0003.png | ||
| pyproject.toml | ||
| README.md | ||
meeting-notes
Local pipeline for converting meeting video recordings into structured, speaker-labeled notes with visual context.
Requirements
- Python 3.10+
- ffmpeg
- Tesseract OCR
- AMD GPU with ROCm 7.x (for STT/diarization)
- HuggingFace token (for pyannote model access)
- Claude Code (for summarization step)
Install
git clone http://git.pctbin.com/PCT-INTERNAL/tooling/meeting-notes
cd meeting-notes
pip install -e ".[gpu,ocr,dev]"
export HF_TOKEN="your-token-here"
Usage
# Full pipeline
meeting-notes process meeting.mp4 --transcript teams-export.vtt
# Without Teams transcript (anonymous speakers)
meeting-notes process meeting.mp4
# With manual speaker names
meeting-notes process meeting.mp4 --speakers "SPEAKER_00=Darren,SPEAKER_01=Joseph"
# Then summarize with Claude Code
cd meeting-notes/
claude
> Read prompt.md and follow its instructions
Subcommands
meeting-notes extract-audio meeting.mp4 --output audio.wav
meeting-notes transcribe audio.wav
meeting-notes diarize audio.wav
meeting-notes extract-frames meeting.mp4 --output slides/ --threshold 0.3
meeting-notes ocr slides/
meeting-notes validate transcript.json teams.vtt