> ## Documentation Index
> Fetch the complete documentation index at: https://docs.screenpipe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Local meeting transcription for Zoom, Meet, and Teams

> Transcribe Zoom, Meet, and Teams without a meeting bot. Choose local Whisper or a cloud transcription provider, set languages, and verify recorded audio.

Screenpipe transcribes the audio sources you enable for meetings, calls, and conversations. Choose local Whisper, a supported cloud provider, or an OpenAI-compatible transcription server. Check the selected engine before assuming audio processing stays local.

> [!TIP]
>
> For the full botless meeting workflow - live transcript, speaker cleanup, calendar enrichment, summaries, copy transcript, and APIs - see [meeting intelligence](https://docs.screenpipe.com/meeting-intelligence.md).

For on-device transcription **and** summaries, follow [private meeting notes](https://docs.screenpipe.com/private-meeting-notes.md). That guide covers local AI, storage, external processing, and an offline verification sample.

## Languages

Open **Settings → Audio & meetings** and check **Languages** for the selected engine. Available languages, automatic detection, and the meaning of multiple selections depend on that provider. Choose Spanish for Spanish speech when the engine supports it, or use its supported automatic-detection mode. Transcription language does not change the desktop interface.

For captions during a call, configure [Live meeting notes](https://docs.screenpipe.com/meeting-intelligence.md#enable-real-time-transcription-with-live-meeting-notes). For empty transcripts or failed summaries, use [meeting recovery](https://docs.screenpipe.com/meeting-recovery.md).

![Multilingual transcription detecting the spoken language](https://mintcdn.com/mediar-ai/UvdTG-8x2rDOZRPa/public/app-screenshots/np21-transcription.gif?s=8c7f357ccc6a314af6e03f4aadbb50e3)

auto-detects and transcribes non-English audio

## Setup

Audio recording is enabled by default in the desktop app. Configure audio devices and transcription engine in **Settings**.

* **Audio devices**: select which microphones and system audio to capture
* **Transcription engine**: choose local Whisper, Deepgram, or an OpenAI-compatible endpoint

## Use a local OpenAI-compatible server

Screenpipe can send uncompressed WAV audio to any server that implements
`POST /v1/audio/transcriptions`. This keeps Screenpipe's capture and search
workflow while letting a separate local runtime own transcription.

[Soniqo speech-swift](https://github.com/soniqo/speech-swift) provides the
endpoint on Apple Silicon. Install and start it on macOS with:

```bash theme={"system"}
brew install speech
speech-server --port 8080
```

On Linux or Windows, use a
[Soniqo Speech Core](https://github.com/soniqo/speech-core) package that includes
the same transcription endpoint. Download the model bundle, then start the
server:

```bash theme={"system"}
# Linux
speech download-models
speech serve
```

```powershell theme={"system"}
# Windows PowerShell, from the extracted package's bin directory
.\speech_download_models.ps1
.\speech-server.exe
```

In **Settings → Audio & meetings**, choose **OpenAI Compatible** and
set:

* **Endpoint**: `http://127.0.0.1:8080`
* **Model**: `whisper-1`
* **Send raw WAV audio**: enabled
* **API key**: leave empty for a loopback-only server, or enter the server's bearer token

Run **connection test** before restarting capture. The server does not need to
list models; Screenpipe accepts a manually entered model name.

## Search transcriptions

```bash theme={"system"}
# find discussions about a topic
curl "http://localhost:3030/search?q=budget+review&content_type=audio&limit=10"

# get today's meetings
curl "http://localhost:3030/search?content_type=audio&start_time=2026-02-11T00:00:00Z"

# filter by speaker
curl "http://localhost:3030/search?content_type=audio&speaker_ids=1,2"
curl "http://localhost:3030/search?content_type=audio&speaker_name=John"
```

## Speaker identification

Screenpipe automatically identifies different speakers. Manage them via API:

### Improve speaker identification with calendar

Connect your **Google Calendar** to significantly improve speaker identification accuracy. Screenpipe uses your calendar's attendee list to automatically name speakers during meetings — if a meeting has exactly 2 attendees, the other speaker is auto-identified without manual labeling.

To enable this:

1. Go to **settings → connections → Google Calendar**
2. Authorize Screenpipe to access your calendar
3. During future meetings, attendee names from your calendar will automatically label speakers

This works best for 1:1 meetings and structured calls. For larger meetings (3+ attendees), calendar context is tagged to your notes for later reference.

```bash theme={"system"}
# get unnamed speakers for labeling
curl "http://localhost:3030/speakers/unnamed?limit=10"

# update a speaker's name
curl -X POST http://localhost:3030/speakers/update \
  -H "Content-Type: application/json" \
  -d '{"id": 1, "name": "John Smith"}'

# search speakers by name
curl "http://localhost:3030/speakers/search?name=john"

# merge duplicate speakers
curl -X POST http://localhost:3030/speakers/merge \
  -H "Content-Type: application/json" \
  -d '{"speaker_to_keep_id": 1, "speaker_to_merge_id": 2}'

# find similar speakers
curl "http://localhost:3030/speakers/similar?speaker_id=1"
```

## Tips

* Use a good microphone
* Reduce background noise
* `whisper-large-v3-turbo` is faster with a small accuracy tradeoff; `whisper-large-v3` is the most accurate
* Set language to English in settings if you only speak English (faster)

## Long meetings and batch sizing

Screenpipe splits long recordings into batches using limits appropriate to each transcription engine.

For **OpenAI-compatible** servers, open **Settings > Audio & meetings** and set **Max batch duration (seconds)** beneath the endpoint configuration. This controls both background batches and meeting retranscription. Leave it blank or set it to `0` to use automatic sizing. Other engines keep their engine-specific limits.

Lower the duration if your server or gateway times out. You can increase it for a faster server, but upload size is only one constraint: the server also needs time to transcribe the audio. Screenpipe allows more request time for longer audio; your gateway may enforce a shorter timeout of its own.

## Privacy

* Local Whisper and loopback OpenAI-compatible endpoints keep transcription on your device
* Audio files stored in `~/.screenpipe/data/`
* Audio is sent off-device only when you select Deepgram or another remote endpoint
* Disable audio recording in app settings

Questions? [join our Discord](https://discord.gg/screenpipe).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.