this is a tool to help document the discussed topics in a meeting locally (including transcribing the meeting and creating a summarization of the meeting)
  • Python 66.3%
  • Jupyter Notebook 33.7%
Find a file
2026-04-15 13:31:33 +03:00
prompts 0.1 cleaner version deployment 2026-04-15 13:31:33 +03:00
src 0.1 cleaner version deployment 2026-04-15 13:31:33 +03:00
.gitignore cleaned version with mlx metal boosting as well as limited and optimzed to use only 12 gb of ram over all processes. 2026-04-14 14:49:06 +03:00
README.md 0.1 cleaner version deployment 2026-04-15 13:31:33 +03:00
requirements.txt cleaned version with mlx metal boosting as well as limited and optimzed to use only 12 gb of ram over all processes. 2026-04-14 14:49:06 +03:00

Meeting Recorder — Setup Guide

This tool records meetings via OBS, extracts audio, transcribes with Whisper, and summarises with a local LLM running via MLX. The notebook (Sales_meeting_summary.ipynb) is the main entry point and is designed to run inside VS Code.

Requires Apple Silicon (M1 or later). MLX does not run on Intel Macs.


Installation Guide

  1. Software to install on your laptop
  2. Project setup in VS Code
  3. Store your OBS password
  4. Configuration
  5. Run the notebook
  6. Adding a prompt type

1. Software to install on your laptop

OBS Studio

  1. Download from https://obsproject.com/download and run the .dmg installer.

  2. Open OBS and complete the auto-configuration wizard.

  3. Set up audio sources:

    • Desktop Audio → select macOS Audio Capture
    • Mic/Auxiliary Audio → select MacBook Pro Microphone (external mic will screw this up currently...). Set the following audio settings
  4. Enable the WebSocket server: Tools → WebSocket Server Settings → Enable WebSocket server.
    Set a port (default 4455) and a password — you will need these later. The source settings should look like this

ffmpeg

ffmpeg is required by moviepy to process audio.

# Install Homebrew if you don't have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install ffmpeg

Visual Studio Code

  1. Download from https://code.visualstudio.com/download and open the .dmg.
  2. Drag VS Code to Applications.
  3. Install the Python extension (search ms-python.python in the Extensions panel).
  4. Install the Jupyter extension (search ms-toolsai.jupyter).

Python 3.X

brew install python

2. Project setup in VS Code

Clone / open the project

Open VS Code, then File → Open Folder and select this project folder.

Create a virtual environment

python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Select the kernel in VS Code

  1. Open src/Sales_meeting_summary.ipynb.
  2. Click the kernel picker in the top-right corner of the notebook.
  3. Choose Python Environments → .venv (the virtual environment you just created).

3. Store your OBS password

The OBS WebSocket password was set when you enabled the WebSocket server (section 1, step 4).
If you need to change it: Tools → WebSocket Server Settings.

Store the password securely (one-time setup)

Open src/_run_first_token_management.ipynb in VS Code, replace the placeholder, and run the cell:

import keyring
keyring.set_password("sales_summary", "obs", "<YOUR_OBS_PASSWORD>")

The password is stored in your macOS Keychain and never saved to disk.


4. Configuration

Set both variables in cell 2 of Sales_meeting_summary.ipynb before running.

prompt_type

Controls the summarisation style. Each prompt type maps to a YAML file in prompts/.

Value File Output style
"standard" prompts/standard.yaml Structured notes: Main Topics, Decisions, Action Points, Bottlenecks, Tabled Items

model

Controls which local LLM is used for summarisation. Both models run entirely on-device via MLX.

Value Model Size Notes
"phi4" Phi-4 (3-bit) ~3 GB Default, fast
"gemma" Gemma-4-26B (4-bit) ~14 GB Higher quality, slower to load

Models are downloaded automatically from Hugging Face on first use. No internet connection required after download.


5. Run the notebook

Execute the cells in order. The pipeline will:

  1. Set prompt_type and model to configure summarisation style and LLM.
  2. Initialise the recorder — the selected model is downloaded and loaded into memory now.
  3. Start the OBS recording.
  4. Check recording status.
  5. Stop recording, extract audio, transcribe with Whisper, and summarise.
  6. A Markdown file is saved to OUTPUT/.

6. Adding a prompt type

Prompt types are defined as YAML files in prompts/. Adding a new file makes it available as a prompt_type value — no code changes needed.

File structure

prompts/<prompt_type>.yaml

YAML schema

system: |
  You are a ...
human: |
  {input}
  • {input} is the only template variable — it receives the full transcript text.

Steps to add a new prompt type

  1. Create prompts/<name>.yaml with system and human keys.
  2. Set prompt_type = "<name>" in cell 2 of the notebook.