Skip to content

monty0007/Luna-MeetingBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Luna

Luna is an AI-powered meeting bot that autonomously joins video calls, records audio, transcribes speech with Whisper, and generates structured summaries using Azure OpenAI GPT.

How It Works

  1. Join — A headless Chromium browser navigates to the meeting URL and joins with mic/camera disabled.
  2. Record — FFmpeg captures system audio in 30-second WAV chunks via a virtual audio device.
  3. Transcribe — A local Whisper model converts audio chunks to text.
  4. Summarize — The transcript is sent to Azure OpenAI, returning a structured Markdown document with Summary, Key Decisions, Action Items, and Open Questions.
  5. Dashboard — A React web UI lets you dispatch the bot, watch live status, and browse past meetings.

Supported Platforms

  • Google Meet
  • Zoom
  • Microsoft Teams

(Auto-detected from the meeting URL.)

Prerequisites

  • Node.js 18+
  • Python 3 with a .venv virtual environment containing openai-whisper
  • FFmpeg installed and on your PATH
  • BlackHole 2ch virtual audio device (macOS) for capturing meeting audio
  • A Google account for the bot to join meetings with
  • An Azure OpenAI resource with a GPT deployment

Setup

1. Install Dependencies

# From the backend/ directory
npm install
cd ../frontend && npm install

Or from backend/:

npm run install:all

2. Configure Environment Variables

Create backend/.env:

AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_KEY=your-api-key
AZURE_OPENAI_DEPLOYMENT=gpt-4o-mini
AZURE_OPENAI_API_VERSION=2025-01-01-preview

GOOGLE_EMAIL=your-bot-account@gmail.com
GOOGLE_PASSWORD=your-password

WHISPER_MODEL=base   # base | medium | large
PORT=3000

3. Set Up Python Environment

cd backend
python3 -m venv .venv
.venv/bin/pip install openai-whisper

4. Save Google Session (One-Time)

This opens a real Chrome window so you can log in to Google. Cookies are saved to session.json for future headless runs.

node backend/save-session.js
# Log in to Google in the browser window, then press Enter in the terminal

Running

Development (both servers)

cd backend
npm run dashboard

This starts the Express API on http://localhost:3000 and the Vite dev server on http://localhost:5173.

Production

cd backend
npm run build   # builds the frontend
npm start       # serves everything on port 3000

Send the Bot Manually (CLI)

node backend/luna.js "https://meet.google.com/abc-defg-hij"

Project Structure

Luna/
├── backend/
│   ├── server.js          # Express API, SSE real-time updates
│   ├── luna.js            # Bot engine (join → record → transcribe → summarize)
│   ├── save-session.js    # One-time Google login / cookie saver
│   ├── session.json       # Persisted Playwright cookies (gitignored)
│   ├── .env               # Secrets (gitignored)
│   └── meetings/          # Per-meeting output (audio, transcript, summary)
└── frontend/
    └── src/
        ├── pages/
        │   ├── Landing.jsx    # Marketing hero page
        │   ├── Dashboard.jsx  # Dispatch bot + live status
        │   ├── Meetings.jsx   # Browse summaries and transcripts
        │   └── Settings.jsx   # Bot name, Whisper model, notifications
        └── components/
            ├── AppLayout.jsx
            └── Sidebar.jsx

Tech Stack

Layer Technology
Bot automation Playwright (Chromium)
Audio capture FFmpeg + BlackHole 2ch
Transcription OpenAI Whisper (local)
Summarization Azure OpenAI GPT
Backend Node.js, Express 5
Frontend React 19, Vite, Tailwind CSS
Real-time updates Server-Sent Events (SSE)

About

An AI-powered meeting bot for scheduling, transcription, and follow-ups

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors