Skip to main content

Meeting Notes Plugin

After each meeting you can upload the recording and Hrida.ai will:

  1. Transcribe it using Whisper (local or containerized)
  2. Summarize the transcript using whichever LLM model you select — any model configured in your Studio deployment (Ollama, OpenAI-compatible, Anthropic, etc.), not Ollama specifically
  3. Extract action items from the summary
  4. 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.

Video recordings work too

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​

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 -d

The 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_MODELSpeedAccuracyVRAM
tinyFastestLower~1 GB
base (default)FastGood~1 GB
smallModerateBetter~2 GB
mediumSlowBest CPU option~5 GB
large-v3SlowestHighest~10 GB
# docker-compose.meetings.yaml (edit ASR_MODEL line)
whisper-api:
  environment:
    ASR_MODEL: small   # change to small for better accuracy

Option 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:

  1. Open the meeting room (/meetings/room/{id}).
  2. Click Show Notes to expand the notes panel.
  3. Pick a model from Summarise with.
  4. Click Upload Recording (or drag-and-drop an audio or video file — max 200MB, enforced both client- and server-side).
  5. 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.

VariableDefaultDescription
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):

VariableDescription
WHISPER_MODELDefault Whisper model (base)
WHISPER_LANGUAGEOverride language detection
WHISPER_VAD_FILTEREnable 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_URL at 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.

Hrida.ai is proprietary software of Zlabs Innovation. See the license for terms. © 2026 Zlabs Innovation.