Meeting Notes Plugin
After each meeting you can upload the recording and Hrida.ai will:
- Transcribe it using Whisper (local or containerized)
- Summarize the transcript using whichever LLM model you select — any model configured in your Studio deployment (Ollama, OpenAI-compatible, Anthropic, etc.), not Ollama specifically
- Extract action items from the summary
- Store the results and surface them in the meeting room's notes panel (real-time via WebSocket)
No provider account or API key is required if you're using a local model — everything can run on your own infrastructure.
The upload accepts audio/* and video/* — Jitsi's own "Save recording file locally" feature records audio+video (there's no browser-level audio-only capture mode for that feature), so you can upload that file directly. Whisper's ffmpeg-based pipeline extracts the audio track regardless of container.
Setup
Option A — External Whisper container (recommended)
The docker-compose.meetings.yaml overlay includes a pre-configured Whisper ASR API container:
docker compose \
-f docker-compose.yaml \
-f docker-compose.meetings.yaml \
up -dThe container (onerahmet/openai-whisper-asr-webservice) exposes a POST /asr endpoint on port 9000. Hrida.ai automatically detects it via WHISPER_API_URL=http://whisper-api:9000 (injected by the overlay).
Model selection — edit docker-compose.meetings.yaml to change the model size:
ASR_MODEL | Speed | Accuracy | VRAM |
|---|---|---|---|
tiny | Fastest | Lower | ~1 GB |
base (default) | Fast | Good | ~1 GB |
small | Moderate | Better | ~2 GB |
medium | Slow | Best CPU option | ~5 GB |
large-v3 | Slowest | Highest | ~10 GB |
# docker-compose.meetings.yaml (edit ASR_MODEL line)
whisper-api:
environment:
ASR_MODEL: small # change to small for better accuracyOption B — Local Whisper (existing installation)
If you already have Whisper installed and the hrida-ai-studio audio pipeline configured, meeting notes will fall back to the local pipeline automatically. Set WHISPER_API_URL to an empty string to use this path.
Generating Notes
From the Meeting Room UI
After a meeting ends:
- Open the meeting room (
/meetings/room/{id}). - Click Show Notes to expand the notes panel.
- Pick a model from Summarise with.
- Click Upload Recording (or drag-and-drop an audio or video file — max 200MB, enforced both client- and server-side).
- Notes generate automatically once the upload completes.
The panel updates in real time as transcription and summarization complete.
Via the API
curl -X POST /api/v1/meetings/notes/ \
-H "Authorization: Bearer <token>" \
-F "session_id=<meeting_session_id>" \
-F "language=en" \
-F "model_id=<model_id>" \
-F "audio=@recording.wav"Response:
{
"id": "note_abc123",
"session_id": "session_xyz",
"transcript": "Alice: Let's start with the Q3 review...",
"summary": "The team reviewed Q3 performance...",
"action_items": [
"Alice: Send the updated dashboard to stakeholders by Friday",
"Bob: Schedule follow-up with the design team"
],
"ollama_model": "<model_id>",
"language": "en",
"created_at": 1751234567
}From an already-available transcript (no audio)
Some meeting types never produce audio in the first place — a Multi-Agent Room is pure text chat. For those, POST /api/v1/meetings/notes/ structurally doesn't apply (there's no recording to upload). Use the transcript-based endpoint instead, which skips Whisper entirely:
curl -X POST /api/v1/meetings/notes/from-transcript \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"session_id": "<meeting_session_id>",
"model_id": "<model_id>",
"transcript": "Facilitator: ...\n\nAnalyst: ...\n\nSummarizer: ..."
}'The Multi-Agent Room UI has a Generate Notes button that does this automatically, building the transcript from the room's own message history — see Multi-Agent Room → Generating Meeting Notes.
Notes Dashboard
Navigate to Meetings → Notes (/meetings/notes) to see all your meeting notes.
- Search by summary content
- Click a note to view the full transcript and action items
- Edit the summary or action items if the AI got something wrong
- Notes are listed newest-first
Summarization Prompt
Hrida.ai uses this system prompt for Ollama summarization:
You are a meeting assistant. Given the transcript below, produce:
1. A concise paragraph summary (3-5 sentences).
2. A bullet list of action items (format: "- <owner>: <task>").
Respond with:
SUMMARY:
<summary>
ACTION ITEMS:
<bullets>
The transcript is truncated to 8,000 characters before being sent to the selected model.
Supported Formats and Size Limit
The Whisper container accepts most common audio and video formats:
.wav, .mp3, .mp4, .m4a, .ogg, .flac, .webm, .mov
Video files work the same as audio-only ones — ffmpeg extracts the audio track internally, so there's no need to strip video out yourself before uploading.
Maximum upload size is 200MB, enforced both in the UI and on the server (413 if exceeded — the server reads the upload in bounded chunks rather than buffering an arbitrarily large file into memory).
Real-Time Notes in the Room
Notes are broadcast via WebSocket to all participants viewing the meeting room:
POST /api/v1/meetings/notes/ → save to DB
→ emit events:meeting_notes to room
→ Notes panel auto-updates (no refresh needed)
Config Reference
Meeting notes require no plugin configuration. Transcription uses Whisper (global setting below); summarization uses whichever model you pick from Studio's normal model list at generation time — that model's own provider config (Ollama, OpenAI-compatible, Anthropic, etc.) applies, there's nothing meeting-notes-specific to configure for it.
| Variable | Default | Description |
|---|---|---|
WHISPER_API_URL | (empty) | External Whisper ASR endpoint (http://whisper-api:9000). Leave empty to use the local pipeline. |
Whisper model parameters (when using local pipeline):
| Variable | Description |
|---|---|
WHISPER_MODEL | Default Whisper model (base) |
WHISPER_LANGUAGE | Override language detection |
WHISPER_VAD_FILTER | Enable voice activity detection to skip silence |
Privacy
- Audio/video files are not stored — they are processed in memory (in bounded chunks, capped at 200MB) and discarded after transcription.
- Transcripts and summaries are stored in the Hrida.ai database and are only visible to the session creator, session participants, and admins — not any other authenticated user, even one who knows the session ID.
- All processing happens on your own infrastructure — no audio or text is sent to external services unless you explicitly point
WHISPER_API_URLat a third-party endpoint, or select a model backed by a third-party provider.
Troubleshooting
"No Whisper endpoint configured" error
→ Set WHISPER_API_URL=http://whisper-api:9000 in your environment, or start the meetings overlay (docker-compose.meetings.yaml).
Transcription is slow
→ Use a smaller Whisper model (tiny or base). If running on GPU, use the -gpu image variant.
Action items are missing or wrong
→ Try a larger/more capable model. Pass model_id=<model_id> in the upload request, or pick a different one from Summarise with in the UI.
Notes panel doesn't update after upload
→ Check that WebSocket (socket.io) is connected (look for the connection indicator in the Studio header). The events:meeting_notes event fires when notes are saved.
"File is too large" (413) → The upload exceeds the 200MB cap. This is enforced server-side too, not just in the UI — calling the API directly with a larger file is rejected the same way.