Skip to main content
IMP’s meeting transcription feature sends audio to an external Whisper server running WhisperX with optional speaker diarization via pyannote.audio. The server is optional — skip this setup if you do not use transcription.

How it fits in

The backend sends transcription jobs to TRANSCRIPTION_SERVER via HTTP. The Whisper server fetches audio from a URL, transcribes it on the GPU, and returns a JSON transcript with speaker labels (when diarization is enabled).

Prerequisites

  1. An NVIDIA GPU with driver >= 550 (supports CUDA 12.4).
  2. Docker with the NVIDIA Container Toolkit installed.
Verify:
If that prints your GPU, you are set. Install guide: docs.nvidia.com/datacenter/cloud-native/container-toolkit

Setup

The Docker image is built locally from @exulu/backend:
First start downloads the ~3 GB large-v3 model into the HuggingFace cache on your host. Subsequent starts are fast because the model is cached. The container is marked healthy only after the model has finished loading. The health check has a start_period of 1200 seconds (20 minutes) to accommodate the initial download.

Speaker diarization (optional)

Diarization identifies who spoke each segment. It requires:
  1. A HuggingFace account and access token (HF_AUTH_TOKEN).
  2. Accepting both pyannote model licences on HuggingFace:
Without the token and accepted licences, every segment is returned with speaker: "unknown". The logs print the exact licence URLs to accept. Confirm diarization is working:

Pointing IMP at the server

Set TRANSCRIPTION_SERVER on the backend to the Whisper server’s URL:

Configuration reference

Docker image details

The image uses the cuDNN runtime flavour (not the plain CUDA runtime) because faster-whisper’s ctranslate2 backend requires cuDNN at runtime. Using the plain CUDA runtime image results in a libcudnn … not found crash on the first transcription job.

CPU fallback

If you do not have an NVIDIA GPU, set WHISPER_DEVICE=cpu. The container will run without the --gpus all flag and transcription will work, but performance on large-v3 is roughly real-time or worse. Use a smaller WHISPER_MODEL (e.g. small or medium) for acceptable CPU throughput.

Troubleshooting